web-dev-qa-db-fra.com

Keras peut-il gérer des images d'entrée de tailles différentes?

Le Keras peut-il gérer des images d'entrée de tailles différentes? Par exemple, dans le réseau neuronal entièrement convolutionnel, les images d'entrée peuvent avoir n'importe quelle taille. Cependant, nous devons spécifier la forme d'entrée lorsque nous créons un réseau par Keras. Par conséquent, comment pouvons-nous utiliser Keras pour gérer différentes tailles d'entrée sans redimensionner les images d'entrée à la même taille? Merci pour toute aide.

28
Hooben

Oui. Modifiez simplement votre forme d'entrée en forme = (n_channels, Aucun , Aucun ). Où n_channels est le nombre de canaux dans votre image d'entrée.

J'utilise cependant le backend Theano , donc si vous utilisez tensorflow, vous devrez peut-être le changer en (None, None, n_channels)

Tu devrais utiliser:

input_shape = (1, None, None)

Aucun dans une forme ne dénote une dimension variable. Notez que tous les calques ne fonctionneront pas avec ces dimensions variables, car certains calques nécessitent des informations de forme (telles que Aplatir). https://github.com/fchollet/keras/issues/192

Par exemple, en utilisant l'API fonctionnelle de keras, votre couche d'entrée serait:

Pour un jeu de données RVB

inp = Input(shape=(3,None,None))

Pour un jeu de données Gray

inp = Input(shape=(1,None,None))
29
maz

La mise en œuvre de tableaux d'entrée de taille arbitraire avec les mêmes noyaux de calcul peut poser de nombreux défis - par exemple sur un GPU, vous devez connaître la taille des buffers à réserver et, plus faiblement, la quantité de déroulage de vos boucles, etc.

Cela se produit plus souvent lors du traitement de séquences de longueur variable comme des phrases en PNL. L'approche courante consiste à établir une limite supérieure sur la taille (et recadrer des séquences plus longues), puis pad les séquences avec des zéros jusqu'à cette taille.

(Vous pouvez également inclure le masquage sur des valeurs nulles pour ignorer les calculs sur les zones rembourrées, sauf que les couches convolutives dans Keras peuvent toujours ne pas prendre en charge les entrées masquées ...)

Je ne sais pas si pour les structures de données 3D, la surcharge de remplissage n'est pas prohibitive - si vous commencez à obtenir des erreurs de mémoire, la solution la plus simple consiste à réduire la taille du lot. Faites-nous savoir votre expérience avec l'application de cette astuce sur les images!

13
Petr Baudis