LoginSignup
39
39

More than 5 years have passed since last update.

YOLOv2を独自データセットで訓練する

Last updated at Posted at 2016-12-14

YOLOv2を自分で用意したデータで訓練する

YOLOv2はまだ論文も発表されていないが ソースコードがホームページで公開されているので自分のデータで訓練し試してみた
YOLO9000: Better, Faster, Strongerというタイトルで論文が発表されている

データセットの用意

画像と対応するアノテーションデータは用意済と仮定する
YOLOでは画像の座標ではなく割合で表現するのでデータを変換する必要がある
いままでのYOLO(Old YOLO)と同じデータフォーマットなのでこういったサイトを参考に用意する

cfgファイルの変更

出力クラス数に合わせて設定ファイルを変更する
今回はTiny YOLOを用いることとする

  • ラベルの設定ファイル

data/voc.namesを参考に作成
ペンと消しゴムの2クラスの場合は以下のようになる

my-dataset.names
pen
eraser
  • 使用するデータを指定するファイル

cfg/voc.dataを参考に作成
例を下に示す

my-dataset.data
classes = 2
train = data/my-dataset/train.txt
valid = data/my-dataset/test.txt
names = data/my-dataset.names
backup = ./backup
  • ネットワーク定義のファイル

cfg/tiny-yolo-voc.cfgを参考に作成
classesをデータセットに合わせて変更
その上のconvolutionalレイヤーのfiltersを以下の式から算出して変更
lerning_rate0.0001くらいがおすすめ
経験と勘で丁度良く設定
max_batchesも自由に設定(初期値でも問題なし)

filters = num * (classes + coords + 1)

例を以下に示す

my-dataset.cfg
[convolutional]
size=1
stride=1
pad=1
filters=35
activation=linear

[region]
anchors = 1.08,1.19,  3.42,4.41,  6.63,11.38,  9.42,5.11,  16.62,10.52
bias_match=1
classes=2
coords=4
num=5
softmax=1
jitter=.2
rescore=1

object_scale=5
noobject_scale=1
class_scale=1
coord_scale=1

absolute=1
thresh = .6
random=1

訓練する

darknetにtrainを引数で与えて訓練する
重みの初期値をdarknet.conv.weightsとするなら以下のように指定する
指定のbatch数ごとの重みのスナップショットがbackupに指定したディレクトリ以下に作成される

darknet detector train cfg/my-dataset.data cfg/my-dataset.cfg darknet.conv.weights

ウェブカメラを用いてリアルタイム検出する

YOLOのサイトにあるように以下のコマンドで実行

darknet detector demo cfg/my-dataset.data cfg/my-dataset.cfg my-dataset.weights
39
39
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
39