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 学習モデルを公開しました.
- SSD[1]
- MultiTask DSSD(MT-DSSD)[2, 3]
- Python 3.x
- CUDA 8.x - 10.x
- OpenCV 3.x
- Chainer 5.x
- numpy
- numba
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
下記のURLからデータセット(png版)をダウンロードしてください.
- Web: http://mprg.jp/research/arc_dataset_2017_j
- Direct URL: http://www.mprg.cs.chubu.ac.jp/ARC2017/ARCdataset_png.zip
ダウンロード完了後,unzipして適当な場所に置いて下さい.
common_params.py
の下記の部分をデータセットのパスに書き換えて下さい.
# 学習画像のディレクトリ
images_dir = '<Your dataset path>'
※プログラム実行時にディレクトリを追加するようになったため,この手順は不要です.
データセットのディレクトリ内に,必要な空ディレクトリを作成します.
mkdirs.sh
を実行することで作成できます.引数にデータセットのパスを与えてください.
make_list.py
に,引数--mode 0
を与えて実行します.
python3 make_list.py --mode 0
img_name_list.txt
に教師データのファイル名一覧が保存されます.
本コードは学習前に予めData augmentationを行い,変換パラメータを保存します.
make_train_data.py
を実行して,Data augmentationを開始します.
python3 make_train_data.py
make_list.py
に,引数--mode 1
を与えて実行します.
python3 make_list.py --mode 1
augimg_name_list.txt
にData augmentation後の教師データのファイル名一覧が保存されます.
※Train_SSD.sh
を実行することで,共通手順4, 5, 6と学習を連続して行うことができます.
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) : 並列実行数.
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を用いる.
※Train_SSD_seg.sh
を実行することで,共通手順4, 5, 6とMT-DSSDの手順7, 8, 9, 10(学習)を連続して行うことができます.
セグメンテーション画像を学習用に変換する必要があります.
convertC2G_fast.py
を実行してください.
python3 convertC2G_fast.py
Data augmentation後の教師データとセグメンテーション教師データを紐付けるファイルを作成するために,make_seglabel_aug_param.py
を実行します.
python3 make_seglabel_aug_param.py
make_list.py
に,引数--mode 3
を与えて実行します.
python3 make_list.py --mode 3
seglabel_name_list.txt
に手順8で作成したファイルの名前一覧が保存されます.
Train_SSD_seg.py
を実行して下さい.メモリサイズが足りない旨のエラーが出た場合は,batchsize
を小さくしてください.
python3 Train_SSD_seg.py --batchsize 8 --epoch 150 --gpu 0 --loaderjob 8
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を用いる.
- [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.