A certain engineer "COMPLEX"

開発メモ その170 M2DetをUbuntu18.04で使ってみる(学習編)

Introduction


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

How to


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


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

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


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

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

モデルファイル

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

A PyTorch Implementation of Single Shot MultiBox Detector - amdegroot/ssd.pytorch


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

データセット

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


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 にダウンロードされる

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


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

ダウンロード完了後、

  • COCO
    • ~/data/coco/annotations/annotations の中身を ** ~/data/coco/annotations** に移動 その場所に展開
    • ~/data/coco/images/train2014~/data/coco/images/val2014が存在することを確認
    • wget https://github.com/insikk/coco_dataset_trainval35k/blob/master/instances_valminusminival2014.json.zip?raw=true -O instances_valminusminival2014.json.zip
    • =/data/cocoで実行、展開、annotationsへ移動

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


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

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


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

がいろいろエラーが。

エラー1

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


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 を小さくする


===> 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かかりました。
なので学習は断念しました。

コメントを残す

メールアドレスが公開されることはありません。

%d人のブロガーが「いいね」をつけました。