ディープ・ラーニング−ハードウエア化への道1

The long way to hardware implementation of Deep Learning part1
23年1月にオンラインセミナ開催予定!第1部第2部第3部をセミナ化しました
セミナではIntel FPGAを使います(ZYBO Zynq7000入手困難のため)

●ディープ・ラーニングのハードウエア化に挑戦します

●FPGAに実装して高速化、低消費電力化を目指します

●PythonやCで書かれたソフトウエアのハード化(HDL化)の方法論

●特殊なIPコア、ライブラリ、高位合成などは使わずに力技でHDL化!

●機械学習、人工知能のAIチップ化のプロトタイプとしてのFPGA活用法

●組み込めるレベルのディープラーニング!

●不定期ですが随時更新する予定です。リンクがない章はしばらくお待ちください

更新履歴
遂に完成!(2020/06/20)

道は1から3まで!

DIGITALFILTER.COM





■ 第1部 全結合ニューラルネットワークのハードウエア化


第1章 ハードウエア化への前処理

1-01 ディープラーニングをFPGAに実装する理由

1-02 本企画のロードマップ

1-03 まずは普通にPythonで実行

1-04 入力、重み、バイアスなどすべて整数化してみる

1-05 PythonからEXCELに移植してみる



第2章 ともかくVHDLで記述してみる

2-01 VHDL化への流れ

2-02 回路図とタイム・チャート

2-03 VHDLを書く

2-04 論理シミュレーション

コラム21 VHDLファイルの自動生成(重み、画像、バイアスROM)



第3章 VHDLの並列化とパイプライン化

3-01 1層目の行列演算を並列化する

3-02 2層目の行列演算を並列化する

3-03 パイプライン化する



第4章 ZYBOというFPGAボードに実装する

4-01 全体のブロック図

4-02 ZYBOでLinuxを走らせる手順

4-03 ディープラーニング回路を含んだビットストリームの生成

4-04 ディープラーニング回路の動作確認

4-05 リアルタイム性と安定性の確認

コラム41 ROM/RAMに確実に割り当てられるVHDLコーディング

動画41 FPGAで推論が11usでできていることを確認


第5章 Linuxアプリから画像を100枚送り込む

5-01 Linuxで画像を送ったり表示したりする

5-02 PS部はデバイスドライバを介してレジスタを操作

5-03 PL部の回路を変更してビットストリーム再生成

5-04 推論結果をLinux上で画像とともに確認

コラム51 画像処理の定番ライブラリ、OpenCVのインストール


動画51 PS部からPL部に画像を100枚送って推論



■ 第2部 畳み込みニューラルネットワーク(CNN)のハードウエア化


第6章 畳み込み1層目のハードウエア化

6-01 畳み込みニューラルネットワークとは

6-02 パディングと畳み込み

6-03 まずは小数で畳み込みニューラルネットワーク

6-04 整数化してもほとんど正解率が落ちない!

6-05 im2col関数をどう実現するか

6-06 畳み込みの回路図とタイムチャート

6-07 VHDLを書いたり自動生成したり

6-08 シミュレーションがPythonやEXCELと合っているか確認


第7章 畳み込み2層目のハードウエア化

7-01 2層目は乗算器が256個も必要になる?

7-02 係数が4種類しかなくても正解率は98%以上!

7‐03 乗算器の代わりになる回路の設計

7‐04 畳み込み2層目を論理シミュレーション



第8章 畳み込み3〜6層目のハードウエア化

8-01 VBAを駆使して3層目をEXCEL化する

8-02 VBA+EXCELで4、5、6層目を計算させる

8-03 3層目は乗算器128個で4回に分けて計算

8-04 3層目の画像の読み出し・書き込み

8-05 3層目のVHDLファイル自動生成(EXCEL+VBA)

8-06 3層目の論理シミュレーション

8-07 4,5,6層目の演算イメージ

8-08 4,5,6層目の画像の読み出し・書き込み

8-09 4,5,6層目のVHDLファイル自動生成(EXCEL+VBA)

8-10 4,5,6層目の論理シミュレーション


第9章 Affine1〜2層目のハードウエア化

9-01 Affine(全結合)層をEXCEL化する

9-02 Affine1,2層目のVHDLファイル自動生成(EXCEL+VBA)

9-03 Affine1,2層目の行列乗算

9-04 Affine1層目の論理シミュレーション

9-05 Affine2層目で「畳み込みニューラルネットワーク」は終わり


第10章 全層繋いでシミュレーション

10-01 非パイプラインで全層繋ぐ(層レベルでは逐次処理)

10-02 パイプラインで全層繋ぐ(層レベルでも並列処理)

動画101 整数化すればPythonとExcelとHDLの結果は同じになる

動画102 数千個に及ぶHDLファイルをExcel+VBAで自動生成



■ 第3部 FPGA+CMOSカメラでリアルタイム画像認識


第11章 畳み込みニューラルネットワークの回路規模削減

11-01 RAMのリセットの削除と初期化回路の追加 (1344%→119%)

11-02 畳み込み2〜6層目の画像データを4ビットに削減 (119%→76%)

11-03 畳み込み2〜6層目の重み係数を2ビットにする (76%→63%)

11-04 複数の小さいRAMをまとめてM10Kを効率よく使う (14章から適用)


第12章 畳み込みニューラルネットワークのFPGA実装

12-01 ROM内の画像8枚がFPGAで正しく推論されていることを確認

コラム121 Quartus Primeでプロジェクト作成・コンパイル・書き込み

コラム122 SDCファイルでタイミング・コンストレイン

コラム123 Signal Tapロジックアナライザで内部信号確認


コラム124 メインクロック1サイクル以上の遅延が許される例



第13章 CMOSカメラをFPGAボードに繋いで動画を映す

13-01 OV5642カメラモジュール+アダプタボード+FPGAボード

13-02 CMOSカメラの動画をVGAに映すにはSDRAMが必須

コラム131 Quartusでハードを、NiosII SBTでソフトを書き込み

動画131 OV5642からの動画をVGAに映す手順


第14章 畳み込みニューラルネットワークを組み込んで動かす

14-01 OV5642カメラモジュールからの動画をリアルタイム推論!

コラム141 Quartus、NiosII SBTで書き込んでSignalTapで見る手順

コラム142 CMOSカメラからの動画をリアルタイムに推論させる仕組み

コラム143 推論結果をVGAに重ね書きさせる仕組み

動画141 OV5642からの動画をリアルタイム推論

動画142 画面を細かく分割して全体をリアルタイム推論


まとめ HDLのみで行うガチガチのハードウエア推論の世界!