Teachable Machine と TFLite によるサウンド分類モデルの作成
以下の記事を参考に書いてます。
・Build sound classification models for mobile apps with Teachable Machine and TFLite
1. はじめに
「サウンド分類」は、音を入力して、犬の鳴き声や車のクラクションなど事前定義されたカテゴリに分類する機械学習タスクです。違法な森林伐採活動の検出や、生体を調査するためのザトウクジラの音の検出など、既に多くの用途で利用されています。
「Teachable Machine」は、あなた自身のサウンド分類モデルを学習し、TFLite形式でエクスポートすることができます。そして、TFLiteモデルをモバイルやIoTデバイスで利用することができます。これは、「サウンド分類」のモデルを作成して実行するための簡単な方法です。
Pythonで本番モデルを構築し、TFLiteにエクスポートする方法も可能です。
2. モデルアーキテクチャ
「Teachable Machine」が1秒のオーディオを分類するために使用するモデルは、小さな畳み込みニューラルネットワークです。
上図が示すように、モデルはスペクトログラム(音の2D時間周波数表現)を受け取ります。最初に、2D畳み込み(Conv2D)レイヤーとマックスプーリングレイヤーでスペクトログラムを処理します。モデルは、学習中の過学習を減らす目的でドロップアウトレイヤーとインターリーブされた多数の全結合レイヤーで終了します。モデルの最終出力は、サウンドのクラスごとの確率スコアの配列です。
Pythonでこのアプローチを使用して、独自のサウンド分類モデルを学習するためのチュートリアルは、ここにあります。
3. 独自のデータセットを使用したモデルの学習
独自のデータセットを使用してサウンド分類モデルを学習する方法は2つあります。
(1) 簡単な方法
「Teachable Machine」を使用して、コードを1行も記述せずに、ブラウザ内で学習データを収集し、モデルを学習します。このアプローチは、プロトタイプを迅速かつインタラクティブに作成したい人向けです。
(2) 堅牢な方法
事前に学習データセットとして使用するサウンドを録音し、Pythonを使用してモデルを学習して慎重に評価します。簡単な単純な方法よりも自動化され、再現性があります。
4. TeachableMachineを使用したモデルの学習
「Teachable Machine」は、学習データセットを作成し、「画像分類」「姿勢推定」「サウンド分類」など、いくつかのタイプの機械学習モデルを学習できるGUIツールです。「Teachable Machine」は、内部で「TensorFlow.js」を使用して、機械学習モデルを学習します。学習済みモデルを「TensorFlow.js形式」でエクスポートしてWebブラウザで使用したり、「TensorFlowLite形式」でエクスポートしてモバイルアプリやIoTデバイスで利用したりできます。
モデルを学習する手順は次のとおりです。
(1) 「Teachable Machine」のサイトを開く。
(2) オーディオプロジェクトの作成。
(3) 認識したいカテゴリごとにサウンドを録音。各カテゴリに必要な音はわずか8秒。
(4) 学習を開始。完了したら、ライブオーディオでモデルをテスト。
(5) モデルをTFLite形式でエクスポート。
5. Pythonを使用したモデルの学習
数時間の録音や数十のカテゴリを含む大規模な学習データセットがある場合、Webブラウザでのサウンド分類の学習には多くの時間がかかります。その場合、事前に学習データセットを収集し、それらをWAV形式に変換し、このColabノートブック(TFLite形式に変換する手順を含む)を使用してサウンド分類を学習できます。「Google Colab」は無料のGPUを提供しているため、モデルの学習を大幅にスピードアップできます。
6. AndroidアプリでのTFLiteモデルの利用
TFLiteのサウンド分類モデルを学習したら、このAndroidのサンプルアプリに入れて試してみることができます。
(1) GitHubからサンプルアプリのクローンを作成。
$ git clone https://github.com/tensorflow/examples.git
(2) サウンド分類のAndroidアプリをAndroid Studioで開く。
lite/examples/sound_classification/android
(3) モデル(soundclassifier.tfliteとlabels.txtの両方)をsrc/main/assetsフォルダに追加し、既存のモデルを置き換える。
(4) アプリをビルドしてAndroid端末にインストール。
モデルを独自のアプリに統合するには、サンプルアプリからSoundClassifier.ktクラスをコピーし、アプリに学習したTFLiteモデルをコピーします。
(1) ActivityまたはFragmentクラスからSoundClassifierインスタンスを初期化。
var soundClassifier: SoundClassifier
soundClassifier = SoundClassifier(context).also {
it.lifecycleOwner = context
}
(2) デバイスのマイクからライブオーディオの録音を開始し、リアルタイムで分類。
soundClassifier.start()
(3) 分類結果を、人間が読み取れるクラス名と、特定の各カテゴリに属する現在の音の確率のマップとしてリアルタイムで受信。
let labelName = soundClassifier.labelList[0] // e.g. "Clap"
soundClassifier.probabilities.observe(this) { resultMap ->
let probability = result[labelName] // e.g. 0.7
}
7. おわりに
現在は、数週間以内にリリースされるiOS版のサンプルアプリに取り組んでいます。また、「TensorFlow Lite Model Maker」を拡張して、Pythonでサウンド分類を簡単に学習できるようにする予定です。乞うご期待!