TensorFlow で ConvNet VGG モデルを実装
深い層の CNN については既に TensorFlow で AlexNet を実装 して University of Oxford: 17 カテゴリー Flower データセット及び ImageNet から5つの flowers synsets – daisy, dandelion, roses, sunflowers, tulips – を題材に試していますが、今回は AlexNet の発展形とも言える VGG モデルを実装してみました。
VGG モデル
VGG モデルは University of Oxford の VGG チームが提出した、層の深さを追求したモデルの通称で ILSVRC-2014 (ImageNet Large Scale Visual Recognition Challenge) において優秀な成績をおさめています。
分類問題では GoogLeNet についで2位の好成績です :
テクニカルレポートは以下を参照してください :
Very Deep Convolutional Networks for Large-Scale Visual Recognition
Karen Simonyan & Andrew Zisserman
VGG モデルは AlexNet を自然な形で発展させたもので、元々は Caffe で実装され 16 層のものと 19 層のものがあります。19 層の内訳は 3 convolutional layers * 5 + 4 FC です。
元祖のモデルをそのまま使うのも面白くないので、各種バリエーションを参考にして少し層を追加したモデルで試してみました。総計は 21 層になり、層数が多いので TensorBoard のグラフ画像を見やすく分解したものが以下になります(画像はいずれもクリックして拡大できます)。最左下が入力で以後、下から上、左から右へと続きます。最右上が Softmax です :
モデルを簡単に書けば以下のような感じで、右画像は整形していない TensorBoard のグラフ・ネットワーク出力です(TensorBoard の出力では bottom/top がそれぞれ input/output です) :
TensorFlow VGG & University of Oxford: 17 Category Flower Dataset
題材は今回も University of Oxford が提供しているデータセットを使用しました。というか、VGG モデルは元々この題材のために設計されたはずです。Dataset の詳細は 17 Category Flower Dataset を参照してください。
結果ですが、トレーニング自体は上手くいきました。以下の画像は損失グラフで 0 に漸近しています :
そして精度。もう少しトレーニングして学習率が小さくなれば更に良い精度になりそうです :
しかし検証精度は 60 % 前後で収束しています。
過学習という感じでもなく、題材は必ずしも易しくはないですが 70 % は欲しいところです :
AdaGrad を使いましたが、他のオプティマイザーでも結果は変わらない気がします。本来のモデルは題材に適合しているはずですので、モデルを少し変形したのが良くなかったかもしれません。いずれ元祖モデルで試してみたいと思います。
以上