ebook

第 4 章

転移学習の利用


完全にゼロからアーキテクチャを設計して学習させるのではなく、転移学習を利用すれば既存のアーキテクチャをベースにして構築できます。この章では、既存のアーキテクチャを修正し、再学習によって特定のタスクを実行する方法について説明します。

セクション

転移学習の仕組み

ニューラル ネットワークの簡単な説明は、画像ベースのアーキテクチャに対する転移学習の仕組みを説明するのに役立ちます。学習済みのネットワークは、データ中のパターン (この場合は画像中のパターン) を探しています。ず初期層でブロブ (塊) やエッジ、色などの基本的な特徴を探し、層が進むにつれて、ネットワークはそれらをより複雑な特徴に組み合わせ、最後にラベル付けが可能な最終パターンにまとめます。

dl-engineers-ebook-ch4-model-training-daisy

センサーデータからパターンを探し出すネットワークを開発しようとしている場合は、画像中の花などを認識するように学習させたネットワークは役に立たないと思いがちです。しかし、実際にはスペクトログラムやスカログラムのように、信号の時間周波数表現を使用すれば、信号を前処理して画像にすることができます。ブロブ、色、ループ、線などの基本的な特徴は、信号の時間周波数の画像も含め、ほとんどすべての画像に存在します。

dl-engineers-ebook-ch4-patterns-in-images

転移学習を使用すると、事前学習済みのネットワークが持つ基本的な特徴を認識する機能を利用して、こうした特徴を組み合わせて最終的な分類を行うネットワークの最後の数層を置き換えるだけですみます。

dl-engineers-ebook-ch4-model-training-replace

一般的に、このネットワークの学習は、ゼロから始めるよりもはるかに速く、必要なデータ量も少なくなります。このネットワークでは、特徴を組み合わせて、検出対象の大きなパターンを認識する方法を学ぶだけで済むからです。

セクション

例: 手の動きの認識とラベル付け

この例では、転移学習を利用して、シンプルなハードウェアを使って手の動きを認識し、ラベル付けしています。まず、事前学習済みの GoogLeNet ネットワークを用いて、3 軸加速度データに含まれるハイタッチのパターンを認識するように再学習します。

dl-engineers-ebook-ch4-arduino-setup

MATLAB Support Package for Arduino Hardware を使用し、MPU-9250 から Arduino を介して加速度データを読み取ります。Arduino に接続し、MPU9250 オブジェクトをインスタンス化し、加速度計を読み取るために必要なコードはわずか 3 行です。

dl-engineers-ebook-ch4-accelerometer-code-snippet

50 Hz での加速度計の読み取りと表示

この 3 軸加速度データをカラー画像に変換すると、その画像の赤、緑、青のチャネルが x、y、z の加速度軸のスカログラムになります。

ハイタッチを認識するようにネットワークを学習させるには、ラベル付きの学習データを与える必要があります。この場合の学習データは、ハイタッチの複数の画像と、その他の腕の動作の複数の画像です。

この例では、学習用に 200 枚のラベル付き画像を収集しました。このデータは、人の腕の実際の動作を測定して収集したものです。学習データに学習を損なうおそれのある外れ値やその他の動作が含まれていないか確認し、そのような画像は削除しました。

最終層の置き換えは、ディープ ネットワーク デザイナー アプリを使って行いました。GoogLeNet ネットワークの最後の 2 層だけを交換する必要があります。基本的な特徴を特定のパターンに結合する全結合層と、ラベルを割り当てる出力層です。

dl-engineers-ebook-ch4-deep-network-designer-app

学習データをインポートし、その 20% の画像を検証用に確保します。ネットワークの学習が済んだら、次は、より大きなデータセットでテストします。今回は、実際の腕の動作でハイタッチの分類器を試しています。

この例については、ハイタッチカウンターの作成に関するブログ記事でさらに詳しく説明しています。

セクション

ディープ ネットワーク デザイナー アプリと転移学習に関する詳細を見る