■環境
OS: Ubuntu 16.04 LTS
GPU: GeForce GTX 1080 Ti
※pythonでopencv-pythonとCUDAが利用できる環境が整っている前提ですので、まだの場合は下記の必要そうな部分だけご参考にして頂ければと思います。
Ubuntu16.04を入れたばかりの状態からkerasとchainerでCUDAを使えるようにする
pythonでopencvとdlibを使う
■準備
・pytorchのインストール
公式: https://pytorch.org/get-started/locally/
get startedのページで項目を設定するとインストールコマンドが表示されますので、そのまま実行します。
今回はCUDA9.0が入っている環境でしたのでそのように選択しました。
1 2 3 |
CUDA9.0 Python 3.x pip3 install torch torchvision |
※condaを使用せず、下記の様にpipでインストールしましたが、その辺は適宜。
※pip install tqdm 入れろと言われるかも。
インストール後、一度確認します。
1 2 3 4 5 6 7 |
$ python Python 3.6.4 (default, Jul 21 2018, 03:58:11) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import torch >>> torch.cuda.is_available() True |
■本題
・M2Detをダウンロード
1 2 |
git clone https://github.com/qijiezhao/M2Det.git $ cd M2Det<br />M2Det$ sh make.sh |
M2Det512_vggという学習済みモデルが公開されていますのでそれを利用します。
場所は、https://github.com/qijiezhao/M2Det.git に記載されています。baidu cloudとgoogle driveに置かれているようですが、今回はgoogle driveにあったものを使用しました。
ダウンロードしたモデルファイル(m2det512_vgg.pth)を weights/ というディレクトリに置くだけでOK。
1 |
python demo.py -c=configs/m2det512_vgg.py -m=weights/m2det512_vgg.pth --show |
※pip install addict 入れろと言われるかも。
・実行
1 |
python demo.py -c=configs/m2det512_vgg.py -m=weights/m2det512_vgg.pth --show |
imgs/にある画像ファイルを処理して、結果が表示されます。
カメラ入力もできます。
1 |
python demo.py -c=configs/m2det512_vgg.py -m=weights/m2det512_vgg.pth --cam 0 --show |
・結果
・学習
学習についてはgithubの情報だけではよく分からなかったのですが、下記サイトに大変分り易く掲載されていて助かりました。ありがとうございます。
https://taktak.jp/2019/04/02/4014
モデルのダウンロード
1 2 |
wget https://s3.amazonaws.com/amdegroot-models/vgg16_reducedfc.pth mv vgg16_reducedfc.pth weights |
データセットのダウンロード
1 2 3 4 5 6 7 |
$ git clone https://github.com/amdegroot/ssd.pytorch.git $ cd ssd.pytorch/ $ sh data/scripts/COCO2014.sh で ~/data/coco/ にダウンロードされます。 結構時間かかります。 coco以外にも VOC2007.sh VOC2012.shがあります。 |
data/annotations/annotations/
をdata/annotations/に移動。
同じ場所に、instances_valminusminival2014.json.zipをダウンロード
1 |
~/data/coco/annotations$ wget https://github.com/insikk/coco_dataset_trainval35k/blob/master/instances_valminusminival2014.json.zip?raw=true -O instances_valminusminival2014.json.zip |
M2Det/configs/m2det512_vgg.pyを修正
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
train_cfg = dict( cuda = True, warmup = 5, # per_batch_size = 16, per_batch_size = 4, <ーバッチサイズを小さくする lr = [0.004, 0.002, 0.0004, 0.00004, 0.000004], gamma = 0.1, end_lr = 1e-6, step_lr = dict( COCO = [90, 110, 130, 150, 160], VOC = [100, 150, 200, 250, 300], # unsolve ), print_epochs = 10, num_workers= 8, ) |
M2Det/data/coco.pyを修正
1 2 3 4 5 6 |
def __init__(self, root, image_sets, preproc=None, target_transform=None, dataset_name='COCO'): self.root = root self.data_path = os.path.join(os.path.expanduser("~"),'data') # self.cache_path = os.path.join(self.data_path, 'coco_cache') self.cache_path = os.path.join(self.data_path, 'coco') <ーcoco_cacheからcocoに変更 |
学習開始
1 |
CUDA_VISIBLE_DEVICES=0 python train.py -c=configs/m2det512_vgg.py -m=weights/m2det512_vgg.pth --ngpu 1 -t True |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
---------------------------------------------------------------------- | M2Det Training Program | ---------------------------------------------------------------------- ===> Constructing M2Det model Loading base network... Initializing weights for [tums, reduce, up_reduce, leach, loc, conf]... ===> Loading Dataset... loading annotations into memory... Done (t=7.02s) creating index... index created! train2014 gt roidb loaded from /home/xxx/data/coco/train2014_gt_roidb.pkl loading annotations into memory... Done (t=2.86s) creating index... index created! valminusminival2014 gt roidb loaded from /home/xxx/data/coco/valminusminival2014_gt_roidb.pkl ===> Training M2Det on COCO Time:Fri Nov 1 16:34:17 2019||Epoch:1||EpochIter:0/29571||Iter:0||Loss_L:3.1704||Loss_C:20.8680||Batch_Time:9.3703||LR:0.0000010 Time:Fri Nov 1 16:34:22 2019||Epoch:1||EpochIter:10/29571||Iter:10||Loss_L:3.0560||Loss_C:20.9586||Batch_Time:0.4797||LR:0.0000013 Time:Fri Nov 1 16:34:27 2019||Epoch:1||EpochIter:20/29571||Iter:20||Loss_L:3.4198||Loss_C:20.8480||Batch_Time:0.4832||LR:0.0000015 ・・・ Time:Fri Nov 1 17:28:20 2019||Epoch:1||EpochIter:6260/29571||Iter:6260||Loss_L:2.5971||Loss_C:5.0464||Batch_Time:0.5105||LR:0.0001703 Time:Fri Nov 1 17:28:25 2019||Epoch:1||EpochIter:6270/29571||Iter:6270||Loss_L:3.0284||Loss_C:7.3703||Batch_Time:0.5012||LR:0.0001706 Time:Fri Nov 1 17:28:30 2019||Epoch:1||EpochIter:6280/29571||Iter:6280||Loss_L:3.1658||Loss_C:7.3469||Batch_Time:0.4878||LR:0.0001709 |
1080Ti 1個では学習は現実的ではありませんでした。