Cognitive Services Custom Vision から画像解析モデルを Dockerimage に Export して利用する

Custom Vision を利用すると、最小で画像5枚から画像解析モデルを作成し、Web API や CoreML、TensorFlow、ONNX のフォーマットで Export して利用できるほか、そのままお手持ちの Docker 環境で Image Build して Web API サービスとして利用できる Dockerfile としても Export 可能です。

今回は Custom Vision で作成したモデルを Dockerfile として Export し、ローカルの Docker 環境で動かして画像解析してみるまでの手順を紹介します。


準備


  • Custom Vision の利用環境



  • Docker 環境 (Windows または Linux)


    • 以下の手順では、Windows10 + Docker for Windows (ver 18.09.2)、Linux コンテナーで確認しています。




手順


Custom Vision で画像解析モデルを作成、Export


Custom Vision で画像解析モデルを作成

Custom Vision を利用した独自の画像分類およびオブジェクト検出のアルゴリズム構築 の手順を参考に、画像分類(Classification) または オブジェクト検出(Object Detection) モデルを作成します。

モデルの Export を行いたいときは、Project 作成時に "compact" と書かれている Domain を選択します。

20190706_01.png

作成済みの Project を使いたい場合は、設定画面で "compact" と記されている Domain を選択し、Train すると Compact モデルが作成されます。

20190706_02.png


Dockerimage で Export

モデルを作成した Project で [Performance] 画面を開きます。

上部バーの [Export] をクリックします。

20190706_03.png

Export する形式は [Dockerfile] を選択します。

20190706_04.png

Docker Version は Linux または Windows をお手持ちの環境に合わせて選択します。

20190706_05.png

モデルが準備できて [Download] と表示されたらクリックしてダウンロードします。

20190706_06.png

ダウンロードした Dockerfile の ZIP ファイルを展開すると、以下のような構造になっています。

Web サービスのアプリ部分も含まれているため、Image Build してすぐに利用できます。

CVDockerImage

┗ app

 ┗ app.py

 ┗ labels.txt

 ┗ model.pb

 ┗ predict.py

 ┗ requirements.txt

┗ azureml

 ┗ README.txt

 ┗ score.py

┗ Dockerfile

┗ README.txt


Dockerfile から Image Build、Web API でアクセス

ダウンロードした dockerfile (ZIP ファイル) を展開しておきます。

docker コマンドで Image Build を行います。

設定
※ご自身の環境に合わせて変更してください

dockerfile を展開したディレクトリ
C:\data\CVDockerImage

作成する Docker Image の名前
cvclassification

> docker build -t cvclassification C:\data\CVDockerImage

しばらくして、以下のようなイメージ作成が成功したメッセージが表示されたら OK です。

> docker build -t cvclassification C:\data\CVDockerImage

Sending build context to Docker daemon 5.105MB
Step 1/7 : FROM python:3.5
3.5: Pulling from library/python
:
Successfully built 0000a00a0000
Successfully tagged cvclassification:latest

ls コマンドでイメージが作成されていることを確認します。

> docker image ls

REPOSITORY TAG IMAGE ID CREATED SIZE
cvclassification latest 0000a00a0000 About 5 minutes ago 1.51GB

run コマンドでコンテナーを起動します。以下では Web サービスを localhost (127.0.0.1)、Port: 4000 に設定しています。

> docker run -p 127.0.0.1:4000:80 -d cvclassification

000a00aa000a

ブラウザーで http://localhost:4000 にアクセスすると、Custom Vision の Host メッセージが表示されれば OK です。

20190706_07.png

では Web API としてアクセスしてみます。


  • 画像ファイル(バイナリ)を送信する場合: http://localhost:4000/image

  • 画像ファイル URL を送信する場合: http://localhost:4000/url

POST http://127.0.0.1:4000/image

Content-Type: application/octet-stream
Body: /*画像ファイル(バイナリ)*/

解析結果が取得できればOKです。

20190706_08.png

ps -a コマンドで作成されているコンテナーを確認できます。

> docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
000a00aa000a cvclassification "/bin/sh -c 'python …" 21 minutes ago Up 20 minutes 127.0.0.1:4000->80/tcp heuristic_banach

起動したコンテナーは stop コマンドで停止できます。

> docker stop 000a00aa000a


参考

docker docs > Get Started, Part 2: Containers