Il y a quelques mois, j'étais un peu inquiet du manque de connaissances sur les détails du SSD (Single Shot Multibox Detector), j'ai donc décidé de construire mon propre SSD petit à petit en regardant les papiers et l'implémentation trouvés dans Github etc. C'était. Pour être honnête, ce n'est pas encore fini, mais j'ai appris comment créer une Default Box (Prior), une fonctionnalité importante pour les SSD, alors j'aimerais la partager avec vous.
Si vous lisez cet article, vous savez probablement ce qu'est la boîte par défaut, mais je vais l'expliquer un peu au cas où. Lors du traitement d'une image, le SSD produit une image alambiquée appelée Feature Map. La carte des caractéristiques, le nombre et la taille sont spécifiés dans les paramètres du modèle, mais il s'agit essentiellement de 5 ou 6. Afin de reconnaître l'objet à partir de la carte des caractéristiques, la zone dans laquelle l'objet est susceptible d'apparaître est spécifiée, et cette zone est appelée la zone par défaut (parfois appelée Prior) et est utilisée pour la classification et la régression. Je suis.
Cela ressemble à ceci lorsque vous visualisez un ensemble de boîtes par défaut. Avec mes paramètres de modèle, un total de 8732 sera créé. Ceci est une image de COCO Dataset 2017.
Selon l'explication de l'article, pour calculer la boîte par défaut, nous avons besoin de l'échelle (il n'y a pas de définition spécifique, mais quelque chose comme l'échelle d'un objet, les proportions) et la taille de la carte des caractéristiques.
Dans l'article, l'échelle est définie par cette fonction. m est le nombre de cartes de caractéristiques et k le nombre de cartes de caractéristiques. Et s_min et s_max sont déterminés par la taille de l'objet dans l'image. Je voudrais dire qu'il existe une manière de décider, mais il semble qu'il n'y ait pas de manière particulière.
La fonction elle-même semble un peu compliquée, mais en un mot, elle divise s_min et s_max de manière égale en la même quantité que le nombre de cartes d'entités. Par exemple, si s_min = 0,2, s_max = 0,9 et m = 6, alors s_k serait [0,2, 0,34, 0,48, 0,62, 0,76, 0,9]. Chaque échelle est également séparée par 0,14.
Les proportions, comme s_min et s_max, sont déterminées par l'objet. Le document indique que le rapport hauteur / largeur de {1, 2, 3, 1/2, 1/3} a été utilisé. C'était un peu flou rien qu'en regardant le papier, mais (2, 1/2) et (3, 1/3) sont comme une combinaison, donc si vous parlez de réduire le rapport hauteur / largeur, en gros 3 et 1/3 Cela signifie que le rapport hauteur / largeur n'est pas utilisé.
Les cartes de caractéristiques étaient la partie la plus (personnellement) simple, mais simplement la taille de la sortie de la couche de convolution à passer à la tête de classification et de régression dans le SSD. Par exemple, dans mon modèle, la première sortie est 38 x 38 et la dernière sortie est 1 x 1.
Une fois que vous avez les pièces nécessaires ci-dessus, vous pouvez calculer la boîte par défaut. Cette fonction calcule la hauteur et la largeur de la boîte par défaut.
Et vous pouvez maintenant calculer les points cx et cy du point central de la boîte par défaut. F_k ici est simplement la taille de la carte des caractéristiques (par exemple 38).
À propos, le motif [cx, cy, w, h] est commun lors de la représentation de la boîte par défaut.
Les calculs pour cx, cy et w, h décrits ci-dessus sont effectués pour chaque rapport hauteur / largeur dans chaque carte de caractéristiques. Cependant, 1 est une petite exception. S'il vaut 1, deux boîtes par défaut sont calculées. Il est calculé avec la boîte par défaut calculée avec une échelle normale et une autre échelle. Une autre méthode de calcul de l'échelle est définie par la fonction suivante. Il peut être calculé par l'échelle de la carte des caractéristiques actuelle et l'échelle d'un niveau supérieur.
Il existe une boîte par défaut pour le rapport hauteur / largeur de 1. Pour {1, 2, 3, 1/2, 1/3}, chaque bloc crée six boîtes par défaut. Dans le cas de {1, 2, 1/2}, quatre sont créés.
J'ai regardé certaines implémentations pour comprendre comment créer une boîte par défaut, mais à un moment donné, je n'ai pas compris après avoir lu l'article.
Tout d'abord, nous voyons souvent une variable appelée étapes. f_k est calculé en divisant la taille de l'image par étape. Il n'y a aucune explication nulle part et ce n'est pas écrit dans le papier, mais les étapes sont calculées en divisant la taille de l'image par la taille de la carte des caractéristiques. Par exemple, diviser 300 par 38 donne 7,89-> 8.
steps: [8, 16, 32, 64, 100, 300]
L'autre chose qui est restée bloquée est le réglage du rapport hauteur / largeur. Il y a plusieurs façons d'écrire comme ça.
aspect_ratios: [[2], [2,3], [2,3], [2,3], [2], [2]]
Je n'avais pas 1/2 ou 1/3, alors j'ai pensé, "Qu'est-ce que c'est?", Mais je peux simplement laver 2 et 1/2 avec seulement 2, et exprimer 3 et 1/3 avec seulement 3. [2,3] signifie {1, 2, 3, 1/2, 1/3}.
Il est courant d'écrire de tels paramètres pour les échelles.
scales: [30, 60, 111, 162, 213, 264, 315]
Il s'agit de la taille de l'image multipliée par le s_k déjà calculé. Si s_k vaut 0,1, la valeur des échelles sera 30.
Enfin, cela peut sembler évident pour certaines personnes, mais lors du calcul des 2 et 1/2 boîtes par défaut, seuls 2 w et h sont calculés, et la 1/2 boîte par défaut est de 2 h. Utilisez comme w et utilisez w comme h. La raison en est que sqrt (2) == 1 / sqrt (1/2)
et sqrt (1/2) == 1 / sqrt (2)
.
Merci d'avoir lu jusqu'au bout! Ma langue maternelle n'est pas le japonais, il peut donc y avoir des choses que je ne peux pas bien expliquer ou utiliser des mots étranges. Si vous avez des questions, n'hésitez pas à commenter et j'essaierai d'y répondre autant que possible!
J'aimerais publier de plus en plus lors de la mise en œuvre du SSD, alors attendez-vous au prochain article!
Recommended Posts