毎日、IBMの研究に基づいて、2.5キンチリオンのデータが作成されています。そのデータの多くは、大きなテキスト、オーディオ録音、画像など、非構造化データです。データで有用なことを行うには、最初に構造化されたデータに変換する必要があります。
このコードパターンでは、開発者がオープンソースのディープラーニングモデルを見つけて実験できる交換であるモデルアセットエクスチェンジ(MAX)のモデルの1つを使用します。具体的には、画像キャプションジェネレーターを使用して、画像をキャプションし、ユーザーが画像ベースの画像コンテンツを介してフィルタリングできるWebアプリケーションを作成します。 Webアプリケーションは、Tornadoを使用して軽量のPythonサーバーに裏打ちされたインタラクティブなユーザーインターフェイスを提供します。サーバーはUIを介して画像を取り入れ、モデルの休憩エンドポイントに送信し、UIに生成されたキャプションを表示します。モデルのRESTエンドポイントは、Maxで提供されるDocker画像を使用してセットアップされています。 Web UIには、各画像の生成されたキャプションと、キャプションに基づいて画像をフィルタリングするインタラクティブワードクラウドが表示されます。
読者がこのコードパターンを完了したとき、彼らは次の方法を理解します。

以下は、Webアプリの短いデモを含むMaxに関するSpark+AI Summit 2018での講演です。
コードパターンを実行する方法:
モデルドキュメントを展開して、画像キャプションジェネレーターモデルをIBMクラウドに展開します。既にモデルAPIエンドポイントを利用できる場合は、このプロセスをスキップできます。
注:モデルを展開するには時間がかかる場合があります。ローカルで実行してみることができます。
Deploy to IBM Cloud押します。 IBMクラウドアカウントをまだ持っていない場合は、作成する必要があります。
Delivery Pipelineをクリックし、フォームのCreate +ボタンをクリックして、WebアプリのIBM Cloud API Keyを生成します。

APIキーが生成されると、 Region 、 Organization 、およびSpaceフォームのセクションが登場します。上記のエンドポイントを展開した状態で、 Image Caption Generator Model API Endpointセクションを入力し、 Createをクリックします。
このエントリの形式は
http://170.0.0.1:50005000でなければなりません

ツールチェーンで、アプリの展開中にDelivery Pipelineをクリックして視聴します。展開すると、 View appクリックすることでアプリを表示できます。

Quayの最新のDocker画像を使用して、KubernetesにモデルとWebアプリを展開することもできます。
Kubernetesクラスターで、次のコマンドを実行します。
kubectl apply -f https://raw.githubusercontent.com/IBM/MAX-Image-Caption-Generator/master/max-image-caption-generator.yaml
kubectl apply -f https://raw.githubusercontent.com/IBM/MAX-Image-Caption-Generator-Web-App/master/max-image-caption-generator-web-app.yaml Webアプリは、クラスターのポート8088で利用できます。モデルは内部でのみ利用可能になりますが、 NodePortから外部からアクセスできます。
注:IBMクラウドにWebアプリを展開するには、IBM Cloud Kubernetesサービスで展開するのではなく、上記のIBMクラウド命令に展開することをお勧めします。
注:これらの手順は、
Deploy to IBM Cloud使用する代わりにローカルで実行するときにのみ必要です。
注:このセクションの一連の手順は、画像キャプションジェネレータープロジェクトページにあるものの変更されたバージョンです
APIのサービングモデルを自動的に開始するDocker画像を実行するには、実行します。
docker run -it -p 5000:5000 quay.io/codait/max-image-caption-generator
これにより、事前に構築された画像がQuayから引っ張られます(または、既にローカルでキャッシュされている場合は既存の画像を使用します)。モデルをローカルに構築する場合は、モデルREADMEの手順に従うことができます。
現在、このDocker画像はCPUのみであることに注意してください(後でGPU画像のサポートを追加します)。
APIサーバーは、インタラクティブなSwaggerドキュメントページを自動的に生成します。 http://localhost:5000にアクセスしてロードします。そこから、APIを探索し、テストリクエストを作成することもできます。
model/predictエンドポイントを使用してテストファイルを読み込み、APIから画像のキャプションを取得します。
モデルサンプルフォルダーには、APIをテストするために使用できるいくつかの画像が含まれています。または、独自の画像を使用できます。
たとえば、コマンドラインでテストすることもできます。
curl -F " image=@path/to/image.jpg " -X POST http://localhost:5000/model/predict{
"status" : " ok " ,
"predictions" : [
{
"index" : " 0 " ,
"caption" : " a man riding a wave on top of a surfboard . " ,
"probability" : 0.038827644239537
},
{
"index" : " 1 " ,
"caption" : " a person riding a surf board on a wave " ,
"probability" : 0.017933410519265
},
{
"index" : " 2 " ,
"caption" : " a man riding a wave on a surfboard in the ocean . " ,
"probability" : 0.0056628732021868
}
]
}次のコマンドを実行して、画像キャプションジェネレーターWebアプリリポジトリをローカルにクローンします。
git clone https://github.com/IBM/MAX-Image-Caption-Generator-Web-App
注:
cd ..Max-Image-Caption-Generator Directoryから最初にCDを出す必要がある場合があります
次に、ディレクトリをローカルリポジトリに変更します
cd MAX-Image-Caption-Generator-Web-App
このWebアプリを実行する前に、依存関係をインストールする必要があります。
pip install -r requirements.txt
次に、実行してWebアプリを開始します。
python app.py
デフォルトの画像の処理が終了したら(<1分)、 http://localhost:8088でWebアプリにアクセスできます。
画像キャプションジェネレーターのエンドポイントは、Webアプリが正常に開始するにはhttp://localhost:5000で利用できる必要があります。
別のポートを使用する場合、または別の場所でMLエンドポイントを実行している場合は、コマンドラインオプションで変更できます。
python app.py --port=[new port] --ml-endpoint=[endpoint url including protocol and port]
Dockerを使用してWebアプリを実行するには、コンテナがWebサーバーを実行し、RESTエンドポイントを実行するコンテナが同じネットワークスタックを共有する必要があります。これは、次の手順で行われます。
画像キャプションジェネレーターの休憩エンドポイントを実行するコマンドを変更して、コンテナ内の追加ポートをホストマシンのポートにマッピングします。以下の例では、ホストのポート8088にマッピングされていますが、他のポートも使用できます。
docker run -it -p 5000:5000 -p 8088:8088 --name max-image-caption-generator quay.io/codait/max-image-caption-generator
実行してWebアプリ画像を作成します。
docker build -t max-image-caption-generator-web-app .
以下を使用してWebアプリコンテナを実行します。
docker run --net='container:max-image-caption-generator' -it max-image-caption-generator-web-app
実行して、quay.ioで利用可能な最新のDocker画像を使用してWebアプリを展開することもできます。
docker run --net='container:max-image-caption-generator' -it quay.io/codait/max-image-caption-generator-web-app
これにより、上記のモデルDockerコンテナが使用され、Webアプリリポジトリをローカルにクローニングせずに実行できます。

長期に走るWebアプリには、ユーザーアップロードされた画像が大量にあります
http://localhost:8088でWebアプリを実行するとhttp://localhost:8088/cleanupで管理ページが利用可能です。これにより、ユーザーはサーバーからすべてのユーザーアップロードされたファイルを削除できます。[注:これにより、すべてのユーザーアップロードされた画像が削除されます]

このコードパターンは、Apache Softwareライセンスバージョン2に基づいてライセンスされています。このコードパターンに呼び出される個別のサードパーティコードオブジェクトは、独自のライセンスに従ってそれぞれのプロバイダーによってライセンスされています。貢献には、開発者証明書の原産地証明書、バージョン1.1(DCO)およびApacheソフトウェアライセンス、バージョン2の対象となります。
Apacheソフトウェアライセンス(ASL)FAQ