国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

面向嵌入式設(shè)備的深度學(xué)習(xí)物體檢測優(yōu)化算法①

2019-04-29 08:58戴雷燕楊小利
計算機系統(tǒng)應(yīng)用 2019年4期
關(guān)鍵詞:網(wǎng)絡(luò)層剪枝寄存器

戴雷燕,馮 杰,董 慧,楊小利

(浙江理工大學(xué) 信息學(xué)院,杭州 310018)

1 引言

物體檢測是計算機視覺領(lǐng)域的一個重要問題,物體檢測算法從傳統(tǒng)的人工特征(如梯度方向直方圖,SIFT 角點)和經(jīng)典的統(tǒng)計機器學(xué)習(xí)方法(如支持向量機,樸素貝葉斯)[1-5]發(fā)展到現(xiàn)今的基于卷積神經(jīng)網(wǎng)絡(luò)的物體檢測算法,物體檢測效果令人驚嘆.2014年,R.Girshick 等人將卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用到物體檢測中,提出了基于區(qū)域的卷積神經(jīng)網(wǎng)絡(luò)(R-CNN)算法[6],使得檢測效果遠遠優(yōu)于當時的傳統(tǒng)物體檢測算法.隨后的Fast R-CNN[7]和Faster R-CNN[8]等都在檢測準確率和定位精度上不斷突破,而2015年Joseph Redmon 等提出的YOLO[9]算法和2016年Wei Liu 等提出的SSD[10]算法都是在算法速度上進行突破.在物體檢測算法不斷突破的同時,神經(jīng)網(wǎng)絡(luò)架構(gòu)也在不斷更新.

最早的卷積神經(jīng)網(wǎng)絡(luò)LeNet[11]是Yann LeCun 在1998年設(shè)計并提出的,它一開始是針對識別手寫數(shù)字問題,網(wǎng)絡(luò)結(jié)構(gòu)較為簡單,但是包含了卷積神經(jīng)網(wǎng)絡(luò)的基本單元,是以后各種模型的始祖.2012年,在ImageNet比賽上大放異彩的AlexNet[12]雖然只比LeNe 多了幾層,但效果遠遠優(yōu)于最早的LeNet,AlexNet 將激活函數(shù)由Sigmoid 換成了ReLU,解決了因為網(wǎng)絡(luò)層更深時的梯度彌散問題,還加入了dropout 層,有效解決過擬合問題.2014年出現(xiàn)的VGG[13]相較于AlexNet 而言網(wǎng)絡(luò)層越來越深,整個網(wǎng)絡(luò)層全部使用3×3 大小的小卷積核和2×2 的最大池化核,使得整個網(wǎng)絡(luò)結(jié)構(gòu)簡潔,具有更好的泛化性.Network in Network[14]模型的亮點在于1×1 卷積核和全局平均池化層(Global Average Pooling)的應(yīng)用,使得整個網(wǎng)絡(luò)模型的參數(shù)規(guī)模銳減,有利于網(wǎng)絡(luò)的加深,訓(xùn)練時間也得到提升.2014年的GoogLeNet[15]中使用了基礎(chǔ)卷積塊Inception,最后的全連接層借用NiN 模型思想換成Global Average Pooling,整個模型的參數(shù)量大大減小,效果更好.2015年的ResNet[16]中包含了Residual 單元,允許原始輸入信息直接傳遞到后面的網(wǎng)絡(luò)層中,解決了因為網(wǎng)絡(luò)層過深而梯度消失,無法反向傳播的問題.2017年谷歌公司提出的MobileNets使用深度分離卷積[17],進一步減小計算量,壓縮模型,可以滿足嵌入式設(shè)備的需求.

隨著硬件計算能力的快速發(fā)展,深度學(xué)習(xí)技術(shù)已經(jīng)應(yīng)用到很多便攜式嵌入設(shè)備中,比如各種刷臉支付、相冊智能分類、圖片風(fēng)格遷移等,但是目前一大挑戰(zhàn)是如何將龐大深度模型移植到資源有限的嵌入式設(shè)備上[18].

2 優(yōu)化流程

本文針對嵌入式設(shè)備進行的深度學(xué)習(xí)物體檢測優(yōu)化算法研究主要在PC 端和嵌入式平臺ARM 上完成.首先,準備好訓(xùn)練數(shù)據(jù),選擇合適的物體檢測框架和神經(jīng)網(wǎng)絡(luò)架構(gòu)進行構(gòu)建;然后在此網(wǎng)絡(luò)結(jié)構(gòu)下,對訓(xùn)練數(shù)據(jù)進行模型訓(xùn)練,得出原始物體檢測模型;接著對原始物體檢測模型進行模型剪枝,以上過程都是在PC 端上完成.將PC 端上完成模型剪枝的物體檢測模型移植到嵌入式設(shè)備ARM 平臺上,針對該物體檢測模型的各個網(wǎng)絡(luò)層進行運算代價計算,根據(jù)計算結(jié)果,對運算代價較高的網(wǎng)絡(luò)層進行匯編優(yōu)化.匯編優(yōu)化后的物體檢測模型在ARM 平臺上對冰箱內(nèi)采集到的視頻內(nèi)容進行前向推理,在ARM 平臺上顯示檢測結(jié)果,上述過程在ARM平臺上完成,圖1為整個物體檢測優(yōu)化算法的流程圖.

2.1 網(wǎng)絡(luò)結(jié)構(gòu)選擇

本文整體網(wǎng)絡(luò)架構(gòu)選用MobileNets,MobileNets中的深度可分解卷積是將標準卷積分解成一個深度卷積和一個點卷積.

假設(shè)輸入F的維度為DF×DF×M,其中DF為輸入F的寬和高,M為輸入層的通道數(shù).標準卷積時,卷積K的參數(shù)量表示為DK×DK×M×N,其中DK為卷積K的維度,N為輸出通道數(shù),則此時的計算代價為C:

深度可分解卷積時,將標準卷積K拆分為深度卷積DK×DK×1×M和點卷積1×1×M×N,計算代價為C’:

將深度可分解卷積的計算代價C’與標準卷積的計算代價C相除,進行比較:

在ImageNet 數(shù)據(jù)集上,深度分離卷積的參數(shù)量約是標準卷積參數(shù)量1/7,而準確率只下降了不到1%[17].

深度分離卷積在網(wǎng)絡(luò)結(jié)構(gòu)上的變化如圖2所示,將標準卷積拆分成深層卷積和點卷積,在每層卷積后面都有BN 層和激勵函數(shù)ReLU.

圖2 網(wǎng)絡(luò)結(jié)構(gòu)變化

在物體檢測算法方面,R-CNN 系列都是物體定位和物體分類分開進行的物體檢測方法,雖然準確率很高,但是速度較慢;而YOLO 和SSD 則都是一步完成物體定位和物體分類,其中YOLO 的速度很快,但是準確率不盡人意,而SSD 綜合了Faster R-CNN 的高準確率和YOLO 的快速率優(yōu)點,使得物體檢測方法更加適合應(yīng)用在嵌入式設(shè)備上,故選擇SSD 作為本次面向嵌入式設(shè)備的深度學(xué)習(xí)物體檢測優(yōu)化算法研究的物體檢測框架.

2.2 模型剪枝

在PC 端上的模型剪枝流程圖如圖3所示.

首先,對MobileNets-SSD 網(wǎng)絡(luò)進行神經(jīng)元重要性的評估,然后根據(jù)評估結(jié)果將其中最不重要的神經(jīng)元置零,對部分神經(jīng)元置零后的網(wǎng)絡(luò)進行微調(diào),判斷微調(diào)后的網(wǎng)絡(luò)是否達到預(yù)定標準,如果達到預(yù)定的標準,則可以停止剪枝;如果未到到預(yù)定的標準,則需要重復(fù)神經(jīng)元重要性評估、不重要神經(jīng)元置零、微調(diào)等步驟.

本文在模型剪枝過程中采用了一種基于一階泰勒展開的新的神經(jīng)元重要性評估準則[19].該準則中對神經(jīng)元的評估公式為:

上式中,D表示訓(xùn)練樣本集,W表示未修剪前的權(quán)重參數(shù),W’表示修剪后的權(quán)重參數(shù),C(D|W)為修剪后的代價函數(shù),而C(D|W’)表示的是修剪后的代價函數(shù),最優(yōu)化的剪枝就是使得修剪后的代價函數(shù)C(D|W’)盡可能地逼近修剪前的代價函數(shù)C(D|W).將剪枝前后的代價函數(shù)差值賦值給|ΔC(hi)|,找出令式(4)中|ΔC(hi)|值最小的非零權(quán)重參數(shù),將該參數(shù)置零,即完成一次剪枝.又因為C(D|hi)=C(D|(w,b)i),所以式(4)可以變換為式(5):

在式(5)中的C(D,hi=0)部分引入一階泰勒展開式,如式(6)所示:

其中,R1(hi=0)為高階項,因為ReLU 激活層中含有高階信息,同時為了避免復(fù)雜的計算,高階項R1(hi=0)可以忽略不計.

圖3 模型剪枝流程圖

綜合式(5)和式(6)可得式(7):

將特征圖看作變量的向量表示,當有M個變量時,剪枝前后的損失函數(shù)差值可表示為:

2.3 匯編優(yōu)化

嵌入式設(shè)備主要由嵌入式處理器、相關(guān)支撐硬件和嵌入式軟件系統(tǒng)組成,而樹莓派是一款基于ARM 的微型電腦主板,是作為學(xué)習(xí)計算機編程的首選嵌入式設(shè)備.本文使用的是樹莓派3 B,它有1.2 GHz 和64 位處理器,滿足物體檢測模型匯編優(yōu)化和前向推理的性能需求.

在該ARM 平臺上,通過對表1模型剪枝對比中各個網(wǎng)絡(luò)層的耗時比較,決定針對其中卷積層Conv_0、Conv_1、Conv_2、Conv_3、Conv_4、Conv_5、Conv_6、Conv_7、Conv_8、Conv_9、Conv_10、Conv_11、Conv_12、Conv_13、Conv_14_1 和Conv_14_2 進行匯編優(yōu)化,主要策略分為指令調(diào)整、寄存器分配和條件執(zhí)行[20].

表1 模型剪枝對比(單位:ms)

(1)指令調(diào)整:通過展開循環(huán)對裝載指令進行人工優(yōu)化,仔細安排裝載指令的時間次序,防止流水線終止.

(2)寄存器分配:限制局部變量的個數(shù);把多個局部變量存放在一個寄存器中.

(3)條件執(zhí)行:使用ARM 處理器特有的條件執(zhí)行指令來減少判斷跳轉(zhuǎn)和分支等對流水線影響較大的操作.

通過以上策略最大程度地利用平臺資源,發(fā)揮處理器最大效能,來滿足物體檢測模型直接在嵌入式設(shè)備上快速前向推理的需求.

3 實驗分析

3.1 數(shù)據(jù)集制作

通過冰箱內(nèi)的USB 攝像頭對總共76 種蔬菜水果飲料等冰箱常見食材進行訓(xùn)練樣本采集,一共采集5 萬張圖片,最后挑選出45 488 張作為訓(xùn)練樣本,如圖4所示.

圖4 訓(xùn)練樣本

圖5 數(shù)據(jù)標注

利用網(wǎng)上標注系統(tǒng)對挑選出的訓(xùn)練樣本進行數(shù)據(jù)標注,網(wǎng)上標注系統(tǒng)的界面如圖5所示,可以對物體進行種類選擇和位置定位.

3.2 訓(xùn)練優(yōu)化

訓(xùn)練時采用MobileNets 作為本次實驗的基礎(chǔ)網(wǎng)絡(luò)架構(gòu),其中總共有35 層卷積層,在Conv_11、Conv_13、Conv_14_2、Conv_15_2、Conv_16_2 和Conv_17_2后進行物體檢測方法SSD 的分類器分類、位置回歸和錨框的生成.最后,將以上6 個卷積層生成的類別特征、位置特征和anchor box 信息進行concat、Softmax和flatten.MobileNets 的網(wǎng)絡(luò)層與本文的MobileNets-SSD 網(wǎng)絡(luò)層如表2所示.相比于MobileNets,本文的MobileNets-SSD 多8 層卷積層,且最后的平均池化層、全連接層和Softmax 變成了conf_reshape、conf_softmax 和conf_flatten.對訓(xùn)練集進行訓(xùn)練后,最終本文的MobileNets-SSD 模型的mAP 達到84.7%.

表2 MobileNets 與本文的MobileNets-SSD

MobileNets-SSD 完成訓(xùn)練后進行基于一階泰勒展開的模型剪枝.控制裁剪的整體過程為:1)前向傳播2)獲取排序后的卷積窗口3)計算需要剪枝的卷積窗口個數(shù)4)裁剪.主要函數(shù)如下所示:

(1)forward

(2)compute_rank

(3)normalize_ranks_per_layer

(4)get_prunning_plan

(5)lowest_ranking_filters

其中函數(shù)(1)表示模型的前向傳播過程;函數(shù)(2)用在梯度更新時,其輸出的計算值用于卷積窗口排序;函數(shù)(3)是將每層的結(jié)果歸一化;函數(shù)(4)和函數(shù)(5)表示利用最小堆方法得到N個排名最低的卷積窗口.

完成一次剪枝后,進行模型微調(diào)和迭代.所有參數(shù)參與訓(xùn)練與學(xué)習(xí),重新訓(xùn)練模型10 個迭代.

具體實驗時,N分別設(shè)置為512 和1024,此時每層網(wǎng)絡(luò)層耗時情況如表1模型剪枝對比所示.N為512 時,物體檢測模型的mAP 為85.1%;N設(shè)為1024 時,物體檢測模型的mAP 為82.3%.可以看出,N為512 時,物體檢測模型的mAP 有所提升;而N為1024 時,物體檢測模型的mAP 有所下降,說明N設(shè)置為512 時,模型剪枝后的物體檢測模型復(fù)雜度更為適合本次實驗訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集,前向推理效果更好.

所以,綜合表1模型剪枝對比中N為512 和1024 時的耗時情況以及相對應(yīng)的物體檢測模型的mAP 值,本實驗選擇針對N為512 的模型剪枝后的MobileNets-SSD 物體檢測模型進行匯編優(yōu)化.經(jīng)過模型剪枝后的MobileNets-SSD 模型體積由23.1 MB 縮減為20.8 MB,模型體積減小9.96%.

3.3 ARM 平臺優(yōu)化

由表1模型剪枝對比可知,物體檢測模型中卷積層Conv_0、Conv_1、Conv_2、Conv_3、Conv_4、Conv_5、Conv_6、Conv_7、Conv_8、Conv_9、Conv_10、Conv_11、Conv_12、Conv_13、Conv_14_1 和Conv_14_2 無論是模型剪枝前還是模型剪枝后,耗時都比較久.我們通過指令調(diào)整、寄存器分配和條件執(zhí)行等手段對模型剪枝前和模型剪枝后的耗時多的網(wǎng)絡(luò)層分別進行匯編優(yōu)化.主要應(yīng)用到的是NEON 技術(shù),它是ARM 處理器的128 位SIMD 架構(gòu)擴展,旨在為消費性多媒體應(yīng)用程序提供靈活、強大的加速功能.它具有32 個64 位寄存器和16 個128位寄存器.寄存器的具體調(diào)用代碼如下所示:

(1).macro MobileNets-SSD

(2)vldl.32 {d16-d19},[BO]!

(3)vldl.32 {d0-d3},[AO]!

(4)vldl.32 {d16-d19},[BO]!

(5)vldl.32 {d4-d7},[AO]!

(6)vmla.f32 q12,q0,d16[0]

(7)vmla.f32 q12,q2,d18[0]

(8)vmla.f32 q12,q3,d20[0]

(9)vmla.f32 q12,q4,d22[0]

(10)...

(11)vstl.32 {d24-d27},[CO]!

(12)vstl.32 {d28-d31},[CO]!

(13).endm

上述代碼(1)行,.macro 后面的字符串表示該宏的名稱,在后續(xù)的調(diào)用中可以直接利用該宏來替代內(nèi)部的具體實現(xiàn)代碼.代碼(13)行的.end 為宏的載止位置.

代碼(2)-(5)行為數(shù)據(jù)加載指令,其中A0 表示矩陣起始地址,B0 為右矩陣的起始地址,兩者均為地址寄存器.vldl,32 指令的調(diào)用可以將數(shù)據(jù)按照32 位為一個數(shù)據(jù)單位的順序加載到NEON 寄存器當中,數(shù)據(jù)的連續(xù)性能夠減少指令的訪存時間.

代碼(6)-(9)行為結(jié)果矩陣第一列的計算過程,vmla.f32為乘加指令.

代碼(10)行表示其他幾列的計算方式.

代碼(11)-(12)行將寄存器當中的結(jié)果矩陣的值存儲到內(nèi)存當中,當存儲位置是連續(xù)的情況下,指令的訪存將同樣是連續(xù)的,減少數(shù)據(jù)存儲所需時間.

匯編優(yōu)化后的結(jié)果如表3匯編對比所示.

由表3匯編對比可知,模型剪枝后的MobileNets-SSD 模型前向推理速率相較于未進行模型剪枝時的速率加快了1.16 倍,而匯編前后模型的mAP 無變化;又結(jié)合表1模型剪枝對比和表3匯編對比,經(jīng)過模型剪枝和匯編優(yōu)化的MobileNets-SSD 模型前向推理速率相較于原始模型加快了8.82 倍.

本文還選擇其他兩個前向推理框架進行了對比,使用的都是剪枝之后的網(wǎng)絡(luò)模型,如表4所示.Mini-Caffe 是對Caffe 的前向推理版本,匯編優(yōu)化比較少,Ncnn 是騰訊開發(fā)的帶匯編優(yōu)化的前向推理框架,做了比較深度的匯編優(yōu)化.與它們相比,本文最終的前向推理時間是最低的.

表3 匯編對比

表4 與其他框架的對比

3.4 檢測結(jié)果

在ARM 平臺上的前向推理時,測試樣本檢測結(jié)果如圖6所示.

部分物體未被檢測的原因有以下幾點:

(1)遮擋物過多,未能檢測到整個物體;

(2)離USB 攝像頭太遠,暴露面積太??;

(3)只暴露物體部分特征,前向推理困難等.

前期的訓(xùn)練樣本的選擇對最后嵌入式設(shè)備上物體檢測模型的前向推理檢測結(jié)果有一定影響.整體效果較為理想.

圖6 檢測結(jié)果

4 結(jié)論與展望

本文選擇了合適的物體檢測框架SSD 和神經(jīng)網(wǎng)絡(luò)架構(gòu)MobileNets,訓(xùn)練出一個滿足嵌入式設(shè)備需求的物體檢測模型,并通過模型剪枝對該物體檢測模型進行優(yōu)化,在移植到ARM 平臺上之后又進行匯編優(yōu)化,進一步加快前向推理速率.在準確精度和模型大小方面還可以有進一步的研究:

(1)MobileNets V2 的準確率和速率都有提高,可以在此網(wǎng)絡(luò)結(jié)構(gòu)上進行物體檢測算法優(yōu)化.

(2)因為模型中參數(shù)的存儲精度為32 位的浮點數(shù),可以在ARM 平臺上針對模型參數(shù)進行量化,更大程度地壓縮模型,加快前向推理速率.

猜你喜歡
網(wǎng)絡(luò)層剪枝寄存器
人到晚年宜“剪枝”
利用KL散度度量通道冗余度的深度神經(jīng)網(wǎng)絡(luò)剪枝方法
基于YOLOv4-Tiny模型剪枝算法
常用電子測速法在某數(shù)字信號處理器中的應(yīng)用*
飛思卡爾單片機脈寬調(diào)制模塊用法研究
移位寄存器及算術(shù)運算應(yīng)用
論物聯(lián)網(wǎng)安全威脅及其應(yīng)對策略
剪枝
物聯(lián)網(wǎng)技術(shù)在信息機房制冷系統(tǒng)中的應(yīng)用
淺析TDCS/CTC系統(tǒng)中心網(wǎng)絡(luò)防火墻的鏈接
松阳县| 航空| 金华市| 桓台县| 上饶县| 绥滨县| 哈巴河县| 中山市| 大港区| 神农架林区| 获嘉县| 沧源| 宝应县| 墨竹工卡县| 黔江区| 治多县| 滦南县| 泗洪县| 舒城县| 遂宁市| 马公市| 奉贤区| 沁源县| 丹阳市| 文水县| 游戏| 龙陵县| 阳新县| 邵武市| 昌江| 汉中市| 商丘市| 闻喜县| 瓮安县| 乡宁县| 英德市| 深水埗区| 彭州市| 九寨沟县| 晋中市| 仙居县|