4-07 vgg-14, 15層目のEXCEL化

●前層と比べて14, 15層目は入力画素数は一緒、出力チャネル数は2倍

 vgg-13層目のプーリング(ブロック図の左から5番目の"P")が終わると次は14, 15層目になります。ブロック図にあるようにこれらの層は入力画素数が
19x19、出力チャネル数は1024になります。

●下表から各層のファイルをダウンロード

 各層の
EXCELファイルを下の表からダウンロードして開きましょう。

・シートは重み係数だけで、その種類は同表のように制限されています。
・入力画像がないので
入力CSVをコピーしてVBAを順番に実行していきます。
・シート数節約のために1枚のシートに複数チャネルぶん置きます(inChxx, im2colxx等)。
・1024チャネル全部計算させると時間がかかるので最初の4チャネルのみ計算。
・EXCELで計算した出力とPython(
出力CSV)を比較します。

表4‐07 クリックしてダウンロード
EXCELファイル 入力CSV 出力CSV 係数の種類 プーリング
14 SSD_layer14.xlsm lay13out.zip lay14out.zip 8種(±1,2,4,16) なし
15 SSD_layer15.xlsm lay14out.zip lay15out.zip 8種(±1,2,4,8) なし

●14層目の重み係数シート

 図4‐44はSSD_layer14.xlm(14層目のEXCEL)のW14_Bias(重み係数シート)です。このように係数は8種類(-16, -4, -2, -1, +1, +2, +4, +16)に制限されています(*1)。またこの層は入力が512チャネルあるので512x9 = 4608行(*2)、出力が1024チャネルあるので1024列あります。


(*1)2の累乗なのでビットシフトで乗算できる(乗算器の節約)
(*2)15層目は入力チャネルが1024あるが、カーネルが1×1なので重み係数シートは1024x1 = 1024行になる


図4‐44 14層目のEXCELファイル


●14層目はパディングが6でダイレーションが6

 14層目の畳み込みは他の層と少し違います。
パディングが6もあるので19×19画素が31×31画素になります(inChxxシート参照)。そこからダイレーションを6として、距離を取った9画素に9係数を積和します。VBAのModule02(図4‐45)を参照してください。(*3、4)

(*3)ダイレーション(dilation)についてはこのサイトのDilated Convolutionが参考になります。
(*4)ダイレーションを施すことにより、広い範囲の入力画素を出力の一画素に反映できるというメリットがあるようです。


図4‐45 im2colxxシートの生成。
dilation=6なのでA,B,C -> A,G,Mとなり、1,2,3 -> 1,7,13となる


●15層目の出力の答え合わせ

 図4‐46はModule15の実行結果(outCh000シート)とPythonで計算した15層目のチャネル0(lay15out_000.csv)を比較しています(上の表からダウンロード)。各チャネル
ピタリ一致することを確認します(*5)。14層目も同様に確認します。

(*5)EXCELではoutCh00〜03まで計算。outCh04以降を計算させるにはここを参考。


図4‐46 15層目チャネル0の計算結果(EXCELとPython)


●15層目(最終層)も他の層と少し違う

 15層目は
カーネルが1×1になります。その結果、W15_Biasシートは図4‐47のように1024行になります。また、この層だけはバイアスを加算します。同図の1028行目がそれです(1027行目ではなく)。

 この層がvggの最終層になります。プーリングはないので出力画素は19×19、出力チャネル数は1024になり、それが
source2となり、extras層、conf層に入力されます(ブロック図参照)。


図4‐47 15層目はカーネルが1×1。またこの層だけバイアスが有効になる


目次へ戻る