yolactを実装してみる


環境

  • CUDA V10.0.130
  • Python 3.7.3
  • gcc 7.3.0
  • Pytorch 1.2.0

セットアップ

git clone https://github.com/dbolya/yolact.git
cd yolact
pip install opencv-python pillow==6.2.1 pycocotools matplotlib
pip install cython
pip install torch==1.2.0 torchvision==0.4.0    # CUDA10.0で安定

yolact++を使用する場合、DCNv2をコンパイル

cd external/DCNv2
python setup.py develop

学習済みモデルで推論

  1. 学習済みモデルをダウンロード
    https://drive.google.com/file/d/15id0Qq5eqRbkD-N3ZjDZXdCvRyIaHpFB/view?usp=sharing
  2. 推論を実行

    • 画像
    python eval.py 
        --trained_model=weights/yolact_base_54_800000.pth  
        --score_threshold=0.15 
        --top_k=15 
        --images=path/to/input/folder:path/to/output/folder
    
    • 動画
    python eval.py 
        --trained_model=weights/yolact_base_54_800000.pth 
        --score_threshold=0.15 
        --top_k=15 
        --video_multiframe=4 
        --video=input_video.mp4:output_video.mp4
    

オリジナルデータで学習

  1. coco形式でデータセットを準備
dataset_name/
├── test
│   ├── test.json
│   └── images/
└── train
    ├── train.json
    └── images/
  1. 学習前のモデルをダウンロード

  2. configファイルを修正(2箇所)
    まずデータベース定義を記入して、

    data/config.py
        test_dataset = dataset_base.copy({
            'name': 'Test Dataset',
    
            'train_images': '~/dataset_name/train/images/',
            'train_info':   '~/dataset_name/train/train.json',
    
            'valid_images': '~/dataset_name/test/images/',
            'valid_info':   '~/dataset_name/test/test.json',
    
            'has_gt': True,
            'class_names': ('class_1', 'class_2', 'class_3', ...),    # クラス名を定義
            'label_map': {'class_id_1': 1, 'class_id_2': 2, ...}    # class idの辞書
        })
    

    次にデフォルトのconfigファイルを変更して終了。

    data/config.py
        yolact_base_config = coco_base_config.copy({
            'name': 'yolact_base',
    
            # Dataset stuff
            # 'dataset': coco2017_dataset,    # default
            'dataset': test_dataset,    # Original Dataset
    
            # 'num_classes': len(coco2017_dataset.class_names) + 1,
            'num_classes': len(test_dataset.class_names) + 1,
        })
    
  3. 学習

    • モデルに応じてconfigは変更
    • save_folder内に初期モデル(resnet50-19c8e357.pth)を格納
    python train.py --config=yolact_plus_resnet50_config --save_folder=/path/to/workspace/ --save_interval=1000
    
  4. モデル精度評価

    • 以下のコードで評価できる。
    • --output_coco_json を末尾につけると、~/results/以下にjsonファイルを生成できる。
    python eval.py --trained_model=weights/yolact_base_54_800000.pth