Les modèles de classification d'images que nous avons abordés jusqu'à présent prenaient une image et produisaient un résultat catégorique, comme la classe 'nombre' dans un problème MNIST. Cependant, dans de nombreux cas, nous ne voulons pas seulement savoir qu'une image représente des objets - nous voulons pouvoir déterminer leur emplacement précis. C'est précisément l'objectif de la détection d'objets.
Image tirée du site web YOLO v2
Supposons que nous voulions trouver un chat sur une image. Une approche très naïve de la détection d'objets serait la suivante :
- Diviser l'image en plusieurs carreaux.
- Effectuer une classification d'image sur chaque carreau.
- Les carreaux qui produisent une activation suffisamment élevée peuvent être considérés comme contenant l'objet en question.
Image tirée du cahier d'exercices
Cependant, cette approche est loin d'être idéale, car elle ne permet à l'algorithme de localiser la boîte englobante de l'objet que de manière très imprécise. Pour une localisation plus précise, nous devons effectuer une sorte de régression pour prédire les coordonnées des boîtes englobantes - et pour cela, nous avons besoin de jeux de données spécifiques.
Cet article de blog offre une excellente introduction à la détection de formes.
Vous pourriez rencontrer les jeux de données suivants pour cette tâche :
- PASCAL VOC - 20 classes
- COCO - Common Objects in Context. 80 classes, boîtes englobantes et masques de segmentation
Alors que pour la classification d'images, il est facile de mesurer la performance de l'algorithme, pour la détection d'objets, nous devons mesurer à la fois la justesse de la classe et la précision de la localisation de la boîte englobante inférée. Pour cette dernière, nous utilisons ce qu'on appelle Intersection over Union (IoU), qui mesure à quel point deux boîtes (ou deux zones arbitraires) se chevauchent.
Figure 2 tirée de cet excellent article de blog sur IoU
L'idée est simple : nous divisons la zone d'intersection entre deux figures par la zone de leur union. Pour deux zones identiques, IoU serait égal à 1, tandis que pour des zones complètement disjointes, il serait égal à 0. Sinon, il variera de 0 à 1. Nous considérons généralement uniquement les boîtes englobantes pour lesquelles IoU dépasse une certaine valeur.
Supposons que nous souhaitons mesurer à quel point une classe d'objets donnée
- Considérer la courbe Précision-Rappel qui montre la précision en fonction d'une valeur seuil de détection (de 0 à 1).
- En fonction du seuil, nous détecterons plus ou moins d'objets dans l'image, avec des valeurs de précision et de rappel différentes.
- La courbe ressemblera à ceci :
Image tirée de NeuroWorkshop
La précision moyenne pour une classe donnée
Nous ne considérons que les détections pour lesquelles IoU dépasse une certaine valeur. Par exemple, dans le jeu de données PASCAL VOC, on suppose généralement que
Image tirée de NeuroWorkshop
La principale métrique pour la détection d'objets est appelée précision moyenne globale, ou mAP. Il s'agit de la valeur de la précision moyenne, moyennée sur toutes les classes d'objets, et parfois aussi sur
Il existe deux grandes catégories d'algorithmes de détection d'objets :
- Réseaux de propositions de régions (R-CNN, Fast R-CNN, Faster R-CNN). L'idée principale est de générer des régions d'intérêt (ROI) et d'exécuter un CNN sur celles-ci, en recherchant une activation maximale. Cela ressemble un peu à l'approche naïve, à l'exception que les ROI sont générées de manière plus intelligente. L'un des principaux inconvénients de ces méthodes est qu'elles sont lentes, car nous avons besoin de nombreux passages du classificateur CNN sur l'image.
- Méthodes en un seul passage (YOLO, SSD, RetinaNet). Dans ces architectures, nous concevons le réseau pour prédire à la fois les classes et les ROI en un seul passage.
R-CNN utilise Selective Search pour générer une structure hiérarchique de régions ROI, qui sont ensuite passées par des extracteurs de caractéristiques CNN et des classificateurs SVM pour déterminer la classe de l'objet, et une régression linéaire pour déterminer les coordonnées de la boîte englobante. Article officiel
Image tirée de van de Sande et al. ICCV’11
Images tirées de cet article de blog
Cette approche est similaire à R-CNN, mais les régions sont définies après l'application des couches de convolution.
Image tirée de l'article officiel, arXiv, 2015
L'idée principale de cette approche est d'utiliser un réseau neuronal pour prédire les ROI - le Réseau de propositions de régions. Article, 2016
Image tirée de l'article officiel
Cet algorithme est encore plus rapide que Faster R-CNN. L'idée principale est la suivante :
- Nous extrayons des caractéristiques à l'aide de ResNet-101.
- Les caractéristiques sont traitées par une carte de score sensible à la position. Chaque objet des
$C$ classes est divisé en$k\times k$ régions, et nous entraînons le réseau à prédire des parties d'objets. - Pour chaque partie des
$k\times k$ régions, tous les réseaux votent pour les classes d'objets, et la classe d'objet avec le vote maximum est sélectionnée.
Image tirée de l'article officiel
YOLO est un algorithme en temps réel en un seul passage. L'idée principale est la suivante :
- L'image est divisée en
$S\times S$ régions. - Pour chaque région, CNN prédit
$n$ objets possibles, les coordonnées de la boîte englobante et la confiance=probabilité * IoU.
Image tirée de l'article officiel
- RetinaNet : article officiel
- Implémentation PyTorch dans Torchvision
- Implémentation Keras
- Détection d'objets avec RetinaNet dans les exemples Keras
- SSD (Single Shot Detector) : article officiel
Poursuivez votre apprentissage dans le cahier suivant :
Dans cette leçon, vous avez exploré rapidement les différentes façons dont la détection d'objets peut être réalisée !
Lisez ces articles et cahiers sur YOLO et essayez-les par vous-même :
- Un bon article de blog décrivant YOLO
- Site officiel
- YOLO : Implémentation Keras, cahier étape par étape
- YOLO v2 : Implémentation Keras, cahier étape par étape
- Détection d'objets par Nikhil Sardana
- Une bonne comparaison des algorithmes de détection d'objets
- Revue des algorithmes de Deep Learning pour la détection d'objets
- Introduction étape par étape aux algorithmes de détection d'objets de base
- Implémentation de Faster R-CNN en Python pour la détection d'objets











