[PYTHON] Annotez vos propres données pour entraîner Mask R-CNN

** Segmentation d'instance ** (détection d'objet + segmentation)

L'explication sur le masque R-CNN est omise. Veuillez vous référer à ce qui suit. [Introduction à la détection d'objets à l'aide de la dernière région CNN (R-CNN) ~ Qu'est-ce que la détection d'objets? R-CNN, Fast R-CNN, Faster R-CNN, Mask R-CNN ~](https://qiita.com / arutema47 / items / 8ff629a1516f7fd485f9)

L'implémentation Mask R-CNN utilise le référentiel suivant. https://github.com/facebookresearch/maskrcnn-benchmark

Création de données avec Labelme

https://github.com/wkentaro/labelme C'est fondamentalement la même chose que README.md ci-dessus Je vais résumer ci-dessous

Installation

Vous pouvez également le saisir avec $ pip install label me, mais comme vous utiliserez un script pour la conversion de données plus tard, faites git clone

.sh


$ git clone https://github.com/wkentaro/labelme.git
$ cd labelme
$ pip install -e .

Commencez

Créez class.txt avec les noms de classe répertoriés avec des sauts de ligne. Ajoutez «ignore» à la première ligne car vous pourriez obtenir une erreur lors de la conversion des données. Exemple:

classes.txt


__ignore__
person
bicycle
car
...

Commencez à m'étiqueter avec la commande suivante

.sh


$ labelme <Chemin du dossier de données> --labels <classes.chemin txt> --nodata

Annotation

Le site suivant sera utile. C'est très facile à annoter. Outil d'annotation de segmentation sémantique labelme

Conversion de format de données

Convertit les données d'annotation créées et l'image d'origine pour Mask R-CNN.

.sh


$ cd labelme/examplts/instance_segmentation
$ ./labelme2coco.py <Chemin du dossier de données> <Nom du répertoire à créer> --labels <classes.txt>

par ça <Nom du répertoire à créer> / JPEGImages ・ ・ ・ Répertoire contenant des images <Nom du répertoire à créer> / annotations.json ・ ・ ・ Fichier json avec informations d'annotation sera créé

Masque de trainrcnn

Installation

https://github.com/facebookresearch/maskrcnn-benchmark Installer ci-dessus selon README.md

Les articles suivants seront utiles. [Propre formation aux données avec Pytorch1.1 + MaskRCNN (1)](https://qiita.com/kuroyagi/items/e66ca85f8d118c07eb95#7-%E8%A8%93%E7%B7%B4%E3%81%97% E3% 81% 9F% E7% B5% 90% E6% 9E% 9C% E3% 82% 92% E4% BD% BF% E3% 81% A3% E3% 81% A6% E8% 87% AA% E5% 88% 86% E3% 81% A7% E6% 8E% A8% E8% AB% 96)

Placement des données

Placez les données dans une position où maskrcnn peut les lire

Créé ci-dessus JPEGImages, annotations.json À maskrcnn_benchmark / datasets / <nouveau nom de répertoire> / mis sur

Enregistrement des données

Ajoutez ce qui suit à DATASETS dans maskrcnn_benchmark / config / chemins_catalog.py

Veuillez inclure ** COCO ** dans ** "nouveau nom de données" ** pour indiquer qu'il est au format COCO.

.json


"Nouveau nom de données" : {
    "img_dir" : "<Nouveau nom de répertoire>"
    "ann_file" : "<Nouveau nom de répertoire>/annotations.json"
} 

Exécution de l'apprentissage

Avec le processus ci-dessus, enregistrez les données pour ** apprentissage ** et ** test **.

Vous devriez pouvoir commencer à apprendre à:

.sh


$ python tools/train_net.py --config-file configs/e2e_mask_rcnn_R_50_FPN_1x.yaml DATASETS.TRAIN "(\"<Nouveau nom de données(Pour apprendre)>\",)" DATASETS.TEST "(\"<Nouveau nom de données(pour le test)>\",)"

En spécifiant --config-file from configs /, vous pouvez spécifier une configuration telle que la structure du réseau. Si vous souhaitez modifier le ** taux d'apprentissage ** ou la ** taille du lot **, vous pouvez le modifier en l'écrivant au moment de l'exécution.

Exemple:

$ python tools/train_net.py --config-file configs/e2e_mask_rcnn_R_50_FPN_1x.yaml DATASETS.TRAIN "(\"<Nouveau nom de données(Pour apprendre)>\",)" DATASETS.TEST "(\"<Nouveau nom de données(pour le test)>\",)" SOLVER.BASE_LR 0.0025 SOLVER.IMS_PER_BATCH 2 TEST.IMS_PER_BATCH 1

SOLVER.BASE_LR: taux d'apprentissage au début de l'apprentissage (décroissant progressivement) SOLVER.IMS_PER_BATCH: Taille du lot pendant l'entraînement TEST.IMS_PER_BATCH: Taille du lot au moment du test

Tous les paramètres maskrcnn_benchmark/config/defaults.py Il est écrit.

point important

Un autre objet avec la même étiquette est reconnu comme un objet

Lors de la conversion des données de labelme, elles sont reconnues comme un objet par défaut. Si vous voulez qu'ils soient reconnus séparément, modifiez labelme2coco.py comme suit. https://github.com/wkentaro/labelme/issues/419#issuecomment-511853597

La segmentation se fait sur un seul objet

Il semble que toutes les étiquettes sont créées pour un objet par la version de Pytorch pendant l'apprentissage.

maskrcnn_benchmark/data/datasets/coco.py#L94 Parce que le comportement de est parfois inattendu target = target.clip_to_image (remove_empty = True) target = target.clip_to_image(remove_empty=False) Veuillez changer en.

C'est tout. Merci beaucoup!

Recommended Posts

Annotez vos propres données pour entraîner Mask R-CNN
Migrez vos propres données CMS vers WordPress
Entraînez Stanford NER Tagger avec vos propres données
Reliez ROS à votre propre protocole
Entraînez UGATIT avec votre propre jeu de données
Ajoutez votre propre vue de contenu à mitmproxy
Pour importer votre propre module avec jupyter
Comment installer votre propre autorité de certification (racine)
[Pour l'enregistrement] Système d'image Keras Partie 1: Comment créer votre propre ensemble de données?
Essayez de créer votre propre AWS-SDK avec bash
Comment définir votre propre cible dans Sage
Étapes pour installer votre propre bibliothèque avec pip
Mémo pour créer votre propre Box avec le Python de Pepper
Créez votre propre Big Data en Python pour validation
[Introduction à l'application Udemy Python3 +] 66. Création de votre propre exception
Essayez d'améliorer votre propre quiz d'introduction avec Python
Essayez de mettre des LED dans votre propre PC (légèrement)
[Road to Intermediate Python] Définissez dans votre propre classe
J'ai essayé d'interpoler le masque R-CNN avec un flux optique