konchangakita

KPSを一番楽しんでいたブログ 会社の看板を背負いません 転載はご自由にどうぞ

アノテーションツール VoTT を使って YOLOv5 の学習データセットを作る

これまでに作った マスク検出はマスクをしていない時の誤検知(マスクしていると判定)が気になったので精度を上げるべく、自作のデータセットを作ってもっと学習させてみたくなりました

というわけで、今回はデータセットを作るためのアノテーションツールにトライです
f:id:konchangakita:20200823135126p:plain

アノテーション(英語:annotation)とは、あるデータに対して関連する情報(メタデータ)を注釈として付与すること。XML等の記述形式を用いてメタデータをタグ付けする場合が多い。付与したメタデータやタグを指してアノテーションという場合もある。(Wikipediaより)


自作か特殊なツールをつかいこなす職人芸なのかと思っていましたが、フリーのアノテーションツールを使うことで意外に簡単にできるようです
(それでも大変なのは大変なんですが)


アノテーションの流れ】
1.画像の用意
2.アノテーションツールでタグ付け
3.コンフィグファイル(jsonなど)が出来上がる
4.データセット(画像とコンフィグファイルのセット)の完成
5.データセットを使って学習


アノテーションツールはいくつか存在していますが、Microsoft VoTT(Visual Object Tagging Tool)を使ってみます
https://github.com/Microsoft/VoTT/

labelImgというのが有名で使いやすいみたいなのですが、VoTTも バージョン2以降だいぶよくなったとのこと

VoTTインストール

各種OS用のパッケージはこちらから入手(今回はWindowsで使用)
Releases · microsoft/VoTT · GitHub

SaaS版もあるようです
https://vott.z22.web.core.windows.net/#/

ダウンロードした「vott-2.2.0-win32.exe」を実行すると、インストールされつつ起動します
(勝手にCドライブ使われる好きじゃない)
f:id:konchangakita:20200822162511p:plain:w300
f:id:konchangakita:20200821085849p:plain


VoTTでアノテーション(タグ付け)する

プロジェクト作成

まずは新規プロジェクト作ってみます
f:id:konchangakita:20200821090107p:plain

プロジェクトの設定

ソース接続でアノテーションする画像フォルダを選択して、プロジェクト
ターゲット接続も画像と同じフォルダでよいです
(この後の変換の為に、画像ファイル名はすべて英数半角でスペース無しが良いです)
f:id:konchangakita:20200821090305p:plain

プロジェクトが出来上がるとソースフォルダ内の画像がされる
f:id:konchangakita:20200822163559p:plain

タグ付け

まずは右側でタグを作ります
f:id:konchangakita:20200821093007p:plain

後は検出した場所を囲んで、タグ付けしていくだけです
f:id:konchangakita:20200821093145p:plain

簡単ねっ
こんな感じで学習させる用の画像にすべてタグ付けします
全てタグ付けが終わると、ターゲットに指定したフォルダ(今回は画像フォルダと同じ)に.vottと.jsonファイルができています
このコンフィグファイルと画像を合わせて、学習用のデータセットになります


roboflow でYOLOv5用のデータセットへ変換

YOLOv5で学習するにはここでもうひと手間必要になります。
VoTTで出力された .json形式は、YOLOv5 では読み込めません。いわゆるYOLOv5形式へ変換してやる必要あります

そこで登場するのが、最初のマスク学習用のデータセットをいただいた roboflowのサイトです
データセットを入手するだけではなく、作ることもできるんですね
How To Convert VoTT JSON to YOLOv5 PyTorch TXT
f:id:konchangakita:20200822211733p:plain

ここに書かれている手順に沿って、作ってみましょう

データセットの作成

アカウントを作った後、「Create Dataset」します
「Dataset Type」は「Object Detection」で、Annotation Groupは何に使うかよく分かっていないので、なんでもよいです
f:id:konchangakita:20200822212510p:plain

アップロード

VoTT でタグ付けした画像と jsonファイル全部をドラッグ&ドロップします
f:id:konchangakita:20200822213102p:plain

アップロードデータの確認

画像にjsonファイルの内容に沿ってバウンディングボックスが適用されていることが確認できます
ファイル名や画像の形式が対応していないとこのバウンディングボックスが表示されないので、ここで削除しておくのが良いです
全て確認したらFinish Upload
f:id:konchangakita:20200822232516p:plain

学習用、検証用、テスト用に自動的分けてくれるので、デフォルトでよいでしょう
f:id:konchangakita:20200822233256p:plain

YOLOv5用のデータセット作成

アップロードが終わるとデータセットの画面にきます
YOLOv5用のデータセットを作成する為に「Generate」しましょう
f:id:konchangakita:20200823001418p:plain

ここでようやく YOLOv5を選んで、YOLOv5用のデータセットが完成です
f:id:konchangakita:20200823002737p:plain


新しいデータセット学習してみる

オレンジが前回で緑が今回のデータセットの学習経過
全体的に正答率があがり、LOSSが減ってきているので、精度が向上しているようです
f:id:konchangakita:20200823012040p:plain

<before>追加の学習前は mask 判定されていた
f:id:konchangakita:20200812213634j:plain
<after>ジダンさん(疑惑の二重判定)と横の人も無事 no-mask になりました
f:id:konchangakita:20200823011603j:plain