前回「Azure Custom Vision Service のご紹介」の記事で Custom Vision Service の画像分類機能について紹介しましたが、今回は現在プレビュー段階の物体検出機能について試してみたいと思います。
今回は学習のための画像データとして、以下の Open Images Dataset V4 を利用します。
Krasin I., et al.:
A public dataset for large-scale multi-label and multi-class image classification, 2017.
Available from https://storage.googleapis.com/openimages/web/index.html
この画像データセットの内「Aircraft」「Airplane」「Helicopter」の分類タグが付いている画像を選び、それらの一部を学習用データセットに利用しました。これらの分類タグには、以下の画像の様に航空機の画像(固定翼機、回転翼機、気球、飛行船など)が含まれています。
今回はこれら航空機の画像に対して、Custom Vision Service の物体検出機能を使い(1)航空機の種類の分類(2)航空機の画像内の位置 をどのくらい上手く検出できるかについて試してみます。
画像分類と同じ様に、以下のポータルサイトから GUI 操作で利用できます。
https://www.customvision.ai/
物体検出機能を利用するためには、プロジェクト作成の際に選択する Project Types で Object Detection を選択してください。
基本的な操作の流れは画像分類の場合と同じですが、物体検出の場合はアップロードした画像に対して、どこに検出したい対象があるのかを以下の画像の様に枠で囲って指定していく作業が入ります。この際、対象を分類するタグについても枠に付けていきます。
もし、一枚の画像中に複数の検出したい対象がある場合は、それら一つ一つを枠で囲っていきます。
一つの分類タグに対して最低15枚あれば学習が実施できますが、学習用画像の推奨枚数は一つのタグに付き50枚以上とのことなので、今回は一つの航空機の種類に対して60枚程度になるように枠を付けていきました(データセット内に50枚以上その種類の航空機が無い場合でも20~40枚程度にはなるようにしました)。
それでは、学習した Custom Vision のプロジェクトで、実際に物体検出を試してみた結果を見ていきます。この際、画像は学習に使用せずにテスト用に取っておいた画像を使用しました。
まずは物体検出が比較的上手くできた画像からです。
これは見ての通り気球の画像です。検出された対象は赤い枠で囲われて表示されますが、この画像は左下辺りで倒れたり隠れたりしている気球を除いて、気球の位置を上手く検出できています。また分類されたタグは右下の Predictions に表示されますが、こちらを見ると気球という分類についても正しく認識できていることがわかります。
気球の画像はこれ以外の画像も比較的上手く検出できており、気球の特徴的な形状が認識精度の高さに効いているようです。
次の3枚の画像は、比較的小型の航空機の画像です。背景が単純な場合や機体同士が重なっていないという状況であれば、これらの画像の様に複数の対象が写っている場合でも、それぞれの機体の位置をある程度上手く検出できるようです。機体の種類についても、これらの画像では正しく認識できています。
ただ、いくつかの画像を試してみた感じでは、機体の種類の分類を間違えることはある程度の頻度で起きるという印象でした。学習させた画像の枚数がそこまで多くないということもあり、検出対象の細かい分類を当てるのはなかなか難しいのかもしれません。
最後に、位置の認識があまりうまくいかない場合も見てみます。
これは旅客機の画像で、種類の分類は旅客機と正しくできていますが、対象の範囲を一つの枠で囲むことができていません。この画像に限らず旅客機はこの画像の様に枠が分かれてしまい上手く検出できない傾向がありました。
また旅客機以外でも、輸送機など大型の機体が写っている画像や小型の航空機でも画像内にかなり大きく映り込んでいる画像では、その検出対象の範囲を一つの枠でとらえられない傾向がありました。どうも検出対象が画像内のある程度の範囲にまとまっていない場合、その範囲を捉えづらいという傾向があるのかもしれません。
この記事では Custom Vision Service の物体検出機能について試してみましたが、一つのタグにつき60枚程度という比較的少ない画像セットでも、ある程度の認識能力を持つ物体検出機能を構築することができました。
物体検出のタスクは画像の分類と比べて比較的多くの学習データが必要とされるので、Custom Vision Service の API を利用して枠などの情報がすでについている画像セットを学習させるなどすれば、検出精度をより向上できるかもしれません。
今回紹介した Custom Vision Service の物体検出機能や以前ブログで紹介した画像分類機能を試してみたい、簡単な画像分類・検出の仕組みを用意したい等のご要望がありましたら、是非弊社にお問い合わせください。