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

The long way to hardware implementation of Deep Learning part3
道路標識、信号機、ヒト・車などの認識などをハードウエア(HDL)のみで行う!
23年10月にCQオンラインセミナ開催!推論IPコアの活用編作成編

●自動運転に関連した物体の認識をハード化

●FPGAに実装して100MHzで動かすので省電力!

学習済みモデルの作成から始めます(ハード化は推論のみ

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

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

●同一の
HDLを使い回す(重み係数だけを変更して別の認識に対応)

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

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

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



道は1から3まで!

DIGITALFILTER.COM





0章 本企画の最終目標

0-01 道路標識の認識をハードウェア化してみた

0-02 同じHDLを複数の認識対象に使い回す

0-03 複数のFPGAからの情報を集中管理するFPGA



■ 第1部 Pythonで道路標識の認識

1章 学習済みモデルの作成

1-01 世界中のAI研究者が集うKaggle!

1-02 道路標識のデータセットGTSRB

1-03 学習→推論してみる(認識率98%台)

1-04 畳み込み4層+全結合2層で認識

1-05 ハードウェア化を見据えたモデルの作成

1-06 学習から推論まで、Pythonコードの流れ

1-07 学習済みモデル(係数とバイアス)のセーブ


2章 ハード化を見据えてPythonの変更

2-01 画像データの整数化(量子化)

2-02 1層目、6層目の係数とバイアスの整数化

2-03 2層目は係数8種、ビットシフトで乗算器を節約

2-04 3, 4, 5層目は係数を4種にしてROMを節約

2-05 整数化したPythonで認識率97%台

2-06 カメラのRGB565フォーマットに合わせる


2-07 層間にリミッタを設けてレジスタやRAMの節約

2-08 Pythonの変更はこれで終了(認識率95%台)



■ 第2部 EXCEL+VBAで道路標識の認識

3章 PythonをEXCELに移植する

3-01 本企画のロードマップ

3-02 1層目のEXCEL化

3-03 2層目のEXCEL化

3-04 3, 4層目のEXCEL化

3-05 5, 6層目のEXCEL化

4章 VBAを使って楽をしよう

4-01 重み係数とバイアスのHDL生成

4-02 カメラエミュレータROMのHDL生成

4-03 推論ラベルパターンROMのHDL生成

4-04 SDRAM初期化ファイルの生成(シミュレーション用)

4-05 その他連続データのHDL生成


第3部 HDL化で道路標識の認識

5章 HDL化する前に決めておくこと

5-01 HDLの全体構成

5-02 各層間のRAMを考える

5-03 各層の係数ROMを考える

5-04 スループットを決める

5-05 論理シミュレーションの準備

6章 畳み込み1層目のHDL化

6-01 畳み込み1層目は入力3ch、出力16ch

6-02 1層目の重み係数とバイアスのHDL生成

6-03 積和演算の回路図とタイムチャート

6-04 積和演算のHDLを書く

6-05 1層目のRAMアクセス(読み方/書き方/HDL)

6-06 1層目の重み係数ROMアクセス(HDL)

6-07 1層目シミュレーションとEXCELの答え合わせ

7章 畳み込み2層目のHDL化

7-01 畳み込み2層目は入力16ch、出力32ch

7-02 2層目の重み係数とバイアスのHDL生成

7-03 乗算器を使わないビットシフト乗算

7-04 2層目のRAMアクセス(読み方/書き方/HDL)

7-05 2層目の重み係数ROMアクセス(HDL)

7-06 プーリングの回路とHDL

7-07 2層目シミュレーションとEXCELの答え合わせ

8章 畳み込み3層目のHDL化

8-01 畳み込み3層目は入力32ch、出力64ch

8-02 3層目の重み係数とバイアスのHDL生成

8-03 3層目のRAMアクセス(読み方/書き方/HDL)

8-04 3層目の重み係数ROMアクセス(HDL)

8-05 3層目シミュレーションとEXCELの答え合わせ

9章 畳み込み4層目のHDL化

9-01 畳み込み4層目は入力64ch、出力128ch

9-02 4層目の重み係数とバイアスのHDL生成

9-03 4層目のRAMアクセス(読み方/書き方/HDL)

9-04 4層目の重み係数ROMアクセス(HDL)

9-05 4層目シミュレーションとEXCELの答え合わせ

10章 全結合5層目のHDL化

10-01 全結合5層目は入力2048画素、出力128画素

10-02 5層目の重み係数とバイアスのHDL生成

10-03 5層目のRAMアクセス(読み方/書き方/HDL)

10-04 5層目の重み係数ROMアクセス(HDL)

10-05 5層目シミュレーションとEXCELの答え合わせ

11章 全結合6層目のHDL化

11-01 全結合6層目は入力128画素、出力43画素

11-02 6層目の重み係数とバイアスのHDL生成

11-03 6層目のRAMアクセス(読み方/書き方/HDL)

11-04 6層目の重み係数ROMアクセス(HDL)

11-05 判定回路とHDL

11-06 6層目シミュレーションとEXCELの答え合わせ


第4部 FPGAに実装する

12章 Quartus Primeの基本的な使い方

12-01 Quartus Primeのダウンロードとインストール

12-02 まずはLチカから

12-03 画質はともかくカメラ画像をVGAに映す

13章 Quartus Primeの応用的な使い方

13-01 NiosIIマイコンでカメラを設定してきれいな動画に

13-02 SDCファイルでタイミングコンストレイン

13-03 CNN推論回路を入れて完成!

13-04 SignalTap(ロジックアナライザ)で内部信号を見る

13-05 FPGAを不揮発性化(ROM化)する



第5部 「道路標識の認識」を「信号機の認識」に変更

14章 信号機の認識(PythonからEXCELまで)

14-01 Kaggleで信号機のデータセットを探す

14-02 小数→整数化→ビット削減・リミッタと進める

14-03 lisa-cropped 1層目のEXCEL化


14-04 lisa-cropped 2, 3, 4層目のEXCEL化

14-05 lisa-cropped 5, 6層目のEXCEL化

15章 信号機の認識(HDL生成からFPGA実装まで)

15-01 lisa-cropped VBAでHDL自動生成

15-02 lisa-cropped FPGAにプログラミング

15-03 lisa-cropped ロジックアナライザで内部信号を見る


第6部 複数のFPGAで認識を分担したりホストと通信したり

16章 GTSRB クラス削減版

16‐01 GTSRB クラス削減版 Pythonで実行

16‐02 GTSRB クラス削減版 EXCEL+VBA

16‐03 GTSRB クラス削減版 FPGAに実装

17章 認識結果をホストFPGAで集中管理

17-01 認識結果をUARTでホストFPGAに送る


第7部 認識対象の変更例いろいろ

18章 人・自動車・二輪車の認識

18-01 Kaggleで人・自動車・二輪車のデータセットを探す

18-02 「背景認識」という手段で誤認識を減らす

18-03 Pythonの変更点(白埋めによる正方形化など)


18-04 Pythonの整数化→EXCELへと進む

18-05 FPGAに実装して人・自動車・二輪車の認識


19章 コンクリートのひび割れの検出

19-01 コンクリートのひび割れのデータセットを探す

19-02 背景クラスの追加

19-03 ひび割れ検出のPython/EXCEL

19-04 FPGAに「ひび割れ検出」を実装

19-05 誤認識を減らす手順


20章 手書き文字認識(MNIST)

20-01 MNISTデータセットを使った手書き文字認識

20-02 背景認識の効果を見る

20-03 MNIST手書き文字認識のPython/Excel

20-04 FPGAにMNIST手書き文字認識を実装

20-05 エミュレーションモードでFPGAとPythonの一致を見る