なんかいろいろしてみます

May 13, 2018 - 1 minute read - Azure

CustomVisionで物体認識(ObjectDetection)を試してみる

AzureのサービスのCustomVisionで物体認識(ObjectDetection)が行えるようになったので物体認識してみました.

CustomVision

CustomVisionはAzureサービスの一つで,簡単に画像認識が試せるようになっています. https://www.customvision.ai/

今回は新しく利用できるようになった物体認識を試してみます. 物体認識は現在(2016/5/13)時点でPreview版となっておりエクスポート機能が提供されていません.

物体認識(ObjectDetection)の手順

CustomVisionのサイト(https://www.customvision.ai/)から自分のアカウントを作成し利用可能な状態にしておきます.

CustomVisionの利用に関しては以下の記事でも紹介しています.(HoloLensとWindowsMLとCustomVisionを使って手書き認識をしてみる(データ収集編))

  1. 新しくプロジェクトを作成します.

  2. New ProjectのProject Typeを Object Detection(preview) に変更してCreate projectします.(Project名も入れてください)

  3. 作成後Add imagesから認識させたい画像をアップロードします.この時以下の確認事項があります.

    • アップロード後画像のタグ付けと領域指定を行います.(アップロード後の画像を選択して設定を行います.)
    • 認識させたい物体が映っている範囲をドラッグしてタグを設定します.
    • 画像によっては自動で物体の範囲の候補を出してくれる場合もあります.
    • 認識させたい画像は最低15枚必要です.
  4. 画像をアップロードしてタグ付け領域指定ができたら Train ボタンで学習を行います.

  5. 最後に Quick Test ボタンから物体認識を確認できます.

    • インターネット上の画像またはパソコン内の画像をアップロードして確認できます.

物体認識は画像中にある物体を認識して登録されたラベルに近いものを表示してくれます. そのため 学習量(ラベル量,学習に使った画像量)が少ないと誤認識が発生しやすくなります.

RestAPIで確認

CustomVisionで学習した結果を利用した場合にはRestAPI形式で利用することができます.

PERFORMANCEタグのPrediction URLからアクセス用のURLを取得できます.

  • 画像URLを指定してAPIを利用します.cURLを利用してみます.
1234
curl -sX POST  "<API URL>" \
-H "Content-Type: application/json" \
-H "Prediction-Key: <API Prediction-Key>)" \
-d '{"Url": "<image URL>"}'

実行結果はjson形式で帰ってきます.

  • probabilityが適合率
  • tagNameがタグ名
  • boundingBoxのleft,top,width,heightが画像内の物体の領域

を示しています.

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99100101102103104105
{
  "id":"",
  "project":"",
  "iteration":"",
  "created":"2018-05-13T14:15:54.6181032Z",
  "predictions":
  [
    {
      "probability":0.06420773,
      "tagId":"",
      "tagName":"chomado",
      "boundingBox":
      {
        "left":0.00538347661,
        "top":0.00368911028,
        "width":0.340908885,
        "height":0.620922744
      }
    },
    {
      "probability":0.0141227776,
      "tagId":"",
      "tagName":"chomado",
      "boundingBox":
      {
        "left":0.2349236,
        "top":0.08451113,
        "width":0.6262617,
        "height":0.8902521
      }
    },
    {
      "probability":0.0104033574,
      "tagId":"",
      "tagName":"hololens",
      "boundingBox":
      {
        "left":0.00538347661,
        "top":0.00368911028,
        "width":0.340908885,
        "height":0.620922744
      }
    },
    {
      "probability":0.0179851167,
      "tagId":"",
      "tagName":"hololens",
      "boundingBox":
      {
        "left":0.235136136,
        "top":0.031627357,
        "width":0.425839961,
        "height":0.6186212
      }
    },
    {
      "probability":0.890617132,
      "tagId":"",
      "tagName":"hololens",
      "boundingBox":
      {
        "left":0.227514774,
        "top":0.00706899166,
        "width":0.639961839,
        "height":0.9246864
      }
    },
    {
      "probability":0.0106198266,
      "tagId":"",
      "tagName":"kaoru",
      "boundingBox":
      {
        "left":0.0,
        "top":0.0,
        "width":0.169066384,
        "height":0.225503519
      }
    },
    {
      "probability":0.01665953,
      "tagId":"",
      "tagName":"kaoru",
      "boundingBox":
      {
        "left":0.00538347661,
        "top":0.00368911028,
        "width":0.340908885,
        "height":0.620922744
      }
    },
    {
      "probability":0.220672786,
      "tagId":"",
      "tagName":"kaoru",
      "boundingBox":
      {
        "left":0.2349236,
        "top":0.08451113,
        "width":0.6262617,
        "height":0.8902521
      }
    }
  ]
}

まとめ

物体に認識はPreview版のためWindowsMLなどで利用できるONNX形式での出力はサポートされていません. しかし既存のCustomVisionではONNX形式がサポートされてので将来的にはWindowsML内でCustonVisionで学習したモデルを利用できるかもしれません.