Skip to content

machine-perception-robotics-group/MT-DSSD

Repository files navigation

MT-DSSD

Team MC^2 : ARC2017 RGB-D Dataset向けのサンプルコードです.

  • 2018/08/02 MIRU2018で発表するポスター(33.1MB)を公開中です.
  • 2018/08/08 ポスターに間違いが2件ありました.お詫びして訂正致します.
    • 提案手法/Loss function [L(y,c,g,s)] -> [L(y,c,l,s)]
    • 評価実験/評価サンプルの枚数 [20枚] -> [200枚]
  • 2018/08/27 学習モデルを公開しました.

Contents

  • SSD[1]
  • MultiTask DSSD(MT-DSSD)[2, 3]

Requirement

  • Python 3.x
  • CUDA 8.x - 10.x
  • OpenCV 3.x
  • Chainer 5.x
  • numpy
  • numba

Docker実行例:

cd Docker
sudo nvidia-docker build ./ -t cuda92_chainer5_1:latest
sudo nvidia-docker run --shm-size 8G -it -v /home/ryorsk:/home/ryorsk cuda92_chainer5_1:latest

Usage

SSD / MT-DSSD共通の手順

1. データセットのダウンロード

下記のURLからデータセット(png版)をダウンロードしてください.

ダウンロード完了後,unzipして適当な場所に置いて下さい.

2. データセットのパス設定

common_params.pyの下記の部分をデータセットのパスに書き換えて下さい.

# 学習画像のディレクトリ
images_dir = '<Your dataset path>'

3. データセットのディレクトリ追加

※プログラム実行時にディレクトリを追加するようになったため,この手順は不要です.

データセットのディレクトリ内に,必要な空ディレクトリを作成します. mkdirs.shを実行することで作成できます.引数にデータセットのパスを与えてください.

4. 教師データ一覧の取得

make_list.pyに,引数--mode 0を与えて実行します.

python3 make_list.py --mode 0

img_name_list.txtに教師データのファイル名一覧が保存されます.

5. Data augmentation

本コードは学習前に予めData augmentationを行い,変換パラメータを保存します. make_train_data.pyを実行して,Data augmentationを開始します.

python3 make_train_data.py

6. Data augmentation後の教師データ一覧の取得

make_list.pyに,引数--mode 1を与えて実行します.

python3 make_list.py --mode 1

augimg_name_list.txtにData augmentation後の教師データのファイル名一覧が保存されます.

SSDの手順

Train_SSD.shを実行することで,共通手順4, 5, 6と学習を連続して行うことができます.

7. 学習

Train_SSD.pyを実行して下さい.メモリサイズが足りない旨のエラーが出た場合は,batchsizeを小さくしてください.

python3 Train_SSD.py --batchsize 12 --epoch 150 --gpu 0 --loaderjob 8

下記の引数を与えることができます.

  • --batchsize (default = 8)
  • --epoch (default = 80)
  • --gpu (default = -1) : GPU ID.マイナス値にするとCPUを用いる.
  • --loaderjob (default = 4) : 並列実行数.

8. テスト

Test_SSD.pyの下記の部分を書き換えて下さい.

serializers.load_npz('<Your Trained Model Path>', ssd_model)

<Your Trained Model Path>に学習済みモデルのパスを入力します.

続いて,Test_SSD.pyを実行して下さい.指定されたパスにある指定された拡張子の画像すべてを用いてテストを行います.

python3 Test_SSD.py --dir '<Your Dataset Path>/test_known/rgb' --out './out' --type '.png' --gpu 0

下記の引数を与えることができます.

  • --dir (default='./') : テスト用画像のあるパス
  • --out (default='./out/') : 検出結果の出力先
  • --type (default='.jpg') : テスト用画像の拡張子
  • --gpu (default = -1) : GPU ID.マイナス値にするとCPUを用いる.

MT-DSSDの手順

Train_SSD_seg.shを実行することで,共通手順4, 5, 6とMT-DSSDの手順7, 8, 9, 10(学習)を連続して行うことができます.

7. セグメンテーション用画像の準備

セグメンテーション画像を学習用に変換する必要があります. convertC2G_fast.pyを実行してください.

python3 convertC2G_fast.py

8. セグメンテーション画像のファイル名取得

Data augmentation後の教師データとセグメンテーション教師データを紐付けるファイルを作成するために,make_seglabel_aug_param.pyを実行します.

python3 make_seglabel_aug_param.py

9. セグメンテーション画像ファイル名の一覧取得

make_list.pyに,引数--mode 3を与えて実行します.

python3 make_list.py --mode 3

seglabel_name_list.txtに手順8で作成したファイルの名前一覧が保存されます.

10. 学習

Train_SSD_seg.pyを実行して下さい.メモリサイズが足りない旨のエラーが出た場合は,batchsizeを小さくしてください.

python3 Train_SSD_seg.py --batchsize 8 --epoch 150 --gpu 0 --loaderjob 8

11. テスト

Test_SSD_seg_fast.pyの下記の部分を書き換えて下さい.

# 学習モデルのパス
MODEL_PATH = "`<Your Trained Model Path>"

<Your Trained Model Path>に学習済みモデルのパスを入力します.

続いて,Test_SSD_seg_fast.pyを実行して下さい.指定されたパスにある指定された拡張子の画像すべてを用いてテストを行います.

python3 Test_SSD_seg_fast.py --indir '<Your Dataset Path>/test_known/rgb' --outdir './out' --type '.png' --gpu 0

下記の引数を与えることができます.

  • --webcam (default = -1) : 1を指定するとWebCamから得られる画像を用いてリアルタイム検出を行います.
  • --indir : テスト用画像のあるパス
  • --outdir (default = './out/') : 検出結果の出力先
  • --type (default='.jpg') : テスト用画像の拡張子
  • --gpu (default = -1) : GPU ID.マイナス値にするとCPUを用いる.

Reference

  • [1] W. Liu, et al., “SSD: Single Shot MultiBox Detector”, ECCV, pp. 21–37, 2016.
  • [2] C. Fu, et al., “DSSD: Deconvolutional Single Shot Detector”, arXiv preprint arXiv:1701.06659, 2017.
  • [3] 荒木, et al., “マルチタスク学習を導入したDeconvolutional Single Shot Detectorによる物体検出とセグメンテーションの高精度化”, MIRU, 2018.