ROMANCE DAWN for the new world

Microsoft Azure を中心とした技術情報を書いています。

Azure Custom Vision を Docker コンテナで使ってみた

先週の土曜日、Japan Azure User Group 9周年イベントで LT してきました。

jazug.connpass.com

タイトルからお察しの通り、懇親会でのネタ的な内容だったので、このスライドに大した話は書いてありません。

speakerdeck.com

せっかくなので、デモを構築した手順をまとめておきたいと思います。

Azure Custom Vision とは

Azure Custom Vision は、画像に任意のラベルを適用した判別モデルを構築できる Azure の AI サービスです。
似たようなサービスに Computer Vision もありますが、プリセットのラベルのみなので、自由にカスタマイズできるところが大きな違いです。

画像判別モデルを構築する

画像判別モデルは、Custom Vision Web サイトを利用して、画像のアップロード→トレーニング→評価の3ステップで構築できます。
このあたりの情報は多いので、公式ドキュメントなどを参照してください。
docs.microsoft.com

今回は、Dockerfile にエクスポートしたかったので、コンパクト ドメインを選択しました。プロジェクトを作成する際に、General (Compact) を選択します。
f:id:TonyTonyKun:20190910002839p:plain

プロジェクト作成後、五等分の花嫁の原作から集めてきた画像に、五つ子の名前をタグづけしてアップロードしました。

Dockerfileにエクスポートする

トレーニングした画像判別モデルをアプリケーションに組み込むには、いくつかの方法があります。
最もお手軽なのは、Custom Vision Web サイトで提供されるマネージドな API を呼び出すことですが、アプリケーションの形式に合わせて、画像判別モデルをエクスポートできます。

f:id:TonyTonyKun:20190910002919p:plain

今回は、Dockerfile を選択しました。コンテナ環境ならどこでもデプロイできます。Azure であれば、Web Apps とか Container Instances とか Kubernetes Services など、用途に合わせてサービスを選択することができます。
注意点として、コンテナ環境で動作するのですが、内部的に Azure 側への通信を行なっているため、完全なオフライン環境では動きません。
完全なオフライン環境で動かしたいときは、CoreML のような iOS 向けの形式を選択しましょう。

画像判別モデルを Docker コンテナでテストする

ダウンロードした ZIP を展開すると、Python で書かれたアプリケーションと Dockerfile が入った構成になっています。

f:id:TonyTonyKun:20190910002945p:plain

Dockerfile をビルドして、ローカルで実行します。

$ docker build -t thara0402/gotobun:2.0.0 .
$ docker run -it --rm -p 8080:80 thara0402/gotobun:2.0.0

あとは API を呼び出せば良いのですが、最近気に入っている Visual Studio Code の拡張にある REST Client を使いました。

f:id:TonyTonyKun:20190910003001p:plain

上記では、Azure Blob Storage にアップロードした画像 URL を渡していますが、/image で API を叩くと、画像データをそのまま POST することもできます。
原作から集めてきた未来の花嫁の画像を渡してテストしました。

まとめ

Azure Custom Vision は、画像に好きなラベルをつけて、自分だけの画像判別モデルを作ることができるサービスです。画像判別モデルは、アプリに合わせたフォーマットでエクスポートして組み込むこともできます。
少ない学習データ(最低5枚)でも大丈夫ですし、画像アップロード、トレーニング、評価の3ステップなので、何か自分の楽しめるネタで試してみるといいと思います。

気になる?未来の花嫁の予想結果ですが、長女か三女の可能性が高いようでした。ちなみに、五つ子の過去が明らかになる 11 巻は 9/17 に発売です。

五等分の花嫁(11) (講談社コミックス)

五等分の花嫁(11) (講談社コミックス)