Les couches convolutives et les couches de mise en commun elles-mêmes sont indépendantes des dimensions d'entrée. Cependant, la sortie des couches convolutives aura des tailles spatiales différentes pour des images de tailles différentes, et cela posera un problème si nous avons une couche entièrement connectée par la suite (car notre couche entièrement connectée nécessite une entrée de taille fixe). Il existe plusieurs solutions à cela:
1. Global Pooling: évitez les couches entièrement connectées à la fin des couches convolutives et utilisez plutôt le pooling (tel que Global Average Pooling) pour réduire vos cartes d'entités à partir d'une forme de (N, H, W, C) (avant le pool global ) pour façonner (N, 1,1, C) (après le pool global), où:
N = nombre d'échantillons de mini-lots
H = hauteur spatiale de la carte d'entités
W = largeur spatiale de la carte d'entités
C = nombre de cartes d'entités (canaux)
As peut être vu, la dimensionnalité de sortie (N * C) est maintenant indépendante de la taille spatiale (H, W) des cartes d'entités. En cas de classement, vous pouvez ensuite utiliser une couche entièrement connectée sur le dessus pour obtenir les logits de vos classes.
2. Mise en commun de taille variable:Utilisez des régions de mise en commun de taille variable pour obtenir la même taille de carte d'entités pour différentes tailles d'entrée.
3. Recadrer / redimensionner / recadrer les images d'entrée: vous pouvez essayer de redimensionner / recadrer / recadrer vos images d'entrée pour qu'elles aient toutes la même forme.
Dans le contexte de l'apprentissage par transfert, vous souhaiterez peut-être utiliser des entrées de tailles différentes de celles des entrées d'origine avec lesquelles le modèle a été formé. Voici quelques options pour le faire:
4. Créez de nouveaux calques entièrement connectés: vous pouvez abandonner complètement les calques entièrement connectés d'origine et initialiser un nouveau calque entièrement connecté avec la dimensionnalité dont vous avez besoin, et l'entraîner à partir de zéro.
5. Traitez la couche entièrement connectée comme une convolution: normalement, nous remodelons les cartes d'entités de (N, H, W, C) à (N, H * W * C) avant de les alimenter vers la couche entièrement connectée. Mais vous pouvez également traiter la couche entièrement connectée comme une convolution avec un champ récepteur de (H, W). Ensuite, vous pouvez simplement convoluer ce noyau avec vos cartes de fonctionnalités, quelle que soit leur taille (utilisez un remplissage nul si nécessaire) [
http://cs231n.github.io/transfer-learning/ ].