あなたがドッキングウィンドウコンテナで、独自のデータ・セットのmmdetectionトレーニングを使用するためのステップバイステップティーチ

Mmdetection容器を使用するmmdetection簡便な方法を使用している、本明細書中にインストールおよび構成を説明mmdetectionドッカーインストールされていません。このようなプロセスは、そのモデルのトレーニングに焦点を当て、直接インストールmmdetectionの必要性を排除します!

あなたがあなた自身のドッキングウィンドウとmmdetection、検索に非常に精通していない場合、私はそれらを繰り返すことはしません。

ここではGitHubのアドレスのmmdetectionを添付:

https://github.com/open-mmlab/mmdetection

0.準備

まず、デフォルトでは、コンピュータはすでにこれらの以下の準備作業を行っています。

  • Ubuntuの16.04以上
  • GPU
  • インストールのCUDA
  • インストールcudnn
  • インストールのドッキングウィンドウ
  • NVIDIA-ドッキングウィンドウをインストールします。

もちろん、あなたが企業や学校のサーバに接続され、サーバは上記の点を準備するために行われている場合、あなただけのリストにXshell Telnetサーバを必要とします。

1.準備:mmdetectionでドッカミラーをダウンロード

まず、我々は良いmmdetection環境ドッキングウィンドウ構成されたミラーを見つける必要があります。あなたはまた、端末に直接コマンドを使用することができ、キーワード検索など「mmdetection」とdockerhub上で実行することができますdocker search検索:

$ docker search mmdetection

結果は以下の通りで示されている:
ここに画像を挿入説明
ここでは、の使用、また、非常に簡単であるvistart / mmdetection鏡像ドッカーのダウンロード方法の最初の行を選択しdocker pull、画像リポジトリから指定された画像内のプル。

$ docker pull vistart/mmdetection

ネットワークは問題ありません場合は、ダウンロードが数分で完了します。ダウンロードが完了したらvistart / mmdetectionイメージがローカルミラーの上に植えられている場合、我々は見ることができます:

$ docker images

ここに画像を挿入説明
あなたはvistart / mmdetectionイメージが正常にダウンロードされている見ることができます。

mmdetectionを含む新しいコンテナを作成します。2.

mmdetection画像がうまくダウンロードされている含まれ、次のステップは、使用する新しいドッキングウィンドウコンテナを作成することです:

$ docker run --runtime=nvidia --name mm_prj -i -t vistart/mmdetection /bin/bash

上記のコマンド説明する:--runtime=nvidia非常に重要な、メイクGPUの新しいドッキングウィンドウコンテナは、ホスト・マシンを使用することができますが、この引数はCPUのデフォルトを使用せずに、ある; --name mm_prjという名前の新しいドッキングウィンドウのコンテナで、名前はmm_prjあり、読者は自分自身を変更することができます。

新しいインターフェイスコンテナは、以下のように後:
ここに画像を挿入説明
この時点では、と呼ばれるmm_prjコンテナが開かれています。あなたはそれがmmdetectionドッカミラーが設置されていることを示し、ディレクトリがすでにmmdetectionディレクトリが含まれていることがわかります。

彼は加えました:

また、容器の運転中に、コンテナを終了するためにいくつかを追加します。

終了コンテナ:

# exit

既存のコンテナを表示します。

$ docker ps -a

ここに画像を挿入説明
あなたが見ることができ、mm_prjという名前のドッキングウィンドウコンテナは、コンテナリストにありました。

オープンコンテナ:

$ docker start mm_prj
$ docker exec -i -t mm_prj /bin/bash

3.インポートし、独自のデータVOC

この時点で、我々はパスカルVOC形式にパッケージ化されたデータを所有する必要があります。ディレクトリ構成は以下のように:

VOCdevkit
--VOC2007
----Annotations
----ImageSets
------Main
----JEPGImages

注釈は、.xmlファイルに格納されている簡単な、JEPFImagesは.jpgの画像に格納されます。

このフォーマットによると、独自のトレーニングデータを配置した後、セグメンテーションは、トレーニングとテストデータが必要です。VOCdevkitのtest.pyのディレクトリに新しいファイルを作成します。test.pyは述べています:

import os
import random

trainval_percent = 0.8
train_percent = 0.8
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets\Main'
total_xml = os.listdir(xmlfilepath)

num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)

ftrainval = open('ImageSets/Main/trainval.txt', 'w')
ftest = open('ImageSets/Main/test.txt', 'w')
ftrain = open('ImageSets/Main/train.txt', 'w')
fval = open('ImageSets/Main/val.txt', 'w')

for i in list:
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        ftrainval.write(name)
        if i in train:
            ftrain.write(name)
        else:
            fval.write(name)
    else:
        ftest.write(name)

ftrainval.close()
ftrain.close()
fval.close()
ftest.close()

トレーニングセットとして上記のコード分割データセット、trainval 80%、テスト20%、テストセットとして。

ファイル名を指定して実行test.py、VOCdevkit / ImageSets /メインディレクトリ内に次の3つのファイルが生成されます:
ここに画像を挿入説明
オープンファイルあなたが見ることができる、trainval.txtのサンプルインデックスは、test.txtのは、試験サンプルのインデックスのすべてが含まれ、すべてのトレーニングが含まれています。

それらのVOCデータが行われた後、/ mmdetection /データ/ディレクトリを低下させるためにホスト(Ubuntuの)からコピーされます。

$ docker cp VOCdevkit mm_prj:/mmdetection/data/

4. [変更class_names.pyファイル

打开 /mmdetection/mmdet/core/evaluation/class_names.py 文件,修改 voc_classes 为将要训练的数据集的类别名称。如果不改的话,最后测试的结果的名称还会是’aeroplane’, ‘bicycle’, ‘bird’, ‘boat’,…这些。改完后如图:
ここに画像を挿入説明

5. 修改 voc.py 文件

打开 mmdetection/mmdet/datasets/voc.py 文件,修改 VOCDataset 的 CLASSES 为将要训练的数据集的类别名称。
ここに画像を挿入説明
如果只有一个类,要加上一个逗号,否则将会报错。

6. 修改配置文件

mmdetection 中提供了很多目标检测模型可供使用。例如,进入 /mmdetection/config/ 目录,就会看到很多模型:
ここに画像を挿入説明
根据我们选择使用的模型,修改相应的配置文件。本文我们使用的是FasterRCNN 模型,修改的是 faster_rcnn_r50_fpn_1x.py 文件。

6.1 修改 num_classes 变量

打开 faster_rcnn_r50_fpn_1x.py,将 num_classes 变量改为:类别数 + 1(例如我有 20 类,因此改为 21):
ここに画像を挿入説明

6.2 修改 data_settings

因为 faster_rcnn_r50_fpn_1x.py 默认使用的是 coco 数据集格式,我们要对其修改成相应的 VOC 数据格式。修改后的内容如下图所示:
ここに画像を挿入説明

6.3 调整学习率

本文使用单 gpu 训练,修改 img_per_gpu = 2,workers_per_gpu = 0。
ここに画像を挿入説明
对学习率的调整,一般遵循下面的习惯:

  • 8 gpus、imgs_per_gpu = 2:lr = 0.02;
  • 2 gpus、imgs_per_gpu = 2 或 4 gpus、imgs_per_gpu = 1:lr = 0.005;
  • 4 gpus、imgs_per_gpu = 2:lr = 0.01

这里,我们只使用单 gpu,且 img_per_gpu = 2,则设置 lr = 0.00125。
ここに画像を挿入説明
这里说一下 epoch 的选择,默认 total_epoch = 12,learning_policy 中,step = [8,11]。total_peoch 可以自行修改,若 total_epoch = 50,则 learning_policy 中,step 也相应修改,例如 step = [38,48]。
ここに画像を挿入説明
至此,配置文件已修改完毕。

7. 模型训练

模型训练非常简单,只需一行命令:

python3 ./tools/train.py ./configs/faster_rcnn_r50_fpn_1x.py

注意执行上面的命令是在 /mmdetection 目录下。

如果有多个 gpu,例如 0, 1 号 gpu 都可用,则可以全部用起来训练,命令如下:

CUDA_VISIBLE_DEVICES=0,1 python3 ./tools/train.py ./configs/faster_rcnn_r50_fpn_1x.py --gpus 2

上面的 --gpus 2 表示使用的 gpu 个数为 2。如果使用多块 gpu,注意修改学习率 lr。

然后,训练就开始了:

ここに画像を挿入説明
从打印出的信息中,可以看到当前的 epoch 和 loss 值。

每个 epoch 会生成一个模型,并自动保存在 /mmdetection/work_dirs/faster_rcnn_r50_fpn_1x/ 目录下。
ここに画像を挿入説明
训练完成之后,latest.pth 即 epoch_12.pth 就是最终的模型。

8. 模型测试,计算 mAP

下面我们将使用训练好的模型对测试集进行验证,并计算 mAP。

8.1 生成 pkl 文件

首先,生成 pkl 文件:

python3 ./tools/test.py ./configs/faster_rcnn_r50_fpn_1x.py ./work_dirs/faster_rcnn_r50_fpn_1x/latest.pth --out=result.pkl

8.2 计算测试集 mAP

对测试集计算 mAP,只需一行命令:

python3 ./tools/voc_eval.py result.pkl ./configs/faster_rcnn_r50_fpn_1x.py

计算结果如下:
ここに画像を挿入説明
图中可以看到,最后计算的 mAP = 0.978。

公開された251元の記事 ウォンの賞賛1024 ビュー137万+

おすすめ

転載: blog.csdn.net/red_stone1/article/details/103717757