用于自動(dòng)駕駛的實(shí)時(shí) YUV 多任務(wù) CNN
作者 | AI 修煉之路
來源 | AI 修煉之路
摘要
本文提出了一種針對(duì)低功耗車用SoC優(yōu)化的多任務(wù)卷積神經(jīng)網(wǎng)絡(luò)(CNN)結(jié)構(gòu)。我們介紹了一個(gè)基于統(tǒng)一架構(gòu)的網(wǎng)絡(luò),其中編碼器由檢測(cè)和分割兩個(gè)任務(wù)共享。該網(wǎng)絡(luò)以25FPS運(yùn)行,分辨率為1280×800。簡(jiǎn)要討論了直接利用原生YUV圖像、優(yōu)化圖層和要素圖、應(yīng)用量化等優(yōu)化網(wǎng)絡(luò)結(jié)構(gòu)的方法。
在我們的設(shè)計(jì)中,我們也關(guān)注內(nèi)存帶寬,因?yàn)榫矸e是數(shù)據(jù)密集型的,而大多數(shù)SOC都有帶寬瓶頸。然后,我們展示了我們提出的用于專用CNN加速器的網(wǎng)絡(luò)的效率,給出了從硬件執(zhí)行和相應(yīng)的運(yùn)行時(shí)間獲得的檢測(cè)和分割任務(wù)的關(guān)鍵性能指標(biāo)(KPI)。
1. Introduction
目前先進(jìn)駕駛輔助系統(tǒng)(ADAS)領(lǐng)域的改進(jìn)將證實(shí),深度學(xué)習(xí)對(duì)于提出基于攝像機(jī)傳感器的有效解決方案至關(guān)重要。目前,卷積神經(jīng)網(wǎng)絡(luò)(CNNs)成功地處理了各種視覺感知任務(wù),包括語義分割、包圍盒目標(biāo)檢測(cè)或深度估計(jì)。
然而,這些成功的應(yīng)用大多需要很高的計(jì)算能力,這在當(dāng)前的嵌入式系統(tǒng)中是不現(xiàn)實(shí)的。本文提出了一種新的用于目標(biāo)檢測(cè)和語義分割的實(shí)時(shí)多任務(wù)網(wǎng)絡(luò)。與最近的解決方案相比,我們的論文提出了兩個(gè)主要的改進(jìn)。首先,我們提出了一個(gè)由YUV4:2:0圖像饋送的多任務(wù)網(wǎng)絡(luò)。其次,我們提出了一個(gè)全面設(shè)計(jì)的網(wǎng)絡(luò),以考慮到有效的嵌入式集成的所有關(guān)鍵因素。
2. Background
幾年來,CNN的架構(gòu)一直致力于單一任務(wù),如分類任務(wù)[6]、[13]、[5]、檢測(cè)任務(wù)[10]、[8])、語義分割任務(wù)[16]、[7]、[2]或視覺SLAM[9]。最近一年,我們觀察到了專門為處理幾項(xiàng)任務(wù)而設(shè)計(jì)的新CNN架構(gòu)的出現(xiàn)。
在這些新方法中,2016年,Teichmann[15]提出了一個(gè)統(tǒng)一的編****架構(gòu),它可以同時(shí)執(zhí)行三個(gè)任務(wù)(分類、檢測(cè)、分割)。2018年,[14]發(fā)表了一篇基于Multinet的論文,在低功耗嵌入式系統(tǒng)上實(shí)現(xiàn)了30fps。除了這些論文外,其他幾篇論文[4]、[1]證實(shí)了使用多任務(wù)學(xué)習(xí)(MTL)方法的好處,特別是在考慮「計(jì)算效率」或確保網(wǎng)絡(luò)的「最佳泛化」和「準(zhǔn)確性」方面。
我們的工作是受到這些論文的啟發(fā),但我們建議建立一個(gè)更加輕量的網(wǎng)絡(luò),通過直接輸入YUV4:2:0圖像來降低帶寬,并在低功耗SoC上進(jìn)行了實(shí)驗(yàn)。
2013年,Sermanet和LeCun[12]提出將YUV圖像空間用于行人檢測(cè)應(yīng)用。我們的網(wǎng)絡(luò)的輸入層序列直接來自于他們的工作,除了我們提出了調(diào)整內(nèi)核維數(shù)(5×5和3×3而不是7×7和5×5)和其他一些細(xì)節(jié)來滿足SoC約束之外。
3. Network architecture optimization
「輸入數(shù)據(jù)形狀優(yōu)化」
為了滿足所選SoC提供的特定數(shù)據(jù)格式,必須修改網(wǎng)絡(luò)輸入層。事實(shí)上,所選的SoC針對(duì)其在前置攝像頭中的應(yīng)用進(jìn)行了優(yōu)化。在我們的例子中,使用的相機(jī)是魚眼相機(jī)。這種類型的相機(jī)比固定式相機(jī)提供了更寬的視野,這對(duì)汽車應(yīng)用很有用。
圖像信號(hào)處理器(ISP)在視頻流水線開始時(shí)提供的圖像格式不是BGR格式,而是YUV格式。這種格式在嵌入式系統(tǒng)中比較常見,但在深度學(xué)習(xí)領(lǐng)域并不經(jīng)常使用這種格式。為我們的應(yīng)用程序選擇的YUV格式是YUV4:2:0格式。與普通的BGR圖像相比,對(duì)攝像機(jī)捕獲的信息進(jìn)行編碼的三個(gè)通道的分辨率不同。表示色度分量的通道U和V是表示亮度的通道Y的一半分辨率。這意味著通道U或V中的一個(gè)像素對(duì)對(duì)應(yīng)于Y通道中的2x2像素塊的色度信息進(jìn)行編碼。
圖3中顯示的兩個(gè)選項(xiàng)在CNN IP上的成本完全相同。然而,YUV4:2:0選項(xiàng)有兩個(gè)主要優(yōu)勢(shì):內(nèi)存帶寬減少2倍,并且不需要額外的轉(zhuǎn)換(YUV4:2:0到BGR)模塊。
讓我們假設(shè)一個(gè)1280×800的8位輸入圖像。對(duì)于bgr選項(xiàng),提供給網(wǎng)絡(luò)的內(nèi)存流量大約是3MB,對(duì)于YUV4:2:0選項(xiàng),大約是1.5MB。YUV4:2:0選項(xiàng)的另一個(gè)優(yōu)點(diǎn)是不需要額外的模塊進(jìn)行YUV4:2:0到BGR的轉(zhuǎn)換。使用bgr選項(xiàng),這將是強(qiáng)制性的,才能提供一些有效的東西作為CNN的輸入。
「Encoder stage : V2N9Slim」
在最常見的統(tǒng)一編****架構(gòu)中,最昂貴的部分通常是編碼器部分?;赩GG[13]或ResNet[5]的網(wǎng)絡(luò)編碼器基本上是我們?cè)谧罱恼撐闹心苷业降淖畛R姷木幋a器。不幸的是,這些編碼器既寬又深,實(shí)際上并不是低功耗嵌入式系統(tǒng)的理想候選者。為了滿足嵌入式系統(tǒng)的要求,采用了一種新的光編碼器V2N9Slim。
V2N9Slim 是一個(gè)9層編碼器(9個(gè)卷積層或池層),編碼器體系結(jié)構(gòu)如圖4所示。「對(duì)于多任務(wù)實(shí)驗(yàn),使用ImageNet數(shù)據(jù)集對(duì)編碼器部分進(jìn)行分類任務(wù)的預(yù)訓(xùn)練」。
V2N9超輕量架構(gòu)是RESNET和VGG架構(gòu)的混合體。實(shí)際上,我們的網(wǎng)絡(luò)的分層順序主要是受RESNET的普通網(wǎng)絡(luò)的啟發(fā),我們的網(wǎng)絡(luò)沒有采用符合VGG架構(gòu)的捷徑連接。不使用快捷連接的動(dòng)機(jī)來自以前的實(shí)驗(yàn),作者證明,「在淺層網(wǎng)絡(luò)中,捷徑連接并不能顯著提高精度」,我們的9層編碼器就是這種情況。此外,快捷連接對(duì)于嵌入式系統(tǒng)來說也是昂貴的,因?yàn)樗鼈兩婕邦~外的計(jì)算以及增加的存儲(chǔ)器占用和存儲(chǔ)器傳輸。
「Decoders」
我們提出的解決方案的****是用于檢測(cè)部分的「YoloV2****」和用于分割部分的基于「FCN的****」。Y oloV2****包括在編碼器的末尾增加一個(gè)卷積層,以重塑編碼器特征映射到邊界框預(yù)測(cè)。然后,在ARM處理器上執(zhí)行額外的后處理,以將YoloV2****的輸出轉(zhuǎn)換為邊界框坐標(biāo)和置信度。基于FCN的****是一個(gè)具有5個(gè)轉(zhuǎn)置卷積層級(jí)的****。這些層中的每一層都按因子2(即FCN2)對(duì)輸入進(jìn)行向上采樣(使用5×5核),以檢索原始輸入圖像分辨率。FCN2****完全運(yùn)行在SoC上的專用CNN IP上。
「Quantization steps」
我們提出的優(yōu)化架構(gòu)已經(jīng)使用基于KERAS的浮點(diǎn)精度框架進(jìn)行了訓(xùn)練。為了在16位定點(diǎn)精度上執(zhí)行以浮點(diǎn)精度訓(xùn)練的網(wǎng)絡(luò),需要量化步驟以在專用硬件上運(yùn)行網(wǎng)絡(luò)。為了盡可能地減少這一階段的飽和度等問題,所有卷積層之后都有一個(gè)批次歸一化層,以獲得具有單位方差的特征地圖分布。由于浮點(diǎn)范圍受批歸一化的限制,它還使得浮點(diǎn)數(shù)到16位數(shù)的編碼更加準(zhǔn)確。
4. Results
我們?cè)谖覀兊乃饺唆~眼相機(jī)數(shù)據(jù)集上進(jìn)行了一系列實(shí)驗(yàn)。此數(shù)據(jù)集的大小為5000個(gè)帶注釋的幀。圖像分辨率為1280×800。針對(duì)語義分割和檢測(cè)任務(wù)對(duì)幀進(jìn)行注釋。對(duì)于語義分割,幀上的每個(gè)像素被注釋為屬于以下4個(gè)類別之一:[背景、道路、車道、路緣]。對(duì)于檢測(cè)類,幀中的對(duì)象被標(biāo)注在兩個(gè)類之間:[行人、汽車]。
評(píng)估了兩種類型的網(wǎng)絡(luò):
在表1中,總結(jié)了這兩種網(wǎng)絡(luò)的性能。我們可以觀察到,兩個(gè)網(wǎng)絡(luò)在分割任務(wù)和檢測(cè)任務(wù)上的KPI非常接近。我們提出的網(wǎng)絡(luò)能夠達(dá)到與Multinet參考網(wǎng)絡(luò)相同的精度水平,甚至更好。然而,我們提出的網(wǎng)絡(luò)比參考網(wǎng)絡(luò)快65%,這證明了本部分中提出的優(yōu)化階段的效率。
5. Conclusion
本文針對(duì)自動(dòng)駕駛應(yīng)用,提出了一種優(yōu)化的多任務(wù)網(wǎng)絡(luò)。首先,我們簡(jiǎn)要介紹了我們的低功耗SoC,并提出了使用多任務(wù)方法的必要性。然后,我們描述了所提出的網(wǎng)絡(luò)以及為實(shí)現(xiàn)嵌入約束所做的優(yōu)化。最后,我們分享了在我們自己的魚眼數(shù)據(jù)集和低功耗SoC上的實(shí)驗(yàn)結(jié)果。
我們可以合理地認(rèn)為,本文提出了三個(gè)主要貢獻(xiàn):一個(gè)專用于YUV4:2:0圖像空間的輸入數(shù)據(jù)層,一個(gè)面向低功耗SoC的CNN核心的網(wǎng)絡(luò),以及一個(gè)高度精簡(jiǎn)的網(wǎng)絡(luò),其精度接近于原始的Multinet網(wǎng)絡(luò),但速度要快得多。研討會(huì)的演示提案是一個(gè)很好的機(jī)會(huì),可以突出這些貢獻(xiàn),并現(xiàn)場(chǎng)展示我們網(wǎng)絡(luò)的效率。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。