iOS用の高品質画像分類モデルを作ります
CreateMLだけではない
Appleの機械学習モデルを作るフレームワークといえば、CreateMLがあります。
GUIで簡単にモバイル用モデルを作成できます。が、大量のデータセットでCreateMLの画像分類学習を回そうとすると、なぜか10iterで止まるという現象がありました。
こんなCreateMLでうまくいかない時に使えるのが、turicreateです。
TuriCreateも、Appleがリリースしている機械学習フレームワーク。
Pythonで画像分類などのモデルが作れ、iOS用のモデルとして保存できます。
方法
必要なものをインストール
pip install turicreate==6.4.1
# The wrong version of mxnet will be installed
pip uninstall -y mxnet
# Install CUDA10-compatible version of mxnet
pip install mxnet-cu100
# install Skafos python sdk
pip install skafos
pip intall coremltools
インポートとGPUの設定
import urllib
import tarfile
import coremltools
import turicreate as tc
tc.config.set_num_gpus(-1)
データセットはCreateMLやImageNetの画像分類の形式と同じで、
クラスごとにディレクトリを作ってそこに画像を入れておきます。
|
|__chocolate
| |__image1_0.jpg
| |__image1_1.jpg
|
|__cookie
| |__image2_0.jpg
| |__image2_1.jpg
|
|__lolipop
| |__...
...
上記のデータセットディレクトリから、sframeというturicreate用のデータ形式を作ります。
data = tc.image_analysis.load_images('./dataset', with_path=True, ignore_failure=True)
sframeにラベルの列を与えます。
ラムダ式でif文を繰り返して、画像ファイルのパスのディレクトリ名からラベルをつけています。
クラスラベルが多い時は、if文のネストを深くします。
data['label'] = data['path'].apply(lambda path: 'chocolate' if '/chocolate/' in path else ('cookie' if '/cookie/' in path else 'lolipop'))
データセットを学習用と検証用に分割します。
train_data, test_data = data.random_split(0.8)
学習します。事前トレーニングされたモデルのファインチューンが行われます。30iterだと数分です。
model = tc.image_classifier.create(
dataset=train_data,
target='label',
model='resnet-50',
batch_size=32,
max_iterations=30
)
CoreMLModelとしてエクスポートします。
res = model.export_coreml("candies.mlmodel")
より詳細なドキュメント。
🐣
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com
Core MLやARKitを使ったアプリを作っています。
機械学習/AR関連の情報を発信しています。