J'essaie de comprendre la convolution dilatée. Je suis déjà familier avec l'augmentation de la taille du noyau en remplissant les espaces avec des zéros. Il est utile pour couvrir une plus grande surface et mieux comprendre les objets plus grands. Mais s'il vous plaît, quelqu'un peut-il m'expliquer comment il est possible que les couches convolutives dilatées conservent la résolution d'origine du champ récepteur. Il est utilisé dans la structure deeplabV3 + avec un taux atro de 2 à 16. Comment est-il possible d'utiliser une convolution dilatée avec un noyau plus grand évident sans remplissage nul et la taille de sortie sera cohérente.
structure deeplabV3 +:
Je suis confus parce que quand je regarde ces explications ici:
La taille de sortie (3x3) de la couche de convolution dilatée est plus petite?
Merci beaucoup pour votre aide!
Lukas
3 Réponses :
Peut-être qu'il y a ici une petite confusion entre la convolution strided et la convolution dilatée. La convolution foulée est l'opération de convolution générale qui agit comme une fenêtre glissante, mais au lieu de sauter d'un seul pixel à chaque fois, elle utilise une foulée pour permettre de sauter plus d'un pixel lors du déplacement du calcul du résultat de la convolution pour le pixel actuel et le suivant. . La convolution dilatée "regarde" sur une plus grande fenêtre - au lieu de prendre les pixels voisins, elle les prend avec des "trous". Le facteur de dilatation définit la taille de ces «trous».
Merci pour votre réponse. Je suis familier avec la couche convolutionnelle strided. Imaginons cet exemple ici taille d'entrée 7x7. Ici, il y a une couche convolutionnelle dilatée avec un facteur de dilatation = 2. Le résultat est une taille de sortie de 3x3. Imaginez cette opération avec une couche convolutionnelle standard (facteur de dilatation = 1) noyau 3x3 et la foulée = 1 la taille de sortie serait de 5x5 pixels. Comment il est possible dans la structure deeplab V3 + d'avoir cette résolution de sortie cohérente (pas de sortie 16) avec différents facteurs de dilatation (de 2 à 16).
Eh bien, sans remplissage, la sortie deviendrait plus petite que l'entrée. L'effet est comparable à l'effet de réduction d'une convolution normale.
Imaginez que vous ayez un tenseur 1d avec 1000 éléments et un noyau de convolution 1x3 dilaté avec un facteur de dilatation de 3. Cela correspond à une "longueur totale du noyau" de 1 + 2 libre + 1 + 2 libre + 1 = 7. Considérant une foulée sur 1, la sortie serait un tenseur 1d avec 1000 + 1-7 = 994 éléments. Dans le cas d'une convolution normale avec un noyau 1x3 et un facteur de pas de 1, la sortie aurait 1000 + 1-3 = 998 éléments. Comme vous pouvez le voir, l'effet peut être calculé comme une convolution normale :)
Dans les deux cas, la sortie deviendrait plus petite sans remplissage. Mais, comme vous pouvez le voir, le facteur de dilatation n'a aucun effet d'échelle sur la taille de la sortie comme c'est le cas pour le facteur de foulée.
Pourquoi pensez-vous qu'aucun remplissage n'est effectué dans le cadre de deeplab? Je pense que dans l'implémentation officielle de tensorflow, le rembourrage est utilisé.
Meilleur Frank
était-ce utile?
D'après ce que je comprends, les auteurs disent qu'il n'est pas nécessaire de sous-échantillonner l'image (ou toute autre carte de caractéristiques intermédiaire) avant d'appliquer, disons, la convolution 3x3 qui est typique des DCNN (par exemple, VGG16 ou ResNet) pour l'extraction de caractéristiques et suivie par suréchantillonnage pour la segmentation sémantique. Dans un réseau codeur-décodeur typique (par exemple UNet ou SegNet), on sous-échantillonne d'abord la carte des caractéristiques de moitié, suivie par une opération de convolution et en suréchantillonnant à nouveau la carte des caractéristiques de 2x fois.
Tous ces effets (sous-échantillonnage, extraction de caractéristiques et suréchantillonnage) peuvent être capturés en une seule convolution atro (bien sûr avec stride = 1). De plus, la sortie d'une convolution atroce est une carte de caractéristiques dense comparée au même «sous-échantillonnage, extraction de caractéristiques et suréchantillonnage» qui aboutit à une carte de caractéristiques de rechange. Voir la figure suivante pour plus de détails. Il est tiré du article DeepLabV1 . Par conséquent, vous pouvez contrôler la taille d'une carte d'entités en remplaçant toute convolution normale par une convolution atro dans une couche intermédiaire.
C'est aussi pourquoi il y a une constante "output_stride (résolution d'entrée / résolution de la carte des caractéristiques)" de 16 dans toutes les atros convolutions de l'image (modèle en cascade) que vous avez posté ci-dessus.