前提・実現したいこと
①上記のリンク内容の記事に従って、yolov3で独自データを学習させました。
カテゴリは一つ(下記画像に写っているゴマパン)にし、100枚をアノテーションして学習させました。voc_classes.txtの中身は「goma」です。
そして下記のコードで実行してみましたが、オレンジと認識されてしまい、失敗しました。
python yolo_video.py --model logs/000/trained_weights_final.h5 --classes model_data/voc_classes.txt --image
ここで、下記のコードで同じ画像を認識させてみたところ、独自の重みを用いた上記のコードと同じ結果が出ました。
python yolo_video.py --image
どちらのコードでもゴマパンはオレンジと認識され、認識率も一緒でした。他に10枚ほど試しましたが、コードを変えても出力結果が同じでした。
これらの試した画像は訓練データです。にもかかわらずこのような結果となるのは訓練( train.py )がうまくいっていないからでしょうか。手順は参考記事通りに行っているため、どこで失敗しているかが詳しくわかりません。
②また、もう一つ質問があります。
yolov3で独自データで学習した物体を認識した場合、そのタグにはvoc_classes.txtに記入されているものが選ばれます(私の場合は「goma」)。しかし写った物体が独自学習したものでない場合は、cocoであらかじめ用意された80カテゴリのうちの一つから最も近いタグが選ばれるのでしょうか。それとも何も反応しないのでしょうか。
もし後者ならば、今回の私の結果のようにゴマパンをオレンジと認識することはない → 独自学習ができてないと考えられますよね。
他の方々のyolov3を使った独自物体検出の記事を見ても、アップされた写真は成功したものしかないので、そのあたりを知りたいです。
長くなりましたが、皆さまのお力添えを頂けると嬉しいです。
学習結果の確認
TensorBoardでのログのグラフ化
tensorboard --logdir logで参照したlogsの中には今までの学習結果に関する.h5のファイルなどがたまっていたので、今回のもの以外は移動しました。
リンク先の記事のグラフと比べると形が違う上val_lossの記録がありません。ここに問題がありそうです。
lossグラフの線にカーソルをかざすと、情報が表示されるのは一番下の線だけです。
該当のソースコード
githubから以下のyolov3フォーマットをダウンロードしました。
リンク内容
試したこと
最初は記事と同じように2カテゴリで20枚づつ用意して実験しました。しかしうまくいかなかったため、カテゴリを一つ減らし、画像を100枚に増やして実験しました。
mp4の動画も試しましたが、なかなか認識されず、認識されたとしても「cake」とでました。
補足情報(FW/ツールのバージョンなど)
windows10
anaconda
参考記事と異なる点
・使う写真・動画を正方形にした
・カテゴリが一つ(ゴマパン)
・データ数は100枚
・voc_annotation.pyで作成された1つのファイル 2007_train.txt の「2007_」を削除
→2007_val.txt、2007_test.txtはエラーが出なかったのでそのままです。
最初は2007_train.txt、2007_val.txt、2007_test.txt全てのの「2007_」を削除したと記入しましたが、上記の通り間違っていました。失礼しました。
###9月22日追記
meg_様のアドバイスに従い、訓練データのサイズを416×416にリサイズした後、同様の訓練を行いました。
しかし結果は芳しくなく、ゴマパンはオレンジと認識されたままでした。
なお、添付した上記の画像を認識しなおしたところ、オレンジの認識率が0.49から0.59になりました。
以下はリサイズ後の学習結果です。
回答2件
あなたの回答
tips
プレビュー