J'essaye de former mon modèle qui classe les images. Le problème que j'ai, c'est qu'ils ont des tailles différentes. comment formater mes images / ou mon architecture de modèle?
J'essaye de former mon modèle qui classe les images. Le problème que j'ai, c'est qu'ils ont des tailles différentes. comment formater mes images / ou mon architecture de modèle?
Réponses:
Vous n'avez pas dit de quelle architecture vous parlez. Puisque vous avez dit que vous vouliez classer les images, je suppose que c'est un réseau en partie convolutif, en partie entièrement connecté comme AlexNet, GoogLeNet, etc. En général, la réponse à votre question dépend du type de réseau avec lequel vous travaillez.
Si, par exemple, votre réseau ne contient que des unités convolutives - c'est-à-dire ne contient pas de couches entièrement connectées - il peut être indifférent à la taille de l'image d'entrée. Un tel réseau pourrait traiter les images d'entrée et à son tour renvoyer une autre image ("convolutionnel all the way"); vous devrez vous assurer que la sortie correspond à ce que vous attendez, car vous devez bien sûr déterminer la perte d'une manière ou d'une autre.
Cependant, si vous utilisez des unités entièrement connectées, vous avez des problèmes: vous avez ici un nombre fixe de poids appris avec lesquels votre réseau doit travailler, donc des entrées variables nécessiteraient un nombre variable de poids - et ce n'est pas possible.
Si tel est votre problème, voici ce que vous pouvez faire:
N
différentes images de taille correcte.L'option de remplissage peut introduire une source d'erreur supplémentaire dans la prédiction du réseau, car le réseau pourrait (lire: sera probablement) biaisé vers des images qui contiennent une telle bordure remplie. Si vous avez besoin d'idées, jetez un œil à la section Images de la documentation TensorFlow, il y a des éléments comme resize_image_with_crop_or_pad
celui-là qui enlèvent le plus gros travail.
Pour ce qui est de ne pas vous soucier de l'écrasement, voici un morceau du pipeline de prétraitement du célèbre réseau Inception:
# This resizing operation may distort the images because the aspect
# ratio is not respected. We select a resize method in a round robin
# fashion based on the thread number.
# Note that ResizeMethod contains 4 enumerated resizing methods.
# We select only 1 case for fast_mode bilinear.
num_resize_cases = 1 if fast_mode else 4
distorted_image = apply_with_random_selector(
distorted_image,
lambda x, method: tf.image.resize_images(x, [height, width], method=method),
num_cases=num_resize_cases)
Ils en sont totalement conscients et le font quand même.
En fonction de la distance que vous voulez ou besoin d'aller, il est en fait un document ici appelé Pooling pyramide spatiale dans les réseaux profonds pour la reconnaissance visuelle Convolution que les entrées poignées de tailles arbitraires en les traitant d'une manière très spéciale.
Essayez de créer une couche de regroupement de pyramides spatiales. Ensuite, placez-le après votre dernière couche de convolution afin que les couches FC obtiennent toujours des vecteurs dimensionnels constants en entrée. Pendant la formation, entraînez les images de l'ensemble de données en utilisant une taille d'image particulière pour une époque. Ensuite, pour la prochaine époque, passez à une taille d'image différente et continuez la formation.