4-03 vgg-3, 4層目のEXCEL化

●3,4層目は画素数が減る代わりにチャネル数が増える

 vgg-2層目のプーリング(ブロック図の左上の最初の"P")が終わると次は3層目、4層目になります。ブロック図にあるようにこれらの層は入力画素数が
150×150、出力チャネル数は128になります。

●3層目の重み係数値も4種類のみ

 vgg-3層目をEXCEL化します。これをダウンロードして開きましょう。

 シートは1つ(W3_Bias)だけで、これは重み係数のシートです(図4‐26)。入力は64チャネルあり、カーネル(2次元フィルタ)が3x3=9なので64x9 = 576行、出力は128チャネルあるので128列あります。
 係数が大量にあるので2層目と同じように各値を-4, -1, +1, +4の4種類に制限します。全て2の累乗なので
ビットシフトで乗算を達成できます(乗算器の節約になる)。またこの層もバイアスは省略するのでありません。


図4-26 畳み込み3層目も係数は4種

●入力画像はVBAで転写する

 EXCELには重み係数シートのみ存在し、入力画像がありません。「開発」タブからVisual Basicをクリックし、Module01を実行します。するとlay2out_00.csv〜lay2out_63.csv(2層目の出力、これを解凍して同じディレクトリに置く)が新しいシートに転写され、それら(inCh00〜inCh63)が3層目の入力になります(図4‐27)。なお、2層目の出力は150×150ですが「
パディング」を施すことにより152×152画素になっています。

 入力値の範囲は0〜31(符号なし5ビット)に制限されています(2層目のReluでリミッタを施した)。ビット数を削減し、ハードウエアの規模を減らすのが目的です。


図4‐27 3層目の入力は64チャネル。値は0〜31の範囲。パディングで152×152になる

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

 その後は
Module02〜07を順番に実行していきます。図4‐28はModule07の実行結果(outCh01シート)とPythonで計算した3層目のチャネル1(lay3out_001.csv)を比較しています(これを解凍して開く)。各チャネルピタリ一致することを確認します。(*1、2)

(*1)EXCELでは4行のみ計算(150行全部だと時間がかかるので)。5行目以下を計算させるにはここを参考。
(*2)EXCELではoutCh00〜03まで計算。outCh04以降を計算させるにはここを参考。


図4‐28 3層目チャネル1の計算結果(EXCELとPython)


次のページへ



目次へ戻る