作業内容
このチュートリアルでは、エクスポートされたカスタム Core ML モデル(.mlmodel
)をダウンロードし、モデルを使用して花の画像を識別する既製の iOS アプリを実行します。
目標
この入門用のエンドツーエンドのチュートリアルでは、コードを使用して次のことを行います。
- トレーニング済みの Core ML モデルを iOS アプリで実行する。
概要
Core ML フレームワークでは、トレーニング済みの機械学習モデルを使用して入力データを分類できます。Vision フレームワークは、CoreML と連携して画像に分類モデルを適用し、画像を前処理して機械学習タスクをより簡単で信頼性の高いものにします。
始める前に
一般的な Edge モデルをダウンロードする
トレーニング済みの Core ML モデルを含むフォルダをダウンロードします。このチュートリアルでは、このモデルを使用します。
ダウンロードした zip ファイルを解凍します。
チュートリアルを開始する前に、ルート プロジェクト ディレクトリに移動します。
cd ClassifyingImagesWithVisionAndCoreML
このディレクトリから次のコードサンプルをすべて実行します。
Edge モデルのトレーニングとエクスポート
続行する前に、次の変更を加えて Edge デバイスモデル クイックスタートを完了させます。
- Google 提供の花のデータセットか、お客様自身のデータセットを使用します。
- [モデルのトレーニング] ステップで、 Edge モデルのラジオボタンを選択します。
- [モデルのエクスポート] ステップで、Core ML モデルのエクスポートの手順を行います。
最終版の花の Core ML model.mlmodel
ファイルを使用し、既存の iOS アプリのカスタマイズ版を実行します。
iOS アプリを設定する
デモ iOS アプリには次の追加ツールが必要です。
- Xcode
- Xcode コマンドライン ツール
Xcode をダウンロードする
以下のリンクを使用して、Xcode をお客様のマシンにダウンロードします。
Xcode コマンドライン ツールをインストールする
コマンドラインで次のコマンドを実行して、Xcode コマンドライン ツールをインストールします。
xcode-select --install
プロジェクトを開く
Xcode でプロジェクトを開きます。プロジェクトを開くには、コマンドラインまたは Google Cloud Platform Console を使用します。コマンドラインからプロジェクトを開くには、次のコマンドを実行します。
open ./Vision+ML\ Example.xcodeproj
オリジナル アプリの実行
Simulator でアプリを起動して画像アノテーションを取得する手順は次のとおりです。
- アプリを起動するには、Xcode ウィンドウの左上隅にある再生ボタン を選択します。
- 予測画像をアプリに提供します。画像は次の 2 つの方法で指定できます。
- デバイスのカメラで写真を撮影する
- 写真を Simulator のウィンドウにドラッグ&ドロップしてデバイスの写真ライブラリに写真を追加する
アプリは、モデルがそれぞれに割り当てる信頼度の順に上位 2 つの分類カテゴリを表示します。
結果には、次のようなアノテーションが表示されます。
カスタマイズしたアプリを実行する
オリジナルのアプリは、標準の MobileNet を使用して 1,000 個の一般的な ImageNet クラス(動物、果物、家具、植物など)のうちのいずれか 1 つに画像を分類する Core ML モデルを使用します。
カスタムの花の画像カテゴリで、再トレーニングされたモデルを使用するようにアプリを変更します。
- デイジー
- タンポポ
- バラ
- ヒマワリ
- チューリップ
モデルファイルをプロジェクトに追加する
Edge デバイスモデルのクイックスタートを完了することで取得できる、カスタムした花のモデル(エクスポートされた Core ML
model.mlmodel
)をダウンロードします。Core ML モデルからエクスポートされたmodel.mlmodel
ファイルとdict.txt
ファイルは、指定した Google Cloud Storage の場所に保存されます。カスタムモデルの名前を
AutoML.mlmodel
に変更します。既存のモデル(
MobileNet.mlmodel
)をプロジェクトから削除します。Vision+ML Example
フォルダにあるプロジェクトにカスタムモデルを追加します。ImageClassificationViewController
で 30 行目を変更します。削除:let model = try VNCoreMLModel(for: MobileNet().model)
この行を次のように置き換えます。
let model = try VNCoreMLModel(for: AutoML().model)
カスタムモデル アプリを実行する
Simulator でアプリを再起動するには、Xcode ウィンドウの左上隅にある再生ボタン を選択します。
修正をテストするには、flower_photos/
ディレクトリから画像ファイルを追加し、予測を取得します。
結果は次のようになります。
モデルを試すには、以前にダウンロードしたトレーニング データ画像を追加するか、Google 検索から画像をダウンロードして予測に使用します。
仕組み
これでアプリケーションを実行できました。CoreML と Vision Framework 固有のコードを確認します。
Core ML モデルで Vision を設定する
Core ML は、ML モデルに簡単にアクセスできる Swift クラスを自動的に生成します。
このサンプルでは、Core ML は MobileNetmodel
から MobileNet クラスを自動的に生成します。
次のコードでモデル インスタンスを取得します。
let model = try VNCoreMLModel(for: MobileNet().model)
上記のモデルと完了ハンドラを使用して Vision リクエストを作成します。完了ハンドラは、モデルからの予測レスポンスを処理します。
メインスレッドで Google Cloud Platform Console を更新する必要があります。
let request = VNCoreMLRequest(model: model, completionHandler: { [weak self] request, error in DispatchQueue.main.async { guard let results = request.results else { self.classificationLabel.text = "Unable to classify image.\n\(error!.localizedDescription)" return }
このプロジェクトの Core ML モデルで指定されているように、results
は常に VNClassificationObservation
にあります。
let classifications = results as! [VNClassificationObservation] })
Vision リクエストの完了ハンドラにより、リクエストが成功したかどうかが示されます。成功した場合、results プロパティには ML モデルによって識別される可能性のある分類を記述する VNClassificationObservation
オブジェクトが含められます。
ML モデルでは、入力画像を固定のアスペクト比で処理しますが、入力画像のアスペクト比はさまざまであるため、画像が収まるように拡大縮小やトリミングする必要があります。最適化するには、リクエストの
imageCropAndScaleOption
プロパティを設定して、モデルのトレーニング時に使用した画像レイアウトに合わせます。request.imageCropAndScaleOption = .centerCrop
次のコードを使用して、入力画像で
VisionRequestHandler
を作成します。let handler = VNImageRequestHandler(ciImage: ciImage, orientation: orientation)
リクエスト オブジェクトを渡してハンドラの perform 関数を呼び出します。
do { try handler.perform([self.classificationRequest]) } catch {
このハンドラは一般的な画像処理エラーをキャッチします。
classificationRequest
の完了ハンドラprocessClassifications(_:error:)
は、そのリクエストの処理に固有のエラーをキャッチします。print("Failed to perform classification.\n\(error.localizedDescription)") }
次のステップ
これで、AutoML Vision Edge からエクスポートされた Core ML モデルを使用した iOS 花の分類アプリのチュートリアルが完了しました。トレーニング済みの Core ML モデルを使用して一般的な画像分類アプリを修正し、花のカスタム サンプル アノテーションを取得しました。Core ML 固有のコードを調べて、基礎となる機能を理解しました。
コア ML モデルと AutoML Vision Edge については、以下のリソースをご覧ください。
- CoreML の詳細については、公式ドキュメントとコード リポジトリをご覧ください。
- カメラ バージョンのデモアプリを使用して、モデルの量子化バージョンを使用します。同じ機能を、小型かつ効率的なパッケージで利用できます。
- 音声ホットワード検出ツールやスマート リプライのデバイス バージョンなど、他の TFLite 対応モデルをお試しください。