- 調査・研究
SalesforceのAI機能で画像認識を試してみた
Salesforce Spring’17のリリースでAI機能「Salesforce Einstein プラットフォーム(以下、 Einstein )」が搭載されたとのニュースを見たので、遅まきながら使ってみました。
今回はHerokuプラットフォーム(以下、Heroku)環境にサンプルアプリをデプロイし、cURLコマンドからEinstein Vision サービス (以下、 Einstein Vision )のAPIを実行しながら、実際にEinstein Visionで画像の学習と画像認識を試してみました。
Einstein Visionを試してみる
Einstein Visionによる画像認識は2種類あります。(2018年5月時点)
・Einstein Image Classification アプリ:画像全体から認識して分類する
・Einstein Object Detection アプリ :画像内に写された複数の物体を認識する
今回は、「Einstein Image Classification アプリ」を試してみます。6種の品種ごとにラベル分けした犬の画像をEinstein Visionに学習させて、オリジナルのモデルを作成します。作成したモデルで犬の画像を認識させ、どの品種の犬なのかを判定してみます。
手順は以下の通りです。
<手順>
1. サンプルアプリをHerokuへデプロイ
2. Einstein Platform Serviceから認証トークンを取得
3. 画像をEinstein Visionにアップロード
4. Einstein Visionに学習させる
5. 画像認識を実行
1. サンプルアプリをHerokuへデプロイ
Heroku上でEinstein Visionを試すことができるサンプルアプリ「einstein-vision-node」をデプロイします。
※デプロイ方法は参考になるサイトが沢山あるので、ここでは省略します。
2. Einstein Platform Serviceから認証トークンを取得
Einstein Platform ServiceのGenerate an OAuth Tokenから認証用トークンを取得します。
入力値は、Herokuにデプロイしたサンプルアプリの環境変数を指定します。
入力項目の詳細は以下の通りです。
・Email or Account ID : EINSTEINVISIONACCOUNT_ID
・Private Key : EINSTEINVISIONPRIVATE_KEY
・ファイルを選択 : デフォルトのまま
・Expiration in Mins : トークンの有効時を分単位で指定(任意の値)
「GET TOKEN」ボタンを押して、トークンを取得します。
3. 画像をEinstein Visionにアップロード
学習させる画像をEinstein Visionにアップロードして、データセットを作成します。 Einsteinから提供されているAPIをcURLコマンドか
● 学習用画像
オリジナルのモデルを作るためには、最低限3つの条件があります。
・最低2つ以上のラベル
・1つのラベルに12枚以上の画像
・全体で40枚以上の画像
今回は、以下6種の犬の画像を、30枚ずつ用意しました
1. ビーグル
2. チワワ
3. ゴールデンレトリバー
4. パグ
5. 柴犬
6. トイプードル
アップロードするフォルダ構成は以下の通りです。 各品種のフォルダ名が、そのままラベル名となります。
● 画像のアップロードおよびデータセット作成
学習画像が用意できたら、Einsteinから提供されているAPIを実行して、画像をEinstein Visionへアップロードし、データセットを作成します。
コマンド
1 2 3 4 5 6 7 |
curl -X POST / -H 'Authorization: 認証用トークン' / -H 'Cache-Control: no-cache' / -H 'Content-Type: multipart/form-data' / -F 'type=image' / -F 'data=@アップロードするzipファイル名(パス)' / https://api.einstein.ai/v2/vision/datasets/upload/sync |
実行結果
APIの実行結果より、作成されたデータセットに付与されたdatasetIDが確認できます。 今後、このデータセットを利用する際は、付与されたdatasetIdの値を指定します。
4. Einstein Vision サービスに学習させる
作成したデータセットを使って、Einstein Visionにアップロードした画像を学習させます。
● 学習を実行させる
コマンド
1 2 3 4 5 6 7 |
curl -X POST \ -H 'Authorization: 認証用トークン' \ -H 'Cache-Control: no-cache' \ -H 'Content-Type: multipart/form-data' \ -F 'name=モデル名' \ -F 'datasetId=データセットID' \ https://api.einstein.ai/v2/vision/train |
実行結果
データセットIDと同様に、APIの実行結果からモデルに付与されたmodelIdが確認できます。 こちらも、今後このモデルを利用する際は、付与されたmodelIdの値を指定します。
● 学習状況の確認
モデルの学習状況を確認することができます。
コマンド
1 2 3 4 |
curl -X GET \ -H 'Authorization: 認証用トークン' -\ H 'Cache-Control: no-cache' \ https://api.einstein.ai/v2/vision/train/モデルID |
実行結果
学習が完了している場合、statusが”SUCCEDED”となります。
※学習中の場合は、statusが”RUNNING”となります。
5. 画像認識を実行
テスト画像を使用して、実際に画像認識を実行します。
コマンド
1 2 3 4 5 6 7 |
curl -X POST \ -H 'Authorization:認証用トークン' \ -H 'Cache-Control:no-cache' \ -H 'Content-Type:multipart/form-data' \ -F 'sampleContent=認識させる画像ファイル名(パス)' \ -F 'modelId=モデルID' \ https://api.einstein.ai/v2/vision/predict |
● テスト1「チワワ」
認識させる画像
実行結果
データはJSON形式で返却され、類似度が高いラベル順に並べられています。データを見てみるとチワワの確率が1.0ということで、テストに使用した画像に写っている犬の品種はチワワであると認識されました。
● テスト2「トイプードル」
認識させる画像
実行結果
トイプードルであると認識されました。
● テスト3「柴犬」
認識させる画像
実行結果
柴犬であると認識されました。
まとめ
試してみた結果、30枚ずつの適当な画像で学習させましたが良い
Einstein Visionを活用できる事として、例えば「故障した部品の画像を入力させて故障原因や事象を自動認識で特定」や「SNSの投稿画像から自社製品の検知」などがあります。 画像から得られる情報は多くあるため、ビジネスでの活用が期待できます。