Articles

#021 Localisation d’objets CNN

Localisation d’objets

La détection d’objets est l’un des domaines de la vision par ordinateur qui explose et qui fonctionne tellement mieux qu’il y a quelques années à peine. Afin de développer la détection d’objets, nous apprenons d’abord la localisation d’objets. Commençons par définir ce que cela signifie.

Nous avons déjà dit que la tâche de classification des images consiste à regarder une image et à dire s’il y a une voiture ou non. La classification avec localisation signifie non seulement que nous devons étiqueter un objet comme une voiture, mais aussi mettre une boîte englobante ou dessiner un rectangle autour de la position de la voiture dans l’image. Dans le terme classification avec problème de localisation, la localisation fait référence à la détermination de l’emplacement de la voiture que nous avons détectée sur l’image.

Nous allons en apprendre davantage sur le problème de détection où il peut y avoir plusieurs objets dans l’image et nous devons tous les détecter et les localiser tous. Si nous faisons cela pour une application de conduite autonome, nous pourrions avoir besoin de détecter non seulement d’autres voitures, mais peut-être d’autres piétons et motos ou même d’autres objets. La classification et la classification avec des problèmes de localisation ont généralement un gros objet au milieu de l’image que nous essayons de reconnaître ou de reconnaître et de localiser. En revanche, dans le problème de détection, il peut y avoir plusieurs objets, et en fait peut-être même plusieurs objets de différentes catégories dans une seule image. Les idées que nous apprenons sur la classification des images seront utiles pour la classification avec localisation, puis les idées que nous apprenons pour la localisation se révéleront utiles pour la détection.

Que sont la localisation et la détection?

 Classification d'image avec localisation, localisation d'objet

Classification d’image (à gauche); Classification avec localisation (au centre); Détection de plusieurs objets (à droite)

Commençons par parler de Classification avec localisation. Nous connaissons déjà le problème de classification des images dans lequel nous pourrions entrer une image dans un \(convnet\) avec plusieurs couches, ce qui se traduit par un vecteur d’entités qui est envoyé à peut-être une unité \(softmax\) qui génère la classe prédite.

 Réseau neuronal convolutif avec une sortie softmax

A\(convnet\) avec une sortie \(softmax\)

Si nous construisons une voiture autonome, peut-être que nos catégories d’objets sont un piéton, une voiture, une moto et un arrière-plan (cela ne signifie rien de ce qui précède). Donc, s’il n’y a pas de piéton, pas de voiture, pas de moto, alors nous pouvons avoir un arrière-plan de sortie. Ce sont nos quatre classes, nous avons donc besoin d’un \(softmax\) avec \(4\) sorties possibles.

Que diriez-vous si nous voulons également localiser la voiture dans l’image? Pour ce faire, nous pouvons changer notre réseau de neurones pour avoir quelques unités de sortie supplémentaires qui produisent une boîte englobante. En particulier, nous pouvons avoir la sortie du réseau neuronal \(4\) plus de nombres, et ces nombres seront \(b_x\), \(b_y\), \(b_h\), \(b_w\). Ces nombres \(4\) paramétrent la boîte englobante de l’objet détecté.

 CNN qui produit la position d'une boîte englobante

Réseau neuronal convolutif qui produit la position d’une boîte englobante

Classification avec localisation

On utilise ici la notation que le point supérieur gauche de l’image est \((0,0)\), en bas à droite est \((1,1)\).

 Boîte englobante sur car,, localisation de l'objet

Boîte englobante et ses coordonnées

Spécification de la boîte englobante le rectangle rouge nécessite de spécifier le point médian, c’est-à-dire le point \(b_x\), \(b_y\) ainsi que la hauteur qui serait \(b_h\), ainsi que la largeur \(b_w\) de cette boîte englobante. Maintenant, si notre ensemble d’entraînement contient non seulement l’étiquette de classe d’objet, que notre réseau de neurones essaie de prédire ici, mais qu’il contient également des nombres supplémentaires \(4\) donnant la boîte englobante, alors nous pouvons utiliser l’apprentissage supervisé pour que notre algorithme génère non seulement une étiquette de classe, mais aussi les paramètres \(4\) pour nous dire où se trouve la boîte englobante de l’objet que nous avons détecté. Dans cet exemple, \(b_x\) peut être d’environ \(0.5\) car c’est à peu près à mi-chemin vers la droite de l’image, \(b_y\) peut être d’environ \(0.7\) puisque c’est à peu près \(70 \)% du chemin jusqu’à l’image, \(b_h\) peut être à peu près \(0,3 \) car la hauteur de ce carré rouge est à peu près \(30 \)% de la hauteur totale de l’image, et \(b_w\) peut être à peu près \(0,4 \) car la largeur de la boîte rouge est à peu près \(0,4 \) de la largeur totale de l’image entière.

Définition de l’étiquette cible \(y\)

Formalisons cela un peu plus en termes de définition de l’étiquette cible \(Y\) pour cela en tant que tâche d’apprentissage supervisée. Définissons l’étiquette cible \(Y\). Ce sera un vecteur où le premier composant \(p_c\) va montrer s’il y a un objet. Si l’objet est un piéton, une voiture ou une moto, \(p_c\) sera égal à 1, et s’il s’agit de la classe d’arrière-plan (si ce n’est aucun des objets que nous avons détectés), alors \(p_c\) sera \(0\). Nous pouvons penser que \(p_c\) représente la probabilité qu’il y ait un objet, la probabilité qu’une des classes que nous essayons de détecter soit là, autre chose que la classe d’arrière-plan.

Notre vecteur \(y\) serait le suivant:

yy = \begin{bmatrix} p_{c}\\b_{x}\\b_{y}\\b_{h}\\b_{w}\\c_{1}\\c_{2}\\c_{3}\end{bmatrix}

Ensuite, s’il y a un objet, nous voulons sortir \(b_x\), \(b_y\), \( b_h\) et \(b_w\), la boîte englobante de l’objet que nous avons détecté. Et enfin, s’il y a un objet, donc si \(p_c = 1\), nous voulons aussi sortir \(C1\), \(C2\) et \(C3\) qui dit est-ce le \(class1\), \(class 2\) ou \(class 3\), autrement dit est-ce un piéton, une voiture ou une moto. Nous supposons que notre image n’a qu’un seul objet et que le plus grand de ces objets apparaît dans l’image de cette classification avec un problème de localisation. Passons en revue quelques exemples.

Si \(x\) est une image d’ensemble d’entraînement, alors \(y\) aura le premier composant \(p_c = 1\) car il y a un objet, alors \(b_x\), \(b_y\), \(b_h\) et \(b_w\) spécifieront la boîte englobante. Donc, notre ensemble de formation sur les étiquettes, nous aurons besoin de boîtes englobantes dans les étiquettes.

Et enfin c’est une voiture, donc c’est \(classe 2\). \(C_1= 0\) parce que ce n’est pas un piéton, \(C_2 = 1\) parce que c’est une voiture, \(C_3= 0 \) car ce n’est pas une moto. Parmi \(C_1, C_2, C_3\) au plus l’un d’eux doit être égal à \(1\).

yy = \begin{bmatrix} 1\\b_{x}\\b_{y}\\b_{h}\\b_{w}\\0\\1\\0 \ end {bmatrix} $$

Et s’il n’y a pas d’objet dans l’image? Dans ce cas \(p_c = 0\) et le reste des éléments de ce vecteur peuvent être n’importe quel nombre, car s’il n’y a pas d’objet dans cette image, peu nous importe quelle boîte englobante du réseau de neurones sort ainsi que lequel des trois objets \(C_1, C_2, C_3\) il pense à cela.

yy = \begin {bmatrix} 0\\?\\?\\?\\?\\?\\?\\? \end{bmatrix} $$

 Image de voiture (à gauche) - image de nature (à droite)

Exemples d’images dans un ensemble d’entraînement

Étant donné un ensemble d’exemples d’entraînement étiquetés, voici comment nous le construisons: \(x\) l’image d’entrée ainsi que \(y\) la classe étiquettent les deux images où il y a un objet et pour les images où il n’y a pas d’objet, et l’ensemble de ceux-ci définira ensuite notre ensemble d’entraînement.

Fonction de perte

Enfin, décrivons la fonction de perte que nous utilisons pour entraîner le réseau de neurones. L’étiquette de vérité au sol était \(y\), et le réseau neuronal émet un \(\hat {y} \) ce que devrait être la perte.

$$L\left(\hat{y}, y\right) = \left(\hat{y}_{1}-y_{1}\right) ^{2} +\left(\hat{y}_{2}-y_{2}\right) ^{2} +…+\left(\hat{y}_{8}-y_{8}\right) ^{2}, y_{1}=1 $$

$$ L\left(\hat{y}, y\right) = \left(\hat{y} _{1}-y_{1}\right) ^{2}, y_{1}=0 $$

Notez que \(y\) a ici \(8 \) composants (la première ligne de la fonction de perte), donc cela va de la somme des carrés de la différence des éléments, et c’est la perte si \(y_1 = 1 \). C’est le cas où il existe un objet so \(y_1\) =\(p_c\). Donc, s’il y a un objet dans l’image, la perte peut être la somme des carrés sur tous les différents éléments.

L’autre cas est if\(y_1= 0.\) C’est si cela \(p_c = 0 \), dans ce cas, la perte peut être juste \(\hat{y_1} \) moins \(y_1\) au carré car dans ce second cas, tous les autres composants ne sont pas importants. Tout ce qui nous intéresse, c’est la précision avec laquelle le réseau de neurones sort \(p_c\) dans ce cas.

Juste un récapitulatif

Si \(y_1 = 1 \), alors nous pouvons utiliser l’erreur au carré pour pénaliser l’écart au carré par rapport au prédicteur par rapport aux sorties réelles pour les huit composantes, alors que si \(y_1 = 0 \) alors nous ne nous soucions pas des sept valeurs restantes. Tout ce qui nous importe, c’est de savoir avec quelle précision notre réseau de neurones estime \(y_1\) qui est égal à \(p_c\). Juste comme un commentaire secondaire pour ceux d’entre vous qui veulent connaître tous les détails. Nous avons utilisé l’erreur au carré juste pour simplifier la description ici, en pratique, nous pourrions probablement utiliser une perte de probabilité pour le \(C1\enspace, C2 \enspace, C3 \enspace\) à la sortie \(softmax\) mais, lors du calcul des loos, l’erreur au carré fonctionnera bien.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.