0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

商湯聯(lián)合提出基于FPGA的Winograd算法:改善FPGA上的CNN性能 降低算法復雜度

商湯科技SenseTime ? 2018-02-07 11:52 ? 次閱讀

商湯科技算法平臺團隊和北京大學高能效實驗室聯(lián)合提出一種基于 FPGA 的快速 Winograd 算法,可以大幅降低算法復雜度,改善 FPGA 上的 CNN 性能。早在2016年,論文中的實驗使用了當時最優(yōu)的多種 CNN 架構(gòu),已經(jīng)實現(xiàn)了 FPGA 加速之下的最優(yōu)性能和能耗。

摘要

近年來,卷積神經(jīng)網(wǎng)絡(CNN)越來越廣泛地應用于計算機視覺任務。FPGA 因其高性能、低能耗和可重配置性成為 CNN 的有效硬件加速器而備受關(guān)注。但是,之前基于傳統(tǒng)卷積算法的 FPGA 解決方案通常受限于 FPGA 的計算能力(如 DSP 的數(shù)量)。本論文展示了快速的 Winograd 算法,該算法可以大幅降低算法復雜度,改善 FPGA 上的 CNN 性能。我們首先提出了一種新型架構(gòu)在 FPGA 上實現(xiàn) Winograd 算法。我們的設計利用行緩沖結(jié)構(gòu)(line buffer structure)來高效重用不同 tile 的特征圖數(shù)據(jù)。我們還高效架構(gòu) Winograd PE 引擎,通過并行化啟動多個 PE。同時存在復雜的設計空間有待探索。我們提出一種分析模型,用于預測資源使用情況、推斷性能。我們使用該模型指導快速的設計空間探索。實驗使用了當前最優(yōu)的 CNN,結(jié)果表明其實現(xiàn)了在 FPGA 上的最優(yōu)性能和能耗。我們在 Xilinx ZCU102 平臺上達到了卷積層平均處理速度 1006.4 GOP/s,整體 AlexNet 處理速度 854.6 GOP/s,卷積層平均處理速度 3044.7 GOP/s,整體 VGG16 的處理速度 2940.7 GOP/s。

引言

深度卷積神經(jīng)網(wǎng)絡(CNN)在多個計算機視覺任務上取得了優(yōu)秀的性能,包括圖像分類、目標檢測和語義分割 [1, 2]。CNN 的高準確率是以極大的計算復雜度為代價的,因為它需要對特征圖中的所有區(qū)域進行綜合評估 [3, 4]。為了解決如此巨大的計算壓力,研究者使用 GPU、FPGA 和 ASIC 等硬件加速器來加速 CNN [5–17]。其中,F(xiàn)PGA 因其高性能、低能耗和可重配置性成為有效解決方案。更重要的是,使用 C 或 C++的高級綜合(High Level Synthesis,HLS)大幅降低了 FPGA 的編程障礙,并提高了生產(chǎn)效率 [18–20]。

CNN 通常包含多個層,每一層的輸出特征圖是下一層的輸入特征圖。之前的研究發(fā)現(xiàn)當前最優(yōu) CNN 的計算主要由卷積層主導 [6, 7]。使用傳統(tǒng)的卷積算法,則輸出特征圖中的每個元素要經(jīng)多步乘積累加運算進行單獨計算。盡管之前使用傳統(tǒng)卷積算法的 FPGA 解決方案取得初步成功 [5–9, 11],但是如果算法更加高效,該解決方案的效率可能會更高。本文展示了使用 Winograd 算法的卷積算法 [21] 如何大幅降低算法復雜度,改善 FPGA 上的 CNN 性能。使用 Winograd 算法,利用元素之間的結(jié)構(gòu)相似性生成輸出特征圖中的一列元素。這減少了乘法運算的數(shù)量,從而降低算法復雜度。研究證明快速的 Winograd 算法適合為具備小型濾波器的 CNN 推導高效算法 [16]。

更重要的是,CNN 的當前趨勢是帶有小型濾波器的深度拓撲。例如,Alexnet 的所有卷積層(除了第一層)都使用 3 × 3 和 5 × 5 濾波器 [3];VGG16 僅使用 3 × 3 濾波器 [22]。這為使用 Winograd 算法高效實現(xiàn) CNN 創(chuàng)造了機會。但是,盡管在 FPGA 上使用 Winograd 算法很有吸引力,但仍然存在一些問題。首先,設計不僅要最小化內(nèi)存帶寬要求,而且要匹配計算引擎與內(nèi)存吞吐量。其次,在 FPGA 上映射 Winograd 算法時存在很大的設計空間。很難推斷哪些設計會改善性能,抑或損害性能。

本文設計了一種行緩沖結(jié)構(gòu)為 Winograd 算法緩存特征圖。這允許不同的 tile 在卷積運算進行時重用數(shù)據(jù)。Winograd 算法的計算涉及通用矩陣乘法(GEMM)和元素級乘法(EWMM)的混合矩陣變換。然后,我們設計了一種高效的 Winograd PE,并通過并行化啟動多個 PE。最后,我們開發(fā)分析模型用于評估資源使用情況,并預測性能。我們使用這些模型探索設計空間,確定最優(yōu)的設計參數(shù)。

本文的貢獻如下:

提出一種架構(gòu),可在 FPGA 上使用 Winograd 算法高效實現(xiàn) CNN。該架構(gòu)把行緩沖結(jié)構(gòu)、通用和元素級矩陣乘法用于 Winograd PE 和 PE 并行化。

開發(fā)出分析性的資源和性能模型,并使用該模型探索設計空間,確定最優(yōu)參數(shù)

使用當前最優(yōu)的 CNN(如 AlexNet 和 VGG16)對該技術(shù)進行嚴格驗證。

商湯聯(lián)合提出基于FPGA的Winograd算法:改善FPGA上的CNN性能 降低算法復雜度

圖 1:傳統(tǒng)卷積算法和 Winograd 卷積算法的對比。我們假設 Winograd 算法的步幅 S 為 1。

架構(gòu)設計

圖 2:架構(gòu)圖示

圖 2 表示在 FPGA 上基于 Winograd 算法的卷積層架構(gòu)。研究者在相鄰 tile 的特征圖中確定數(shù)據(jù)重用機會。最后,自然而然地實現(xiàn)了行緩沖。輸入特征圖 (M) 有多個通道,如圖 1 所示。行緩沖的每一行都存儲所有通道中同樣的一行。Winograd PE 從行緩沖中獲取數(shù)據(jù)。具體來說,給出一個 n×n 輸入 tile,Winograd PE 將生成一個 m × m 輸出 tile。研究者通過并行化多個通道的處理來啟動 PE 陣列。最后,使用雙緩沖(double buffer)重疊數(shù)據(jù)遷移和計算。所有輸入數(shù)據(jù)(如輸入特征圖、濾波器)最初都存儲在外部存儲器中。輸入和輸出特征圖通過 FIFO 被遷移至 FPGA。但是,濾波器的大小隨著網(wǎng)絡深度增加而顯著擴大。將所有濾波器加載到片上存儲器(on-chip memory)中是不切實際的。在本論文的設計中,研究者將輸入和輸出通道分成多組。每個組僅包含一部分濾波器。研究者在需要時按組加載濾波器。為方便陳述,下文中假設只有一組。

圖 3:Winograd PE 設計圖示

自動工具流程

研究者設計了一個自動工具流程將 CNN 自動映射至 FPGA,如圖 5 所示。該流程包括設計空間探索引擎(DSEE)。研究者使用 Caffe prototxt 來描述 CNN 的結(jié)構(gòu) [24]。FPGA 配置參數(shù)包括內(nèi)存帶寬、DSP 數(shù)量、邏輯單元和片上內(nèi)存容量。DSEE 的輸出是最優(yōu)解 {n, Tm, Tn}。在步驟 2 中,基于最優(yōu)解,研究者開發(fā)了代碼生成引擎(CGE),可自動生成 Winograd 卷積函數(shù)。該函數(shù)描述整個加速器結(jié)構(gòu),包括行緩沖、緩沖管理和 Winograd PE。生成的實現(xiàn)是 HLS 兼容的 C 代碼。編譯指令如內(nèi)存分區(qū)因素、循環(huán)展開因素 Tn Tm 以及 FIFO 接口被插入函數(shù)中。步驟 3 中,研究者使用 Xilinx HLS 工具將代碼合成為寄存器傳輸級別。最后,研究者使用 Xilinx SDSoC(軟件定義片上系統(tǒng))工具鏈來生成比特流。

圖 4:自動工具流程

實驗評估

表 1:設計參數(shù)

表 2:Alexnet 的性能對比

表 3:VGG 的性能對比

表 4:GPU 平臺對比

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1625

    文章

    21620

    瀏覽量

    601234
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4587

    瀏覽量

    92501
  • cnn
    cnn
    +關(guān)注

    關(guān)注

    3

    文章

    350

    瀏覽量

    22132
  • 商湯科技
    +關(guān)注

    關(guān)注

    8

    文章

    489

    瀏覽量

    36037

原文標題:商湯聯(lián)合提出基于FPGA的快速Winograd算法:實現(xiàn)FPGA之上最優(yōu)的CNN表現(xiàn)與能耗

文章出處:【微信號:SenseTime2017,微信公眾號:商湯科技SenseTime】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于紋理復雜度的快速幀內(nèi)預測算法

    降低幀內(nèi)預測的運算復雜度,根據(jù)不同的模式在宏塊中出現(xiàn)概率的大小不同,在幀內(nèi)4×4的亮度預測模式中,選取出現(xiàn)概率最大的5種預測模式,作為優(yōu)先選擇的預測模式。基于像素塊的紋理特性,選擇不具有
    發(fā)表于 05-06 09:01

    如何降低LMS算法的計算復雜度,加快程序在DSP運行的速度,實現(xiàn)DSP?

    基于線性預測的FIR自適應語音濾波器的系統(tǒng)結(jié)構(gòu)由那幾部分組成?如何降低LMS算法的計算復雜度,加快程序在DSP運行的速度,實現(xiàn)DSP?
    發(fā)表于 04-12 06:27

    求一種基于802.16d的低復雜度的幀同步和定時同步聯(lián)合算法

    本文參考IEEE 802.16d物理層幀結(jié)構(gòu),提出了一種低復雜度的幀同步和定時同步聯(lián)合算法,該算法可在FPGA
    發(fā)表于 05-06 06:23

    各種排序算法的時間空間復雜度、穩(wěn)定性

    各種排序算法的時間空間復雜度、穩(wěn)定性一、排序算法分類:二、排序算法比較:注:1、歸并排序可以通過手搖算法將空間
    發(fā)表于 12-21 07:48

    LDPC碼低復雜度譯碼算法研究

    在描述置信傳播(BP)譯碼算法基礎(chǔ), 研究和分析了兩種降低復雜度的譯碼算法。Min.Sum 算法
    發(fā)表于 03-31 15:22 ?7次下載
    LDPC碼低<b class='flag-5'>復雜度</b>譯碼<b class='flag-5'>算法</b>研究

    圖像復雜度對信息隱藏性能影響分析

    算法進行實驗,研究圖像的復雜度差異對信息隱藏性能的影響。實驗結(jié)果表明了所提復雜度評價方法的有效性以及復雜度分類的合理性,依據(jù)圖像
    發(fā)表于 11-14 09:57 ?5次下載

    降低FBMC-OQAM峰均值比的低復雜度PTS算法

    部分傳輸序列( PTS)方法的基礎(chǔ)根據(jù)系統(tǒng)特性進行改進,得到迭代PTS(IPTS)算法,較傳統(tǒng)PTS算法計算復雜度有明顯降低;其次,將IP
    發(fā)表于 11-28 17:21 ?0次下載
    <b class='flag-5'>降低</b>FBMC-OQAM峰均值比的低<b class='flag-5'>復雜度</b>PTS<b class='flag-5'>算法</b>

    基于移動音頻帶寬擴展算法計算復雜度優(yōu)化

    移動通信設備由于計算資源有限,對計算復雜度較為敏感。我國自主研發(fā)提出的移動音頻編解碼算法標準AVS PlO中的帶寬擴展算法有利于提高移動音頻編解碼質(zhì)量,但其計算
    發(fā)表于 12-25 11:32 ?1次下載
    基于移動音頻帶寬擴展<b class='flag-5'>算法</b>計算<b class='flag-5'>復雜度</b>優(yōu)化

    基于I幀復雜度的初始量化參數(shù)(QP)選擇算法

    針對不同的視頻內(nèi)容造成編碼前幾幀質(zhì)量低下的問題,提出一種基于I幀復雜度的初始量化參數(shù)( QP)選擇算法。在編碼前利用解碼碼流中得到的I幀宏塊模式信息,運用宏塊中的3種不同幀內(nèi)預測模式判斷I幀的
    發(fā)表于 02-07 14:06 ?0次下載

    虛擬MIMO中低復雜度功率分配算法

    一種基于線性注水原理的低復雜度功率分配算法。該算法通過快速排除信道條件較差的協(xié)作用戶,并利用各協(xié)作用戶功率值之間的線性遞推關(guān)系式,將最優(yōu)功率分配算法中的迭代運算轉(zhuǎn)化為線性運算,在實現(xiàn)功
    發(fā)表于 03-09 15:22 ?1次下載
    虛擬MIMO中低<b class='flag-5'>復雜度</b>功率分配<b class='flag-5'>算法</b>

    如何求遞歸算法的時間復雜度

    相信很多同學對遞歸算法的時間復雜度都很模糊,那么這篇Carl來給大家通透的講一講。
    的頭像 發(fā)表于 07-13 11:33 ?1571次閱讀

    算法之空間復雜度

    算法之空間復雜度:衡量一個算法運行需要開辟的額外空間
    的頭像 發(fā)表于 08-31 10:29 ?1565次閱讀

    常見機器學習算法的計算復雜度

    時間復雜度不是測量一個算法或一段代碼在某個機器或者條件下運行所花費的時間。時間復雜度一般指時間復雜性,時間復雜度是一個函數(shù),它定性描述該
    發(fā)表于 10-02 12:45 ?796次閱讀

    算法時空復雜度分析實用指南(

    本文會篇幅較長,會涵蓋如下幾點: 1、Big O 表示法的幾個基本特點。 2、非遞歸算法中的時間復雜度分析。 3、數(shù)據(jù)結(jié)構(gòu) API 的效率衡量方法(攤還分析)。 4、遞歸算法的時間/空間
    的頭像 發(fā)表于 04-19 10:34 ?737次閱讀
    <b class='flag-5'>算法</b>時空<b class='flag-5'>復雜度</b>分析實用指南(<b class='flag-5'>上</b>)

    算法時空復雜度分析實用指南(下)

    Big O 表示法的幾個基本特點。 2、非遞歸算法中的時間復雜度分析。 3、數(shù)據(jù)結(jié)構(gòu) API 的效率衡量方法(攤還分析)。 4、遞歸算法的時間/空間復雜度的分析方法,
    的頭像 發(fā)表于 04-19 10:35 ?612次閱讀
    <b class='flag-5'>算法</b>時空<b class='flag-5'>復雜度</b>分析實用指南(下)