Champ récepteur des neurones dans LeNet

9

J'essaie de mieux comprendre les champs réceptifs de CNN. Pour ce faire, je voudrais calculer le champ récepteur de chaque neurone dans LeNet. Pour un MLP normal, c'est plutôt facile (voir http://deeplearning.net/tutorial/lenet.html#sparse-connectivity ), mais il est plus difficile de calculer le champ récepteur d'un neurone dans une couche suivant une ou plusieurs couches convolutionnelles et regroupement des couches.

Quel est le champ récepteur d'un neurone dans la 2. couche convolutionnelle? Quelle est sa taille dans la couche de sous-échantillonnage / regroupement suivante? Et quelle est la formule pour les calculer?

pir
la source
1
La barre latérale associée a suggéré cette question , qui est pertinente pour le genre de chose à laquelle vous pensez et qui est intéressante.
Dougal

Réponses:

2

Si vous pensez à un réseau convolutionnel comme une instance d'un MLP standard, vous pouvez déterminer les champs récepteurs exactement de la même manière que l'exemple que vous avez lié.

Rappelons qu'une couche convolutionnelle est essentiellement un raccourci pour une couche avec de nombreux motifs répétés, comme dans cette image (à partir de cette réponse , à l'origine d' ici ):

exemple visuel de convolution

Chacun des "pixels de destination" de cette image correspond à un neurone dont les entrées sont le carré bleu dans l'image source. En fonction de l'architecture de votre réseau, les circonvolutions peuvent ne pas correspondre exactement à des pixels comme celui-ci, mais c'est la même idée. Les poids utilisés comme entrées pour tous ces neurones convolutifs sont liés, mais cela n'a rien à voir avec ce à quoi vous pensez ici.

La mise en commun des neurones peut être pensée de la même manière, en combinant les champs récepteurs de chacune de leurs entrées.

Dougal
la source
Belle visualisation! Votre exemple est parfaitement logique. Si j'ajoutais une couche de mise en commun 2x2 après la couche convolutionnelle, alors chaque neurone de la couche de mise en commun n'aurait qu'un champ récepteur de 4x4, malgré le mélange de quatre champs 3x3 car les neurones de la couche convolutionnelle se chevauchent. Je peux facilement comprendre ce problème et créer des formules simples pour le champ récepteur en fonction de la taille du pool, etc. Cependant, cela devient plus complexe pour la couche convolutionnelle suivante, car le champ récepteur dépend maintenant également de la foulée de la couche d'interrogation, etc. Quelle formule pour RF prend cela en compte?
pir
le carré bleu du pixel source a-t-il donc la taille du champ récepteur?
Charlie Parker
J'ai la même question, dans le document "Faster R-CNN: Towards Real-Time Object Detection with Region Proposition Networks", il est dit dans la section 3.1, le champ récepteur de ZF et VGG16 est 171 et 228 mais il n'ajoute pas à partir de la configuration du réseau. J'espère que quelqu'un pourra éclaircir cela pour moi.
Chan Kim
0

Dans Faster-rcnn, le champ récepteur efficace peut être calculé comme suit (VGG16):

Img->
Conv1 (3) -> Conv1 (3) -> Pool1 (2) ==>
Conv2 (3) -> Conv2 (3) -> Pool2 (2) ==>
Conv3 (3) -> Conv3 (3 ) -> Conv3 (3) -> Pool3 (2) ==>
Conv4 (3) -> Conv4 (3) -> Conv4 (3) -> Pool4 (2) ==>
Conv5 (3) -> Conv5 (3 ) -> Conv5 (3) ====>
une fenêtre 3 * 3 dans la carte des fonctionnalités.
Prenons une dimension pour plus de simplicité. Si nous dérivons de la taille 3, le champ récepteur d'origine:
1). au début de Conv5: 3 + 2 + 2 + 2 = 9
2). au début de Conv4: 9 * 2 + 2 + 2 + 2 = 24
3). au début de Conv3: 24 * 2 + 2 + 2 + 2 = 54
4). au début de Conv2: 54 * 2 + 2 + 2 = 112
5). au début de Conv1 (entrée d'origine): 112 * 2 + 2 + 2 = 228

Club Yacht
la source