BEACHSIDE BLOG

MicrosoftとかC#を好むレンジャーの個人的メモ

Custom Vision Service 入門 (Microsoft Cognitive Services)

Build 2017 発表があったCognitive Services 関連で一番話題性が高かったのが Custom Vision Service だったかなぁと個人的に思っています。

比較的色んな方々がブログでも書かれていますね。

ということで、実際に使う際に、私個人的に気にしておきたいTipsをまとめておこうと思います。公式ドキュメントの内容まとめって感じです。

2017年6月時点くらいの話ですのでご注意を。

Overview

概要、ポータルサイトでの基本操作

概要と基本的な操作(ファイルをアップロードして画像を分類するところまで)は、こちらにまとまった記事がありますので省略。

Cognitive Services: 写真を用意するだけ!Custom Vision でカスタム画像認識エンジン作成 – 青い空の向こうへ

プロジェクト作成~画像のアップロードについて

ドメインの選択

プロジェクトを作成する際、Domainを選択します。これは、プロジェクト作成後にも変更はできます。

f:id:beachside:20170617150735p:plain

画像のタイプに合わせてこの Domain を選択することで、分類器を最適化してくれます。Domain の特徴についてまとめておきます。

ドメイン 用途
Generic(汎用) 他に適切なドメインが無い場合、またはどのドメインを選択していいかわからない場合は Generic ドメインを選択します。
Food(フード) レストランのメニューで表示するような料理の写真用に最適化されています。個々の果物や野菜の写真を分類したい場合は Generic ドメインを使用します。
Landmarks(ランドマーク) 自然、人工の両方のランドマークの認識用に最適化されています。ランドマークの前で複数の人がいても、ランドマークがはっきり見えていれば、最適に動作します。
Retail(リテール) ショッピングカタログやショッピングウェブサイトにあるような画像に最適化されています。ドレス、パンツ、シャツを高精度で分類したい場合は、このドメインを使用します。
Adult(アダルト) 成人向けコンテンツと非成人向けコンテンツをよりよく定義するために最適化されています。たとえば、水着の人物画像をブロックしたい場合、このドメインを使って分類器を構築できます。

アップロードする画像

  • 画像は、JPG / JPEGPNG、およびBMP形式です。1枚のにつき最大6 MBの画像がアップロードでします(テストで使う画像は、4MBまでです)。
  • ポータルサイトからは、ローカルの画像を指定してアップロードできます。プログラムを書いてアップロードをするのであれば、ローカルの画像をアップロードのほかに、画像のURLを指定してアップロードすることもできます。

トレーニング、品質について

トレーニング後の評価

Custom Vision Service では、k-fold cross validation (K-分割交差検証))という手法で品質を可視化しています。。トレーニング後、ポータルサイトの上部の Performance タブで品質評価の結果が出てきます。その用語と定義について書いておきます。

用語 定義
Precision(精度) 画像を分類したとき、どれくらい正しく分類されたか。分類器(犬とポニー)を訓練するために使用されたすべての画像のうち、何パーセントが正しいか。100枚の画像のうち99枚を正しいタグ付けした場合、精度は99%になります。
Recall(リコール) 正しく分類されるはずのすべての画像のうち、正しく識別した画像の数。リコールが100%というのは、分類器をトレーニングするために使用された画像のうち犬の画像が38枚で、分類器で犬の画像が38枚を検出した場合です。

品質向上のためのヒント1

Custom Vision Service は、「オブジェクトの検出」ではなく、「画像の分類」です。画像の中に分類したいオブジェクトがあるのかどうかではなく、画像が分類したいオブジェクトかどうかを判断します。 ということで、アップロードした画像は現実に即したものがよいです。

ここでいう「現実に即した」とは、この分類器を使って実際に分類したい画像に即してという意味です。

例としては、どこかのお城の画像を分類したい場合で、城の前に人々がいるけど、どの城かを判別したい場合は、人が移りこんでいる写真をアップロードしましょう。分類したいオブジェクトが明確に映っていれば、多少人の群れでオブジェクトを遮っていても問題ないです。(当たり前のことですが、どこまでが問題ない?ある?というような品質に関してはケースバイケースですので、トレーニング結果を見ながら探っていくしかないでしょう)。

品質向上のためのヒント2

画像をたくさんアップロードしてトレーニングをしても、人間が考えているように画像を分類してくれるわけではないです。例としては、犬と猫を分類したい場合、アップロードした画像が白い犬のみと黒猫のみの場合、分類器は、「白いオブジェクト」と「黒いオブジェクト」で分類する可能性もあります。そういう意味では、多種多少な背景や、シチュエーション、角度、サイズなどの画像をアップロードして学習させることがおすすめです。

品質向上のためのヒント3

TRAINING IMAGES タブを開き、左側にある Iteration History を開くと、トレーニング時に推測結果としてスコアの低い画像は、赤い枠がついて表示されます。スコアとは、Probability Threshold の値に依存しています。

f:id:beachside:20170617154430p:plain

つまりは、その画像に色んな意味で近い傾向の画像はうまく評価できないので、その傾向の画像をアップロードして学習させることで、品質向上が見込める可能性があります。

参考

docs.microsoft.com

Build 2017 更新情報 Cognitive Services 編