«Ne soyez pas trop durs avec vous-même» réalisa Deep Learning

C’est l’histoire de la prise de conscience par la communauté Deep Learning au début de l’année - «de ne pas trop pénaliser ses modèles pour avoir tort». Cette prise de conscience s’est produite alors que les chercheurs se frappaient la tête contre le mur en essayant toutes sortes de piratages pour la détection d’objets multiples. Mais ensuite, un révélateur de Facebook AI Research (FAIR) - Focal Loss pour la détection d'objets denses - a permis de réaliser que nous sommes peut-être trop sévères et qu'une fois de plus, une idée (transformée en une équation mathématique) a supprimé toutes les désordre.

Commençons par quelques antécédents en premier. Pour pouvoir former n’importe quel réseau de neurones, nous avons besoin de 3 choses:

  1. Les données
  2. Architecture de réseau neuronal
  3. Fonction de perte

La fonction de perte consiste à produire un nombre faible lorsque la sortie du réseau de neurones est proche de la valeur réelle et inversement. C'est ainsi que nous pénalisons le réseau de neurones pour avoir tort.

Si nous examinons l'historique de la détection multi-objets, deux classes de modèles sont apparues (presque au même moment à la fin de 2015) pour la détection multi-objets de bout en bout (en une étape): YOLO (vous ne regardez une fois) et SSD (Single Shot Multibox Detector), qui étaient les représentants des deux architectures possibles que nous aurions pu avoir, en collant une tête personnalisée à un réseau convolutionnel pré-formé - comme ResNet.

YOLO représentait la classe de modèles dans laquelle nous avons recraché un long vecteur d'une couche linéaire entièrement connectée, alors que l'approche des activations par convolution dans une tête personnalisée a été lancée par la classe de modèles SSD.

Depuis la sortie de YOLO et de SSD, les choses ont plutôt évolué vers le SSD - au point que YOLOv3 (version 3 de YOLO) le fait désormais comme un SSD, car le SSD utilise le champ réceptif des activations de convolution.

Le champ récepteur d'une activation n'est rien d'autre que la partie de l'entrée qui a été impliquée dans le calcul de cette activation. Notez que le champ réceptif ne dit pas seulement que "les entrées à l'intérieur de ce rectangle sont responsables de cette activation" mais indiquent également que "parmi toutes les entrées à l'intérieur de ce rectangle, celles situées autour du centre sont plus responsables de cette activation que d'autres". .

Source: http://cs231n.github.io/convolutional-networks/

Le champ récepteur nous permet de dire quelque chose comme ceci:

L'activation en haut à gauche de la sortie du calque convolutif sera responsable des objets dans la partie supérieure gauche de l'image, l'activation en bas à droite de la sortie du calque convolutif sera responsable des objets situés dans la partie inférieure droite de l'image, etc. .

Alors maintenant, notre fonction de perte peut examiner chacune des activations de convolution en sortie et décider si cette activation est capable de refléter correctement les coordonnées et les classes de la boîte englobante des objets dans son champ récepteur. Cela se révèle être difficile à faire réellement :(. Cela implique un «problème d'appariement» qui est résolu en ayant des boîtes d'ancrage (ou des boîtes par défaut) et en trouvant leur chevauchement (Index de Jaccard ou Intersection sur l'Union) avec chaque sol Comme décrit dans le document SSD, un index ou un arrière-plan d’objets de vérité au sol est attribué à chacune des boîtes d’ancrage.

Remarque: si le dernier paragraphe n’a pas beaucoup de sens, lisez à propos de SSD ou attendez mon prochain article de blog pour comprendre comment nous interprétons les activations et les manipulons!

Une fois que nous avons dépassé la phase de correspondance, nous avons pratiquement terminé. Nous pouvons prendre les activations correspondant aux boîtes d'ancrage appariées et prendre la perte L1 pour les coordonnées du cadre de sélection plus la perte d'entropie croisée pour que la classification ait notre fonction de perte.

Mais cela ne nous donne toujours pas d’excellents résultats. Le modèle ne fait pas un bon travail avec de petits objets dans une image. Et la raison pour laquelle cela ne fonctionnait pas venait du papier Focal Loss for Dense Object Detection.

Nous avons des boîtes d'ancrage de différentes granularités. Les plus petites boîtes d’ancrage seront probablement responsables de la recherche de petits objets dans l’image. Mais, comme la plupart de ces plus petites boîtes d’ancrage au cours de notre formation contiennent de l’arrière-plan, elles ne deviennent jamais confiantes pour prédire d’autres classes. Et pourquoi ne deviennent-ils pas confiants - parce que nous les pénalisons trop sévèrement pour avoir tort. Et c'était ça! Le document sur les pertes de Focal a transformé cette idée en une formule mathématique, comme indiqué ci-dessous, et a complètement changé le jeu!

Source: papier de perte focale

La ligne bleue dans le graphique ci-dessus est la perte d'entropie croisée. L'axe des ordonnées indique la perte d'entropie croisée que le modèle doit subir s'il prédit la classe de vérité au sol avec une probabilité de x (sur l'axe des x). Le fait est que même si le modèle prédit la bonne chose avec une probabilité de 0,6, nous le pénalisons toujours beaucoup. Donc, même si le modèle veut prédire la bonne classe, il n’a aucun intérêt à le faire, et comme il est généralement en arrière-plan, le modèle finit par parler de l’arrière-plan, à moins d’être vraiment sûr d’une autre classe. L'astuce consiste donc à modifier la fonction de perte pour qu'elle ressemble davantage à une ligne verte ou violette dans le graphique. Le papier à perte focale multiplie par un facteur la perte d'entropie croisée, ce qui le rend moins dur pour le modèle et produit d'excellents résultats, comme vous pouvez le vérifier ici.