L'architecture d'AlexNet utilise des remplissages zéro comme le montre l'image: 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:
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!
la source
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.
la source
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.
la source
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.
la source
É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 .
la source
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.
la source