Introduction

前回の続き。
今回は学習を行ってみます。

How to

公式によると下記のコマンドで学習できるとのこと。

1
python train.py -c=configs/m2det512_vgg.py --ngpu 4 -t True  

しかしこのコマンドはTensorBoradを使った学習になります。
つまりTensorFlowが必要になります。
必要ない場合は

1
python train.py -c=configs/m2det512_vgg.py --ngpu 4  

でOK。
**–npgu**引数は利用するGPUの数。4個をサンプルとして表記しておくあたり、どれだけリソースを使うのか、とビクビクします。

モデルファイル

まず、pretrainedモデルをダウンロードします。
これは前回ダウンロードしたものとは異なります。
公式リンクにも書いておらず、ファイル名から検索をかけた結果、下記のページにリンクが書いてありました。

1
wget https://s3.amazonaws.com/amdegroot-models/vgg16_reducedfc.pth mkdir weights mv vgg16_reducedfc.pth weights

データセット

データセットをダウンロードします。しかし、これも公式には書いていません。
上述のssd.pytorchでスクリプトが用意されています。

1
git clone https://github.com/amdegroot/ssd.pytorch  

そして、このリポジトリにある下記のスクリプトからデータセットをダウンロードします。

  • COCO
    • ./data/scripts/COCO2014.sh
    • ~/data にダウンロードされる
  • VOC2007
    • ./data/scripts/VOC2007.sh
    • ~/data にダウンロードされる
  • VOC2012
    • ./data/scripts/VOC2012.sh
    • ~/data にダウンロードされる

必要に応じてシンボリックリンクで退避するなど工夫する

1
ln -s /media/hdd/work/data ~/data  

ダウンロード完了後、

し、data/coco.pyを下記のように変更します。

1
2
3
4
5
6
7
    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')
self.image_set = image_sets

そして前述の学習コマンドを実行します。

1
$ python train.py -c=configs/m2det512_vgg.py --ngpu 1  

がいろいろエラーが。

エラー1

data/coco.py を直していない時のエラー

1
2
3
4
5
6
7
8
9
10
11
12
creating index...
index created!
Traceback (most recent call last):
File "train.py", line 58, in
dataset = get_dataloader(cfg, args.dataset, 'train_sets')
File "/media/hdd/work/local/M2Det/utils/core.py", line 93, in get_dataloader
getattr(cfg.dataset, dataset)[setname], _preproc)
File "/media/hdd/work/local/M2Det/data/coco.py", line 65, in __init__
self.annotations.extend(self._load_coco_annotations(coco_name, indexes,_COCO))
File "/media/hdd/work/local/M2Det/data/coco.py", line 101, in _load_coco_annotations
with open(cache_file, 'wb') as fid:
FileNotFoundError: [Errno 2] No such file or directory: '/home/takuya/data/coco_cache/train2014_gt_roidb.pkl'

エラー2

バッチサイズが大きすぎる。
configs/m2det512_vgg.pyper_batch_size を小さくする

1
2
3
4
5
6
7
8
9
10
11
12
13
===> Training M2Det on COCO
Traceback (most recent call last):
File "train.py", line 86, in
out = net(images)
File "/media/hdd/Ubuntu18.04/python/M2Det/lib/python3.6/site-packages/torch/nn/modules/module.py", line 477, in __call__
result = self.forward(*input, **kwargs)
File "/media/hdd/work/local/M2Det/m2det.py", line 106, in forward
x = self.base[k](x)
File "/media/hdd/Ubuntu18.04/python/M2Det/lib/python3.6/site-packages/torch/nn/modules/module.py", line 477, in __call__
result = self.forward(*input, **kwargs)
File "/media/hdd/Ubuntu18.04/python/M2Det/lib/python3.6/site-packages/torch/nn/modules/conv.py", line 301, in forward
self.padding, self.dilation, self.groups)
RuntimeError: CUDA error: out of memory

これらを超えて学習が始まりましたが、まったく終わりません。
COCOのデータの画像数が多いのもありますが、1080だとバッチサイズ4が限界で、1epoch回すのに6hかかりました。
なので学習は断念しました。