tiny-dnn の各レイヤを Zynq の PL 部に作ったアクセラレータ回路にオフロードすることで、CNN の学習を加速します。
以前は ここ で開発していました。履歴の見たい方はぜひ。
IP の機能以外 (DMA とか petalinux とか) を参考にしたい方は こっち のほうがわかりやすいと思います。
オリジナルの tiny-dnn のリポジトリ
畳み込みの行列乗算を 16MAC (bfloat16) で並列に計算して学習を加速します。
AXI Stream で 1サンプル分のデータを受け取り、core で畳み込み計算をして、AXI Stream で 1サンプル分の結果を吐き出します。
im2col は on the fly で実行するので、転送データとバッファメモリを節約できます。
詳しくは
実装は examples/simple-conv
です。課題は MNIST。
このくらい高速になります。
ただし、次の変更をソフトウェアに入れています。
- 入力データの傾きを求める計算をスキップする
- 畳み込みレイヤで ΔW をミニバッチ分だけ累積する (FPGA(wPL)のみ)
実装は examples/DW-conv
で作成中です。課題は MNIST。
普通の convolution と pooling レイヤをアクセラレータ対応済みです。
DW-conv レイヤーは順方向と逆方向がアクセラレータ対応済みです。
真ん中の2個の conv3x3 は Depthwise Separable Convolution です。