Couches convolutives: rembourrer ou ne pas rembourrer?

19

L'architecture d'AlexNet utilise des remplissages zéro comme le montre l'image: entrez la description de l'image ici Cependant, il n'y a aucune explication dans le papier pourquoi ce remplissage est introduit.

Le cours Standford CS 231n enseigne que nous utilisons le rembourrage pour préserver la taille spatiale: entrez la description de l'image ici

Je me demande si c'est la seule raison pour laquelle nous avons besoin de rembourrage? Je veux dire, si je n'ai pas besoin de conserver la taille spatiale, puis-je simplement supprimer les rembourrages? Je sais que cela entraînera une diminution très rapide de la taille spatiale à mesure que nous irons à des niveaux plus profonds. Cependant, je peux faire un compromis en supprimant les couches de mise en commun. Je serais très heureux si quelqu'un pouvait me donner une justification du zéro padding. Merci!

Jumabek Alihanov
la source

Réponses:

20

Il y a plusieurs raisons pour lesquelles le rembourrage est important:

  1. Il est plus facile de concevoir des réseaux si nous préservons le heightet widthet ne nous soucions pas trop des dimensions du tenseur lors du passage d'une couche à une autre car les dimensions "fonctionneront" simplement .

  2. Cela nous permet de concevoir des réseaux plus profonds . Sans rembourrage, la réduction de la taille du volume diminuerait trop rapidement.

  3. Le rembourrage améliore en fait les performances en conservant les informations aux frontières .

Citation de conférences de Stanford: "En plus de l'avantage mentionné ci-dessus de maintenir les tailles spatiales constantes après CONV, cela améliore réellement les performances. Si les couches CONV ne devaient pas mettre à zéro les entrées et effectuer uniquement des convolutions valides, les volumes diminueraient légèrement après chaque CONV, et les informations aux frontières seraient «emportées» trop rapidement. " - source

  1. Comme @dontloo l'a déjà dit, les nouvelles architectures de réseau doivent concaténer des couches convolutives avec des filtres 1x1, 3x3 et 5x5 et ce ne serait pas possible s'ils n'utilisaient pas de remplissage parce que les dimensions ne correspondraient pas. Consultez cette image du module de démarrage pour mieux comprendre pourquoi le remplissage est utile ici.

entrez la description de l'image ici

Drag0
la source
4
Pourquoi le remplissage nul est-il si omniprésent? Dans le traitement d'image, il existe de nombreux modes de bordure différents, tels que divers types de mise en miroir ou la poursuite de la valeur au bord. Les zéros purs ont une structure très différente de celle des images / fonctionnalités réelles.
isarandi
3

Il me semble que la raison la plus importante est de préserver la taille spatiale. Comme vous l'avez dit, nous pouvons compenser la diminution de la taille spatiale en supprimant les couches de mise en commun. Cependant, de nombreuses structures de réseaux récentes (comme les réseaux résiduels , les réseaux initiaux , les réseaux fractals ) opèrent sur les sorties de différentes couches, ce qui nécessite une taille spatiale cohérente entre elles.

Une autre chose est, s'il n'y a pas de remplissage, les pixels dans le coin de l'entrée n'affectent que les pixels dans le coin correspondant de la sortie, tandis que les pixels au centre contribuent à un voisinage dans la sortie. Lorsque plusieurs couches sans remplissage sont empilées, le réseau ignore les pixels internes de l'image.

Juste certaines de mes compréhensions, je crois qu'il y a d'autres bonnes raisons.

dontloo
la source
2

Grande question. Drag0 a bien expliqué mais je suis d'accord, quelque chose ne va pas.

C'est comme regarder une photo et devoir faire face à la frontière. Dans la vraie vie, vous pouvez déplacer vos yeux pour regarder plus loin; Aucune véritable frontière n'existe. C'est donc une limitation du médium.

En plus de préserver la taille, est-ce important? Je ne connais pas de réponse satisfaisante mais je suppose (non prouvé) qu'avec des expériences sur l'attention et l'occlusion (objets partiels), nous n'avons pas besoin des informations perdues aux frontières. Si vous deviez faire quelque chose de plus intelligent (disons copier le pixel à côté), cela ne changerait pas la réponse même si je ne me suis pas expérimenté moi-même. Le remplissage avec 0 est rapide et préserve la taille, c'est pourquoi nous le faisons.

ignorant
la source
1

c'est ma pensée. le remplissage nul est important au moment initial pour conserver la taille du vecteur de caractéristique de sortie. et son quelqu'un ci-dessus a dit que le rembourrage zéro a plus de performances.

mais qu'en est-il la dernière fois? la résolution du vecteur caractéristique de l'image est très faible, et la valeur en pixels signifie une sorte de vecteur d'une certaine taille globale.

Je pense que dans le dernier cas, une sorte de mise en miroir est meilleure que le remplissage nul.

user225549
la source
1

Élaborer sur la conservation des informations à la frontière, fondamentalement, le pixel dans le coin (vert ombré) une fois la convolution terminée ne serait utilisé qu'une seule fois tandis que celui du milieu, comme le rouge ombré, contribuerait à la carte d'entités résultante plusieurs fois. , nous remplissons l'image Voir figure: 2 .

Jatin
la source
1

J'essaierai de dire, du point de vue de l'information, quand est-il correct de remplir et quand il ne l'est pas.

Prenons pour le cas de base l'exemple de la fonctionnalité de remplissage tensorflow. Il propose deux scénarios, "Valide" ou "identique". Le même préservera la taille de la sortie et la gardera la même que celle de l'entrée en ajoutant un remplissage approprié, tandis que valide ne le fera pas et certaines personnes prétendent que cela entraînera une perte d'informations, mais, voici le hic .

Cette perte d'informations dépend de la taille du noyau ou du filtre que vous utilisez. Par exemple, supposons que vous ayez une image 28x28 et que la taille du filtre soit 15x15 (disons). La sortie doit avoir une dimension 16x16, mais si vous complétez en utilisant "même" dans tensorflow, ce sera 28x28. Maintenant, les 12 lignes et les 12 colonnes en elles-mêmes ne portent aucune information significative mais sont toujours là sous forme de bruit. Et nous savons tous à quel point les modèles d'apprentissage profond sont sensibles au bruit. Cela peut dégrader considérablement la formation. Donc, si vous utilisez de gros filtres, mieux vaut ne pas opter pour le rembourrage.

Saurabh Kumar
la source