[PYTHON] Computer Vision: Object Detection Part1 - Prétraitement de la boîte englobante

Cible

Nous avons résumé la détection d'objets à l'aide du Microsoft Cognitive Toolkit (CNTK).

Dans la première partie, nous préparerons la détection d'objets à l'aide de Microsoft Cognitive Toolkit. Nous utiliserons les Microsoft Common Objects in Context (COCO) fournis par Microsoft comme ensemble de données de formation pour la détection d'objets.

Je vais les présenter dans l'ordre suivant.

  1. Détection d'objets par réseau neuronal
  2. Prétraitement de la boîte englobante
  3. Clustering de dimensions pour créer une boîte d'ancrage
  4. Création d'un fichier à lire par le lecteur intégré fourni par CNTK

introduction

Détection d'objets par réseau neuronal

La détection d'objets est à peu près divisée en deux systèmes, un système à 2 étages qui détecte les zones candidates puis les classe, et un système à 1 étape qui détecte et classe les zones candidates en même temps, et il y a un compromis entre précision et vitesse. Il est bien connu que c'est le cas.

En particulier pour la détection d'objets qui nécessite du temps réel, un système à 1 étage à grande vitesse est adopté.

Par conséquent, cette fois, en utilisant des fonctionnalités de plusieurs couches telles que SSD [1], nous suivons l'algorithme de YOLO [2] pour apprendre la boîte englobante et la classification. Entraînez votre réseau de détection d'objets en temps réel avec votre modèle.

L'image d'entrée est une image couleur BGR d'une taille de 416x416, et le réseau neuronal convolutif de base (CNN) a Computer Vision: Image Classification Part2-Training CNN model. Utilisez le CNN original (coco21) formé à).

Prétraitement de la boîte englobante

[Computer Vision: Image Classification Part1 --Understanding COCO dataset](https://qiita.com/sho_watari/items/bf0cdaa32cbbc2192393#coco-%E3%83%87%E3%83%BC%E3%82%BF%E3% 82% BB% E3% 83% 83% E3% 83% 88% E3% 81% AE% E8% A7% A3% E6% 9E% 90) Comme indiqué dans l'image Microsoft COCO, le cadre de sélection et son Des informations sur les 80 catégories de la boîte englobante sont données. [3]

L'algorithme de YOLO est utilisé pour détecter la zone candidate où se trouve l'objet. Par conséquent, en tant que prétraitement, il est nécessaire de calculer les coordonnées du centre, la largeur et la hauteur de la boîte englobante incluse dans chaque image, et de convertir chacune au rapport lorsque la taille de l'image d'origine est 1. La structure du répertoire cette fois est la suivante.

COCO  |―COCO   |―train2014    |―COCO_train2014_000000000009.jpg    |―... MNIST NICS SSMD  ssmd_boundingbox.py coco21.h5

Regroupement de dimensions pour créer une boîte d'ancrage

Les boîtes englobantes se présentent sous de nombreuses formes, les boîtes d'ancrage sont donc un moyen de stabiliser l'apprentissage. [4]

Le SSD et YOLOv2 [5] utilisent tous deux des boîtes d'ancrage, et comme YOLOv2, la largeur et la hauteur de la boîte englobante incluse dans les données d'entraînement rendent typique l'utilisation du clustering k-means pour l'apprentissage non supervisé. Trouvez la largeur et la hauteur. J'ai mis le nombre de boîtes d'ancrage à cinq.

Création d'un fichier qui stocke des images, des cadres de délimitation et des catégories utilisées pour l'apprentissage

Ce dont vous avez besoin cette fois est un fichier texte d'ImageDeserializer qui lit les images utilisées pour la formation et CFTDeserializer qui lit le cadre de sélection et l'étiquette de catégorie correspondant à chaque image. ImageDeserializer et CTFDeserializer sont respectivement les lecteurs intégrés de CNTK. Pour ImageDeserializer, [Computer Vision: Image Classification Part1 --Understanding COCO dataset](https://qiita.com/sho_watari/items/bf0cdaa32cbbc2192393#%E8%A7%A3%E8% AA% AC), CTFDeserializer est introduit dans Computer Vision: Image Caption Part1 --STAIR Captions Faire.

Cependant, cette fois, je veux apprendre plusieurs cadres de délimitation et catégories qui existent dans une image en même temps, donc une certaine ingéniosité était nécessaire pendant la formation. Nous présenterons ces idées dans la partie 2 de la formation proprement dite.

la mise en oeuvre

Environnement d'exécution

Matériel

CPU Intel(R) Core(TM) i7-7700 3.60GHz

Logiciel

・ Windows 10 Professionnel 1909 ・ Python 3.6.6 ・ Numpy 1.17.3 ・ Opencv-contrib-python 4.1.1.26 ・ Scikit-learn 0.21.3

Programme à exécuter

Le programme implémenté est publié sur GitHub.

ssmd_boundingbox.py


Commentaire

Je vais extraire et compléter certaines parties du programme à exécuter.

Étant donné qu'une seule image se voit attribuer plusieurs étiquettes de catégorie et cadres de délimitation, conservez l'ID d'image en tant que clé au format dictionnaire.

ssmd_boundingbox.py


bbox_dict = {}
for ann in annotations:
    image_id = ann["image_id"]
    category_id = ann["category_id"]
    bbox = ann["bbox"]
    bbox.append(categories[str(category_id)][0])

    bbox_dict.setdefault(image_id, []).append(bbox)

Pour le cadre de délimitation correct, normalisez les coordonnées du centre (x, y) et la largeur / hauteur sur [0, 1] avec la largeur / hauteur d'origine.

ssmd_boundingbox.py


box = [(bbox[0] + bbox[2] / 2) / width, (bbox[1] + bbox[3] / 2) / height, bbox[2] / width, bbox[3] / height]

Enfin, le regroupement de k-moyennes est effectué pour la largeur et la hauteur de tous les cadres de délimitation.

dimension_clustering


def dimension_clustering(bounding_boxes, num_anchors):
    centroid, label, _ = k_means(bounding_boxes, num_anchors)

    np.save("anchor_boxes.npy", centroid)
    print("\nSaved anchor_boxes.npy")

résultat

Lorsque le programme est exécuté, les coordonnées du centre et la largeur / hauteur de la boîte englobante, l'étiquette de catégorie correspondant à la boîte englobante sont écrites, et enfin la largeur d'une boîte englobante typique obtenue par regroupement de k-means à partir de toutes les boîtes englobantes. Et enregistrez la hauteur dans un fichier Numpy.

Now 10000 samples...
Now 20000 samples...
...
Now 80000 samples...

Number of samples 82081

Saved anchor_boxes.npy

La largeur et la hauteur de la boîte d'ancrage obtenue cette fois sont les suivantes. Trié par ordre croissant et affiché avec 2 nombres valides, la case d'ancrage est illustrée dans la figure ci-dessous.

(0.06, 0.08)
(0.19, 0.28)
(0.31, 0.67)
(0.66, 0.35)
(0.83, 0.83)

dimension_clustering.png

Maintenant que vous avez créé la boîte d'ancrage et le fichier texte à utiliser pour la formation, la partie 2 vous formera au réseau de détection d'objets de bout en bout à l'aide de CNTK.

référence

Microsoft COCO Common Objects in Context

Computer Vision : Image Classification Part1 - Understanding COCO dataset Computer Vision : Image Classification Part2 - Training CNN model Computer Vision : Image Caption Part1 - STAIR Captions

  1. Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, and Alexander C. Berg. "SSD: Single Shot MultiBox Detector", arXiv preprint arXiv:1512.02325 (2016). European Conference on Computer Vision. 2016, pp 21-37.
  2. Joseph Redmon, Santosh Divvala, Ross Girshick, and Ali Farhadi. "You Only Look Once: Unified, Real-Time Object Detection", The IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2016, pp 779-788.
  3. Tsung-Yi Lin, Michael Maire, Serge Belongie, Lubomir Bourdev, Ross Girshick, James Hays, Pietro Perona, Deva Ramanan, C. Lawrence Zitnick, and Piotr Dollár. "Microsoft COCO: Common Objects in Context", European Conference on Computer Vision. 2014, pp 740-755.
  4. Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun. "Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks", In Advances in Neural Information Processing Systems (NIPS). 2015, pp 91-99.
  5. Joseph Redmon and Ali Farhadi. "YOLO9000: better, faster, stronger", The IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2017, pp 7263-7271.

Recommended Posts

Computer Vision: Object Detection Part1 - Prétraitement de la boîte englobante
Vision par ordinateur: détection d'objets - Suppression non maximale
Vision par ordinateur: Détection d'objets Part2-Détecteur multi-coup unique
Vision par ordinateur: segmentation sémantique, partie 2 - segmentation sémantique en temps réel
[Didacticiel PyTorch ⑧] Didacticiel de mise au point de la détection d'objets Torch Vision
Vision par ordinateur: segmentation sémantique, partie 1: pré-formation ImageNet VoVNet