【苦しみながら理解する深層学習】VGG16

まず、概要

2014年のILSVRCで2位になった、オックスフォード大学のVGGチームのネットワーク。AlexNetをより深くした、畳み込み層とプーリング層から成るどノーマルなCNNで、重みがある層(畳み込み層や全結合層)を16層、もしくは19層重ねたもの。それぞれVGG16やVGG19と呼ばれる。

VGG19が一番新しいようなので、VGG19の論文を読む。
ここにVGG16についても載っている。

どんなもの?

VGG19を構成して性能の評価を行った。
VGG19はConvNetのアーキテクチャの深さを深くしたもの。
性能が向上することから、性能の向上とアーキテクチャの深みは関係があることを結論づけている。
小さなconvolution filter(3 x 3)を使った深いアーキテクチャで精度が向上した。

先行研究と比べてどこがすごい?

精度が向上した。

技術や手法のキモはどこ?

ネットワーク

  • 3×3(一部1×1)の畳み込みのみを利用する
  • 同一出力チャネル数の畳み込み層を幾つか重ねた後にmax poolingにより特徴マップを半分に縮小する
  • max poolingの後の畳み込み層の出力チャネル数を2倍に増加させる

はじめの出力チャネル数は64(フィルターの枚数と等しい)、RGBなので元のチャネル数が3ということを考慮すなくても良い。
ただチャネル数64がうまくいくので64にしているのだと思われ、特に理由はわからない。
その他、全般的にチェネルに関して特にその数字でないといけないという意味はなさそう。

table 1

table 2

参考になった。

学習方法

バッチサイズは256、モメンタムは0.9、dropout ratio0.5、learning rate 10^-2からはじめて改善されるごとに減らしていく。

重みの初期化が重要なので、重みを学習させる時はtable1のAの構成でrandom initializationすることからはじめる。
理由はAの構成は、ネットワークが深くなく、random initializationが可能だから。
そして、B~Eのより深いネットワークの重みの初期化には、Aで学習済みの重みをはじめの4つのconv. layerと最後の3つのfully connected layerに適用する。
Aの学習を行う際は、learning rateの減少は行わない。

どうやって有効だと検証した?

ILSVRC-2012 datasetを使って、top-1 errorとtop-5 errorで比較した。
top-1 errorは画像を分類した上位1つに正解の分類が入っていない確率、top-5は上位5つ。

テストの画像サイズを統一したケース。
table 3
ネットワークが深く、学習の画像サイズの乱れがあった方がうまくいっている。

テストの画像サイズが複数あるケース。
table 4
これも深い方がよい。

1枚を1回で判断するdense evaluation(今まで使っていたもの)と、1つの画像に対してwindow slidingして判断するmulti-crop evaluationで精度を出している。
table 5
vgg16とvgg19の比較だとvgg16の方が良い結果になっている。
単に深くすればよいものではないようだ。

複数のモデルの結果の平均値で比較した。
table 6
改善する組み合わせもあった。

table6の内容は他の手法と比較してもかなり良い線いってる。
table 7

議論はある?

他のモデルでも更にネットワークを深くすることで精度が上がるのではないか?
Appendix Bを参照。

次に読むべき論文は?

GoogLeNet (Szegedy et al., 2014)
一番精度が高いので。(2014ということはもう余裕で更新されてるのかも?)
が、その前に一回実装する。

その他

Isotropically rescaling

multi-corp evaluation

Multi-crop は、1つの入力画像に対して複数のCropをする手法(Window sliding)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です