Les circonvolutions «aplatissent-elles les images»?
8
Je suis à la recherche d'une bonne explication du fonctionnement des circonvolutions dans l'apprentissage profond lorsqu'elles sont appliquées à des images multicanaux. Par exemple, disons que j'ai une image de 100 x 100 pixels avec trois canaux, RVB. Le tenseur d'entrée aurait alors des dimensions 100 x 100 x 3.
Si j'applique une convolution avec N filtres et une foulée de un, la dimension de sortie sera-t-elle:
100 x 100 x 3 x N?
ou
100 x 100 x N?
En d'autres termes, la convolution appliquée "aplatit-elle" l'image ou la convolution est-elle appliquée canal par canal?
Dans toutes les implémentations pour le traitement des images CNN que j'ai vues, la sortie dans n'importe quelle couche est
Width x Height x Channels
ou une permutation. Il s'agit du même nombre de dimensions que l'entrée, aucune dimension supplémentaire n'est ajoutée par les couches convolutives. Chaque canal de carte d'entités dans la sortie d'une couche CNN est un réseau 2D "aplati" créé en ajoutant les résultats de plusieurs noyaux 2D (un pour chaque canal dans la couche d'entrée).
Habituellement, même les images d'entrée en niveaux de gris sont censées être représentées de Width x Height x 1sorte qu'elles correspondent au même modèle et que le même modèle de couche puisse être utilisé.
Il est tout à fait possible de construire une conception de couche qui convertit une couche d'entrée de canaux 2D + standard en une couche de canaux 3D +. Ce n'est pas quelque chose que j'ai vu faire auparavant, mais vous ne pouvez jamais exclure que cela puisse être utile dans un problème spécifique.
Vous pouvez également voir des convolutions de canaux 3D + dans les CNN appliquées à la vidéo, mais dans ce cas, la structure sera une variation de
Grand merci. En fait, j'ai trouvé une autre bonne explication qui inclut la forme du noyau de convolution ici: lien
David Ruiz
2
Cela dépend du nombre de filtres que vous choisissez. disons que vous avez choisi 64 filtres.
votre tenseur de poids aura la forme [3, 3, 3, 64] (3ème 3 est le nombre de canaux dans la couche d'entrée et 64 est le nombre de canaux dans la couche de sortie) et biaisera la forme du tenseur [64]
la sortie sera si Pad = "SAME" et foulée 1 pour une image d'entrée de 224 * 224 * 3 = 224 * 224 * 64
la sortie sera si Pad = "Valid" et foulée 1 pour une image d'entrée de 224 * 224 * 3 = 221 * 221 * 64
Maintenant, avec une entrée de 221 * 221 * 64 si vous souhaitez créer 128 filtres dans le calque suivant, votre forme vectorielle de poids sera [3, 3, 64, 128] et la forme vecotr de biais sera [128]
et forme de sortie - si Pad = "SAME" [221, 221, 128] - si Pad = "VALID" [198, 198, 128] considérant la foulée = [1,1,1,1]
vous pouvez vérifier ces résultats lors de la construction du graphique en utilisant layername.get_shape ().
Techniquement, la réponse à la question du PO ne dépend pas du nombre de filtres. Votre première phrase pourrait donc concerner un changement / une clarification. Cependant, les exemples de valeurs sont utiles, en particulier pour clarifier la forme du tableau des poids.
Neil Slater
1
La dimension de sortie d'une convolution en apprentissage profond dépend de plusieurs facteurs
la taille du filtre (alias noyau)
le rembourrage (que vous ajoutiez ou non des zéros autour de votre image et combien)
le nombre de filtres que vous utilisez
la foulée
La dépendance la plus simple est celle du nombre de filtres N. Il vous donne le nombre de cartes d'entités que votre sortie possède. Pour l'entrée qui peut être les canaux RVB c'est-à-dire 3, pour la sortie ce nombre peut être choisi librement.
Le facteur suivant est le remplissage nul. Si vous utilisez une taille de filtre de (3,3) et un remplissage "valide", c'est-à-dire en ajoutant AUCUN zéros autour de l'image, vous vous retrouvez avec une sortie de dimension.
(100, 100, 3) -> (98, 98, N)
Parce que vous utilisez une foulée de 1. Si vous déplacez le filtre sur l'image à la fin de l'image dans chaque direction, le filtre atteindra la bordure après 98 étapes.
Cependant, si vous utilisez le remplissage "MÊME", vous compensez la taille du filtre - dans le cas d'une taille de filtre de (3,3) qui correspondrait à une ligne de zéros autour de l'image - vous vous retrouverez avec:
(100, 100, 3) -> (100, 100, N)
Avec une foulée de 2 par exemple, vous décalez la position du filtre de deux pixels. Par conséquent, vous obtenez
Les trois canaux RVB sont convolués par des noyaux différents et ajoutés dans chaque carte d'entités. Ainsi, vous aurez 100 x 100 x N comme première couche de sortie.
Cela dépend du nombre de filtres que vous choisissez. disons que vous avez choisi 64 filtres.
votre tenseur de poids aura la forme [3, 3, 3, 64] (3ème 3 est le nombre de canaux dans la couche d'entrée et 64 est le nombre de canaux dans la couche de sortie) et biaisera la forme du tenseur [64]
la sortie sera si Pad = "SAME" et foulée 1 pour une image d'entrée de 224 * 224 * 3 = 224 * 224 * 64
la sortie sera si Pad = "Valid" et foulée 1 pour une image d'entrée de 224 * 224 * 3 = 221 * 221 * 64
Maintenant, avec une entrée de 221 * 221 * 64 si vous souhaitez créer 128 filtres dans le calque suivant, votre forme vectorielle de poids sera [3, 3, 64, 128] et la forme vecotr de biais sera [128]
et forme de sortie - si Pad = "SAME" [221, 221, 128] - si Pad = "VALID" [198, 198, 128] considérant la foulée = [1,1,1,1]
vous pouvez vérifier ces résultats lors de la construction du graphique en utilisant layername.get_shape ().
la source
La dimension de sortie d'une convolution en apprentissage profond dépend de plusieurs facteurs
La dépendance la plus simple est celle du nombre de filtres
N
. Il vous donne le nombre de cartes d'entités que votre sortie possède. Pour l'entrée qui peut être les canaux RVB c'est-à-dire 3, pour la sortie ce nombre peut être choisi librement.Le facteur suivant est le remplissage nul. Si vous utilisez une taille de filtre de (3,3) et un remplissage "valide", c'est-à-dire en ajoutant AUCUN zéros autour de l'image, vous vous retrouvez avec une sortie de dimension.
Parce que vous utilisez une foulée de 1. Si vous déplacez le filtre sur l'image à la fin de l'image dans chaque direction, le filtre atteindra la bordure après 98 étapes.
Cependant, si vous utilisez le remplissage "MÊME", vous compensez la taille du filtre - dans le cas d'une taille de filtre de (3,3) qui correspondrait à une ligne de zéros autour de l'image - vous vous retrouverez avec:
Avec une foulée de 2 par exemple, vous décalez la position du filtre de deux pixels. Par conséquent, vous obtenez
la source
Les trois canaux RVB sont convolués par des noyaux différents et ajoutés dans chaque carte d'entités. Ainsi, vous aurez 100 x 100 x N comme première couche de sortie.
la source