Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Azure CustomVision ハンズオン

E2c61cbea45ae5f873d1502980e70a9c?s=47 shota-yano
February 18, 2020

Azure CustomVision ハンズオン

2020/2/18に社内で実施したAzure のCustom Visionを使ったハンズオンの資料です。

E2c61cbea45ae5f873d1502980e70a9c?s=128

shota-yano

February 18, 2020
Tweet

Transcript

  1. None
  2. 自己紹介 • 株式会社KIS • 矢野翔大 • 在宅勤務中 • 興味あること:ARとかVRとか電子部品 •

    趣味はモノづくり • ようやくMRTKv2触り始めた • Dynamics365 Guidesお試し中 • KumaMCNで活動中 MRTKv2 Dynamics365 Guides
  3. None
  4. Q1:プログラミングをやったことある人?

  5. Q1:Deep Learningを自分で実装したことある人?

  6. None
  7. None
  8. None
  9. いろいろあるけど 今日は学問的なことは省略!!

  10. None
  11. ・犬1匹 ・猫1匹 ・左にいるのが猫 ・右にいるのが犬 { “Class”:”Cat”, “Accuracy”:94.8 “Rect”:{ “top”:30,“left”:10, “width”:40

    ,”height”:50}, “Class”:”Dog”, “Accuracy”:98.1 “Rect”:{ “top”:25,“left”:60, “width”:42 ,”height”:75}}
  12. ・犬1匹 ・猫1匹 ・左にいるのが猫 ・右にいるのが犬 { “Class”:”Cat”, “Accuracy”:94.8 “Rect”:{ “top”:30,“left”:10, “width”:40

    ,”height”:50}, “Class”:”Dog”, “Accuracy”:98.1 “Rect”:{ “top”:25,“left”:60, “width”:42 ,”height”:75}} ざっくり言うと 人間が認知するのと同じようなふるまいをするもの
  13. None
  14. 人間の認知機能(Cognitive)機能の一部を Web APIとして利用できる“AIパーツ” Vision 視覚 Speech 音声 Language 言語 Decision

    決定 Search 検索 Labs ラボ
  15. 人間の認知機能(Cognitive)機能の一部を Web APIとして利用できる“AIパーツ” Vision 視覚 Speech 音声 Language 言語 Decision

    決定 Search 検索 Labs ラボ 画像分類 ビデオ読解 顔識別 感情判定 OCR 話者識別 音声⇔テキスト 文章解析 文脈理解 推定 予測 Bingエンジン による検索 Preview版
  16. 人間の認知機能(Cognitive)機能の一部を Web APIとして利用できる“AIパーツ” Vision 視覚 Speech 音声 Language 言語 Decision

    決定 Search 検索 Labs ラボ Computer Vision Custom Vision Face Video Indexer Form Recognizer Ink Recognizer Speech to Text Text to Speech Speech Translation Speaker Recognition Translator Text Text Analytics QnA Maker Immersive Reader Language Understanding Personalizer Content Moderator Anomaly Detector Autosuggest Custom Search Entity Search Image Search News Search Spell Check And more Academic Knowledge Knowledge Exploration Conversation Learner Personality Chat Answer Search Event Tracking And more
  17. MLの稼働環境不要 NN・DLの深い知識不要 あらゆるOS・言語で使える 各言語のSDK プラットフォーム別サンプル 従量課金 無料版で検証 利用に合わせて調整 データの即活用 Cognitive

    Servicesの特徴
  18. 人間の認知機能(Cognitive)機能の一部を Web APIとして利用できる“AIパーツ” Vision 視覚 Speech 音声 Language 言語 Decision

    決定 Search 検索 Labs ラボ 実際に触って体験してみましょう
  19. Custom Visionで画像分類 まずは食べ物の画像を分類してみましょう

  20. Custom Vision の価格

  21. ハンズオンで使う資料 https://github.com/shota-yano/Custom-Vision-Handson.git Git cloneかZIPファイル をダウンロードしてく ださい

  22. Azureのアカウント作成 ここからアカウント作る ※要クレジットカード https://azure.microsoft.com/ja-jp/

  23. Azureのアカウント(学生の場合) 学校で配られたメールアドレスが あれば始められるので アカウントがない場合は作ってください https://azure.microsoft.com/ja-jp/free/students/

  24. Azureポータルへアクセス https://azure.microsoft.com/ja-jp/features/azure-portal/ クリック

  25. リソースを作成する ②検索

  26. リソースを作成する クリック

  27. リソースを作成する クリック

  28. リソースを作成する 両方を選択 項目 値 名前 適当に サブスクリプション ご自身が契約してるもの リソースグループ 次のスライドに記載

    トレーニングの場所 東日本 • 一番近いところがお勧め • 場所によって価格が変動することがある トレーニング価格レベル F0(無料の場合)/S0(有料の場合) 予測の場所 F0(無料の場合) 予測価格レベル 東日本
  29. リソースグループを作成する場合 新規作成をクリック

  30. リソースグループを作成する場合 ①新規作成をクリック ②任意に名前を 決めて入力 ③Okをクリック

  31. 全部入力したら作成 作成をクリック 項目 値 名前 適当に サブスクリプション ご自身が契約してるもの リソースグループ 前のスライドで作成したもの

    トレーニングの場所 東日本 • 一番近いところがお勧め • 場所によって価格が変動することがある トレーニング価格レベル F0(無料の場合)/S0(有料の場合) 予測の場所 F0(無料の場合) 予測価格レベル 東日本
  32. デプロイ完了まで待つ ①クリック ②クリック

  33. 作成したCustom Vision のリソース クリック

  34. CustomVision ポータルへアクセス クリック ※ブラウザはIE以外でお願いします

  35. 新しいプロジェクトを作成 クリック

  36. 新しいプロジェクトを作成 項目 値 Name 適当に Description(任意) プロジェクトの説明 Resource Group Azureで作成したものを選択

    Project Type Classification(分類)を選択 Classification Type Multiclass(画像1つにつき1タグ) Domains Foodを選択 ※用途で使い分ける • General(他が当てはまらない場合) • Food(食べ物) • Landmarks(建造物など) • Retail(小売り(洋服などもここ)) • Compact系(エクスポートしたい場合) 入力後クリック
  37. 今回使用する画像セット https://www.vision.ee.ethz.ch/datasets_extra/food-101/ スイスのチューリッヒ工科大学の コンピュータビジョン研究チームが公開しているものです。 クラス分けのタグ情報が付加された食べ物の画像です。 約5GBの一括ダウンロードです。容量に注意してください。 今回はこの中から一部を抽出して使用します。

  38. 画像を追加する クリック

  39. 画像を追加する トレーニング データを使う 20枚選択して クリック

  40. 画像にまとめてタグをつける ①20枚あることを確認 入力して Enterキー

  41. タグを入力後アップロードする ②クリック ①入力が確定したことを確認 ※間違ったら「×」で削除

  42. 画像の追加完了 クリック ※同じ要領で他の画像もアップロードとタグ付けをしてください

  43. 全ての画像のアップロードとタグ付けまで完了 タグの一覧

  44. 学習させる クリック

  45. 学習方法を選択して実行する ②クリック ※Advanced Trainingは選ばないでください 1時間以上学習がかかるのでハンズオン何もできなくなります Standardプラン(S0)の場合1時間あたり2000円ちょっとかかります。 24時間回せば5万円くらいかかるので注意してください Freeプラン(F0)の場合、1時間学習した後強制的に学習が終わります ①FastTrainingを選択

  46. 学習完了まで待つ(1~2分)

  47. 結果が表示されたら学習完了 これでもう 画像分類が出来ます

  48. 結果の見方 項目 説明 Precision(精度) 正しかったと識別された分類の割合。 100枚の画像が犬として識別され、 そのうち 99枚が実際に犬であった場合、 精度は 99%

    になります。 Recall(再現率) 正しく識別された実際の分類の割合。 実際に犬である画像が 100枚あり、 80枚が犬として識別された場合、 再現率は 80% になります。 AP(平均精度) 閾値で計算されたPrecisionの平均値
  49. 結果の見方 項目 説明 Precision(精度) 正しかったと識別された分類の割合。 100枚の画像が犬として識別され、 そのうち 99枚が実際に犬であった場合、 精度は 99%

    になります。 Recall(再現率) 正しく識別された実際の分類の割合。 実際に犬である画像が 100枚あり、 80枚が犬として識別された場合、 再現率は 80% になります。 AP(平均精度) 閾値で計算されたPrecisionの平均値 犬99枚狐1枚合計100枚の画像を与える この100枚の画像は 全部犬だ 精度99%
  50. 結果の見方 項目 説明 Precision(精度) 正しかったと識別された分類の割合。 100枚の画像が犬として識別され、 そのうち 99枚が実際に犬であった場合、 精度は 99%

    になります。 Recall(再現率) 正しく識別された実際の分類の割合。 実際に犬である画像が 100枚あり、 80枚が犬として識別された場合、 再現率は 80% になります。 AP(平均精度) 閾値で計算されたPrecisionの平均値 犬の画像を100枚与える この100枚のうち 80枚は犬の画像だ 再現率80%
  51. 結果の見方 タグごとの結果が見れる うまく分類できないタグは 調整して再学習など行う

  52. 結果の見方 学習するたびに リストが増える

  53. 結果の見方 閾値 区分 閾値との関係 閾値を上げたらどうなるか Precision 閾値を上げる ⇒上がる 間違って分類されるものが減る。 取りこぼしは増える

    Recall 閾値を下げる ⇒上がる 取りこぼしは減る。 間違って分類されるものも増える APIから呼び出す時に 調整できるかは不明 (パラメータが見当たらないため) このパラメータをどう扱うかは作りたいもの次第 例:MRIなどの画像から癌を見つける場合 閾値を上げる:癌なのに癌じゃないと判断されるかも 閾値を下げる:癌じゃないのに癌だと診断されるかも どちらが良いのか?
  54. Quick Test クリック

  55. ローカルファイルをアップロードする クリック

  56. ローカルファイルをアップロードする 検証用データ クリック

  57. テスト結果を確認する 【結果】 99.9%の確率で 寿司だと分類されました

  58. URLを指定してWEBの画像も使用可能 URLを入力

  59. 予測の履歴を確認 クリック

  60. 予測の履歴を確認 テストした結果はこ こに表示されていく

  61. 予測の履歴を確認 マウスオーバーで結果が確認可能 クリックすれば詳細が確認できる

  62. タグの修正 予測結果が間違っていた場合は 正しいタグをつける 保存すれば 次回の学習に使用される

  63. モデルの公開 ①クリック ②クリック

  64. 名前を入力して公開する(名前は何でもよい) クリック 名前を入力 ※デフォルトの ままでもいい 予測に使うリースを選択 ※CustomVision作成時 に同時に作られてる

  65. 公開完了 公開すると 「Unpublish」に変化する ⇒これをクリックすれば 非公開に戻せる

  66. API実行用のURLとキーを確認する クリック

  67. API呼び出し用の情報を確認する(後で使います) キー URL WEB上の画像を 使いたい場合はこっち ローカルマシンの画像を 使いたい場合はこっち ※今回はこれを使う

  68. Foodの中のHTMLをテキストエディタで開く テキストエディタで開く

  69. 赤字の部分を書き換える $.ajax({ url: "https://YourUrl", beforeSend: function(xhrObj){ // Request headers xhrObj.setRequestHeader("Content-Type","multipart/form-data");

    xhrObj.setRequestHeader("Prediction-key",“YoutKey"); }, ①AURLを入力 ※2つ前のスライドの値です ②キーを入力 ※2つ前のスライドの値です
  70. HTMLファイルをブラウザで実行 クリック Microsoft EdgeかGoogle Chromeで実行してください。 Microsoft InternetExplorerは動作保証しません

  71. ローカルファイルを選択 ②クリック ①1枚選択

  72. APIを使って画像の分類結果を受け取る 読み込んだ ファイル クリック

  73. これでもうAPIさえたたけば画像分類できますね 結果が表示される

  74. 補足 ソースの解説

  75. APIのドキュメント クリック

  76. APIのドキュメント クリック

  77. APIのドキュメント ここに解説がある

  78. APIのドキュメント 一番下までスクロールすると 先ほどのサンプルソースのもとがここにある

  79. CustomVisionの公式ドキュメント クリック

  80. CustomVisionの公式ドキュメント

  81. 以上が画像分類です

  82. Custom Visionで物体検出 今度は少し業務よりのものとして製品の傷の検出を試します

  83. http://resources.mpi-inf.mpg.de/conferences/dagm/2007/prizes.html 使用する画像セット ドイツのシンポジウムで開催されたコンペ用のデータセットです。 工業用部品の表面の欠陥を検出するという目標で、 ・基本画像1000枚 ・人工的につけられた欠陥を含む150枚 の画像が含まれています。

  84. ①クリック 新しいプロジェクトを作成

  85. 新しいプロジェクトを作成 項目 値 Name 適当に Description(任意) プロジェクトの説明 Resource Group Azureで作成したものを選択

    Project Type Object Detectionを選択 Domains Generalを選択 ※用途で使い分ける • General • Logo(ロゴの検出) • Compact ①クリック
  86. 画像を追加する クリック

  87. トレーニングデータ100枚選択 トレーニングデータ クリック

  88. 画像をアップロードする クリック

  89. アップロード完了 クリック

  90. タグをつける

  91. アノテーション クリック

  92. アノテーション ドラッグ&ドロップで 傷の場所を囲う ※なるべく最小に

  93. 新しいプロジェクトを作成 タグを入力

  94. アノテーション タグを入力して Enter

  95. アノテーション タグがついたことを確認 次の画像に進み アノテーションを行う ※100枚やる

  96. アノテーション完了 100枚あることを確認

  97. 学習を行う クリック

  98. 学習を行う ①クリック ②クリック

  99. 学習完了

  100. QuickTestを行う クリック

  101. ローカルファイルをアップロードする クリック

  102. ローカルファイルをアップロードする ③クリック ②クリック ①検証用データ

  103. 学習結果を確認する 78.4%の確率で傷 だと判断 傷の検出ができている ※場合によっては複数検出することも あるので、一定の確率以下は無視する ようなことも必要

  104. 傷なし画像をアップロードしてみる 傷なし画像を選択 クリック

  105. 学習結果を確認する 傷がないと判断した場合は 何も出てこない

  106. APIを公開する

  107. APIを公開する ①名前を入力 ②予測リソースを選択 ※リソース作成時に同時 に作成している ③クリック

  108. 公開完了 クリック

  109. API呼び出し用のキーをメモする

  110. HTMLファイルをテキストエディタで開く

  111. Foodの時と同じように赤文字を置き換えて保存する $.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 })
  112. HTMLファイルを実行してみる クリック

  113. 画像を1枚選ぶ 検証用データ クリック 1枚選択

  114. 画像を送信してAPIの推論結果を受け取る クリック

  115. 傷の検出ができると画面に描画される

  116. 補足 ソースの解説

  117. 以上が物体検出です

  118. None
  119. None
  120. None
  121. Logic Appsの価格

  122. OneDriveにアクセスする https://onedrive.live.com/about/ja-jp/ クリック

  123. もしくは、OneDrive for Businessにアクセスする https://onedrive.live.com/about/ja-JP/business/ クリック

  124. フォルダを2つ作成する Excel用に作成 画像用に作成

  125. excelフォルダにexcelファイルを格納する ドラッグ&ドロップで格納する DLしてきたやつを使います

  126. Excelファイルの格納を確認する

  127. Logic Appのリソースを作成する 入力する

  128. クリック Logic Appのリソースを作成する

  129. Logic Appのリソースを作成する クリック

  130. Logic Appのリソースを作成する 項目 値 名前 適当に サブスクリプション 契約してるもの リソースグループ 既に作成しているもの

    場所 東日本 LogAnalytics OFF クリック
  131. Logic Appのリソースを作成する ①クリック ②クリック

  132. デザイナーでフローを作成する クリック

  133. デザイナーでフローを作成する ここでフローを構築していく

  134. デザイナーでフローを作成する ここにある

  135. トリガーを作成する ①検索 ②クリック Office365 buisiness版は こっち

  136. トリガーを作成する クリック

  137. トリガーを作成する(サインイン&アクセス許可) クリック

  138. トリガーを作成する(サインイン後の状態)

  139. トリガーを作成する ①クリック ②クリック

  140. トリガーを作成する 画像フォルダを選択

  141. トリガーを作成する 間隔を30秒に設定 ※これで30秒に1回新しいファイルがないか確認するファイル監視の設定完了です

  142. アクションを作成する クリック こまめに保存

  143. アクションを作成する(HTTPリクエスト) ①検索 ②クリック

  144. アクションを作成する(HTTPリクエスト) クリック

  145. アクションを作成する(HTTPリクエスト) ①POSTを選択 ②CustomVision のAPIのURL ③CustomVision のAPIのキー ④クリック ⑤クリック

  146. アクションを作成する(HTTPリクエスト) 選択後は このようになる

  147. アクションを作成する(JSON解析) ①検索 ②クリック ③クリック

  148. アクションを作成する(JSON解析) クリック

  149. アクションを作成する(JSON解析) ①クリック ②クリック

  150. アクションを作成する(JSON解析) ①開いて 中身をコピー ※DLしたファイルで す ②貼り付け

  151. アクションを作成する(JSON解析) 入力後はこんな感じ

  152. アクションを作成する(EXCEL操作) ①検索 ②クリック Business版は こっち

  153. アクションを作成する(EXCEL操作) クリック

  154. アクションを作成する(EXCEL操作) クリック

  155. アクションを作成する(EXCEL操作) ①クリック ②Excelファイルを 格納している場所へ移動

  156. None
  157. None
  158. None
  159. None
  160. None
  161. アクションを作成する(EXCEL操作) クリック

  162. アクションを作成する(EXCEL操作) クリック

  163. アクションを作成する(EXCEL操作) ①クリック ②すべてON ③クリック

  164. アクションを作成する(EXCEL操作) ①クリック ②クリック (データ操作なら なんでもいい)

  165. アクションを作成する(EXCEL操作) ①クリック ②クリック (データ操作なら なんでもいい)

  166. None
  167. None
  168. アクションを作成する(EXCEL操作) ①For eachが 自動追加される ②項目を それぞれ選択する

  169. 保存して実行する ①保存 ②実行

  170. OneDriveに画像を D&Dでアップロード 画像をアップロード アップロードからファ イル選択でも可能

  171. 画像をアップロード アップロードされたことを確認

  172. 画像をアップロード 作成したフローが実行される

  173. EXCELファイルにデータが更新されていればOK 複数行追加される可能性がある。 不要なものは除外するなど デザイナー側での工夫は必要です。 ぜひチャレンジしてみてください

  174. これで自動化ができた ユーザ ユーザ ①アップロード ②取得 ※常時監視 ③API実行 ④推論結果 ⑤結果を書き込み ユーザは画像をOneDriveにアップロードするだけで推論結果が自動で蓄積されていく

    画像
  175. リソースを無効化する(後片付け) 無効にする 有効のままだと30秒に1回 実行され課金され続ける

  176. リソースの削除(後片付け) 使わないものはリソース グループごと削除する

  177. 【余談】実はCustomVisionコネクタも存在している HTTPリクエストと JSONの解析が1つになったもの

  178. 【余談】実はCustomVisionコネクタも存在している Custom Vision側のAPIが アップデートされたら使えなくなる ※LogicAppのコネクタのアップデート待ちになる

  179. 【余談】実はCustomVisionコネクタも存在している なので今回は自力で組み立てる ※所詮中身はREST APIなので難しくない

  180. 【余談】書き込み先はDBでも良い SQL SrverやAzureストレージ、 ブロックチェーンデータベースなどに 書き込むことも可能

  181. None
  182. Azureの無料の公式学習サイト https://docs.microsoft.com/ja-jp/learn/ Azureの使い方がハンズ オン形式で学べます

  183. None
  184. None