- アノテーションツールVOTTで出力したPascal VOC形式のXMLファイルをCOCO形式のJSONファイルへ変換するコード
- VOTTで定義されたtrainとvalに分割を考慮して、COCO形式のデータセットに変換する。
- 今回は以下のGithubの内容を改変して作成しました。コア部分はこちらのコードを使用させていただきました。
- https://github.com/Kazuhito00/convert_voc_to_coco
- tqdm
- natsort
pip install tqdm natsort
- convert_vott_voc2coco.pyのファイル構成は以下のようにします。
- 以下以外でも動くかもしれませんが、動作確認していません。
├─convert_vott_voc2coco.py
│
└─{you setting name}-PascalVOC-export
├─Annotations
├─ImageSets
│ └─Main
└─JPEGImages
- Annotationsにはxmlファイル(@@@.xml...)、ImageSets/Mainにはtxtファイル(@@@_train.txt, @@@_val.txt)、JPEGImagesには画像ファイル(@@@.jpg...)を格納
- 以下のコマンドで実行します。
python convert_vott_voc2coco.py {yo setting name}-PascalVOC-export
# ex)
python convert_vott_voc2coco.py yolox_test-PascalVOC-export
なお、デフォルトではクラス名がソートされますので、abc順になります。 クラス名の順番を指定したい場合は下記のように引数-cnの後にスペースで区切って指定の順番でクラス名を記載してください。
# ex)
python convert_vott_voc2coco.py yolox_test-PascalVOC-export -cn person car motorcycle
- 実行後、以下のフォルダが生成されます。{YYYYMMDD_HHMMSS}は日付・時刻です。
- annotationsフォルダに変換後のtrain、valのCOCO形式のjsonファイル(instances_train2017.json、instances_val2017.json)、train2017フォルダにtrain画像、val2017フォルダにval画像が保存されます。
─{YYYYMMDD_HHMMSS}_COCO_format
├─annotations
| ├─instances_train2017.json
| └─instances_val2017.json
├─train2017
| └─@@@.jpg
└─val2017
└─@@@.jpg
YOLOXのdatasetsに格納して、学習に活用することができます。