ディープ・ラーニング〜ハードウエア化への道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の一致を見る