五郎島金時の形5種類をAIで画像判定するというチャレンジはまだ道半ば

この記事は約4分で読めます。

gorojimahanteikekkayouyaku.jpgこの夏から全景AIセミナーに通っている。その学習成果として五郎島金時(加賀野菜のさつまいも)の形を判定するAIができないかどうかにチャレンジしている。セミナーで活用しているGoogleコラボのノートブックを流用して、パイトーチ、パイソンを使い試行錯誤してみた。
なれない専門用語に四苦八苦しながら、ようやく最終的な判定画像の表示ができるまでになった。しかし、正解率がぜんぜんだめ。経過をよく見るとまだまだ途中でいくつかのエラーがあり、修正が必要なようだ。

五郎島金時の形5種類をAIで画像判定するというチャレンジ

パイソンを使い試行錯誤

序盤で悩んだのはデータセットの準備で、ファイルリストとラベルリストを作成することだった。

  • zenkei_ai パッケージで提供する data_generator は、以下の2種類のリストを準備すれば使える
  • 画像のファイルのリスト
  • その画像の分類されたクラス(整数)のリスト
  • 犬猫分類については2種類の分類なのでクラスは 0 か 1 となるが、五郎島金時では5つのクラスなので、0,1,2,3,4となる。
  • 5つのクラスは以下のように設定する。
    shuu-mijikate(秀短手):4
    shuu-nagate(秀長手):3
    marushuu-mijikate(○秀短手):2
    marushuu-nagate(○秀長手):1
    ryou(良):0

5つのクラスに分類するのだが、必要なデータセットのファイルは2つである。
画像ファイルは1018あるので、それに対応したクラスのファイルも1018必要だということだ。

ようやくうまくいったのがこれ。
gorojimadataset.jpg

import glob
gorojima_data_files = glob.glob(‘Data/gorojima/*/*.JPG’)

gorojima_data_labels = [] for f in gorojima_data_files:
c = f.split(‘/’)[-2] if c == ‘shuu-mijikate’:
imo = 4
elif c == ‘shuu-nagate’:
imo = 3
elif c == ‘marushuu-mijikate’:
imo = 2
elif c == ‘marushuu-nagate’:
imo = 1
elif c == ‘ryou’:
imo = 0
gorojima_data_labels.append(imo)

len(gorojima_data_files), len(gorojima_data_labels)

gorojima_data_filesの中身は
Data/gorojima/marushuu-mijikate/IMG_2444.JPG
Data/gorojima/shuu-mijikate/IMG_3589.JPG

というような画像のファイル名が1018並んでいるファイルである。

gorojima_data_filesの中身は
2
4

というように、0から4までのクラス名が並んでいるファイルである。

gorojima_data_filesの画像確認を行う。
gorojimagazoukakunin.jpg

ちゃんと画像は取り込まれていることが確認できる。

判定画像が表示された

▼判定画像の表示
gorojimahanteikekkayouyaku.jpg

判定画像が表示されたのはうれしかった。

しかし、上記の判定画像の正解率は0%である。
「正解は良」という画像が秀長手と判定されているなど、すべて間違っていることがわかる。

また、レインボー(虹色の部分)が主要な判定箇所だが、芋の部分から外れている画像もあることから学習の過程でなにか問題があったのだろう。

学習率(lr)はエラー

▼学習率(lr)はエラーになっている

gorojimagakusyuuritu.jpg

うーん、このあたり学習データがうまく取り込まれていないようなので完全に見直しである。

ここから本当の苦難が続く…

10月8日追記

fuseikaiimg200.jpg
https://www.dm2.co.jp/blog/4517

ここ数日取り組んでいた五郎島金時の形を判定するAIがうまく稼働した。