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

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

ただいまの
回答率

88.79%

画像認識精度に対する疑問と改善方法について

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 869

sakura_hana

Unity総合1位

Tensorflow(Keras)を使ったマルチクラスの画像認識を試しています。
精度向上を目指して調査しているのですが、精度の出方に疑問があり困っています。

分類クラスは数千件、ImageGeneratorによる水増し、VGG16によるファインチューニングを行い、モデルの最終val_lossは0.1以下、検証結果はほぼ100%です。
以下、サンプル画像としていらすとやさんの素材を使用しています。(実際に使っている画像は写真なのですが、権利の関係でサンプルで失礼します)

学習元データは以下とします(ラベルは「サーバル」)。
イメージ説明

学習後、以下のような画像を認識させた場合、正しくサーバルと認識されません(全く別のラベル「ワニ」等が出る。サーバルは全く上位に来ない)。
イメージ説明

ですが以下のように「認識対象の画像に、学習元データを15%程透過した状態で重ねる」と「サーバル」とほぼ100%で認識されます。
(学習元データの透過率を100%にすると当然正しく認識出来ます)
イメージ説明

学習不足ならば透過状態でも認識出来ないでしょうし、
過学習だとしても元画像を15%程度加えたぐらいで認識出来るようになるものなのでしょうか?
(もしくは「それぐらい強固に過学習してしまっている」と見るべきなのでしょうか?)

人間の眼で見る分には、認識対象画像と元画像を重ねた画像で大きな差異は見当たりません。
他要因として、色味・ノイズ量・ぼかしなども確認しましたが影響は無さそうでした。
(参考までに、認識対象画像をモノクロにするとトップ5位ぐらいにサーバルが入るようになりますが、トップにはなりません)

通常の精度向上というと、学習時のパラメータ・水増し時のパラメータ・認識対象画像の調整になるかなと思いますが、上記の状態なのでどの方針で進むべきかもよく分かっていません。
何かしらヒントになるような情報だけでも貰えると嬉しいです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • tiitoi

    2019/05/14 16:37

    元データがないのでわかりませんが、学習画像の背景が似たようなものばかりで過学習しているのでは?
    背景の多様性は担保されていますか?

    キャンセル

  • sakura_hana

    2019/05/14 17:21

    「学習元データ」の方で言えば、縦長・横長の写真が混在しているので、横長は上下を黒・縦長は左右を黒で塗り潰して正方形にしてしまっています。更に水増し時にランダムの拡大縮小(zoom_range)とパースかけ(shear_range)を使っていて、その際出来た隙間も黒埋め(fill_mode='constant')しています。
    確かに影響ありそうなので直して試してみます。

    キャンセル

  • tiitoi

    2019/05/14 19:18

    > 「学習元データ」の方で言えば、縦長・横長の写真が混在しているので、横長は上下を黒・縦長は左右を黒で塗り潰して正方形にしてしまっています。

    それはよくないと思います。過学習の原因になります。
    画像の大きさが異なる画像を学習させる場合、通常はクロップして揃えるか、アスペクト比が多少崩れてもリサイズで対応します。
    画像がよほど縦長、横長でないならば、多少歪んでもリサイズしてサイズを揃えるのが一般的です。オーグメンテーションの際の黒埋めもよくないです。

    キャンセル

  • Q71

    2019/05/15 07:25

    それと、回転はどうですか?出されている例だと、回転しているようですが。

    キャンセル

回答 1

check解決した方法

0

アドバイスを受けて調整したら認識率がアップしました。
tiitoiさん、Q71さん、ありがとうございます。

■学習元データ
縦長・横長の写真が混在しているので、横長の場合は上下を、縦長の場合は左右を黒で塗り潰して正方形にしていました。
この塗り潰し部分が過学習を生んでいたようでした。
また、回転もさせていませんでした(他のやや傾いた画像だと認識出来ていたのですがマグレだったようです)。

■水増し内容を調整
・ランダムクロップを追加。
・ランダム回転を追加。
・隙間の「黒埋め(fill_mode='constant')」を「画像の端の色で塗り潰し(fill_mode='nearest')」に変更。
※なお、これらに加えて元々zoom_range、shear_range、brightness_rangeを加えてます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る