遅れ馳せながらYOLOv5
の転移学習をオリジナルのデータを使って実施してみたのですが、あまりの手軽さに驚きました。
ネット上にはYOLOv5
の転移学習に関する優れた事例や紹介記事が多数ありますので、ここではその内容については触れませんが、私のようにAIに関する知識が無い人でも、手順通りに実施すればオリジナルのAIモデルが作れてしまいます。すごい。
殆どの作業が自動化されているので、特に問題となるような事は少ないのですが、それらの事例をトレースした際に「ちょっと面倒だな」と感じたデータセットの変換処理に関して、より作業を簡略化できるようにpython
スクリプトを作成しました。
私はアノテーションツールとしてVoTT v2.2.0
を使用したのですが、出力されるデータセットのファイル形式がYOLOv5
用のファイル形式に対応していないため、別途変換する必要があります。
変換の方法はいろいろあるみたいですが、代表的な方法としては以下が挙げられます。
私の場合は、ネット上にデータを上げるのは少し気が引けたので、有志の方々が開発したスクリプト(ssaru氏やRyo-Kawanami氏)を利用させてもらったのですが、今回使用したケースではhoge.mp4#t=0.033333.xml
というようなドットが複数含まれるファイル名で問題が発生しました。
上記プログラムを一部書き換えれば適切に処理できることも確認したのですが、ディレクトリの指定方法などをより簡便に行いたかったので、勉強も兼ねてYOLO
用の変換スクリプトを自分で作成することにしました。
1. VoTT v2 によるデータセット(Pascal VOC形式)の生成
まずはVoTT
でタグ付けを行いデータセットを生成します。その際に、出力形式として「Pascal VOC
」を選択してエクスポートしてください。
VoTT
で指定した出力先に下記のような構成でデータセットが生成されていると思います。以下の例では****-PascalVOC-export
が変換データの解析を行う際のターゲットディレクトリとなります。
.
└── ****-PascalVOC-export
├── Annotations
│ └── ****.xml
├── ImageSets
├── JPEGImages
│ └── ****.jpg
└── pascal_label_map.pbtxt
2. 変換スクリプトによるYOLO形式ファイル(.txtと.yaml)の生成
作成したスクリプトを用いてアノテーションデータ(*xml)の変換を行います。
よろしければダウンロードしてご利用ください(動作は保証できませんが・・・)。
dataclasses
を利用しているのでPython3.7
以降の環境が必要です。またlxml
とpyyaml
を利用しているのでpip
等で導入してください。
2.1 使用方法
VoTTで出力したディレクトリをターゲットとして指定します。
ターゲットディレクトリが I:\origin_data\hoge-PascalVOC-export
の場合、実行例は下記のようになります。(デフォルトの変換ファイル出力先は.\yolo_out
です)
$ python vott2yolo_cv.py -t I:\origin_data\hoge-PascalVOC-export
その他のオプションは下記にてご確認ください。
$ python vott2yolo_cv.py -h
2.2 出力ファイル
指定したディレクトリ(.\yolo_out
)に、YOLO
形式のアノテーションデータ(*txt
)とdata.yaml
が生成されます。
以下は出力されるdata.yaml
の例です。
ファイル名や内容を適宜修正してご利用ください。
names:
- hoge
- fuga
nc: 2
train: data/train/images
val: data/valid/images
お疲れさまでした。