基于數(shù)據(jù)流計(jì)算圖的卷積神經(jīng)網(wǎng)絡(luò)的理論和設(shè)計(jì)
謝仁杰 (英特爾戰(zhàn)略合作和創(chuàng)新業(yè)務(wù)部?技術(shù)經(jīng)理,人工智能開放創(chuàng)新平臺(tái)聯(lián)合學(xué)者,上海?200241)
摘? 要:近年來(lái)在許多信號(hào)處理應(yīng)用領(lǐng)域中,深度卷積神經(jīng)網(wǎng)絡(luò)引起了學(xué)術(shù)界和工業(yè)界很大的關(guān)注,其中 基于數(shù)據(jù)流圖的深度學(xué)習(xí)網(wǎng)絡(luò)Tensorflow框架得到了很多人的青睞。但在一些商業(yè)落地的研究和調(diào)查中發(fā) 現(xiàn),部分機(jī)構(gòu)涉及一些自開發(fā)的計(jì)算單元,而它不被大型網(wǎng)絡(luò)框架所支持,又出于技術(shù)的保密性往往需要 自行修改工業(yè)界的深度學(xué)習(xí)框架,這就造成了以下情況, ①工業(yè)級(jí)大型代碼框架極其復(fù)雜,各大庫(kù)之間的 調(diào)用很深且一般沒(méi)有注釋,不容易讀懂和修改,②對(duì)某一個(gè)單一應(yīng)用來(lái)說(shuō),工業(yè)界絕大多數(shù)的代碼都是有 冗余的,這就使得代碼整體比較臃腫(厚),性能會(huì)受點(diǎn)影響?;谶@種受限的情況下,本文提出了一種 基于信號(hào)處理數(shù)據(jù)流計(jì)算圖模型的方法,在多個(gè)平臺(tái)多核下實(shí)現(xiàn)車輛分類。該方法在整個(gè)使用過(guò)程中,展 現(xiàn)了靈活地設(shè)計(jì)實(shí)現(xiàn)優(yōu)化轉(zhuǎn)換能力,多平臺(tái)的兼容可實(shí)施性,可在有限的資源內(nèi)根據(jù)自己的算法需求,分 立式地量身定制。在硬件電路加速或芯片的設(shè)計(jì)中,數(shù)據(jù)流所得到的高輸出率、低延時(shí)特點(diǎn)是各廠家在寫 RTL硬件設(shè)計(jì)語(yǔ)言時(shí)著重提出的特點(diǎn),其次基于數(shù)據(jù)流的軟硬件設(shè)計(jì)易于算法代碼之間的轉(zhuǎn)換、實(shí)現(xiàn)、移 植、調(diào)試、分析、綜合、集成、優(yōu)化和驗(yàn)證。
關(guān)鍵詞:深度學(xué)習(xí);數(shù)據(jù)流;計(jì)算圖;多核運(yùn)算;車輛分類
0 引言
隨著國(guó)家進(jìn)入人工智能時(shí)代,深度學(xué)習(xí)在嵌入式 和計(jì)算機(jī)應(yīng)用領(lǐng)域無(wú)處不在,例如汽車嵌入式系統(tǒng)和 物聯(lián)網(wǎng),從而激發(fā)了在資源受限的邊緣端做深度卷積 神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)方法和研究。本文中以車輛分類作為 具體研究案例,設(shè)計(jì)一種基于信號(hào)處理的數(shù)據(jù)流計(jì)算 圖的模型框架和實(shí)現(xiàn)優(yōu)化方法,迭代式的實(shí)現(xiàn),實(shí)驗(yàn) 及優(yōu)化,并在不同的平臺(tái)及有限的計(jì)算資源下實(shí)現(xiàn)針 對(duì)四種相近車輛的分類。本文以數(shù)據(jù)流計(jì)算圖原理出 發(fā),介紹不同數(shù)據(jù)流技術(shù)建模的原理和形式,后舉一 個(gè)從零開始基于車輛分類的例子,從訓(xùn)練某個(gè)應(yīng)用的網(wǎng)絡(luò),選取網(wǎng)絡(luò)參數(shù)和神經(jīng)元權(quán)重開始,進(jìn)行Matlab 的仿真代碼實(shí)現(xiàn),并以此為參考代碼進(jìn)行基于數(shù)據(jù) 流計(jì)算圖C代碼實(shí)現(xiàn),隨后對(duì)整個(gè)計(jì)算圖進(jìn)行深度優(yōu) 化,最后單核和多核在不同平臺(tái)下的性能進(jìn)行了一一 對(duì)比。數(shù)據(jù)流計(jì)算圖的簡(jiǎn)潔,跨平臺(tái),可擴(kuò)展的完全 自主的特性,可用于任何特定領(lǐng)域,特別適合量身定 制的的嵌入圖像和視頻信號(hào)的操作。
1 數(shù)據(jù)流模型 (Dataflow Modeling)
1.1 數(shù)據(jù)流模型原理
在數(shù)據(jù)流建模模型中,數(shù)據(jù)流圖可表示為有向圖,由一系列Actors(頂點(diǎn))和edges(前進(jìn)先出, FIFO)組成,其中actor表示任意復(fù)雜程度的計(jì)算單元 (可以是高節(jié)點(diǎn)的actor封裝了一些計(jì)算圖),edge表 示連接各actors的連線,從而構(gòu)成一組計(jì)算圖,代表 一個(gè)函數(shù)功能系統(tǒng),數(shù)據(jù)類型則封裝在token,在一 個(gè)actor通過(guò) edge輸出至另一個(gè)actor輸入端。數(shù)據(jù)流邊 緣可以表示e =(v1; v2),表示數(shù)據(jù)從v1到v2。這里 src(e)表示的v1稱為源actor,sink(e)表示的v2稱 為接收器。在一個(gè)數(shù)據(jù)流計(jì)算圖中,一個(gè)actor在其接 受的數(shù)據(jù)足以計(jì)算該單元actor的算法時(shí)可以啟動(dòng)和調(diào) 用該actor通過(guò)其enable和invoke函數(shù), 每個(gè)actor需要明 確定義其輸入口消耗和輸出口產(chǎn)生的 token的數(shù)量。 整個(gè)數(shù)據(jù)流計(jì)算圖運(yùn)行是一個(gè)離散的操作。在圖1 中,Actor: FS1,F(xiàn)S2是2個(gè)源的參與者;Actor: Adder 是加法操作; Actor: FK是接收器。整個(gè)圖表產(chǎn)生每個(gè) actor觸發(fā)(消耗)一個(gè)token到每個(gè)actor輸出(輸入) 端口上。
1.2 數(shù)據(jù)流模型概述
Core Functional Dataflow(CFDF)是一種可編程 的模型,常用于設(shè)計(jì)、分析及實(shí)現(xiàn)信號(hào)處理系統(tǒng),尤 其是一種確定消耗產(chǎn)出比和有著動(dòng)態(tài)數(shù)據(jù)流比例的 的信號(hào)處理單元的系統(tǒng)開發(fā);Synchronous Dataflow (SDF)是最簡(jiǎn)單最流行的數(shù)據(jù)流模型,它有個(gè)限 制,即一個(gè)actor在每個(gè)傳出邊緣上產(chǎn)生的數(shù)據(jù)值是個(gè) 數(shù)字常量,同時(shí)actor從進(jìn)入邊緣消耗的數(shù)據(jù)值的數(shù)量 也需要是常量;Cyclo - Static Dataflow (CSDF) 是一 種類型的SDF,在一個(gè) actor產(chǎn)生和消耗的token比是可變的,只要這個(gè)變值是一個(gè)固定的周期性的模式; Parameterized Dataflow (PDF) 是一種結(jié)合動(dòng)態(tài)參數(shù)與 運(yùn)行參數(shù)化的數(shù)據(jù)流計(jì)算圖,尤其是那些有很明確的 圖迭代概念的圖形;Boolean Dataflow (BDF) 是SDF的 擴(kuò)展,其中一個(gè)actor產(chǎn)生和消耗的吞吐率取決于控制 的二值函數(shù)token,它源自于動(dòng)態(tài)數(shù)據(jù)流actor中的一個(gè) 指定控制端口;Enable - Invoke Dataflow (EIDF)是另 一種動(dòng)態(tài)數(shù)據(jù)流建模技術(shù)。它將actors分成一系列模 式,每個(gè)模式都有一個(gè)固定的消耗和生成的token 的 數(shù)量,代表一個(gè)分支可以在運(yùn)行時(shí)切換多種模式。
1.3 數(shù)據(jù)流模型環(huán)境: Lightweight Dataflow Environment – C (LIDE-C)
LIDE-C(輕量級(jí)數(shù)據(jù)流環(huán)境C)是一個(gè)靈活設(shè) 計(jì)的C語(yǔ)言的編程環(huán)境,允許設(shè)計(jì)人員挖掘基于數(shù)據(jù) 流的技術(shù)信號(hào)處理系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)和優(yōu)化,專注于 基本的應(yīng)用程序編程接口(API)功能。在整個(gè)框架 提供廣泛的實(shí)現(xiàn)信號(hào)處理系統(tǒng)功能的組件,以及跨 平臺(tái)操作,包括可編程門陣列(FPGA),圖形處理 單元(GPU),可編程數(shù)字信號(hào)處理器(DSP)和服 務(wù)器工作站。LIDE-C軟件包擁有許多數(shù)據(jù)流圖元素 (actor和edge)實(shí)現(xiàn)庫(kù),基于這些基本要素可以自由 設(shè)計(jì)自己的數(shù)據(jù)流圖并定義元素,開發(fā)特定的應(yīng)用程 序(例如,控制,參數(shù)化和儀器相關(guān)的模塊),和觸 發(fā)整個(gè)數(shù)據(jù)流圖的調(diào)度程序,詳解可參考文章[1]。在 LIDE-C數(shù)據(jù)流計(jì)算圖種actor和edge是關(guān)鍵2元素,其 中Actor設(shè)計(jì)包括四個(gè)接口函數(shù):構(gòu)造,啟動(dòng),調(diào)用和 種植函數(shù)(圖2)。
1)構(gòu)造函數(shù):創(chuàng)建actor的實(shí)例并連接端口,通過(guò)函數(shù)參數(shù)列表進(jìn)行算法處理后傳遞給相連的一 組邊。
2)啟用功能:在運(yùn)行時(shí)檢查該actor是否有足夠 的輸入數(shù)據(jù)和空的緩沖區(qū)空間來(lái)支持下一次調(diào)用。
3)調(diào)用函數(shù):為actor執(zhí)行單次調(diào)用。
4)終止功能:關(guān)閉此actor在計(jì)算圖的作用,包 括釋放相關(guān)的存儲(chǔ)對(duì)象及其所占用的資源。
LIDE-C中的FIFO設(shè)計(jì)構(gòu)成的數(shù)據(jù)流圖與其actors 本身相互獨(dú)立實(shí)現(xiàn)和優(yōu)化,開發(fā)者可專注于Actor的設(shè) 計(jì)(如算法的實(shí)現(xiàn)和優(yōu)化),然后通過(guò)明確定義的接 口和fifos集成這些actors, 從而進(jìn)行數(shù)據(jù)流圖的調(diào)度 優(yōu)化(并行,優(yōu)先級(jí)), 這些可通過(guò)相互溝通實(shí)現(xiàn)整 個(gè)性能的表現(xiàn)。FIFO操作由C中的 接口函數(shù)封裝。函數(shù)指針是指向這 些接口功能,以不同形式實(shí)現(xiàn)不同 的接口。LIDE-C中的標(biāo)準(zhǔn)FIFO有 以下執(zhí)行操作:
創(chuàng)建具有特定容量的新FIFO。
從/向一個(gè)fifo讀取和寫入 token。
檢查FIFO的容量。
檢查FIFO中當(dāng)前的token數(shù)。
使用FIFO完成后,用FIFO解除 存儲(chǔ)。
在一個(gè)數(shù)據(jù)流計(jì)算圖應(yīng)用程序 中創(chuàng)建所有actors和fifos之后,逐步 連接并逐步觸發(fā)檢查圖形下一個(gè)關(guān) 鍵actor,從而驗(yàn)證檢查調(diào)試整個(gè)系 統(tǒng)的當(dāng)前使用情況。
2 基于圖像的車輛識(shí)別的網(wǎng)絡(luò)架構(gòu)
本文以基于圖像的車輛識(shí)別網(wǎng) 絡(luò)系統(tǒng),從零開始一步一步得到相 應(yīng)的網(wǎng)絡(luò),實(shí)現(xiàn)參考的Matlab推理網(wǎng)絡(luò)代碼,從而進(jìn) 一步實(shí)現(xiàn)優(yōu)化基于數(shù)據(jù)流計(jì)算圖的C代碼實(shí)現(xiàn),此方 法具有一定的普適性和擴(kuò)展性,且根據(jù)不同的需求可量身定制其它的應(yīng)用需求。案例中的CNN實(shí)現(xiàn)四種 車輛之間的分類——公共汽車,卡車,面包車和汽 車,此源數(shù)據(jù)和工作基于之前的車輛分類工作[3],提 取了相關(guān)的有用信息,使用Caffe + Python 隨機(jī)搜索 來(lái)最優(yōu)的超參數(shù)。在使用50組隨機(jī)生成的超參數(shù)(圖 3)進(jìn)行一系列搜索迭代之后,針對(duì)精確率和參數(shù)大 小及性能的特征平衡,推導(dǎo)出一套可實(shí)施的優(yōu)化過(guò)的 超參數(shù)車輛分類系統(tǒng), 等到訓(xùn)練模型穩(wěn)定后,提取相 關(guān)的模型權(quán)重圖4(注:本文目的是演示實(shí)現(xiàn)優(yōu)化數(shù) 據(jù)流計(jì)算圖的方法,所選取的類型為double型,讀者 可根據(jù)深度學(xué)習(xí)相關(guān)知識(shí),可相應(yīng)地調(diào)整網(wǎng)絡(luò),例 如用全卷積網(wǎng)絡(luò)或半精度數(shù)據(jù)類型或者8比特的整數(shù)類型)。
訓(xùn)練好后得到的超參數(shù)所形成的CNN架構(gòu)(見圖 4)由五層組成——兩個(gè)卷積層,兩個(gè)全連接層,最后是分類器層。第一層包括三個(gè)通道 (紅綠藍(lán)RGB通 道),每個(gè)輸入圖像96 x 96的三通道經(jīng)過(guò)過(guò)濾后分解 成32個(gè)特征圖,然后最大值池化為48×48。在第二層 中,有32組特征圖再次卷積,然后下采樣最大值池化 到24×24。第三層和第四層是兩層全連接層,每個(gè)節(jié) 點(diǎn)有100個(gè)節(jié)點(diǎn)。分類器層執(zhí)行從100個(gè)元素到4個(gè)元 素并通過(guò)softmax運(yùn)算符得到4個(gè)等級(jí)可能概率值。在 層于層相鄰之間,應(yīng)用整流線性單元非線性激活函數(shù) (ReLU)。
3 基于數(shù)據(jù)流的網(wǎng)絡(luò)架構(gòu)計(jì)算圖設(shè)計(jì)
在得到整個(gè)網(wǎng)絡(luò)拓?fù)鋱D(圖5)并提取出網(wǎng)絡(luò)各 個(gè)神經(jīng)元的權(quán)重(圖4)后,先在Matlab環(huán)境中實(shí)現(xiàn)其 CNN 推理的圖像分類代碼,其主要目的其一是確保此 參數(shù)模型的最后效果,性能和準(zhǔn)確性,其二是有一個(gè) 參考代碼并可收集每一層運(yùn)算后的數(shù)值,便于后續(xù)數(shù) 據(jù)流計(jì)算圖C代碼的實(shí)現(xiàn)、比較、調(diào)試和優(yōu)化,這種 逐層式至最后龐大系統(tǒng)的檢測(cè)有益于整體代碼實(shí)現(xiàn)的 魯棒性,并將可能的測(cè)試失敗的原因顯示化在具體的 某一層某個(gè)actor或fifo,進(jìn)行更好更快速的實(shí)現(xiàn)代碼設(shè) 計(jì)優(yōu)化和迭代。
在開發(fā)了基于Matlab的CNN車輛分類系統(tǒng)的仿真 參考模型后(圖6和圖7),我們繼續(xù)開發(fā)基于數(shù)據(jù)流計(jì)算圖LIDE-C的設(shè)計(jì)以及實(shí)現(xiàn),并在多平臺(tái)多核上 進(jìn)行性能測(cè)試,通過(guò)迭代式優(yōu)化數(shù)據(jù)流計(jì)算圖及actor 算法來(lái)提高整體性能。
作為數(shù)據(jù)流模型的第一步,把CNN網(wǎng)絡(luò)拓圖轉(zhuǎn) 換了網(wǎng)絡(luò)框圖(圖8),每個(gè)框圖都可以看成帶參數(shù) 的高階actor, 高階actor可以封裝一個(gè)或多個(gè)帶參數(shù) subgraph系統(tǒng)子圖,而其中可能存在成千上萬(wàn)的actor 互連,其形式類似于硬件模塊的實(shí)現(xiàn),所以可以進(jìn)行 很好的軟硬件結(jié)合,此網(wǎng)絡(luò)包含了共10種不同類型 的actor:讀通道actor,寫通道actor,卷積actor,池化actor, 非線性激活函數(shù)actor,分類器actor, 聚合actor, 廣播actor,乘加 actor,矩陣乘 法actor。針對(duì)這些actors,按照不同的圖結(jié) 構(gòu)進(jìn)行封裝設(shè)計(jì),形成三種不同的數(shù)據(jù)流 計(jì)算圖(圖9,圖10,圖11)。
設(shè)計(jì)一的優(yōu)點(diǎn)是整個(gè)架構(gòu)與框圖最接 近,且非常的清晰,易于理解和實(shí)現(xiàn),驗(yàn) 證和檢查整個(gè)數(shù)據(jù)流計(jì)算圖很直接方便。 缺點(diǎn)是當(dāng)子圖已經(jīng)確定且封裝為一個(gè)大的 actor后,難以進(jìn)一步深層次地優(yōu)化,若子 圖來(lái)自于第三方機(jī)構(gòu),當(dāng)整個(gè)程序有錯(cuò)誤 時(shí),很難進(jìn)行調(diào)試;設(shè)計(jì)二相對(duì)簡(jiǎn)潔,在 卷積層用到了循環(huán)展開(loop unrolling)和 流水線(pipeline)技術(shù)進(jìn)行優(yōu)化,增加延遲 但提高輸出量。此方法很適合用于網(wǎng)絡(luò)訓(xùn) 練圖結(jié)構(gòu),但需要一些技巧,總體來(lái)說(shuō), 整個(gè)計(jì)算圖仍舊可以理解;設(shè)計(jì)三的優(yōu)點(diǎn) 是整個(gè)數(shù)據(jù)流計(jì)算圖可以任意地在某一 步、某一個(gè)actor或fifo或緩沖區(qū)里跟蹤,控 制,管理,驗(yàn)證,檢測(cè)數(shù)據(jù),除此之外, 設(shè)計(jì)三的顆粒度更細(xì),可以更深層次進(jìn)行 優(yōu)化,自行控制的選擇余地比較多,相 反的,缺點(diǎn)是不易于理解,構(gòu)成,實(shí)現(xiàn), 優(yōu)化這顆粒度細(xì)且龐大復(fù)雜的數(shù)據(jù)流計(jì) 算圖。
參考文獻(xiàn):
[1] SHEN C,PLISHKER W,WU H,et al.A lightweight dataflow approach for design and implementation of SDR systems[C]. Proceedings of the Wireless Innovation Conference and Product Exposition,Washington DC, USA, November, 2010:640–645.
[2] BHATTACHARYYA S S,PLISHKER W,SHEN C,et al.The DSPCAD integrative command line environment: Introduction to DICE version 1.1.Institute for Advanced Computer Studies, University of Maryland at College Park, Tech. Rep. UMIACSTR-2011-10, 2011.
[3] HUTTUNEN H,YANCHESHMEH F, CHENK.Car type recognition with deep neural networks[C].ArXiv e-prints, February 2016, submitted to IEEE Intelligent Vehicles Symposium 2016.
[4] BOUTELLIER J,LUNNIKIVI H.Design Flow for Portable Dataflow Programming of Heterogeneous Platforms[C].2018 Conference on Design and Architectures for Signal and Image Processing (DASIP):106-111.
[5] Representative Projects of the Maryland DSPCAD Research Group[EB/OL]. https://ece.umd.edu/DSPCAD/ projects/toplevel/projects.htm.
本文來(lái)源于科技期刊《電子產(chǎn)品世界》2020年第03期第22頁(yè),歡迎您寫論文時(shí)引用,并注明出處。
評(píng)論