LoginSignup
5
8

More than 5 years have passed since last update.

iPhoneと機械学習でフライドチキンの部位を分類する

Posted at

iPhoneと機械学習で何か面白いものを作ろうと思い、今回はフライドチキンの分類を作りました。〇ンタッキーフライドチキンの部位は、キール(胸)、リブ(あばら)、ウイング(手羽)、サイ(腰)、ドラム(脚)の5つのカテゴリーに分けられます。この5つのうちどれかを分類します。

内容

機械学習の簡単な説明
機械学習には学習済みモデルが必要です。モデルに画像を与えると「強いて言えば何か」が結果として出力されます。モデルはいくつか公開されていて、InceptionV3(Google)、VGG16(Oxford大学)、ResNet50(Microsoft Research)などがあります。モデルというと想像できにくいですが、拡張子 .mlmodel の100MB程度のファイルです。

この公開モデルには1000個のカテゴリーが入っています。例えばマウスであったり、コンピューターキーボードであったり、PCモニターの前に座った人をバーバーと分類したりします。画像を与えると全てのカテゴリーを足して100になるように結果が出ます。Aが80点と出る時もあれば、A30点、B25点、C20点と微妙な時もあります。

今回やること
今回のフライドチキンは5つのカテゴリーです。なのでカメラで人をとらえても「リブ」などと表示されてしまいます。1回の分類ではどうしても誤差が出てしまうので、1秒間に2回分類して、結果をリアルタイムに更新するような仕様にしました。

開発環境

  • XCode iOS Swift
  • CoreML Framework
    iOSの機械学習ライブラリ
  • Turi Create
    学習モデルを作成します。Pythonで動かします。作ったモデルをiPhoneに送ります(TuriはAppleがを2016年に買収しました)

モデルの作成

手順
1. Python と Turi Create をインストールします。
2. トレーニング画像(チキンの画像)をいっぱい集めます。
3. 画像をフォルダに分けます。
4. ターミナルで python model.py を実行します。
5. 結果、Chicken.mlmodel が作成されます。


model.py
import turicreate as tc
import os

data = tc.image_analysis.load_images('train', with_path=True, recursive=True)
data['label'] = data['path'].apply(lambda path: os.path.basename(os.path.dirname(path)))
data.save('Chicken.sframe')

train_data, test_data = data.random_split(0.9)
model = tc.image_classifier.create(train_data, target='label', max_iterations=100)

predictions = model.predict(test_data)
metrics = model.evaluate(test_data)
print('metrics=' + str(metrics['accuracy']))

model.save('Chicken.model')
model.export_coreml('Chicken.mlmodel')

解説
trainフォルダの下にフォルダを作り、トレーニング画像であるチキンの画像を200枚くらい入れます(頑張りました)。モデルを作成すると「フォルダ名」がそのまま「分類名」になります。今回の例では、drum、keel、rib、thigh、wing の5つのフォルダを作り、それぞれに画像を入れます。実行してできた Chicken.mlmodel を XCode プロジェクトにコピーします。

アプリ

ソースはGithubに置きました。Inceptionv3モデルが入っています。自作したモデルを入れ替えて使ってください。
https://github.com/koji4104/ImageDetector

解説
上の例は、wing(手羽)とdrum(脚)です。このアプリでは毎回結果をプラスして、20をマイナスします。1秒間に2回処理をするので、何もなければ2.5秒でゼロになります。

まとめ

画像分類は可能性があると思います。素人では見分けがつかないものでも、分類できるようになります。今回のアプリではiPhone(iPad)を使うので、人が持ち運んで使うことができます。顔認証などは大手企業がやるでしょうから、私のような小さな会社は、特定の業界や施設に特化した画像分類をやれば、何かビジネスなるかもしれません。

画像分類の実験を何度かやって思うのですが、とにかく学習モデルを作るのが面倒です。前回は写真を必要なとこだけ手作業で切り取っていましたが、今回は写真を正方形で中心で撮って、加工なしで使っています。かなり作業は減りましたが、それでもフォルダに振り分けるのが面倒でした。撮ると同時にファイル名を付けるなど、まだまだ成長の要素があると思います。

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8