[PYTHON] À propos de la méthode d'apprentissage avec les données originales de CenterNet (Objects as Points)

Qu'est-ce que CenterNet?

CenterNet est une méthode de détection d'objets proposée dans l'article Objects as Points.

Etant donné que la taille de la largeur et de la hauteur est prédite après la détection du centre de l'objet en tant que point caractéristique, il semble avoir des avantages tels qu'un calcul plus léger que la méthode conventionnelle.

Je veux faire la même chose que j'ai essayé de détecter la position des joueurs de tennis, des balles et des courts en utilisant CenterNet, et je fais ceci et cela avec CenterNet. ..

Bien qu'il s'agisse de CenterNet, le code source est publié sur Github, et les inférences à l'aide du modèle entraîné peuvent être effectuées en suivant le Readme. Cependant, il n'y avait pas beaucoup d'explications et d'informations sur l'apprentissage des données originales, donc c'était un peu difficile de procéder. J'ai écrit un article simple pour partager des mémos de travail. Je suis heureux que vous puissiez l'utiliser comme référence.

environnement

Ubuntu 18.04 PyTorch 0.4.1

Préparation du jeu de données

Je veux détecter le joueur avant et le joueur arrière dans l'image du match de tennis. ・ Le lecteur sur la face avant est "Player Front" ・ "Player Back" pour le joueur à l'arrière J'ai créé les données d'annotation en les étiquetant comme.

15129_0.png

Je l'ai créé à l'aide d'un outil appelé labelImg, qui est généré sous forme de fichier xml au format Pascal VOC. Les données d'annotation CenterNet ne peuvent lire que les fichiers json au format COCO, vous devez donc convertir le fichier xml en fichier json. Si vous êtes dans la même situation, veuillez vous référer à l'article que j'ai écrit Conversion d'un fichier xml au format Pascal VOC en fichier json au format COCO. Si.

L'ID de catégorie est ・ PlayerFront: 1 ・ PlayerBack: 2 Je l'ai attribué comme.

Pour les données d'annotation, créez les deux fichiers suivants, les données d'entraînement et les données de test. Veuillez noter que si les noms de fichiers sont différents, un message d'erreur "fichier non trouvé" sera affiché pendant l'apprentissage. -Pascal_trainval0712.json: ensemble de données au format COCO qui stocke les informations de données d'entraînement -Pascal_test2007.json: ensemble de données au format COCO qui stocke les informations de données de test

Les deux fichiers de données d'annotation sont stockés de manière à ce que la structure du répertoire soit ↓. CenterNet/data/voc/annotations/ |--pascal_trainval0712.json |--pascal_test2007.json

Placez ensuite les données d'image dans le répertoire images. CenterNet/data/voc/images/ |--**.jpg

Modification du code source

Réécrivez self.class_name sur la 30ème ligne de pascal.py en fonction de l'ID de catégorie attribué.

/src/lib/datasets/dataset/pascal.py


    # self.class_name = ['__background__', "playerup", "playerdown", "bird", "boat",
    #  "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", 
    #  "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", 
    #  "train", "tvmonitor"]
    self.class_name=['__background__', "playerFront", "playerBack"]

Apprenez avec l'ensemble de données préparé

python main.py ctdet --exp_id pascal_dla_384 --dataset pascal --num_epochs 500 --lr_step 50,100,200,300,400

À propos des arguments Apprenez avec la détection d'objets ctdet (CenterNet) --exp_id Spécifiez le réseau pascal_dla_384, pascal_dla_512, pascal_resdcn18_384, pascal_resdcn18_512, etc. Veuillez vous référer à MODEL ZOO Pascal VOC pour le tableau de correspondance du nombre recommandé de GPU pour chaque modèle. --dataset pascal Apprendre avec la méthode pascal VOC (20 cours) --num_epocks ** Apprenez avec le nombre d'époques ** --lr_step 50,100,200,300,400 ~~ Enregistrez le modèle au moment du numéro d'époque 50,100,200,300,400 ~~ Le taux d'apprentissage devient 1/10 au moment de l'époque spécifié.

Si le nombre de données d'apprentissage est petit, il existe une forte possibilité qu'un modèle d'entraînement insuffisant puisse être créé même si l'apprentissage est effectué par la méthode ci-dessus. Dans ce cas, il est préférable de s'entraîner avec un réglage fin, qui s'entraîne en outre en utilisant le modèle entraîné.

--load_model Spécifie le modèle entraîné avec le nom de fichier comme argument. Le modèle entraîné peut être téléchargé sur MODEL_ZOO.md.

Pour un réglage précis, j'ai fait référence aux problèmes de Github, Transfert d'apprentissage sur un très petit jeu de données # 307.

python main.py ctdet --exp_id pascal_dla_384 --dataset pascal --num_epochs 500 --lr_step 50,100,200,300,400 --load_model ../models/ctdet_pascal_dla_384.pth

Les fichiers journaux et les modèles d'entraînement sont stockés dans / exp / ctdet / pascal_dla_384 /.

inférence

Faites des inférences à l'aide du modèle entraîné. Modifiez le code dans CenterNet / src / lib / utils / debugger.py avant d'effectuer l'inférence. Puisqu'il y a une déclaration de pascal_class_name à la ligne 439, changez-la en "PlayerFront" et "PlayerBack".

Ensuite, l'inférence est exécutée par la commande suivante.

python demo.py ctdet --demo ../data/voc/images/**.jpg --dataset pascal --load_model ../exp/ctdet/pascal_dla_384/model_last.pth --debug 2

--debug 2 Vous pouvez vérifier non seulement l'image du résultat de la détection, mais également l'image de la carte thermique.

Recommended Posts

À propos de la méthode d'apprentissage avec les données originales de CenterNet (Objects as Points)
Analyse des données de pratique Python Résumé de l'apprentissage que j'ai atteint environ 10 avec 100 coups
Points clés de «Machine learning avec Azure ML Studio»
À propos du prétraitement des données des systèmes utilisant l'apprentissage automatique
Implémentation de la méthode de clustering k-shape pour les données de séries chronologiques [Apprentissage non supervisé avec python Chapitre 13]
À propos de l'apprentissage avec Google Colab
À propos de la gestion des données d'Anvil-App-Server
À propos de la taille des points dans matplotlib