質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

2回答

3886閲覧

yolo-v3で独自データを学習したが、認識結果が独自学習前と変わらない

tenki3

総合スコア3

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2020/09/21 09:24

編集2020/09/22 10:30

前提・実現したいこと

リンク内容

①上記のリンク内容の記事に従って、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になりました。
以下はリサイズ後の学習結果です。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/09/21 10:42

リンク先の「学習状況の確認」での質問者さんの学習後の画像を掲載してください。質問の文章だけでは状況を判断できません。
tenki3

2020/09/21 12:28

承知しました。 修正します。
meg_

2020/09/21 12:47

訓練データの画像のサイズは何ですか?
tenki3

2020/09/21 13:01

3024×3024です。 kbだと画像ごとに異なり、範囲は200~500kbくらいです。 サイズが大きすぎたのも原因でしょうか...
guest

回答2

0

train.pyには下記記述があります。

input_shape = (416,416) # multiple of 32, hw

3024×3024です。

画像サイズが合っていないことが訓練が上手く行っていないことの原因だと思います。

画像サイズを32の倍数にし、上記コード部分を画像サイズに修正して実行してみてください。

投稿2020/09/21 13:57

編集2020/09/21 13:59
meg_

総合スコア10580

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tenki3

2020/09/21 14:20

ありがとうございます! ご回答通りにやってみます
tenki3

2020/09/22 10:31

すみません。 リサイズしてやり直しましたが、上記の追記内容のようになってしまいました。
meg_

2020/09/22 10:41

> 画像を100枚に増やして実験しました。 上記についてはどのように増やしましたか? ネットから色々な「ゴマパン」の画像を取ってきたんでしょうか? 元々の20枚の画像を元に増やしたのでしょうか? あと、val_lossはどうなりましたか?
tenki3

2020/09/22 11:14 編集

画像はネットからではなく実物を用意して、それを角度を変えながら撮影したものです。水増しはしていません。ゴマパンは2個用意しました。 val_lossのグラフはTensorBoardに何も表示されませんでした。 anaconda pronptは学習後に一度再起動して消してしまったため、そこにでていたlossとかも確認し忘れてしまいました。以後は記録を残すよう気を付けます。
meg_

2020/09/22 11:15

他の物体(犬とか車とか)の画像で推定した場合はきちんと認識されますでしょうか?
tenki3

2020/09/22 11:22

はい。独自学習した重みを使っても使わなくても、yolo_video.pyで正しく認識されます。
meg_

2020/09/22 11:36

そうですか。lossは減少しているので学習はしていると思うんです。※まあlossが0になってるように見えるので過学習してそうですが、val_lossの情報がないので分かりません。
tenki3

2020/09/22 12:53

なるほど。 ひとまず画像数を変えてやってみたり、別の方法を試してみます。
guest

0

自己解決

リンク内容

こちらの方の記事を参考にしたところ、独自学習が問題なくできました!

投稿2020/10/03 14:21

tenki3

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問