Object Detection API を使用して既存のモデルを利用して自前のデータを転移学習してみました。
アノテーションデータはアノテーションツールVoTTで作成していますが、プログラムでJSONファイルと画像を直接読み込みAPIにパラメータとして渡す方式にしました。アノテーションツールに応じたパッケージもありますが今回は勉強用のサンプルなので基本的なAPIで作成しています。
(1)概要
①学習用プログラム
アノテーションツール Vott で作成されたデータのうちプログラムで定義されたものを対象とし、対象となるタグ・ラベルはプログラム中で定義します。
最初に学習用アノテーションデータの入った作業用フォルダ選択するウインドウを開きます。
今回はまずネコ(ラベルはローマ字で”neko”)とウサギ(“usagi”)を学習させてみました。
フォルダ内には以下のサブフォルダが存在する必要があります。
train 学習用アノテーションデータ(今回はVoTTで作成)
work 作業用、確認用画像が出力される
元となる学習済みモデルは、ssd_resnet50_v1_fpn_640x640_coco17_tpu-8を使用しています。
http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_resnet50_v1_fpn_640x640_coco17_tpu-8.tar.gz
②テストプログラム
学習結果をテストするプログラムです。
対象となるタグ・ラベルは学習用プログラムで同じ(今回は”neko”と”usagi”)であることを前提としています。
保存した学習結果とテスト用データの入った作業用フォルダ選択するウインドウを開きます。
フォルダ内には以下のサブフォルダが存在する必要があります。
ckpt 学習用プログラムで保存された学習済みのチェックポイント等
test 学習結果をテストする画像用
result テスト結果出力
(2)学習用データ
学習用データと実行結果をまとめたzipファイルです。
オブジェクト検出_転移学習.zip(200MB)
(学習用の画像ファイルとアノテーションは train フォルダに入っています。ラベルは日本語ローマ字でネコは”neko”、ウサギは”usagi”としています。)
(3)プログラム
「深層学習 Ubuntu 20.04 に TensorFlow Object Detection API をインストール」で構築した開発環境と動作環境を使用しています。
Pythonプログラム(テキストファイル UTF-8)
①学習用プログラム
ObjectDetectionLearn.py
②テストプログラム
ObjectDetectionTest.py
(4)解説
学習用プログラム ObjectDetectionLearn.py では、関数 selectAnnotationFiles, getJsonAnnotationで、
フォルダ選択とアノテーションJSONファイルの一覧読込を行います。
アノテーションデータは選択されたフォルダ配下のtrainフォルダあることを前提としています。
VottのアノテーションデータのうちJSONファイルのタグと座標(”regions”の”tags”,”boundingBox”)を利用しています。
“tags”がプログラムの先頭にある labelNames配列で定義された名前と一致するデータのみ抽出しています。
読み込んだデータをTensorFlow Object Detection API のパラメータ形式に変換して利用しています。
(5)テスト結果
テストプログラムを実行した結果の一部です。
まだ学習用のデータが少なく精度は低いですがある程度の検出はできるようになりました。
今回はアノテーションツールVoTTを想定してプログラムを作りましたが、
プログラムの読み込み部分変更すれば別のデータフォーマットにも対応するプログラムも作成できると思います。
(2025/05/10 Shin Onda)
参考:
https://qiita.com/john-rocky/items/6ad6aeed65fa71f92e1b