1. 今回のテーマ

Azure Machine Learning連載第二回では、Azure Custom Visionサービスを使って入力したナスの画像が出荷基準を満たすかどうかを判定する仕組みのプロトタイプを構築します。たくさんの生産者から集荷されたナスがベルトコンベアを流れる途中で、画像判定により不良品を見つけ出すような仕組みのイメージです。


2. 利用するサービス

今回はAzure Custom Visionサービスと、Bing Search v7 APIを利用します。
Bing Search v7 APIは、自分で教師データとなる画像を用意するのであれば、不要です。

2.1. Azure Custom Vision サービス

Azure上でカスタムの画像分類子を作ることのできるサービス。
教師データとなる画像をアップロードし、その画像を分類タグをつけていくことで新しい画像に対して、自動でタグ付けを行うWebサービスを作成できます。

2値分類:

  • ナスは出荷基準を満たすか
  • きのこは食べられそうか

多項分類:

  • 画像を犬猫鳥に分類
  • 料理の種類は?和食、洋食、中華

2.2. Bing Search v7 API

Bing(Microsoft社の検索エンジン)が蓄積し保有するデータを、Web,ビデオ、画像、ニュースといったカテゴリから検索するためのAPI。


3. 仕組み構築までの流れ

今回は以下の流れで画像判定の仕組みを作っていきます。

  • 出荷基準を策定する
  • 教師データとなる画像を集める
  • 教師データとして画像をAzureにインプットし学習させる

4.なすの出荷基準

Web検索エンジンでナスの出荷基準を検索してみると、地域ごとに独自の出荷基準こそ設けられているものの、全国レベルではこれといって統一された基準はないように見受けられます。一方で、おおむね以下のような共通の傾向が見えてきました。

  • 病変や損傷がないこと
  • 色づきが失われていないこと
  • 曲がりが少ないこと

そこで本稿では極端な傷、病変を検出することを目的とした画像判定の仕組みを作ることとしました。


5.教師データとなる画像を集める

5.1.Bing Search v7 APIを利用し大量の画像を入手する

今回はAzure Cognitive サービスの一つである、Bing Search v7 APIを利用し、ナスの画像を収集しました。なお、収集した画像については処理を施したうえで掲載しております。あらかじめご了承ください。

フリー版のBing Search v7 APIからはキーワードに応じた検索結果を最大1,000件、一度に150件ずつ、画像のURLを含むJSONオブジェクトとして取得することができます。しかし、実際に教師データとして採用できた画像はそのうち1%程度とかなり絞られました。画像データにナスは写っているものの、イメージに占める背景の青空の割合が極端に大きいもののほか、地面、人物、収穫量グラフなど、教師データとして採用するには適さないものが多かったためです。検索キーワードを工夫するなどしてBing Search v7 APIをうまく活用すれば、個人では到底集めきれない、Bingの持つビックデータを活用できるかもしれません。 しかし、筆者が確実と考えるのは、実際にカメラを持って生産現場に行くことです。 学習モデルの構築にとって価値があるのは、スーパーで売られているような立派なナスではなく、生産現場で見向きもされず打ち捨てられてゆくナスだからです。

5.2.Bing Search v7 APIで得られたJSONオブジェクト(キーのみ)

Bing Search v7 APIに、実際にAPIキーを使ってアクセスを試みたところ、以下のようなJSONオブジェクトを含むJSON配列が取得できました。このうち、”contentUrl”の値に画像のURLが入ります。

{“webSearchUrl”:””,
“name”:””,
“thumbnailUrl”:””,
“contentUrl”:””,
“hostPageUrl”:””,
“contentSize”:””,
“encodingFormat”:”jpeg”,
“hostPageDisplayUrl”:””,
“width”:,
“height”:,
“thumbnail”:{“width”:,”height”:},
“imageInsightsToken”:””,
“insightsMetadata”:{“pagesIncludingCount”:1,”availableSizesCount”:1},
“imageId”:””,”accentColor”:””}

6.画像のアップロードとタグ付け

6.1.Custom Vision Predictionの作成

画像分析の予測モデルを作成するには、Azure Portalで”Computer Vision”と検索し、Cognitive ServicesのCustom Vision Prediction(preview)が出てきますのでこれを新規リソースとして作成します。

6.2.Computer Vision Predictionの価格レベル

フリープランは画像判定のAPIコール回数に上限があります。
有料プランならば毎秒10APIコールを行うことができ、1時間に3,6000本の画像を判定することができます。収穫されたばかりのナスがベルトコンベアの上を大量に流れるような状況下でも画像分類子を並列で動かすなどして十分対応できそうです。

Freeプラン・・・2トランザクション秒10,000コール/月
Standard・・・10トランザクション秒

6.3.Custom Visionのプロジェクト作成

Computer Visionのプロジェクトを作成します。ここで選択する”ドメイン”に応じ、適用される画像判定のアルゴリズムがその分野に最適化されるようです。Microsoft社のドキュメントによると、Foodドメインを選んでおけば、レストランの料理のような画像たけでなく、今回のような野菜単体の画像判定にも適するということです。

食料 レストランのメニューで見るような料理の写真に最適化されています。
個々のフルーツや野菜の写真を分類する場合、食料ドメインを使用します。

Custom Vision で分類子を構築する方法(2018/05/02)

6.4.画像のアップロード

Add Imageボタンをクリックして、ローカルフォルダにある複数の教師画像をまとめてアップロードすることができました。アップロードする画像がたくさんあっても簡単です。

6.5.画像のタグ付け

表示される画像に対して教師として正常/異常のタグをつけていく、単調ながらも学習モデルの精度を左右する最重要ポイントです。次へボタンを押し、アップロードした複数の教師データへどんどんタグをつけていくことができます。

6.6.トレーニングの実行

画像へのタグ付けが完了したらトレーニングを実行します。画像を追加したら際も再度トレーニングを実行します、追加の画像をもとに、前回からの差分が学習され、モデルが強化されます。

6.7.クイックテスト

トレーニングした学習モデルへ、評価用に調達したナスの画像をアップロードします。Bing Image Search v7 APIで収集した画像をもとにトレーニングを行った画像分析器は、最後の一枚をのぞき、傷ありのナスを正しく判定しました。

テスト画像 予測 テスト結果(キャプチャ) 備考
正常 異常
きれいなナス 63.7% 36.2%
92.7% 7.2%
傷のあるナス 7.8% 92.1%
3.2% 96.7%
58.3% 41.6% 傷があるが、正常と判断されてしまった。

 

7.フィードバックと再トレーニング

“正常”と誤検出された画像に対して、”異常”タグを付けなおし間違いであることを教えます。

その後トレーニングを再実行し、分析器を強化します。

 

 


8.精度向上に向けて

ナスの選果場では畑に実をつけたナスではなく、収穫されベルトコンベアの上を流れるナスを機械的に画像分析にかけるような使い方が想定されます。その際、Custom Visionの学習モデルで分類させる画像の写し方を教師データ画像の写し方と統一することで、分類精度を大幅に向上させられることが期待できそうです。

例えば以下のような写し方のルールが考えられます。

  • 背景を同じにする

教師画像データと、判定させるナスの画像の背景を同じにするなどして、Custom Visionがナスの画像だけに集中できるようにする。

  • 1画像に写りこむナスを1つとする

複数のナスが写る画像と、一本のナスの画像をComputer Visionが等価なものとして比較しないようにする。

  • 角度を揃える
  • ナスのズーム比率を揃える

極端に小さかったり大きいと誤認識されないための対策

また、ベルトコンベアの中央を透明にし、裏側も画像分析にかけるような工夫が実際の出荷検査で、基準に満たないナスを検出するために必要と考えられます。


9.まとめ

本稿ではAzureのBing Search v7 APIにより、すばやく教師となる画像データを収集し、Custom Visionサービスを使って、簡単に画像分類子のプロトタイプを作成することができました。作成したモデルはWeb APIとして既存のアプリケーションに組み込むこともできます。読者の皆様におかれましては、日常の課題の解決に是非AzureのCustom Visionサービス適用を検討されてみてはいかがでしょうか。