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.
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é à).
[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
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.
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.
CPU Intel(R) Core(TM) i7-7700 3.60GHz
・ Windows 10 Professionnel 1909 ・ Python 3.6.6 ・ Numpy 1.17.3 ・ Opencv-contrib-python 4.1.1.26 ・ Scikit-learn 0.21.3
Le programme implémenté est publié sur GitHub.
ssmd_boundingbox.py
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")
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)
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.
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
Recommended Posts