Google Colabを転移学習・モデル変換に使ったりAPIサーバーで使おうとした話2021年4月8日 (木)ゆるふわマシンラーニング vol.6 豊田 陽介 ( @youtoy )
View Slide
豊田陽介(@youtoy)自己紹介普段は、某通信会社の研究所勤務話題のものをたくさん購入してる気がするビジュアルプログラミング・IoT関連など主催、運営・登壇もガジェット好きその他IT系イベント主催・登壇・運営、多数参加子ども向けの活動いろいろ(IT系以外も)プライベートでの活動
過去のコミュニティ活動中での機械学習関連の話(学習を含むもの)
Maker Faire出展で使った音の機械学習https://www.youtube.com/watch?v=Ve6TyzzmXckGoogleさんの Teachable Machineの音を対象にした機械学習を利用(+Web Bluetooth API )
「小さい子でも分かる・楽しめる」を機械学習で実現
機械学習が使われた仕組みを活用した話
ブラウザ上で両手を認識(+矩形描画)Googleさんの MediaPipe Handsのサンプルに少し矩形の描画処理を追加してみたもの
ブラウザ上で両手を認識(+3D描画など)Googleさんの MediaPipe Handsと p5.js による 3D描画や画像の透過表示
某アニメの悪役の「とっておきの手品」Googleさんの MediaPipe Handsと p5.js による画像の透過表示
学習に関しては主にTeachable Machine後の活用事例のほうはTensorFlow.js
一方、今回の主役はGoogle Colab やTensorFlow Lite など
タイトルに書いていた「転移学習・モデル変換・APIサーバー」の話へ
「TensorFlow Lite Model Maker」が便利!1)Google Colabでの転移学習モバイル向けなどの「TensorFlow Lite」の転移学習を簡単に行える仕組み(コードもすごくシンプル)
簡単に転移学習!(画像分類の例)1)公式チュートリアルを Google Colab で開く2)Google Colab にデータセットをアップ3)データ読み込み処理の記載を少し変更4)Google Colab上でボタンをポチポチ※ 公式のデータセットを使うなら 2・3 は不要
TensorFlow Lite はスマホ用公式サンプルがある機械学習モデルを作った後は
【余談】TensorFlow Lite の公式サンプルを流用してみた事例
Teachable Machineとの組み合わせ機械学習モデルを「TensorFlow Lite(量子化済み)」で出力画面の下に認識結果や確信度の表示が出てくる(動的に変化)
モデルの出力の部分TensorFlow Lite > 量子化済み を選択
転移学習がクラウド上での処理のみで完了!
次は「モデル変換:Core MLTools(Lobe)」の話
とある事情により、初心者向けの「機械学習による画像分類 + 独自データセットによる転移学習 +iPhone上での推論実行」をあれこれ探してた先ほどの話をやり始めた背景そんな中、MicrosoftさんのLobe のスタータープロジェクトの話を(ニュースレターより)
とりあえず、iPhoneで実機ビルド
ふと思った ⇒ Lobe のサンプルのモデルを Lobe 以外で作ったものにできるかな?2)Core ML Toolsでモデル変換【確認したり調べたり】・Lobe のスタータープロジェクトのモデルは Core MLっぽい・Core ML Tools という機械学習モデルをCore ML の形式に 変換する Pythonパッケージがあるっぽい・Python ってことは、Colab上で使えたりするかも?
ちなみに、Core ML Tools のページはこれ
再度Teachable Machineとの組み合わせ画面の下の結果表示は、TensorFlow Lite のサンプルとは違ってる
機械学習モデルの変換関連で行ったこと1)Teachable Machine のサイト上での学習2)モデルを TensorFlow > Keras で出力3)Google Colab上にモデルをアップロード4)Google Colab上に Core ML Tools を インストールし変換プログラムを書く5)変換後のモデルをゲット!
モデルの出力・変換処理の一部
転移学習・モデル変換がクラウド上での処理のみで!
最後は「APIサーバ」の話※ 道半ばの部分
ふと思った ⇒ Google Colab を APIサーバー的に 使う方法はないか?3)Google ColabでAPIサーバー結果:▲▲ 73% ...結果:●● 85% ...画像を受け取り、推論結果を返す
ngrok + Webフレームワーク(Flask/FastAPI)で外部からのアクセス等ができた!外部からアクセス可能なサーバーにできる?
【余談】Colab上でNode.jsも動いた
外部から画像を受け取るところまではできた外部から POST で送った画像を Colab側で保存・表示あとは推論の処理をうまく組み込めれば!?
長期間の連続稼働は仕組み的にダメですが、ちょっとしたテスト・デモ用にあると面白そうかな
終わり!