Google ColaboratoryによるVGG16の転移学習とファイン・チューニング

Googleのクラウド・コンピューティング・サービス、Google Colaboratoryで動作する画像認識ソフトを作りましたので公開します。このソフトは「転移学習」「ファインチューニング」と呼ばれる技術を使って学習時間を大幅に短縮したものです。作成に当たってはいくつものWEBページを参考にしました。

VGG16はOxford大学のVisual Geometory Groupが開発した、非常に有名な画像向けニューラル・ネットです。2014年に開催されたILSVRC2014(Imagenet Large Scale Visual Recognition Challenge 2014)のClassification+localization部門において認識精度で12位を獲得しました。ILSVRC2014ではflickerから抽出された15万枚の画像が手作業によって1000クラス(種類)に分類されており、コンテストではこれらのクラスの認識精度と位置特定精度が競われました。

VGG16は構造の明快さ、規模の小ささ、入手の容易さといった理由から機械学習の入門題材として広く使われており、日本語の解説文書もネット上で多く見つかります。

このVGG16を利用して転移学習並びにファイン・チューニングによる物体認識訓練をおこなってみました。プログラムはGoogle Colaboration(以下Colab)を使い、Kerasフレームワークで動作します。

公開内容

VGG16による転移学習やファイン・チューニングに関しては日本語でも多くの情報がネット上に位公開されています。ですのでわざわざ私がそれに何かを付け加えることもないのですが、以下の理由でプログラムは公開することにしました。

  • ほとんどのサンプルプログラムは研究者が理解のために書いたものか、それをコピーしたものであり、APIの使い方が必ずしも合理的ではない。これはフォロワーが学ぶときに障害になる。
  • 多くのサンプルプログラムがKeras 1.xで書かれており、2.0で動かすとエラーが起きる。
  • Colabでさくっと動くようにできていない。Colabで動けばハードウェア無しに勉強できる。
  • 「17の花を分類するだけ」「犬と猫を区別するだけ」といったプログラムがほとんど。自分のデータセットで試してみるときの障壁が多い。

そういうわけで、以下のプログラムは「Colabでさくっと動く」「Keras 2.0に対応」「データセットに依存しない」といった特徴があります。

なお、いずれもGoogle Colaboration上でのプログラムですので動作には

  • Google アカウント
  • デスクトップ版Choromeブラウザ

が必要です。上のリンクをクリックするとColabのノートが開きますがそのままでは実行できません。ファイルメニューから自分のGoogle Driveにコピーを保存してそちらを実行してください。

実行結果

転移学習では、一旦VGG16の畳込み部として学習データから特徴量を抽出します。そしてこの特徴量をつかって繰り返しパーセプトロン(全結合層)の訓練を行います。このため、訓練時間は短く、GPUインスタンスで5分もあれば訓練がおわります。以下の学習曲線はVGGが公開している17 Floweresデータセットを使った学習の様子です。なお、データセットはKeras向きにディレクトリ構造を変えたものをGithubにプッシュして、そちらを毎回ダウンロードしています。

 

ファインチューニングでは畳込み層の一部も訓練するため、上の最適化技術がつかえません。GPUをつかって、同じデータセットで訓練に2時間ほど時間がかかりました。

認識精度の変化率をみると、ファインチューニングは最初はなかなか向上しないですね。訓練後のモデルを使って任意画像を認識する関数も作りました。以下の写真はGoogle検索で集めたものです。多分訓練データに含まれていません。

このアイリスの写真、「ワンピースを着た女性」に見えるのは私だけでしょうか。

参考

数え切れない程のサイトを参考にしましたが、そのうちでも重要ないくつかを紹介:

 

 

 

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください