4-01 vgg-1層目のEXCEL化

●なぜEXCEL化するのか

 SSDのプログラムは
Pythonで書かれていますが、ここではそれをEXCELに移植します。その目的は以下の通り。

@演算のイメージをつかむ
 入力のどのチャネルがどの重み係数にかかるか、出力はどの重み係数から生成されるかといったイメージをつかみます。また畳み込みやプーリング、パディングなどは
Pytorchの関数としてブラックボックス化されています。したがってPytorchのドキュメントを読む必要がありますが、EXCELで計算させた結果をPythonと比較すれば正しく理解しているかどうか確認できます。

A演算の途中経過が分かる
 Pytorchの関数を使うと複雑な演算が一行で済んだりして便利です。しかし裏返すと途中経過を見れないことになり、将来的にHDL化してシミュレーションする際にデバグが困難になります。EXCEL化したものがあれば途中経過をシミュレーションと比較することができます。

B
HDLの自動生成ができる
 SSDは重み係数などが膨大で、HDLファイルも数千〜数万個になり、手作業でHDL化するのは不可能になります。EXCELにはVBA (Visual Basic for Application) という機能があるので、それを使ってHDLを自動生成します。

●vgg-1層目のEXCELを開く

 まずはこのブロック図の左上、vggと呼ばれる畳み込み層の1層目をEXCEL化します。これをダウンロードして開きます。

 最初の3シートは1層目の入力で、この画像(馬と人)をPythonからCSVファイルに落としてコピペしたものです(図4‐01)。画素数は300×300(*1)、チャネル数はBGRの3色、画素値は符号付8ビット(-128〜+127)ですが、Gは下位2ビットが0、BとRは下位3ビットが0になっています(*2)

(*1)パディングした結果302×302画素になる。
(*2)CMOSカメラモジュールを使うことを想定してRGB565フォーマットに合わせる。


図4-01 畳み込み1層目の入力は3チャネル(BGR 3色)。パディングで302×302画素

●入力のシートが3つ、重み係数のシートが1つある

 4シート目(W1_Bias)は重み係数です(図4‐02)。入力は3チャネルあり、カーネル(2次元フィルタ)が3x3=9なので3x9 =
27行、出力は64チャネルあるので64列あります。各係数値の範囲は-256〜+255(符号付9ビット)になります。またこの層のバイアスは省略するのでありません。


図4‐02 畳み込み1層目の重み係数(3x9=27行×64列)


●シートの生成にもVBAを使う

 EXCELにはシートが4つしかありません。これから
VBAを使って徐々に計算させていきます。「開発」タブからVisual Basic(図4‐03)をクリックします(見つからない場合はオプション→ユーザー設定)。


図4‐03 VBAを開く


次のページへ



目次へ戻る