[PYTHON] Jetons un coup d'œil à CornerNet, un détecteur d'objets qui n'utilise pas d'ancres.

Papier à présenter

CornerNet: Detecting Objects as Paired Keypoints

https://arxiv.org/abs/1808.01244

Semble être annoncé à l'ECCV 2018

Oh, c'est essentiellement mon interprétation, donc il peut y avoir des erreurs

Problèmes signalés

RCNN, SSD et YOLO plus rapides ont des «ancres prédéterminées» qui exécutent des «classes» dans les ancres et des «retours aux ancres et aux cadres de délimitation réels».

En d'autres termes, je doute qu'il y ait une partie qui dépend de l'ancre.

① Le nombre d'ancres augmentera DSSD utilise des ancres de 40k ou plus, et Retina Net utilise des ancres de 100k ou plus. Histoire simple "Si vous augmentez le nombre d'ancres, la bonne réponse bbox est facile à accrocher sur l'ancre, donc la précision va s'améliorer?"

Si vous augmentez le nombre d'ancres, le nombre d'ancres négatives augmentera et la vitesse d'apprentissage diminuera.

② De nombreux hyper paramètres d'ancrage ・ Combien de bbox · Quelle taille ・ Quel type de rapport hauteur / largeur Cette conception est fastidieuse, complexe et encombrante.

Est-il possible de fabriquer un détecteur d’objet qui n’utilise pas d’ancres? </ b>

Telle est ma motivation.

Structure rugueuse

image.png

La première caractéristique est qu'il ne renvoie pas les coordonnées et la taille de la bbox. Ensuite, ce que nous faisons est de produire une carte thermique de la probabilité de la coordonnée supérieure gauche de l'image d'entrée et de la probabilité de la coordonnée supérieure droite. Aucune régression en utilisant une couche entièrement connectée

production

Il existe trois sorties de base. ・ Carte de chaleur concernant la position des coordonnées (respectivement en haut à gauche et en bas à droite) ・ Intégration qui sépare les objets de la même classe ・ Sortie décalée qui restaure la résolution par extraction de caractéristiques

Jetons un coup d'œil à chacun

Génération de cartes thermiques

La coordonnée supérieure gauche de la boîte englobante correcte est essentiellement un "point", donc elle est trop sévère pour être prédite. Par conséquent, appliquez un filtre gaussien pour le rendre un peu plus grand.

Il ne reste plus qu'à prédire cette carte thermique avec un réseau de type encodeur-décodeur appelé hourglassNetwork.

La fonction de perte adopte une perte focale.

image.png

décalage

En gros, ce n'est pas si important, mais Lorsque l'extraction d'entités est effectuée, la résolution diminue, de sorte que les coordonnées exactes de l'image d'origine sont calculées par régression.

image.png

Intégration

Des cartes thermiques de sortie sont créées pour chaque classe. Par conséquent, s'il existe plusieurs objets de la même classe à partir d'une image, il y aura plusieurs points d'angle. Par exemple, dans une image avec deux humains, deux points en haut à gauche sont détectés dans la "carte thermique de sortie de classe humaine".

Après cela, faites une combinaison du point supérieur gauche et du point inférieur droit pour créer un cadre de sélection. À ce stade, la combinaison de laquelle en haut à gauche et en bas à droite n'est pas claire. Par conséquent, en utilisant l'incorporation, multipliez les pertes qui ont des caractéristiques similaires dans la même combinaison. Cela facilite la recherche de combinaisons. Lpull rend deux fonctionnalités de la même combinaison similaires Lpush a la propriété de rendre deux combinaisons différentes de fonctionnalités différentes.

image.png image.png

Fonction de perte

Il s'agit d'une combinaison de perte de détection, de perte d'intégration et de perte de décalage.

image.png

corner pooling La méthode de "prédiction de ce point en haut à gauche et en bas à droite" prédit essentiellement où la classe n'existe pas. Il s'agit de prédire le bord de la boîte englobante, mais le manque d'informations pour cette classe au point à prédire semble problématique. Par conséquent, nous utilisons une nouvelle méthode de regroupement appelée corner pooling. image.png

Ce que je fais est comme la figure, et c'est comme déplacer la valeur maximale verticalement et horizontalement.

Il semble y avoir une bonne considération de la caractéristique selon laquelle "il y a un être humain dans la direction à droite de la coordonnée supérieure gauche".

résultat

Résultat du corner pooling

Le haut de la figure est sans regroupement de coins et le bas de la figure est avec regroupement de coins. Vous pouvez voir que la boîte englobante exacte est proposée. image.png

Quantitativement, vous pouvez voir que la précision est un peu meilleure. Vous pouvez également confirmer qu'il est assez bon sans cela. image.png

Expérience comparative

Par rapport à d'autres méthodes, les résultats sont bien meilleurs que les autres détecteurs à un étage, et les résultats sont comparables à ceux des détecteurs à deux étages.

image.png

Succès

Les girafes qui se chevauchent peuvent être clairement détectées. Vous pouvez voir que l'intégration fonctionne bien. image.png

Exemple d'échec

Ceci est un exemple d'échec. Certaines personnes peuvent ne pas être détectées ou l'intégration peut être incorrecte. image.png

La vitesse de fonctionnement

244 ms par feuille lent

Résumé

Nous avons proposé un nouveau détecteur d'objets qui n'utilise pas du tout d'ancrage, et certains résultats ont été obtenus. Surtout la précision est assez bonne.

D'autre part, le problème est de 244 ms et la vitesse de fonctionnement lente est impressionnante. Cependant, puisqu'il s'agit du premier article utilisant une méthode de carte thermique, il est possible qu'il soit amélioré à l'avenir.

(Personnellement) Le résultat de la mise en commun des coins est un peu meilleur, mais il peut ne pas être très utilisable sauf pour cette annotation.

C'est pourquoi j'ai brièvement expliqué CornerNet, un détecteur qui n'utilise pas d'ancres. S'il y a un manque d'explication, je voudrais la compléter à nouveau.

Système de développement

centerNet https://arxiv.org/abs/1904.07850

Grid R-CNN https://arxiv.org/abs/1811.12030

Recommended Posts

Jetons un coup d'œil à CornerNet, un détecteur d'objets qui n'utilise pas d'ancres.
Jetons un coup d'œil à la carte des fonctionnalités de YOLO v3
J'ai essayé un réseau de neurones Π-Net qui ne nécessite pas de fonction d'activation
Jetons un coup d'œil au code Scapy. Comment traitez-vous la structure?
Enroulement de tigre qui ne provoque pas d'accident
Comment utiliser l'unité esclave LAN sans fil tp-link qui ne prend pas en charge Linux