IBM MAXがARM対応したのでRaspberry Pi で動かす。

#概要
IBM MAXをご存知でしょうか？
IBMから提供されており、深層学習済みモデルをREST APIで接続可能なサービスをDocker対応のコンテナとして利用することができます。Node-REDから呼び出すこともできます。
2019年11月頃から、Raspberry Piを含むARM系CPUを搭載するIoT機器や組み込み機器、ARM系CPU搭載のPCに対応するようになりましたので、本記事では、Raspberry Piを用いて、IBM MAXのObject Detectorの動作確認を行います。IBM MAXで、どのようなことが出来るかは、参考資料をご覧いただくとベストです。

#Raspberry Piで動かす
IBM MAXのObject Detectorについて、Githubに記載されている「Run Locally」の手順に従って進めていきます。Object Detectorのコンテナを自動起動したいので、少しアレンジを加えています。

## Raspberry PiにDockerを入れる
IBM MAXは、コンテナとして稼働しますので、Dockerを下記のコマンドを実行し、導入します。

```
$ curl -sSL https://get.docker.com | sh
$ sudo usermod -aG docker pi
$ sudo systemctl start docker
```
実行後、一度ログアウトし、Raspberry Piのpiユーザーでdockerコマンドを実行できるようにします。再ログインして作業を継続します。

## IBM MAX Object Detectorのコンテナをビルド
Raspberry Pi対応のコンテナを用意するために必要なファイルをGithubから取得し、ビルド(コンテナを生成)します。

```
$ git clone https://github.com/IBM/MAX-Object-Detector.git
$ cd MAX-Object-Detector/
$ docker build -f Dockerfile.arm32v7 -t max-object-detector .
```
ビルドされたコンテナイメージを確認します。コンテナイメージにより、いつでもビルドした時点のバージョンのソフトウェアを動かすことができます。再現性があるって素晴らしい！

```
$ docker images
REPOSITORY            TAG                  IMAGE ID            CREATED             SIZE
max-object-detector   latest               be165b81e855        5 minutes ago       1.55GB
codait/max-base       arm-arm32v7-latest   110efb51671f        4 days ago          742MB
```
##動作確認
コンテナを起動し、動作を確認します。コンテナイメージ「max-object-detector」を、「max-object-detector」という名称のコンテナとして起動します。

```
$ docker run --name max-object-detector -itd -p 5000:5000 max-object-detector
```

Webブラウザで、http://raspberrypi.local:5000/app/ にアクセスしますと、Object DetectorのWebアプリケーションが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41414/77611e65-9244-65ad-0b2a-402527f3dd38.png)

[Githubにサンプル画像データ](https://github.com/IBM/MAX-Object-Detector/tree/master/samples)がありますので、いくつかダウンロードしまして、Webアプリの「Upload an Image」にて画像判別が出来ているか確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41414/1a029a7c-c9ca-4a8c-aa71-d5dd9f6e3d2d.png)

動作確認に使用しましたRaspberry Piは3B+です。メモリが1GBしかないので多少時間を要します。Raspberry Pi 4であれば、メモリが2GBや4GBモデルがありますので、そちらのほうが高速です。

これで、Raspberry Pi上で、IBM MAXのObject Detectorを動かすことができました。
あとひと手間加えて、コンテナを常時起動するようにします。

```
$ sudo systemctl enable docker
$ docker update --restart=always max-object-detector
```
Raspberry Piを再起動し、Webブラウザで、http://raspberrypi.local:5000/app/ にアクセスできるか確認します。無事表示されれば、コンテナが自動起動していることになります。

これで、会社や自宅サーバーで、IBM MAXにより深層学習済みモデルをRESTサービスとして使用することが出来ることが確認できました。Object Detector以外にIBM MAXには、様々なモデルがあります。ライセンスは「Apache License 2.0」のため商用利用も可能です。

#その他
関連情報など
##IBM DAX
IBM MAXと並んで、DAXというものもあります。IBM MAXは深層学習済みのモデルを、RESTサービスのためのインタフェースを含め、dockerコンテナとして手軽に利用できます。IBM DAXは、Data Asset eXchangeの略称で、深層学習のためのオープンなデータを提供しています。深層学習を用いてAIサービスを作ろうとするときに、データを集めるこが最もきついのでかなり助かるのではないでしょうか？

##Watson Anywhere
THINK 2019で発表された「Watson Anywhere」。2019年12月現在は、IBM Cloud Pak for Dataを用いることで、オンプレミスでも、IBM Cloud以外のAWSなどでも、Watsonを使用することができるようになりました。Watsonだって、オンプレ対応のAIなんです！(パブリック版は無料プランがあって手軽ですが。)

#参考資料
- [Watson Anywhere](https://www.ibm.com/watson/jp-ja/watson-anywhere/)
- [IBM Data Asset eXchange](https://developer.ibm.com/jp/exchanges-data/)
- [IBM Model Asset Exchange](https://developer.ibm.com/exchanges/models/)
- [【2019/4月更新】学習済みの様々なディープラーニング・モデルをメチャ簡単に利用できる！ Model Asset Exchange(MAX)をご紹介します](https://qiita.com/ishida330/items/6e66323dfd56205fbe80)