基於HLS的深度經網絡FPGA硬件加速器設計 從算法到硬件

李國慶 陳廷歡 張經緯

  • 出版商: 機械工業
  • 出版日期: 2026-08-01
  • 售價: $768
  • 語言: 簡體中文
  • ISBN: 7111813731
  • ISBN-13: 9787111813736
  • 相關分類: 無人機
  • 下單後立即進貨 (約4週~6週)

商品描述

人工智能(AI),別是深度經網絡(DNN)近年來在計算機視覺、自然語言處理等領域取得了突破性進展,但其龐大的計算需求給傳統CPU和GPU架構帶來嚴峻挑戰。為滿足邊緣計算、自動駕駛、智能端等場景對低延遲、低功耗、高能效的嚴苛要求,AI硬件加速器已成為產業界與學術界的核心研究方向。本書將高層次綜合(HLS)提升為一種核心的協同設計研究工具,為相關領域的研究人員提供了一套標準化、可覆現的研究方法論。
《基於HLS的深度經網絡FPGA硬件加速器設計》通過兩個詳盡的案例,不僅清晰地展示了深度經網絡硬件加速器的設計過程,更從中提煉出兩種具有普遍指導意義的硬件架構範式:計算單元覆用式架構——為解決資源受限問題提供了系統性的設計原則與化策略,是研究高能效比、低成本邊緣加速器的典型範本;流水線數據流架構——為追求高吞吐量的應用展示了如何通過細的流水線設計和數據流調度,大化硬件並行度與計算效率。從算法模型分析出發,通過HLS進行硬件建模與疊代化,以FPGA為驗證平臺,能夠有效降低設計人員進入“AI加速器設計”這一高門檻領域的難度。

目錄大綱

第 1 章 深度經網絡基礎 4
1.1 卷積
1.1.1 標準卷積
1.1.1.1 卷積的基本概念和點
1.1.1.2 缺點
1.1.1.3 參數量和計算量分析
1.1.2 深度可分離卷積
1.1.2.1 逐深度卷積
1.1.2.2 逐點卷積
1.1.2.3 參數量與計算量
1.2 池化
1.2.1 大/平均池化
1.2.2 全局池化
1.2.3 隨機池化
1.2.4 自適應池化
1.3 激活
1.3.1 Sigmoid 函數
1.3.2 雙曲正切函數(Tanh)
1.3.3 線性整流單元(ReLU)
1.3.4 Leaky ReLU
1.3.5 Swish 函數
1.3.6 對比總結
1.4 全連接層
1.4.1 全連接層的基本概念和點
1.4.2 全連接層的作用
1.5 批歸一化
1.5.1 批歸一化的計算步驟
1.5.2 批歸一化的點和缺點
第 2 章 卷積經網絡
2.1 VGG
2.1.1 VGG 點簡介
2.1.2 VGG 網絡結構
2.1.3 VGG 網絡的參數量和計算量
2.1.4 VGG 的點和缺點
2.1.4.1 VGG 網絡的點(相較於之前的網絡)
2.1.4.2 VGG 網絡的缺點
2.2 ResNet
2.2.1 ResNet 點簡介
2.2.1.1 殘差結構
2.2.1.2 瓶頸結構 Bottleneck
2.2.2 ResNet 網絡結構
2.2.3 ResNet 網絡的參數量和計算量
2.2.4 ResNet 網絡的缺點
2.2.4.1 ResNet 網絡的點
2.2.4.2 ResNet 網絡的缺點
2.3 MobileNetV2
2.3.1 MobileNetV2 點簡介
2.3.2 MobileNetV2 網絡結構
2.3.3 MobileNetV2 網絡的參數量和計算量
2.3.4 MobileNetV2 網絡的點和缺點
2.3.4.1 MobileNetV2 網絡的點
2.3.4.2 MobileNetV2 網絡的缺點
2.4 YOLOV2
2.4.1 YOLOV2 點簡介
2.4.1.1 使用 BN 層
2.4.1.2 高分辨率主幹網絡
2.4.1.3 Anchor Box 機制
2.4.1.4 全卷積網絡結構
2.4.1.5 新的主幹網絡
2.4.1.6 征金字塔網絡
2.4.2 YOLOV2 訓練過程
2.4.3 YOLOV2 的缺點
2.4.3.1 YOLOV2 的主要點
2.4.3.2 YOLOV2 的主要缺點
第 3 章 經網絡量化
3.1 對稱量化與非對稱量化
3.1.1 對稱量化
3.1.1.1 對稱量化基本原理
3.1.1.2 縮放因子的計算
3.1.1.3 反量化
3.1.1.4 量化誤差
3.1.1.5 對稱量化的點
3.1.1.6 對稱量化的局限性
3.1.1.7 代碼展示
3.1.2 非對稱量化
3.1.2.1 非對稱量化基本原理
3.1.2.2 縮放因子的計算
3.1.2.3 零點的計算
3.1.2.4 反量化
3.1.2.5 量化誤差
3.1.2.6 非對稱量化的點
3.1.2.7 非對稱量化的局限性
3.1.2.8 代碼展示
3.1.3 量化策略對比總結
3.2 訓練後量化與感知量化
3.2.1 訓練後量化
3.2.1.1 量化粒度
3.2.1.2 量化度
3.2.1.3 訓練後量化的基本步驟
3.2.1.4 訓練後量化的點和局限性
3.2.1.5 代碼展示
3.2.2 感知量化
3.2.2.1 感知量化的基本步驟
3.2.2.2 感知量化的點和局限性
3.2.2.3 代碼展示
3.2.3 QAT 與 PTQ 對比總結
第 4 章 經網絡硬件加速理論
4.1 脈動陣列
4.1.1 脈動陣列的結構
、4.1.2 數據流
4.1.2.1 OS 數據流
4.1.2.2 WS 數據流
4.1.2.3 IS 數據流
4.1.3 脈動陣列的點
4.2 基於卷積空間算法的硬件加速方法
4.2.1 循環展開
4.2.1.1 循環展開的原理與意義
4.2.1.2 卷積核維度上的循環展開(Loop1 和 Loop2)
4.2.1.3 征圖空間維度上的循環展開(Loop3 和 Loop4)
4.2.1.4 輸入與輸出通道維度上的循環展開(Loop5 和 Loop6)
4.2.1.5 循環展開策略的設計考慮
4.2.2 循環分塊
4.2.3 循環交換
4.2.3.1 大化數據覆用
4.2.3.2 空間並行性
4.2.3.3 訪存
4.3 屋模型理論
第 5 章 Vivado HLS 介紹
5.1 HLS 概述
5.1.1 HLS 的功能點
5.1.2 HLS 的勢
5.1.3 術語說明
5.2 數據類型
5.2.1 標準 C 整數類型
5.2.2 任意度類型
5.2.3 浮點類型
5.3 基本運算
5.3.1 算術運算符
5.3.2 算術賦值運算符
5.3.3 自增與自減運算符
5.3.4 條件與關系運算符
5.3.5 邏輯與位運算符
5.4 接口類型
5.5 循環化
5.5.1 變量循環邊界
5.5.2 循環流水線(LOOP PIPILINE)
5.5.2.1 流水線化 LOOP_J
5.5.2.2 流水線化 LOOP_I
5.5.2.3 流水線化層函數
5.5.3 循環展開(LOOP UNROOL)
5.5.3.1 展開 LOOP_J
5.5.3.2 展開 LOOP_I
5.5.4 循環並行化
5.5.5 循環依賴關系
5.6 數組化
5.6.1 HLS 中的數組
5.6.2 數組分割(Array Partition)
5.6.2.1 數組分割方法
5.6.2.2 數組分割示例
5.6.2.3 勢和註意事項
5.6.3 數組重組(Array Reshap)
5.6.3.1 數組重組方法
5.6.3.2 數組重組示例
5.6.3.3 性能勢和註意事項
5.6.4 數組映射(Array Map)
5.6.4.1 數組映射方式
5.6.4.2 數組映射示例
5.6.4.3 性能勢和註意事項
5.6.5 數組與接口綁定
5.6.5.1 數組作為接口
5.6.5.2 數組綁定接口示例
5.6.6 小結
5.7 函數化
5.7.1 數據類型化
5.7.2 函數內聯(INLINE)
5.7.2.1 函數內聯示例
5.7.2.2 點和註意事項
5.7.3 函數資源共享(ALLOCATION)
5.7.3.1 點和註意事項
5.7.4 數據流化(DATAFLOW)
第 6 章 基於 Vivado HLS 的計算單元覆用式深度可分離卷積 FPGA 加速器設計
6.1 任務分析
6.1.1 數據集
6.1.2 硬件平臺
6.1.3 評標準
6.2 經網絡結構選擇
6.3 網絡層融合與量化
6.3.1 層融合
6.3.2 量化
6.4 加速器模塊劃分與代碼實現
6.4.1 定義數據類型
6.4.2 模塊劃分
6.4.3 加載權重與偏置
6.4.3.1 加載 DWC 權重
6.4.3.2 加載 PWC 權重
6.4.3.3 加載偏置和量化融合常數
6.4.3.4 權重地址定義
6.4.4 征圖數據訪存
6.4.4.1 加載輸入圖片
6.4.4.2 中間層征圖存儲與加載
6.4.4.3 每層輸出征圖地址定義
6.4.5 卷積計算引擎
6.4.5.1 PWC 計算引擎
6.4.5.2 DWC 計算引擎
6.4.6 共享計算引擎
6.4.7 其他模塊
6.4.7.1 池化
6.4.7.2 激活
6.4.7.3 計算預測框
6.5 集成
6.5.1 接口定義
6.5.2 DWC1+PWC1+POOL1
6.5.3 DWC2+PWC2+POOL2
6.5.4 DWC3
6.5.5 PWC3+POOL3+DWC4
6.5.6 PWC4+DWC5
6.5.7 PWC5+DWC6
6.5.8 REORG+DWC6
6.5.9 PWC6
6.5.10 CONV13 與計算邊界框
6.6 HLS 與 Vivado 工程
6.6.1 HLS 工程
6.6.2 Vivado 工程
6.7 上板測試
6.7.1 署
6.7.2 性能分析
第 7 章 基於 Vivado HLS 的流水線結構 FPGA 加速器設計
7.1 UltraNet 網絡模型
7.2 加速器設計
7.2.1 模塊劃分
7.2.2 函數模板
7.2.3 數據處理模塊
7.2.3.1 AXIS 數據類型
7.2.3.2 像素提取
7.2.3.3 位寬轉換
7.2.3.4 AddLast
7.2.4 基於矩陣乘的卷積計算模塊
7.2.4.1 零填充單元
7.2.4.2 滑動窗口單元
7.2.4.3 矩陣計算單元
7.2.4.4 內集成
7.2.5 基於 DSP2 的第一層卷積計算化
7.2.5.1 DSP2 打計算
7.2.5.2 輸出征圖兩列並行計算
7.2.5.3 數據預處理
7.2.5.4 卷積計算
7.2.5.5 內集成
7.2.6 基於 DSP6 的中間卷積層化
7.2.6.1 INT4 DSP 打
7.2.6.2 UINT4 DSP 打
7.2.6.3 卷積計算
7.2.6.4 BN 與激活
7.2.6.5 數據流處理
7.2.6.6 內集成
7.2.7 基於 DSP2 的後一層卷積計算化
7.2.7.1 卷積計算
7.2.7.2 數據流處理
7.2.7.3 內集成
7.2.8 池化
7.2.8.1 矩陣乘輸出數據流池化
7.2.8.2 DSP 打計算輸出數據流池化
7.3 集成
7.3.1 接口定義
7.3.2 層集成
7.3.3 流水線平衡
7.4 HLS 與 Vivado 工程
7.5 上板測試
參考文獻