---
# System prepended metadata

title: 'CNP: AN FPGA-BASED PROCESSOR FOR CONVOLUTIONAL NETWORKS'

---

# CNP: AN FPGA-BASED PROCESSOR FOR CONVOLUTIONAL NETWORKS

---
## チェックリスト
1. 背景は何か？何が問題か？
    - [x] [#背景](https://hackmd.io/x_7uGTTCSoW-cYe8UF-IkA?both#背景) 
2. どこをハードウェア化するか？また、何故ハードウェア化が必要か？
    - [x] [#ハードウェア](https://hackmd.io/x_7uGTTCSoW-cYe8UF-IkA?both#ハードウェア)
3. 何のアルゴリズムをハードウェア実装するのか？(数式的なことは理解しなくともよい)
    - [x] [#実装するアルゴリズム](https://hackmd.io/x_7uGTTCSoW-cYe8UF-IkA?both#実装するアルゴリズム)
    - [x] [#Vector-ALUでの処理Fig2参照](https://hackmd.io/x_7uGTTCSoW-cYe8UF-IkA?both#Vector-ALUでの処理Fig2参照)

4. 結果はどうであったか？
    - [x] [結果](https://hackmd.io/x_7uGTTCSoW-cYe8UF-IkA?both#結果)
---

## 文献
- [CNP: AN FPGA-BASED PROCESSOR FOR CONVOLUTIONAL NETWORKS](http://yann.lecun.com/exdb/publis/pdf/farabet-fpl-09.pdf)

## 背景
- 現在から将来にかけて組み込み画像システムは自動運転車や自律的な電子機器、おもちゃが増えていく
- そのために現在必要な事は以下のような画像システムである
    - 低消費電力
    - 軽量
    - 低コスト

## 実装するアルゴリズム
- ConvNet(Convolutional Networks)
- 以下のような用途で用いられる
    - ビデオ監視
    - 物体検出
    - 顔検出

## アーキテクチャ
- シングルFPGA / 外部メモリシステムが必要

## ハードウェア
- メモリインターフェース
    - 複数の同時アクセスを可能にし、並列化する
    - 同時に書き込み/読み込みできる8つのポート
    - DMA(Direct memory access)することで従来のフォン・ノイマンアーキテクチャよりも高速化できる
- Vector ALU
    - ConvNetの基本処理は全てマクロ操作として与えられる
    - マクロ操作は任意の順序で実行可能
    - それらのシーケンスは、CPUによってソフトウェアレベルで管理される

#### Vector ALUでの処理(Fig.2参照)
- ConvNetの実行時、おおよその効率は２次元の畳込みの効率に依存する
- 出力プレーンは以下の式で表される
$$
z_{ij} = y_{ij} + \sum_{m=0}^{K-1}\sum_{n=0}^{K-1}x_{i+m,j+n}w_{mn}
$$
- 入力プレーンからの値($x_{ij}$)は$K$個のFIFOバッファに格納される
- 各クロックサイクルで入力プレーン($x_{ij}$)とカーネル($w_{mn}$)のドット積($x_{i+m,j+n}w_{mn}$)が計算される
- 結果として$$\sum_{m=0}^{K-1}\sum_{n=0}^{K-1}x_{i+m,j+n}w_{mn}$$が並列計算される

## ソフトウェア
- ソフトウェアはVALUのマイクロプログラムとして動作し、システムに対して抽象化する
    - なので、ライブラリ化や32bitのCPUで使うことも可能

## 顔検出
- Fig.3のようなConvNetを構築した

### 結果
#### 演算速度
- 理論的にはFPGA上で200MHzで実行できる
    - 512 x 384のグレイスケール画像で10fpsが実現できる
- 現在(2009年)のザイリンクスの開発ボードではメモリバスが1Gbpsにまで制限されている
    - なので、125MHzまでしか実行できない
- 自作基板を用いるとメモリバスの制限が問題なくなり(7.2Gbps)、200Mhzで実行でき、最適化によりfpsが２増える

## 結論
- シングルFPGAで高性能のConvNetの実装を示した
- このシステムはコンパクト(Fig.5参照)で低電力(ピーク時15W)なので様々な応用(特にmicroUAVs)が考えられる
