ディープ・ラーニング−ハードウエア化への道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のみで行うガチガチのハードウエア推論の世界!