新しい IBM Developer JP サイトへようこそ!サイトのデザインが一新され、旧 developerWorks のコンテンツも統合されました。 詳細はこちら

IBM Maximo Visual Inspection モデルを作成してデプロイし、iOS アプリ内で使用する

AI は至るところに普及しています!AI や機械学習について誰かと 10 分も会話をすれば、私たちの働き方を変える使用ケースや、日常生活に違いをもたらす使用ケースが何百も見つかるはずです。

けれども、こうした会話で見つかった使用ケースを具体的な形にするにはどうすればよいでしょう?機械学習は手強い分野です。公開されているリソースはありますが、数が多すぎて、どこから手をつけるべきかを見極めるのは簡単なことではありません。「もしこうだったら申し分ないのに」という考えを簡単に実現できたとしたら、どんなに楽なことでしょう?実際のところ、とても楽になります。

IBM がこれまで焦点としてきたのは、まさに、機械学習にアクセスしやすくすること、そして迅速にデプロイできるようにすることです。機械学習と API テクノロジーに誰もがアクセスできるようにするには、データ・サイエンスの部分を対象分野の専門家の手に委ねることが必須となります。この目的を果たすために開発されたのが、IBM Maximo Visual Inspection というソフトウェア製品です。この使いやすいツールでは、PowerAI プラットフォームと IBM Power Systems を利用して、機械学習モデルを管理、トレーニング、デプロイするタスクを容易にこなせるようになっています。このチュートリアルで、その方法を学んでください。

学習の目的

このチュートリアルでは、以下の方法を学びます。

  1. データセットを作成する
  2. 画像を分類するようにモデルをトレーニングする
  3. モデルを Web API にデプロイする
  4. API を iOS アプリに統合する

前提条件

このチュートリアルでは、読者が IBM Maximo Visual Inspection にアクセスできることを前提としています。この前提を満たしていない場合、テクノロジー・プレビュー版をダウンロードしてインストールするという手もあります。このチュートリアルでは iOS アプリを作成するので、Mac ならびに最新バージョンの Xcode も必要です。

所要時間

このチュートリアルの所要時間は約 1 時間です。

手順

データセットを作成する

まず始めに、トレーニング・データを AI Vision にアップロードします。このデータセットは、AI に認識させるオブジェクト、AI に解決させる問題、分類可能な画像のカテゴリーを決定するものです。

チュートリアルの例では、Kaggle から提供されている鳥に関するデータセットを使用します。このリンク先のページで 「Data (データ)」 タブを選択し、データをダウンロードしてください。あるいは、皆さん独自のデータを使用するのでも構いません。

AI Vision の左上にある 「My Data Sets (マイ・データセット)」 を選択します。

alt

「Add Dataset (データセットを追加)」 をクリックし、「For Image Classification (画像分類用)」 をクリックします。

alt

データセットに名前を付けて、リストから最適なカテゴリーを選択します。使用ケースに適したカテゴリーが見つからなければ、「Other (その他)」 を選択します。設定が完了したら、「Add Dataset (データセットを追加)」 をクリックします。

alt

データセット管理ページが表示されます。このページで、データセット内の画像を作成、編集、管理できます。「+ Add Category (カテゴリーを追加)」 を選択し、追加するカテゴリーの名前を入力します。このチュートリアルでは、何種類かの鳥を分類するので、最初のカテゴリーに「Larus (カモメ)」という名前を付けます。入力し終わったら、「Add Category (カテゴリーを追加)」 をクリックして追加します。

alt

次に、このカテゴリーに対応するトレーニング画像を追加するために、ローカル・ファイルをアップロードします。

alt

サポートする予定のすべてのカテゴリーについて、この手順を繰り返します。これで、トレーニング・データセットが作成できました。

alt

画像を分類するようにモデルをトレーニングする

プロセスの次のステップでは、モデルを作成します。データ・サイエンスの経歴がないとしても、あるいはこれまで一度もモデルを作成した経験がないとしても、心配は無用です。 Maximo Visual Inspection がすべて自動的に処理してくれます。左上のメニューから 「My DL Tasks (マイ DL タスク)」 を選択し、「Create New Task (新規タスクを作成)」 を選択します。チュートリアルの例では、画像分類用のモデルを作成するので、次に表示される画面で 「Classification (分類)」 を選択します。

alt

モデルの基礎として、前のステップで作成したトレーニング・データを選択します。このデータセットが 「Select Dataset (データセットを選択)」 フィールドに指定されていること、「Training Strategy (トレーニング戦略)」 が「Precise First (精度を優先)」に設定されていることを確認し、モデルに名前を付けてから、「Build Model (モデルを作成)」 をクリックします。

alt

Maximo Visual Inspection がトレーニング画像を処理し、データのモデルを作成します。次に表示される画面で、トレーニングの進捗状況と精度の向上を確認できます。

alt

モデルを Web API にデプロイする

トレーニング・プロセスが完了したら、「My Trained Models (マイ・トレーニング・モデル)」 タブを表示して、最終生成物を確認します。

alt

このタブに表示されるモデルの精度から、iOS アプリ内でのシステムのパフォーマンスを判断できます。この例の場合、精度は 76% とかなり良好です。早速、モデルをデプロイしましょう。「Deploy (デプロイ)」 を選択し、「Deploy API (API をデプロイ)」 を選択して確定します。

alt

完了です!モデルを作成して Web にデプロイし、API を使用してモデルにアクセスできるようにするまでの作業を、1 行のコードも作成せずに完了しました。次は、ユーザーがモデルを使用できるよう、この API を iOS アプリに統合します。

API を iOS アプリに統合する

このチュートリアルの締めくくりとして、これから iOS アプリ内で API を呼び出します。皆さんが使用できるようにサンプル GitHub リポジトリーを用意しておいたので、実際に必要になるのは、ほんのわずかなコードだけです。

API を呼び出す

次のコードに、画像を分類するために使用するメインの関数が示されています。要するに、前のステップで Maximo Visual Inspection によって API に割り当てられた URL を呼び出す必要があるのです。Maximo Visual Inspection が提供する API への POST リクエストを作成し、カメラで撮ったローカル画像をリクエストのペイロードとして含めます。

func classifyImage(image: UIImage){
    //URL for your AI Vision instance and model
    let urlString = "AI Vision API URL"

    //Set up HTTP Request Object
    var request  = URLRequest(url: URL(string: urlString)!)
    request.httpMethod = "POST"
    let boundary = "Boundary-\(UUID().uuidString)"
    request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
    request.setValue("gzip, deflate", forHTTPHeaderField: "Accept-Encoding")

    let imageData = UIImagePNGRepresentation(image)!
    let fileName = "upload.png"
    let fullData = photoDataToFormData(data: imageData,boundary:boundary,fileName:fileName)

    request.setValue(String(fullData.count), forHTTPHeaderField: "Content-Length")
    request.httpBody = fullData
    request.httpShouldHandleCookies = false

URL の形式は、実行中の AI Vision のバージョンによって異なります。完全な API リファレンスが用意されていますが、参考として、私が使用する URL は次のようになっています。

http://reallyawesomepoweraitutorial.com:9080/powerai-vision/api/dlapis/API_CODE_FROM_AI_VISION

ここで、reallyawesomepoweraitutorial は PowerAI ホスト、API_CODE_FROM_AI_VISION は API デプロイメントの完全な名前です。例えば、1d361a45-ebde-44c5-b086-65b3a8b32e14 のような名前になります。

リファレンス・アプリに関する詳細

前述のとおり、皆さんが使えるよう、サンプル GitHub レポジトリ―を用意しておきました。この単純なアプリでは、カメラまたはカメラロールから画像をアップロードし、前の手順で作成した AI に照らし合わせてその画像を分類することができます。このアプリで最も興味深いファイルは ClassificationViewController.swift です。このファイルに、上記の API に対する呼び出しが含まれています。Main.storyboard ファイル内で、アプリのレイアウトを確認、編集することもできます。Xcode 内では、このアプリは次のように表示されます。

alt

シミュレーターを実行する

すべてが正常に機能することをテストしましょう。Xcode の左上にある 「Play (再生)」 を選択して、iOS シミュレーター内でアプリを実行してください。

alt

アプリが起動したら、カメラロールから画像を選んでアプリと AI をテストします。

alt

まとめ

お疲れさまでした!カスタム画像分類モデルを作成して Web API にデプロイし、ほんのわずかなコードを加えて、この API を iOS アプリに統合しました。次は、提供されている GitHub リポジトリーを基に、独自の興味深い iOS アプリを作成してください。