Quand devrions-nous utiliser la convolution séparable?

Oct 14 2020

Je lisais le "Deep Learning with Python" de François Chollet. Il a mentionné la convolution séparable comme suit

Cela équivaut à séparer l'apprentissage d'entités spatiales et l'apprentissage d'entités par canal, ce qui a beaucoup de sens si vous supposez que les emplacements spatiaux dans l'entrée sont fortement corrélés, mais que les différents canaux sont assez indépendants.

Mais je ne pouvais pas comprendre ce qu'il voulait dire en disant «emplacements spatiaux corrélés». Certains peuvent-ils expliquer ce qu'il veut dire ou le but des circonvolutions séparables? (sauf partie liée aux performances).

Edit: La convolution séparable signifie que la première convolution en profondeur est appliquée, puis la convolution ponctuelle est appliquée.

Réponses

1 pasabaporaqui Oct 17 2020 at 21:46

Contexte de la question

Ceci est un lien vers le texte cité dans la question.

Il fait référence à l'utilisation de SeparableConv2D (tf, nom keras). Une question connexe sur StackOverflow est " Quelle est la différence entre les couches SeparableConv2D et Conv2D ". Cette réponse renvoie à cet excellent article de Chi-Feng Wang:

Une introduction de base aux convolutions séparables

Répondre à la question

En traitement d'image, une convolution séparable convertit une convolution NxM en deux convolutions avec les noyaux Nx1 et 1xM. En utilisant cette idée, dans NN, un SeparableConv2D convertit une convolution LxHxD (largeur x hauteur x profondeur, où la profondeur signifie le nombre d'entités entrantes) en deux convolutions avec les noyaux WxHx1 et 1x1xD.

Notez que le premier noyau ne gère pas les informations sur les entités, c'est donc "l'apprentissage des caractéristiques spatiales". Le noyau 1x1xD ne gère pas différents points, c'est "l'apprentissage des fonctionnalités par canal".

À propos de l'expression «les emplacements spatiaux dans l'entrée sont fortement corrélés», ma compréhension de ce que l'auteur veut dire est: Supposons que nous ayons une image de canal (caractéristique) que chaque pixel mesure la «distance à l'arrière-plan». Quand on passe d'un pixel à un voisin, on s'attend à une certaine continuité dans la valeur (sauf pour les pixels de bord): corrélation. Au lieu de cela, si nous avons un canal qui mesure la «luminosité» et un autre qui mesure la «distance à l'arrière-plan», les deux valeurs pour un pixel spécifique ont peu de corrélation.

Enfin, à propos de la question du titre "Quand devrions-nous utiliser la convolution séparable?" : si la sortie finale doit dépendre de certaines caractéristiques d'un pixel et de certaines autres caractéristiques des pixels voisins d'une manière très imprévisible, une convolution complète WxHxD doit être utilisée. Cependant, si, comme d'habitude, vous pouvez gérer les premières dépendances spatiales (voisinage) pour extraire les caractéristiques des pixels et ensuite gérer ces fonctionnalités pixel par pixel pour obtenir la sortie, mieux vaut utiliser un WxHx1 suivi de 1x1xD, en économisant beaucoup de paramètres réseau, ainsi, gain de temps de formation.