Je suis confronté au problème d'avoir des images de différentes dimensions comme entrées dans une tâche de segmentation. Notez que les images n'ont même pas le même rapport hauteur / largeur.
Une approche courante que j'ai trouvée en général dans l'apprentissage profond est de recadrer les images, comme cela est également suggéré ici . Cependant, dans mon cas, je ne peux pas recadrer l'image et garder son centre ou quelque chose de similaire car dans la segmentation, je veux que la sortie ait les mêmes dimensions que l'entrée.
Cet article suggère que dans une tâche de segmentation, on peut alimenter la même image plusieurs fois sur le réseau mais avec une échelle différente et ensuite agréger les résultats. Si je comprends bien cette approche, cela ne fonctionnerait que si toutes les images d'entrée ont le même rapport d'aspect. S'il vous plait corrigez moi si je me trompe.
Une autre alternative serait de simplement redimensionner chaque image à des dimensions fixes. Je pense que cela a également été proposé par la réponse à cette question. Cependant, il n'est pas spécifié de quelle manière les images sont redimensionnées.
J'ai envisagé de prendre la largeur et la hauteur maximales dans l'ensemble de données et de redimensionner toutes les images à cette taille fixe afin d'éviter la perte d'informations. Cependant, je pense que notre réseau peut avoir des difficultés avec les images déformées car les bords d'une image peuvent ne pas être clairs. Quelle est peut-être la meilleure façon de redimensionner vos images avant de les alimenter sur le réseau?
Y a-t-il une autre option que je ne connais pas pour résoudre le problème d'avoir des images de différentes dimensions?
De plus, laquelle de ces approches est la meilleure compte tenu de la complexité de calcul mais également de la perte possible de performances par le réseau?
J'apprécierais que les réponses à mes questions incluent un lien vers une source s'il y en a une. Je vous remercie.
Je pense que ce document vous apportera des informations utiles.
la source
Comme vous souhaitez effectuer la segmentation, vous pouvez utiliser U-Net. Il n'a pas d'unités entièrement connectées. Par conséquent, la taille de l'entrée n'aura pas d'importance.
la source
je pense que vous pouvez redimensionner pixel votre image et convertir RVB en binaire ou entier pour la prochaine étape
la source
Essayez de redimensionner l'image aux dimensions d'entrée de votre architecture de réseau neuronal (en la maintenant fixée à quelque chose comme 128 * 128 dans une architecture U-net 2D standard) en utilisant la technique d' interpolation du plus proche voisin . En effet, si vous redimensionnez votre image à l'aide d'une autre interpolation, cela peut entraîner une falsification des étiquettes de vérité au sol. C'est particulièrement un problème de segmentation. Vous ne rencontrerez pas un tel problème en matière de classement.
Essayez ce qui suit:
la source