0
Help us understand the problem. What are the problem?

iOS用の画像分類モデルをTuriCreateで作る

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関連の情報を発信しています。

Twitter
Medium
GitHub

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?