Cognitive Services ハンズオン
2019/06/28
KISオープンセミナー
矢野 翔大
•CustomVision
• 画像分類
• 食べ物画像の分類
• 物体検出
• 傷の検出
•【おまけ1】Custom Vision + Logic Apps
•【おまけ2】
• Custom Visionでアナログメータ読み取りの紹介
• MSLearnの紹介
アジェンダ
難しいことはよくわかんないけど
私でもAI作れるじゃん
本日のゴール
Custom Visionで画像分類
まずは食べ物の画像を分類してみましょう
Custom Vision の価格
操作をミスったら
高額課金が発生するポイントが2か所あるので
そこだけ注意が必要です
注意点・・・
https://drive.google.com/drive/folders/11Mu4MXXFVMJomS
2vK7TddGnMNKaxCQWv?usp=sharing
ハンズオンで使うので全部ダウンロードしてください
Azureポータルへアクセス
https://azure.microsoft.com/ja-jp/features/azure-portal/
クリック
リソースを作成する
②検索
リソースを作成する
クリック
リソースを作成する
クリック
必要な項目を入力する
項目 値
名前 適当に
サブスクリプション ご自身が契約してるもの
場所 東日本
• 一番近いところがお勧め
• 場所によって価格が変動することがある
予測価格レベル F0(無料の場合)
トレーニング価格レベル F0(無料の場合)
リソースグループ 任意の名前(ここで新しく作成可)
リソースグループを作成する場合
任意の名前を付けて
「OK」をクリック
リソースを作成する
②クリック
①作成完了まで待つ
デプロイ完了まで待つ
①クリック
②クリック
作成したCustom Vision のリソース
クリック
CustomVision ポータルへアクセス
クリック
※ブラウザはIE以外でお願いします
新しいプロジェクトを作成
クリック
新しいプロジェクトを作成
項目 値
Name 適当に
Description(任意) プロジェクトの説明
Resource Group Azureで作成したものを選択
Project Type Classification(分類)を選択
Classification Type Multiclass(画像1つにつき1タグ)
Domains Foodを選択
※用途で使い分ける
• General(他が当てはまらない場合)
• Food(食べ物)
• Landmarks(建造物など)
• Retail(小売り(洋服などもここ))
• Compact系(エクスポートしたい場合)
入力後クリック
今回使用する画像セット
https://www.vision.ee.ethz.ch/datasets_extra/food-101/
スイスのチューリッヒ工科大学の
コンピュータビジョン研究チームが公開しているものです。
クラス分けのタグ情報が付加された食べ物の画像です。
約5GBの一括ダウンロードです。容量に注意してください。
今回はこの中から一部を抽出して使用します。
画像を追加する
クリック
画像を追加する
トレーニング
データを使う
20枚選択して
クリック
画像にまとめてタグをつける
①20枚あることを確認
入力して
Enterキー
タグを入力後アップロードする
②クリック
①入力が確定したことを確認
※間違ったら「×」で削除
画像の追加完了
クリック
※同じ要領で他の画像もアップロードとタグ付けをしてください
全ての画像のアップロードとタグ付けまで完了
タグの一覧
学習させる
クリック
学習方法を選択して実行する
②クリック
※Advanced Trainingは課金ポイントです。後で紹介だけします。
この学習は学習時間を指定して実行します。
1回の学習で最小2240円~最大53000円ほどです。
①FastTrainingを選択
学習完了まで待つ(1~2分)
結果が表示されたら学習完了
これでもう
画像分類が出来ます
結果の見方
項目 説明
Precision(精度) 正しかったと識別された分類の割合。
100 個の画像が犬として識別され、
そのうち 99 個が実際に犬であった場合、
精度は 99% になります。
Recall(再現率) 正しく識別された実際の分類の割合。
実際にりんごである画像が 100 個あり、
80 個がりんごとして識別された場合、
再現率は 80% になります。
AP(平均精度) 閾値で計算されたPrecisionの平均値
結果の見方
タグごとの結果が見れる
うまく分類できないタグは
調整して再学習など行う
結果の見方
学習するたびに
リストが増える
結果の見方
閾値
区分 閾値との関係 閾値を上げたらどうなるか
Precision 閾値を上げる
⇒上がる
間違って分類されるものが減る。
取りこぼしは増える
Recall 閾値を下げる
⇒上がる
取りこぼしは減る。
間違って分類されるものも増える
APIから呼び出す時に
調整できるかは不明
(パラメータが見当たらないため)
Quick Test
クリック
ローカルファイルをアップロードする
クリック
ローカルファイルをアップロードする
検証用データ
クリック
テスト結果を確認する
【結果】
99.9%の確率で
寿司だと分類されました
URLを指定してWEBの画像も使用可能
URLを入力
予測の履歴を確認
クリック
予測の履歴を確認
テストした結果はこ
こに表示されていく
予測の履歴を確認
マウスオーバーで結果が確認可能
クリックすれば詳細が確認できる
タグの修正
予測結果が間違っていた場合は
正しいタグをつける
保存すれば
次回の学習に使用される
モデルの公開
①クリック
②クリック
名前を入力して公開する(名前は何でもよい)
クリック
公開完了
公開すると
「Unpublish」に変化する
API実行用のURLとキーを確認する
クリック
API呼び出し用の情報を確認する(後で使います)
キー
URL
WEB上の画像を
使いたい場合はこっち
ローカルマシンの画像を
使いたい場合はこっち
Foodの中のHTMLをテキストエディタで開く
テキストエディタで開く
Foodの中のHTMLをテキストエディタで開く
$.ajax({
url: "https://YourUrl",
beforeSend: function(xhrObj){
// Request headers
xhrObj.setRequestHeader("Content-Type","multipart/form-data");
xhrObj.setRequestHeader("Prediction-key",“YoutKey");
},
①APIのURLを入力
※2つ前のスライドの値です
②APIのキーを入力
※2つ前のスライドの値です
HTMLファイルをブラウザで実行
クリック
ローカルファイルを選択
②クリック
①1枚選択
APIを使って画像の分類結果を受け取る
読み込んだ
ファイル
クリック
これでもうAPIさえたたけば画像分類できますね
結果が表示される
補足
ソースの解説
APIのドキュメント
クリック
APIのドキュメント
APIのドキュメント
先ほどのHTMLのもとに
なったJSはここにある
CustomVisionの公式ドキュメント
クリック
CustomVisionの公式ドキュメント
以上が画像分類です
Custom Visionで物体検出
今度は少し業務よりのものとして製品の傷の検出を試します
http://resources.mpi-inf.mpg.de/conferences/dagm/2007/prizes.html
使用する画像セット
ドイツのシンポジウムで開催されたコンペ用のデータセットです。
工業用部品の表面の欠陥を検出するという目標で、
・基本画像1000枚
・人工的につけられた欠陥を含む150枚
の画像が含まれています。
①クリック
新しいプロジェクトを作成
新しいプロジェクトを作成
項目 値
Name 適当に
Description(任意) プロジェクトの説明
Resource Group Azureで作成したものを選択
Project Type Object Detectionを選択
Domains Generalを選択
※用途で使い分ける
• General
• Logo(ロゴの検出)
• Compact
①クリック
画像を追加する
クリック
トレーニングデータ100枚選択
トレーニングデータ
クリック
画像をアップロードする
クリック
アップロード完了
クリック
タグをつける
アノテーション
クリック
アノテーション
ドラッグ&ドロップで
傷の場所を囲う
※なるべく最小に
新しいプロジェクトを作成
タグを入力
アノテーション
タグを入力して
Enter
アノテーション
タグがついたことを確認
次の画像に進み
アノテーションを行う
※100枚やる
アノテーション完了
100枚あることを確認
学習を行う
クリック
学習を行う
①クリック
②クリック
学習完了
QuickTestを行う
クリック
ローカルファイルをアップロードする
クリック
ローカルファイルをアップロードする
③クリック
②クリック
①検証用データ
学習結果を確認する
傷の検出が
できている
学習結果を確認する
閾値を操作する
学習を行う
閾値を上げると
傷なしとなった
学習を行う
閾値を下げると複数検出
していることがわかる
⇒一定値以下は切り捨てる
といった判断も必要
傷なし画像をアップロードしてみる
傷なし画像を選択
クリック
傷なしと判断したことを確認する
傷の検出はなし
APIを公開する
APIを公開する
クリック
公開完了
クリック
API呼び出し用のキーをメモする
HTMLファイルをテキストエディタで開く
APIキーに置き換えて保存する
$.ajax({
url: "https://YourUrl",
beforeSend: function(xhrObj){
// Request headers
xhrObj.setRequestHeader("Content-Type","multipart/form-data");
xhrObj.setRequestHeader("Prediction-key",“YourKey");
},
type: "POST",
data: $("input[name='ufile']").prop("files")[0],
processData: false,
contentType: false
})
HTMLファイルを実行してみる
クリック
画像を1枚選ぶ
検証用データ
クリック
1枚選択
画像を送信してAPIの推論結果を受け取る
クリック
傷の検出ができると画面に描画される
補足
ソースの解説
以上が物体検出です
難しいことは知らなくても
AIは作れる
【おまけ1】
Custom Vision + Logic Apps
CustomVisionを使ったノンコーディングのアプリ開発
※万が一早く進みすぎて時間が余ったらやります
【注意】
数十円程度の課金が
発生します
1分間に2回起動、2時間稼働
コネクタ数5
アクション:2回*60分*2時間分*0.003136= 0.75264円
Standardコネクタ:2回*60分*2時間分*5コネクタ*0.014560= 17.472円
Logic Appsの価格
OneDriveにアクセスする
https://onedrive.live.com/about/ja-jp/
クリック
もしくは、OneDrive for Businessにアクセスする
https://onedrive.live.com/about/ja-JP/business/
クリック
フォルダを2つ作成する
Excel用に作成 画像用に作成
excelフォルダにexcelファイルを格納する
ドラッグ&ドロップで格納する DLしてきたやつを使います
Excelファイルの格納を確認する
Logic Appのリソースを作成する
入力する
クリック
Logic Appのリソースを作成する
Logic Appのリソースを作成する
クリック
Logic Appのリソースを作成する
項目 値
名前 適当に
サブスクリプション 契約してるもの
リソースグループ 既に作成しているもの
場所 東日本
LogAnalytics OFF
クリック
Logic Appのリソースを作成する
①クリック
②クリック
デザイナーでフローを作成する
クリック
デザイナーでフローを作成する
ここでフローを構築していく
デザイナーでフローを作成する
ここにある
トリガーを作成する
①検索
②クリック
Office365
buisiness版は
こっち
トリガーを作成する
クリック
トリガーを作成する(サインイン&アクセス許可)
クリック
トリガーを作成する(サインイン後の状態)
トリガーを作成する
①クリック
②クリック
トリガーを作成する
画像フォルダを選択
トリガーを作成する
間隔を30秒に設定
※これで30秒に1回新しいファイルがないか確認するファイル監視の設定完了です
アクションを作成する
クリック
こまめに保存
アクションを作成する(HTTPリクエスト)
①検索
②クリック
アクションを作成する(HTTPリクエスト)
クリック
アクションを作成する(HTTPリクエスト)
①POSTを選択
②CustomVision
のAPIのURL
③CustomVision
のAPIのキー
④クリック
⑤クリック
アクションを作成する(HTTPリクエスト)
選択後は
このようになる
アクションを作成する(JSON解析)
①検索
②クリック
③クリック
アクションを作成する(JSON解析)
クリック
アクションを作成する(JSON解析)
①クリック
②クリック
アクションを作成する(JSON解析)
①開いて
中身をコピー
※DLしたファイルで
す
②貼り付け
アクションを作成する(JSON解析)
入力後はこんな感じ
アクションを作成する(EXCEL操作)
①検索
②クリックBusiness版は
こっち
アクションを作成する(EXCEL操作)
クリック
アクションを作成する(EXCEL操作)
クリック
アクションを作成する(EXCEL操作)
①クリック
②Excelファイルを
格納している場所へ移動
アクションを作成する(EXCEL操作)
クリック
アクションを作成する(EXCEL操作)
クリック
アクションを作成する(EXCEL操作)
①クリック
②すべてON
③クリック
アクションを作成する(EXCEL操作)
①クリック
②クリック
アクションを作成する(EXCEL操作)
①For eachが
自動追加される
②項目を
それぞれ選択する
保存して実行する
①保存 ②実行
OneDriveに画像を
D&Dでアップロード
画像をアップロード
アップロードからファ
イル選択でも可能
画像をアップロード
アップロードされたことを確認
画像をアップロード
作成したフローが実行される
EXCELファイルにデータが更新されていればOK
複数行追加される可能性がある。
不要なものは除外するなど
デザイナー側での工夫は必要です。
ぜひチャレンジしてみてください
これで自動化ができた
ユーザユーザ
①アップロード
②取得
※常時監視
③API実行
④推論結果
⑤結果を書き込み
ユーザは画像をOneDriveにアップロードするだけで推論結果が自動で蓄積されていく
画像
リソースを無効化する(後片付け)
無効にする
有効のままだと30秒に1回
実行され課金され続ける
リソースの削除(後片付け)
使わないものはリソース
グループごと削除する
【余談】実はCustomVisionコネクタも存在している
HTTPリクエストと
JSONの解析が1つになったもの
【余談】実はCustomVisionコネクタも存在している
しかし、このコネクタの
APIのバージョンが古くて今は使えない
【余談】実はCustomVisionコネクタも存在している
なので今回は自力で組み立てる
※所詮中身はREST APIなので難しくない
【余談】書き込み先はDBでも良い
SQL SrverやAzureストレージ、
ブロックチェーンデータベースなどに
書き込むことも可能
【おまけ2】
Custom Visionでアナログメータの読み取り
https://qiita.com/t-sho/items/5e6cbb3fbb547d946bed
当初はこれをハンズオンでやる予定でしたが、
1時間くらい学習(待ち時間)が発生するのと、
無料枠を使いきるので紹介だけしておきます
※アノテーションがめんどくさいだけで
1日~2日あればできます。
アナログの湿度計を使って
1目盛り単位で画像を撮って学習させてます
※1目盛り当たり20枚の教師データ使用
(50目盛り分で1500枚)
99.8%の確率で
「湿度32%」だと推論
Azureの無料の公式学習サイト
https://docs.microsoft.com/ja-jp/learn/
Azureの使い方がハンズ
オン形式で学べます
Cognitive Services ハンズオン
-おわり-
お疲れさまでした

20190628 cognitive serviceshandson