Ce dépôt présente le modèle Mask R-CNN destiné à la ségmentation d'instances dans des images RGB. L'implémentation est reprise de ce dépôt.
La segmentation d'instance vise à grouper l'ensemble des pixels qui appartiennent à un seul et même objet. Elle est plus complexe que la segmentation sémantique qui groupe l'ensemble des pixels qui appartiennent à une catégorie d'objets (e.g voitures, personnes,...)
Dans un environnement virtuel créé à l'aide d'Anaconda, les outils nécessaires peuvent être installés grâce aux commandes suivantes:
pip install -r requirements.txt
python setup.py install
Plusieurs exemples d'entraînement sont disponibles dans le dépôt de base. Ce dépôt propose un nouvel exemple de segmentation sur le dataset Cityscapes. Les archives "gtFine_trainvaltest.zip" et "leftImg8bit_trainvaltest.zip" sont nécessaires pour l'entraînement.
Dans le cas de Cityscapes, le modèle apprend à segmenter 9 types d'objets:
- Background
- Person
- Rider
- Car
- Truck
- Bus
- Train
- Motorcycle
- Bike
La commande suivante permet de lancer une procédure de fine-tuning d'un modèle pré-entraîné sur coco:
python cityscapes.py train --dataset /media/ambroise/cvdatasets/cityscapes/ --model coco --log /path/to/log
Les paramètres du modèle pré-entraîné peuvent être téléchargés à cette adresse. Le fichier doit être placé à la racine du projet (i.e dans le dossier "InstanceSegmentation").
Le script prediction_example.py permet de tester le modèle sur une image. Les poids du modèle sont disponibles ici:
python prediction_example.py --weights path/to/weights/file --image_path path/to/test/image/file
Si les dimensions de l'image test ne correspondent pas à celles du dataset Cityscapes (1024x2048), alors, le script modifie la taille de l'image et la sauve sous le nom "testimage"_resized.png. La sortie est une image 16-bit avec les différents objets identifiés par le modèle. Les valeurs attribuées aux pixels des instances sont de la forme "xxyyy" dans laquelle "xx" correspond à l'identifiant de la classe (selon la logique définie ici) et "yyy" correspond au numéro de l'instance. Par exemple, pour une image contenant deux voitures, les valeurs possibles des pixels dans le masque seront: "26000" et "26001". L'ordre des voitures est choisi arbitrairement.