開発者がコンピューター・ビジョンと物体検出機能を組み合わせてアプリを構築するには、深層学習フレームワークを利用することができます。その場合、モデルのトレーニングとデプロイに IBM Maximo Visual Inspection を利用すれば、必要となる作業と専門知識が大幅に軽減されます。Maximo Visual Inspection が提供する UI では、深層学習の予備知識がなくても、独自の物体検出モデルをトレーニング、デプロイ、テストできるからです。
この入門チュートリアルで、Maximo Visual Inspection UI を使用してサンプル画像を REST エンドポイントに変換し、物体検出アプリ内で使用可能にする方法を学んでください。
2017 年 12 月の時点で、Maximo Visual Inspection はテクノロジー・プレビュー版として提供されており、Power Systems 上にインストールすることも、クラウド内のトライアル・アカウントで使用することもできます。
注: この入門チュートリアルは、Maximo Visual Inspection テクノロジー・プレビュー版 v3.0 の使用を前提として作成されています。
学習の目的
このチュートリアルの目標は、物体検出を目的とした深層学習の基本を説明すると同時に、Maximo Visual Inspection UI を使用して物体検出を極めて容易にすることです。チュートリアルでは実践的アプローチによって、次の目的を達成します。
- 物体検出用のデータセットを作成してラベルを付ける
- データセットに基づいてモデルをトレーニングし、デプロイする
- REST 呼び出しによってモデルをテストする
フレームワークのセットアップ、GPU 処理能力の利用方法、モデルを REST エンドポイントとして公開する方法などといった詳細に対処する必要はほとんどありません。それは、Maximo Visual Inspection が自動的に処理してくれるためです。
チュートリアルの手順に従うと、すぐに使用できるカスタマイズされた物体検出 API が完成します。
前提条件
サンプル画像の集合: 独自の画像を集めたものを使用するのでも構いません。物体検出の使用ケースを念頭に置いてください。次のいずれか、または両方の答えを見つける使用ケースでなければなりません。
- ターゲットとなる物体は画像内のどこにあるか?
- 画像内にターゲットとなる物体はいくつあるか?
このチュートリアルでは、サンプル画像としてコカ・コーラのボトルの画像を集めました。この場合、ボトルの数をカウントし、それらの位置を特定するアプリを作成できます。
Maximo Visual Inspection プレビュー版へのアクセス:
On Premise
で使用する場合は、このリンク先の「Try PowerAI (PowerAI トライアル)」ページからインストーラーをダウンロードし、プレビュー版を Power Systems 上にインストールできます。あるいは、SuperVessel
でSuperVessel
へのアクセスを登録し、クラウド内でプレビュー版を試すこともできます。
注: この入門チュートリアルに記載する手順と例では、読者が SuperVessel を使用していることを前提としています。
所要時間
インタラクティブな手順は 1 時間未満で完了しますが、トレーニング・タスクを開始してから完了するまでには 1 時間以上かかる場合があります (推定時間は 90 分ですが、実際にかかる時間は使用するデータセットとその他の要因に依存します)。この演習を開始した後、休憩を取ってからトレーニングを完了するよう計画してください。
手順
Maximo Visual Inspection にログインする
SuperVessel を使用する場合は、https://developer.ibm.com/linuxonpower/deep-learning-powerai/vision/access-registration-form/ にアクセスしてログインします。
データセットを作成する
Maximo Visual Inspection の物体検出機能は、画像内の物体を発見してラベルを付け、ユーザーや開発者がカスタマイズしたトレーニングに基づいて画像内の物体の数をカウントできるようにします。
物体検出トレーニングで使用する新しいデータセットを作成するには、次の手順に従います。
「
My Data Sets
(マイ・データセット)」ビューで、「Add Dataset
(データセットを追加)」ボタンをクリックし、プルダウンから「For Object Detection
(物体検出用)」を選択します。データセット名を入力してから、「
Add Dataset
(データセットを追加)」をクリックします。1 つ以上の画像をアップロードします。それにはドラッグ・アンド・ドロップ操作を使用するか、「
Select some
(対象を選択)」を使用します。zip ファイルを使用して多数の画像ファイルを一度にアップロードすることも、複数選択することもできます。コカ・コーラのボトルの画像からなるサンプル・データセットをダウンロードする場合は、ここをクリックしてください。注: 独自の zip ファイルをアップロードした後、ファイルのサムネイルが表示されなければ、アップロードは失敗しています。ファイル名には小文字だけを使用して、特殊文字やスペースが含まれないようにしてください。また、個々のファイルをアップロードするか、複数のファイルを選択して一度にアップロードすると、アップロードが失敗する原因となったファイルを特定できます。
タグを作成して物体にラベルを付ける
1 つ以上のタグを作成します。それには、「
+
」アイコンをクリックして新しいタグを追加します。各タグで、具体的な使用ケースに基づく、画像内のトレーニング用物体を表します。各画像内の物体にラベルを付けます。それには、タグを選択し、境界ボックスをドラッグして画像内の物体を囲みます。各画像での作業が終わるごとに「
Save
(保存)」をクリックします。すべてのタグとすべての画像について、このプロセスを繰り返します。
ヒント:「
Only Show Unlabeled Files
(ラベルが付いていないファイルのみを表示)」プルダウンを使用すると、すべてのファイルに対して作業を完了したかどうかがわかります。「
Export As Zip File
(zip ファイルとしてエクスポート)」をクリックして、作業結果のコピーを保存します。ラベル付けに時間を費やしましたが、この zip ファイルがあれば、最初からやり直すときにラベル付けに費やした労力を無駄にしなくてもすみます。
DL タスクを作成する
「My Workspace (マイ・ワークスペース)」にある「
My DL Tasks
(マイ DL タスク)」をクリックし、「Create New Task
(新規タスクを作成)」ボタンをクリックします。「Object Detection
(物体検出)」をクリックします。物体検出器に名前を付けて、目的のデータセットが選択されていることを確認してから、「
Build Model
(モデルを作成)」をクリックします。推定所要時間を示す確認ダイアログが表示されたら、「
Create New Task
(新規タスクを作成)」をクリックしてモデルの作成を開始します。
デプロイしてテストする
モデルの作成が完了したら、「
Deploy and Test
(デプロイしてテスト)」をクリックします。Maximo Visual Inspection UI 内でモデルをテストします。「
Select some
(対象を選択)」を使用して、テスト画像を選択します。テスト結果として、検出された物体の数と、境界ボックス、ラベル、信頼度スコアが付加された画像が表示されます。画像ファイルと
curt
コマンドを使用して、コマンドラインからデプロイ済み REST エンドポイントをテストすることもできます。出力される JSON には、複数のボトルが検出されたことが示され、そのそれぞれに対して信頼度、ラベル、位置の情報が提供されます。警告: この例では便宜上、
--insecure
を使用しました。$ curl --insecure -i -F files=@coke_bottle_23.png https://ny1.ptopenlab.com/AIVision/api/dlapis/9f9d6787-0183-4a1b-be49-751b6ca16724 HTTP/1.1 100 Continue HTTP/1.1 200 OK Server: nginx/1.9.13 Date: Thu, 14 Dec 2017 21:58:26 GMT Content-Type: application/json Content-Length: 508 Connection: keep-alive Access-Control-Allow-Origin: * Access-Control-Allow-Headers: origin, content-type, accept, authorization Access-Control-Allow-Credentials: true Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS, HEAD Access-Control-Allow-Origin: * { "classified" : [ { "confidence" : 0.9986369013786316 , "ymax" : 578 , "label" : "coca-cola" , "xmax" : 755 , "xmin" : 588 , "ymin" : 29} , { "confidence" : 0.9954010248184204 , "ymax" : 592 , "label" : "coca-cola" , "xmax" : 601 , "xmin" : 437 , "ymin" : 10} , { "confidence" : 0.8161203265190125 , "ymax" : 567 , "label" : "coca-cola" , "xmax" : 426 , "xmin" : 259 , "ymin" : 17}] , "imageUrl" : "http://ny1.ptopenlab.com:443/AIVision/temp/5a26dd3b-d8ba-4e01-8b93-5a43f28e97c7.png" , "result" : "success"}
まとめ
このチュートリアルでは、深層学習テクノロジーによってラベル付きのサンプル画像から学習し、物体検出 API を作成する方法を説明しました。ここで作成した REST エンドポイントは結果を JSON 形式で返すため、どのアプリでも簡単に使用できます。
Maximo Visual Inspection ではプロセス全体を極めて容易にするとともに、GPU 処理能力を活用してトレーニングを加速化します。
物体検出の精度は、提供するサンプルによって左右されます。ほとんどの場合、本番環境に対応できるだけの高精度の結果を出すには、実験に使用するデータセットでは小さすぎます。トレーニングには時間をかけて、十分なトレーニング・データを使用してください。データセットを大きくすることで、精度を向上させることができます。