はじめましてGMOソリューションパートナーのASです。
コロナ感染者数の増減と気分が比例する日々が続いていますが、外出しづらいからこそ自宅学習を頑張るタイミングかなとも思いました。
そこで以前から機械学習に興味があったのでTensorFlow.jsとTeachable Machineを使って機械学習を体験してみようと思います。
弊社ではオフィス入室前に接触確認アプリ(COCOA)の画面で接触がないことを確認後に入室させるようにしています。この確認作業を題材に挑戦してみます。
1. 機械学習モデルの作成
画像を判定できるようにするため事前に学習させたモデルが必要です。ここで Teachable Machine を使います。
COCOAの画面を写して学習させます。
判定できるようにする画像はこちらの2つです
※接触ありの判定が出たことがないので、画像は厚労省の確認アプリの説明pdfから拝借しました。
site: https://www.mhlw.go.jp/content/10900000/000641655.pdf
「接触無し」画面のキャプチャを学習させるためのNegativeクラスを追加します。
「接触有り」画面のキャプチャを学習させるためのPositiveクラスを追加します。
それぞれのキャプチャを取得したら、「モデルをトレーニングする」をクリックします
2. ブラウザで動かしてみる
「モデルをエクスポートする」ボタンをクリックすると、binファイルとjsonファイルがまとめられたzipをダウンロードできます。
アプリの画面は下記のような形になりました。
手軽に確認したい場合はTeachable Machineのエクスポート画面に表示されているソースコードをそのままコピーするだけでも問題ありません。
※この記事への転記は控えます
動かしてわかった問題
問題点1 全く関係無い画像でも「接触無し」と判定される
学習データが「接触有り」「接触無し」の2つしかないため、全く関係のない画面を写しても「接触無し」と判定されてしまうことがありました。
※見えづらいですが、弊社のコーポレートサイトのトップページを写しています
これでは意味がありませんので「それ以外」の画面を表示したOtherクラスを追加して全く関係ない画面を学習させることで、「接触有り」「接触無し」「その他」の3つで分類できるようにします。
モデルの再トレーニング後の判定結果
問題点2 平均値で判定しているので、「その他」と判定されることが多い
キャプチャ開始から終了の間にスマートフォンを写していない時間が長いと「その他」と判定されることが多くなってしまいました。
これはデータというよりプログラム側の問題ですが、フレーム毎の確率を平均した結果で判定していることが理由です。
スマートフォンの画面をカメラに向けているか判定するための学習データを準備して、キャプチャ開始タイミングを制御すれば、解消できるかもしれません。
その他のアプリの課題
- 個人を特定できない
- 接触が確認された判定をした場合に責任者に通知されない
まとめ
今回作ったアプリは実用的とは言えませんでしたが、機械学習の体験としては良かったかなと思います。
Teachable Machineとtensorflow.jsの組み合わせで全く知識が無くても、時間をかけずにそれっぽいものは作れることがわかったことは収穫でした。
(正直、画面構築用に使ったVue(Vuetify)+TypeScriptの設定を調べる方に時間がかかっています・・・)
今回分かったことは次の通りです。
- 2つの分類だけでは「どちらでもない」を判定できない(どちらに近いかを判定するものなので当たり前ですが・・)
- 機械学習への入門のハードルはかなり下がっている(ただし入門直後からかなりつらい)
何も知らなくてもできたはいえ、正直このままでは複雑なカスタマイズはできる気がしませんし、実務にもいかせません。
まずは基礎から勉強したいと思います。
追記
COCOAのダウンロード数、8月末時点で1500万件を超えたそうですが、記事をご覧になった方でまだダウンロードしていないという方は下記リンクからどうぞ。
※iOS13.7からアプリがなくても接触検知できるようになっても陽性診断の登録についてはアプリ経由でないとできないそうです。
iPhone https://apps.apple.com/jp/app/cocoa-新型コロナウイルス接触確認アプリ/id1516764458
Android https://play.google.com/store/apps/details?id=jp.go.mhlw.covid19radar&hl=ja