【wallprime】Custom Visionで物体検出

AIAI

この記事の内容

この記事では、Microsoft Azure Cognitive ServicesのCustom Visionを使用して、物体検出する流れについて解説しています。Custom Visionを使用することで、「画像分類」や「物体検出」を行うことができます。また、クラウド上で、「アノテーション」、「学習」、「推論」の一連の流れを行うことができます。

今回は、wallprimeという素因数分解をしていくアプリを題材に、物体検出を行っていきます。wallprimeでは、表示された数値を素因数分解した値を選択して、正解であれば進んでいくというアプリになります。

今回作成するアプリケーションは、以下を行います。

  • wallprimeで表示された数値の認識(Custom Vision)
  • 認識した数値を素因数分解
  • 認識した数値と素因数分解した数値を画面に表示

Youtubeにて、デモ画像を公開していますので、そちらをご覧いただければ、動作を理解いただけると思います。動画右上の、numが認識した値、prime factorが素因数分解した値になります。

 

言語はPythonを使用します。カメラ画像を扱うため、OpenCVを使用します。

Custom Visionを使用して、アプリケーションを構築する流れは、一般的な物体検出を行うディープラーニングと同様で以下の流れになります。

  • データ収集(wallprimeのアプリケーション画像を集める)
  • アノテーション(数値の0~9のタグ付けを行う)
  • 学習
  • 推論

構築手順

データ収集

wallprimeアプリの画面を撮影し、以下のような画像を収集します。

wallprime_sample

Custom Visionで学習するにあたり、各タグごと(0~9の数値)に15以上アノテーションされていることが最低限の条件ですので、その枚数分は最低でも集める必要があります。そのために、一定数の画像を集めて、アノテーションを行い、各タグごとの数を確認し、不足していれば追加していく流れで大丈夫です。

アノテーション(数値の0~9のタグ付けを行う)

Microsoft Azureのページへ移動します。登録が済んでいない場合は登録が必要ですので登録して下さい。

Microsoft Azure

Cognitive Servicesを選択します。

custom_vision_01

「追加」ボタンを押下します。

custom_vision_02

その後、表示された画面よりCustom Visionを選択して、「作成」ボタンを押下します。

以下の画面で、各種項目の入力を行います。作成オプションに関しては、トレーニングと予測の両方を行うため、両方を選択します。Project detailsの名前に関しては、任意の名前を入力してください。すべての入力が完了したら、「Review + create」ボタンを押下します。その後に表示される画面で、「作成」ボタンを押下します。Microsoft.CognitiveServicesCustomVisionのデプロイが完了するまで待ちます。

custom_vision_03

custom_vision_04

アノテーションを行うために、Custom Visionポータルへ移動します。移動は、クイックスタートの「Custom Visionポータル」から遷移可能です。このページのエンドポイントは後で使用するので控えておいてください。

custom_vision_05

Custom Visionポータルで、「NEW PROJECT」を押下します。

custom_vision_06

Nameを入力し、Project Typesは、今回物体検出を行うので、Object Detectionを選択します。入力が完了したら、Create projectを押下してプロジェクトを作成します。

custom_vision_07

Tagsを追加していきます。「+」を押下して0~9に対応するタグを追加します。(zero,one,two,three,four,five,six,seven,eight,nine)

custom_vision_08

「Add Images」ボタンを押下して、収集したwallprimeの画像を追加します。

custom_vision_09

Image Detailで、wallprimeの各数値にタグ付けしていきます。マウスでドラッグして範囲を選択し、タグを選択します。これを複数画像行います。

custom_vision_10

学習

全てのタグが最低限規定数そろったところで、画面上部の緑色のTrainボタンを押下して、Advanced Trainingを選択、Trainを押下します。学習が終了すると以下のような画面が表示されます。Precision値、Recall値、mAP値が表示されます。(以下の画面は、イテレーションを3回行った後の画面)

custom_vision_11

PredictionsにてQuick Testを行うことができます。いくつか確認してみると良いと思います。よければ、Performanceタブにて、Publishを押下して、公開をし、外部から呼び出せるようにします。

公開後、Prediction URLを押下します。推論で使用するためのPrediction-Keyを控えておきます。また、Published as: <イテレーション名>のイテレーション名を控えておきます。

custom_vision_12

また、プロジェクトIDが必要になるので、URLの以下の部分を控えてください。

https://www.customvision.ai/projects/<project id>#/performance

推論

以下のGitHubにソースコードがあるので、cloneして使用してください。

remix-yh/wallprime-vision
Contribute to remix-yh/wallprime-vision development by creating an account on GitHub.

main.pyの以下の定数に、控えた値を設定して実行してください。

  • PUBLISH_ITERATION_NAME
  • PREDICTION_KEY
  • ENDPOINT
  • PROJECT_ID

するとカメラ画像が表示されると思います。「q」キーを押すと終了し、「d」キーを押すとその画面をもとに推論を行い、結果を別のウィンドウで表示するようになっています。

custom_vision_13

さいごに

今回は、Microsoft Azure Cognitive ServicesのCustom Visionを使用して、物体検出を行う方法を紹介しました。クラウド上で一連の作業が行え、物体検出の詳しい仕組みを知らない人でもある程度の認識ができるようになります。是非一度使ってみてはいかがでしょうか。

 

コメント