Watsonで作ったCore MLモデルをiOSアプリへデプロイする

Taiji
14 min readMar 21, 2018

--

  • 2020–09–18 手順修正
  • 2018–08–23追記
    本記事の開発手順ではiPadでビルド時にエラーとなってしまう部分について、IBMのDeveloperである浜口氏が手順をまとめてくれました。
    ■Apple CoreMLでWatson Visual RecognitionのデモアプリををiPhoneだけではなくiPadでも使えるようにする
    https://qiita.com/satoruhamaguchi/items/a48de5898c39bc034898

WatsonとCore MLモデル

Core MLでは、開発者は学習させた機械学習モデルをアプリケーションに統合することができます。 ワトソンのVisual Recognitionは、このCore MLモデルをサポートしています。 今回は、Watson Visual Recognitionを使用してCore MLモデルを作成し、iOSアプリケーションにデプロイする方法を紹介します。

IBM Code Patterns

こちらはCode Patetrnsからの日本語解説になります。私が実際にこのアプリを作成して確認し、一部手順が異なる部分は、私の方で適宜訂正してあります。
筆者の環境はMacですが、Windowsでもさほど変わらないと思います。英語で読み進められる方は、オリジナルサイトに沿って試してみても良いと思います。
英語版のオリジナルはこちらです。
https://developer.ibm.com/code/patterns/deploy-a-core-ml-model-with-watson-visual-recognition/

概要

アプリケーション構成図

例えば、みなさんが航空会社の技術者で、何千もの部品の1つを特定したいとします。インターネットへ接続できる環境がない場合、どうしますか?

ほとんどの画像認識サービス・製品は、HTTP経由でサーバーへAPIを呼び出すスタイルですが、 Core MLなら、あなたのアプリで学習させたモデルをデプロイすることができます。また、Watson Visual Recognitionを使用すると、コーディングせずにモデルを学習できます。Watson Studioツールで画像をアップロードし、学習させたCore MLモデルをiOSアプリケーションにデプロイするだけです。

今回紹介するコードパターンではカスタムモデルを学習します。数回クリックするだけで、そのモデルをテストしてエクスポートして、iOSアプリケーションで使用することができます。このパターンには、さまざまな種類のケーブル(HDMIとUSB)を検出できるアプリケーションを構築するのに役立つサンプルデータセットが含まれていますが、独自のデータを使用することもできます。

このコードパターンを一通り試せば、次のことが学べます。

・Watson Studioでのデータセット作成方法
・データセットに基づいたWatson Visual Recognition分類器の学習方法
・分類器をCore MLモデルとしてiOSアプリケーションにデプロイする方法
・トレーニングを受けたモデルをダウンロード、管理、実行するための、Watson Swift SDKの使用方法

Visual RecognitionとCore ML

Watson Visual RecognitionCore MLで画像を分類します。 画像はVisual Recognition によって訓練されたディープニューラルネットワークを用いてオフラインで分類されます。

このプロジェクトには、 QuickstartWorkspace.xcworkspaceワークスペースと下記2つのプロジェクトが含まれています。

  • Core ML Vision Simple:Visual Recognitionを使用しローカルで画像を分類します。
  • Core ML Vision Custom:カスタムVisual Recognitionモデルのトレーニングにより、より特化した分類をします。

はじめに

開発環境として、 Xcode version 11.xが必要です。
実機テストをする場合は、iOS11以降をお使いください。エミュレーターでのテストであればXcodeにバンドルされているエミュレーターで問題ありません。

プロジェクトファイルの取得

以下GitHubのリポジトリをクローンするか、zipをダウンロードしてください。

https://github.com/watson-developer-cloud/visual-recognition-coreml.git

Core ML Vision Simpleを実行してみる

ビジュアル認識モデルが組み込まれた一般的なオブジェクトを識別します。 画像はCore MLフレームワークで分類されます。

  1. Xcodeで QuickstartWorkspace.xcworkspace を開きます。
  2. Core ML Vision Simple スキーマを選択します。
  3. シミュレーターか実機でこのアプリケーションを実行します。
  4. カメラのアイコンをクリックし、フォトライブラリから写真を選択して、画像を分類します。 シミュレーターでカスタム画像を追加するには、Finderからシミュレータウィンドウに画像をドラッグします。
実行ボタンの右隣、スキーマはCore ML Vision Simpleを選択
ファイルを選択して識別

Tip: このプロジェクトには、樹木や菌類を分類するCore MLモデルも含まれています。 ImageClassificationViewControllerで使用したいモデルのコメントを外して、2つのCore MLモデルを切り替えることができます。

Source code for ImageClassificationViewController.

Core ML Vision Customを実行してみる

このプロジェクトでは、一般的な種類のケーブル(HDMI、USBなど)を識別するためのVisual Recognitionモデル(クラシファイアとも呼ばれます)を学習します。 トレーニングを受けたモデルをダウンロード、管理、実行するには、Watson Swift SDKを使用します。 Watson Swift SDKを使用することで、基礎となるCore MLフレームワークについて学ぶ必要はありません。

Watson StudioでのVisual Recognitionをセットアップする

  1. IBM Cloudへログインします
    IBM Cloudのアカウントが必要になります。お持ちでない方はこちらから作成して下さい。
  2. IBM CloudカタログよりWatson Studioのサービスを作成します
    料金プランはLiteを選択します。
  3. Get StartedボタンからWatson Studioを起動します
  4. Visual Recognitionサービスを作成します
    Create Serviceメニューから、Visual Recognitionを選択し、料金プランLiteで作成します。

手順の流れは以下の画像を参考にしてください。(オリジナルサイトでの案内と少し異なります。)

IBM Cloudダッシュボード→カタログ→Watson Studio
料金プランLiteを選択し、Createボタンをクリック
Watson Studioを起動
Create Serviceをクリック
Visual Recognitionを選択
Liteプランを選択してCreate
作成されました

モデルの学習

  1. 前の手順で作成されたVisual Recognitionのツールを起動します。最初は起動までに数分かかります。起動したらCustom Modelsの中のClassify ImagesタイルのCreate Modelボタンをクリックします。
Custom Modelsの中のClassify ImagesタイルのCreate Modelをクリック
  1. プロジェクトが、作成したVisual Recognitionインスタンスにまだ関連付けられていない場合は、プロジェクトが作成されます。 プロジェクトに「Custom Core ML」と名前を付けて、「Create」をクリックします。
名前を入れてCreate(Strageが設定されてない場合はリフレッシュしてみる)
  1. Training Imagesのサンプル画像の各.zipファイルをデータパネルにアップロードします。 画面右側にある[Browse]リンクをクリックして hdmi_male.zipファイルをモデルに追加します。 また、usb_male.zip, thunderbolt_male.zip, vga_male.zipファイルもモデルに追加します。
    (オリジナルサイトでの説明と少し異なります。)
Browseリンクをクリック
zipファイルを全て選択(zipの中にそれぞれ画像が数十枚ずつ入ってる)
  1. ファイルがアップロードされ全ての画像が読み込まれたら、[Train Model]ボタンがアクティブになるのでクリックします。
学習させたいzipを選択しモデル作成(ここでは全て選択)
数十秒ほどで画像が読み込まれる
右上のTrain Modelをクリックすると学習開始
この程度の量で大体5分〜10分くらいで学習が完了しました

Model ID と API Keyをコピーする

  1. カスタムモデルのOverviewページで、Visual Recognitionのインスタンス名(関連付けられているサービスの横にある)をクリックします。
  2. 下にスクロールして、作成したCustom Core MLクラシファイアを見つけます。
  3. Model IDをコピーします。
  4. Watson StudioのVisual Recognitionインスタンス概要ページにて、[Credentials]タブをクリックし、[View credentials]をクリックします。 サービスの api_keyをコピーします。
Watson Studioの作成したカスタムモデルのOverviewページからモデルIDのをコピー
Visual Recognitionサービスへ移動
CredentialsタブからAPI Key(IAMのAPI Key)をコピー

Model ID と API Key をプロジェクトへ追加

  1. プロジェクトをXCodeで開きます。
  2. Model IDをコピーし、ImageClassificationViewController ファイルのclassifierIDプロパティへペーストします。
  3. api_keyをコピーし、 ImageClassificationViewController ファイルのapiKeyプロパティへペーストします。
Model IDとAPI Keyの設定

Watson Swift SDKをダウンロードします。

Cocoapods 依存管理マネージャーを使用して、Watson Swift SDK をダウンロードしてビルドします。

  1. Cocoapods をインストール。
  2. ターミナルを開いて、Core ML Vision Custom ディレクトリに移動。
  3. 以下のコマンドを実行して、Watson Swift SDK をダウンロードし、ビルドする:
pod install

Tip: SDK のアップデートを定期的にダウンロードして、このプロジェクトのアップデートと同期してください。

カスタムモデルのテスト

  1. QuickstartWorkspace.xcworkspace をXcodeで開きます。
  2. Core ML Vision Custom スキーマを選択します。
  3. シミュレーターまたは実機でアプリを実行します。
  4. カメラのアイコンをクリックし、フォトライブラリから写真を選択して、画像を分類します。 シミュレーターでカスタム画像を追加するには、Finderからシミュレータウィンドウに画像をドラッグします。

※ Watson Studioにて、学習し直した場合などは、新しいVisual Recognitionモデルを、iOSアプリ右下の雲マークのボタンでダウンロードします。

Tip: 分類器のステータスが使用準備になっている必要があります。 Visual Recognitionインスタンスの概要ページでステータスが「ready」になっていることを確認します。

Source code for ImageClassificationViewController.

実行ボタンの右隣、スキーマはCore ML Vision Customを選択
Watson Studioで作成したモデルをiOSアプリで読み込んだことを確認
アプリ画面右下の雲マークボタンで最新のモデルをWatsonからダウンロード

次にやってみる事

Watson Discoveryサービスを取り入れた Core ML Visual Recognition with Discovery も試してみましょう。

リソース

――――――――――――――――――――――――――――――――――――――

Information

IBM だチャンネルPodcast
https://ibm.biz/BdjthM

IBM Developer Advocate Profile
https://developer.ibm.com/code/community/advocates/taijih

Cloud Developers Circle
(ベンダー依存しないクラウドデベロッパーのためのコミュニティ)
https://cdevc.connpass.com/

Node-RED ユーザーグループ
https://node-red.connpass.com/

IBM Cloud ユーザーグループ
https://bmxug.connpass.com/

--

--

Taiji

Datadog Senior Developer Advocate | Ex-OutSystems Dev Community Advocate | Ex-IBM Dev Advocate | Microsoft MVP | 筑波大学、名城大学非常勤講師 | 記事は個人の見解であり、所属する組織とは関係ありません。