画像分類 - 困難な課題で予測精度を上げる
AIゆめ
画像分類 - MNISTで予測精度を試すに示した通り、画像分類(image classification)で良く知られた手書き数字を分類するMNISTでは、背景の映り込みがない7万枚の画像が使用されていますので、かなり高い精度で分類することが可能です。しかし、一般的な問題では、背景が映り込んだ、比較的少ないサンプル数の画像を用いて分類する必要があります。今回使用した画像は、TensorFlowのチュートリアルの
画像分類(Image classification)の問題を使用します。daisy(デイジー):633枚, dandelion(タンポポ):898枚, roses(バラ):641枚, sunflowers(ヒマワリ):699枚, tulips(チューリップ):799枚(合計3670枚)の画像を用いた画像分類問題です。なお、ここで使用される画像は、全てクリエイティブ・コモンズ・ライセンスで保護されているそうです。
画像分類は、脳画像から異常を見つけ出したり、商品画像から不良品を見つけ出したり、ネット画像から自社商品を見つけ出したりする目的などに活用できるでしょう。製造業・非製造業に拘わらず、画像分類の応用例をご覧になって、「自社の問題解決に応用できるのではないか?」と思われた方は、
ネオラクス・メール送信フォームからお気軽にご相談ください。AI技術を用いて、世の中にある様々な問題の解決に貢献して行きたいと思います。
画像分類 - 標準モデル
チュートリアルにある標準的なモデル、即ち、CNN(Conv2D)とMaxPooling2Dを3層に組み合わせた3層モデルでは、下図の通り過学習を起こしやすい傾向があるようです。青線が訓練データの精度とロス(交差エントロピー誤差)であり、オレンジ線が評価データ(今回は全データの20%とした)の精度とロスであり、オレンジ線が青線から離れると過学習が進んでいると判断できます。
標準的なモデルの学習状況
画像分類 - 4層モデル
標準的なモデルに1層加えた4層モデルモデルでは、少し過学習を起こしにくくなり、予測精度も多少向上しているようです。しかし、それでも80%以下の精度しか達成できていません。勿論、機械学習過程で、画像フリップ、回転、ズームなどの画像強調は全モデルで導入していますし、ドロップアウトも適宜導入しています。
4層モデルの学習状況
このモデルで、評価画像(テスト画像)の中の30枚の画像を分類した結果は、下図の通りです。30枚中6枚の分類に失敗しています(赤丸が分類ミス)。予測精度が80%以下なので、納得できる結果でしょう。画像タイトルの横にある数値は、AIモデルが算出したその画像の予測精度です(分類自信度のようなもの)。画像の予測精度をうまく使って、自信がない画像を外すなどの工夫を施せば、このモデルでも予測精度をかなり上げることができそうに思います。
4層モデルによる画像分類
画像分類 - 転移学習の活用
現段階で、モデルの改良を行っても、テストデータによる評価精度は80%程度が限界です。そこで、
TensorFlow Hub による転移学習を参考に、TensorFlow Hubにある、ImageNet ベンチマークデータセットで事前トレーニングされた分類器モデルを使用して、転移学習を行いました。標準モデルで訓練パラメーターは数644万個、4層モデルで330万個(全結合ニューラルネットワークに渡す前の変数が減るので層を増やしても訓練パラメーターは減少する)に対して、転移学習藻モデルではわずか6,405個(全パラメーター数は226万個)ですので、GPUを使用しなくても十分学習可能な範囲です。学習は10エポック程度で十分のようであり、精度も10%以上向上し90%を超えました。
転移学習の学習状況
精度が90%を超えましたので、30枚中3枚の分類ミスに半減しました。個別画像の予測精度がある閾値以上の値の画像のみに限定すれば、このモデルで100%に近い分類が可能になるように思います。転移学習では、ImageNetの学習情報を引き継いでいますので、効果抜群という感じです。どんどん使用して行きたいと思います。
転移学習による画像分類
画像分類 - 正解画像
縮小画像だと人間でも分類が難しい画像もありますので、正解画像を掲載しておきます。
分類の正解画像