張利紅,蔡敬菊
(1.中國科學(xué)院 光電技術(shù)研究所,四川 成都 610209;2.中國科學(xué)院大學(xué),北京 100049)
目標(biāo)檢測是計算機(jī)視覺的重要研究領(lǐng)域之一,要求能對圖像中的目標(biāo)位置進(jìn)行精準(zhǔn)定位、種類精確識別。隨著深度學(xué)習(xí)和智能互聯(lián)技術(shù)的發(fā)展,將目標(biāo)檢測算法應(yīng)用至終端的需求不斷增強(qiáng),但受限于嵌入式設(shè)備的內(nèi)存和算力資源,參數(shù)量多、結(jié)構(gòu)復(fù)雜的模型部署時的計算開銷和通信耗時是個亟待解決的問題。
近年來,對模型進(jìn)行輕量化改進(jìn)主要分為兩類:網(wǎng)絡(luò)結(jié)構(gòu)壓縮、權(quán)重數(shù)值壓縮。前者以SqueezeNet[1]、MobileNet[2]、ShuffleNet[3]等輕量化模型結(jié)構(gòu)系列為代表,后者中網(wǎng)絡(luò)減枝和量化是應(yīng)用最廣泛的兩種方法。
自2012年以后,基于深度學(xué)習(xí)的目標(biāo)檢測算法成為主流研究方向,并分為單階段和雙階段兩類。雙階段檢測算法以R-CNN[4-5]系列為代表,需要先獲取目標(biāo)區(qū)域隨后進(jìn)行候選框的選取,檢測精度較高的同時計算量大又比較復(fù)雜;不適合進(jìn)行終端部署。單階段檢測算法以Yolo[6-9]系列為代表,將候選區(qū)域生成階段省略掉,直接將檢測任務(wù)視為回歸問題進(jìn)行端到端的檢測,檢測速度和精度相對其他深度目標(biāo)檢測算法在嵌入式設(shè)備上進(jìn)行部署更占優(yōu)勢。
Rk3399pro是福州瑞芯微電子開發(fā)的專門針對終端推理的國產(chǎn)AI芯片,芯片架構(gòu)采用大小核處理器內(nèi)嵌NPU神經(jīng)網(wǎng)絡(luò)處理器的方案換取高性能、低功耗和高擴(kuò)展性,兼具高速總線PCIE和超強(qiáng)的視頻編解碼能力,以上特點(diǎn)使其適用于目標(biāo)檢測算法部署。
該文以Yolov5s算法為模型結(jié)構(gòu)基礎(chǔ),對其Backbone特征提取層使用mobilenetv2[10]進(jìn)行替換,并通過網(wǎng)絡(luò)模型稀疏化獲得縮放因子,根據(jù)縮放因子的分布對卷積核做重要性排序,并考慮到Rk3399pro芯片架構(gòu)特點(diǎn)進(jìn)行卷積通道數(shù)裁剪約束。其次通過對減枝后的模型通過將32位浮點(diǎn)數(shù)據(jù)進(jìn)行非對稱8位量化減少權(quán)重參數(shù),并充分考慮到平臺的多核處理器資源,使用CPU-GPU-NPU多線程協(xié)同計算。對圖像前后處理和硬件推理時間模糊后,實(shí)現(xiàn)了實(shí)時的魯棒目標(biāo)檢測系統(tǒng)。
Yolo系列算法將檢測任務(wù)統(tǒng)一為回歸問題,省去Region proposal階段,直接可從一張圖像中預(yù)測出bouning box的坐標(biāo)及目標(biāo)各類別概率。
Yolov5是由Uitralytics公司發(fā)布的單階段算法,基于pytorch訓(xùn)練而成,并按模型大小排序?yàn)閥olov5x、yolov5l、yolov5m、yolov5s四個模型,其中v5s網(wǎng)絡(luò)模型相較于yolov1-v4系列,在檢測精度相仿的基礎(chǔ)上,實(shí)現(xiàn)了寬度深度、權(quán)重參數(shù)更小,更適合部署至嵌入式平臺中。
Yolov5可以分為Input輸入端、Backbone、Neck、Head輸出端四個部分,如圖1所示。Yolov5在Input輸入端對圖像進(jìn)行自適應(yīng)填充預(yù)處理,對不同數(shù)據(jù)集自適應(yīng)計算anchor大小,并采用Mosaic數(shù)據(jù)增強(qiáng)的方法,將四張圖片進(jìn)行隨機(jī)非對稱縮放、裁剪和排布組合,實(shí)現(xiàn)對目標(biāo)樣本大小和背景豐富;同時Yolov5相比v4增加了正樣本的anchor數(shù)目,顯著增加訓(xùn)練速度,減少收斂時間。Backbone中的focus模塊主要用于將輸入的圖片數(shù)據(jù)進(jìn)行切片,即將原本圖像的高、寬轉(zhuǎn)化為了特征信息通道,對矩陣進(jìn)行卷積后就得到了下采樣的特征圖,從而減少前向計算中特征提取的時間花銷。Backbone中主要分為瓶頸跨階段局部結(jié)構(gòu)BottleneckCSP和空間金字塔池化模塊SPP,實(shí)現(xiàn)了對不同尺度的特征提取。其中Neck中采用了特征金字塔FPN自底向上傳遞語義特征,與路徑聚合結(jié)構(gòu)PAN自上向下傳遞位置特征相結(jié)合。Neck實(shí)現(xiàn)不同網(wǎng)絡(luò)層的信息融合,在Head輸出端可實(shí)現(xiàn)更精準(zhǔn)的預(yù)測。
Yolov5中的Focus模塊在平臺部署的時候并不能帶來更高的精度提升,甚至略微增加了模型參數(shù)量,于是用Conv卷積模塊進(jìn)行替代。同時將Backbone中復(fù)雜的BottleneckCSP模塊替換為MobileNetv2。
MobileNetv1使用深度可分離卷積的堆疊替代標(biāo)準(zhǔn)卷積,其包括深度卷積和逐點(diǎn)卷積兩部分,可在同等卷積輸入下減少模型參數(shù)量和計算開銷。
假設(shè)標(biāo)準(zhǔn)卷積與深度可分離卷積的輸入特征圖寬為Wc、高為Hc、卷積核數(shù)為M、通道數(shù)為N,輸出特征圖大小為Wo×Ho×N,如圖2所示。而深度卷積在標(biāo)準(zhǔn)卷積的基礎(chǔ)上將卷積核數(shù)改為1后,并與送入1×1逐點(diǎn)卷積模塊后的卷積結(jié)果相加。兩者的計算和參數(shù)量相比均如式(1)所示:
(1)
Mobilenetv2在其基礎(chǔ)上除了沿用深度可分離卷積外還加入了Expansion layer和線性連接的Bottleneck layer,分別實(shí)現(xiàn)高維特征與低維特征之間的映射,模型體積僅為mobilev1的1/4。該文將原yolov5s的特征提取層中的BottleneckCSP替換后,可實(shí)現(xiàn)網(wǎng)絡(luò)結(jié)構(gòu)輕量化。
網(wǎng)絡(luò)減枝被廣泛應(yīng)用于卷積網(wǎng)絡(luò)壓縮中,可以有效地降低網(wǎng)絡(luò)復(fù)雜度和緩解過擬合,并提高前向推理速度。基于卷積核的結(jié)構(gòu)化減枝指從卷積核層面進(jìn)行考慮,在初始時正常訓(xùn)練網(wǎng)絡(luò),隨后將權(quán)重鏈接低于判斷閾值的卷積核或通道進(jìn)行移除,最后對稀疏后的網(wǎng)絡(luò)進(jìn)行微調(diào)即可在輕微損失精度時獲得輕量化模型。
在對卷積核重要性的判斷中,Li等[11]使用卷積核權(quán)重的L1范數(shù)值作為判斷標(biāo)準(zhǔn),He[12]則以卷積核的非零權(quán)重值個數(shù)及L0范數(shù)為標(biāo)準(zhǔn)進(jìn)行判斷。Ye[13]則考慮到了較小范數(shù)對提取特征準(zhǔn)確度的影響,Hu[14]則以卷積核權(quán)重的稀疏程度排序作為減枝標(biāo)準(zhǔn)。此外還有些學(xué)者研究通過集成減枝的方法,綜合多種參數(shù)排序依據(jù)進(jìn)行模型減枝[15-16]。
該文對網(wǎng)絡(luò)BN層中可學(xué)習(xí)的參數(shù)進(jìn)行L1正則化稀疏訓(xùn)練,得到接近0的稀疏縮放因子,并采用L1范數(shù)對卷積核重要性進(jìn)行評價的方式進(jìn)行減枝,流程如圖3所示。即按照遞減順序?qū)⒚總€卷積層的濾波器矩陣絕對值總和排列,設(shè)定一個閾值將低于此閾值的卷積核去除。
為了避免單一閾值參數(shù)的評價方式造成誤減、結(jié)構(gòu)通道數(shù)發(fā)生巨變或檢測精度下降過多,并且考慮到嵌入式平臺MAC硬件單元對優(yōu)化模型加速時對卷積通道數(shù)要求最好為3的倍數(shù),在剪枝時設(shè)計判斷函數(shù)(如式(2)),進(jìn)一步抑制減枝通道數(shù)范圍。
(2)
其中,N表示網(wǎng)絡(luò)減枝后的通道數(shù),x表示原網(wǎng)絡(luò)卷積核通道數(shù),f(x)表示經(jīng)減枝后小于x且是9的倍數(shù)的最大值。
模型量化指將32位浮點(diǎn)運(yùn)算轉(zhuǎn)化為定點(diǎn)計算,可以有效壓縮參數(shù)、降低內(nèi)存占用,但也會略微降低檢測精度。目前常用的量化方法分為三類:二三值化、線性量化以及對數(shù)量化。二三值化過于簡單的位運(yùn)算操作會帶來極大的精度損失,而對數(shù)運(yùn)算將同底的冪指數(shù)相乘的復(fù)雜操作不利于AI芯片底層加速實(shí)現(xiàn)。因此該文考慮使用線性量化中非對稱和對稱量化兩種方案驗(yàn)證擇優(yōu)選取。
根據(jù)近幾年的量化模型研究8位量化能夠盡量在損失精度較小的情況下實(shí)現(xiàn)模型大小的壓縮,并分為對稱量化和非對稱量化兩種。根據(jù)谷歌對量化研究的白皮書指導(dǎo)可知,對大部分網(wǎng)絡(luò)而言非對稱(unit8)量化對網(wǎng)絡(luò)精度損失最小[17]。其二者區(qū)別在于計算公式中是否存在零點(diǎn)值的漂移,同時還根據(jù)不同網(wǎng)絡(luò)權(quán)重參數(shù)值在壓縮后的分布相關(guān)。因此,該文分別對兩種量化方式都進(jìn)行精度損失測驗(yàn)。
兩種量化方式屬于32位浮點(diǎn)數(shù)據(jù)映射到8位定點(diǎn)的不同計算方式,區(qū)別在于是否存在零點(diǎn)值Z的偏移。
(3)
其中,xf表示輸入的float32類型數(shù)據(jù),n表示量化后數(shù)據(jù)的bit位數(shù),Q表示量化后數(shù)值。
對模型采用不同的量化方式可以發(fā)現(xiàn)(見圖4),使用8位定點(diǎn)量化的模型大小將減至量化前的1/4,將FP32的浮點(diǎn)數(shù)張量轉(zhuǎn)化為unit8張量,有助于減少內(nèi)存帶寬和存儲空間,并進(jìn)一步提高系統(tǒng)吞吐量,降低系統(tǒng)延時。
實(shí)驗(yàn)選擇目標(biāo)檢測常用的PASCAL VOC數(shù)據(jù)集進(jìn)行訓(xùn)練,包括常見的vehicle、household、animal、person四個大類及20個小類。檢測目標(biāo)樣本豐富,特征背景不一,可用于訓(xùn)練測試在不同環(huán)境需求下的深度目標(biāo)檢測算法。對數(shù)據(jù)集中少部分標(biāo)注不清或目標(biāo)重疊或較小的圖片進(jìn)行篩選和數(shù)據(jù)增強(qiáng)操作。
未移植前模型以pytorch為框架,訓(xùn)練硬件環(huán)境設(shè)置為GPU:RTX 2060 SUPER,CPU:i5-10400,內(nèi)存16 G;python:3.6;CUDA10.1,cuDNN7.6.5,opencv:3.4.5;移植后以RKNN為框架,嵌入式設(shè)備:Rk3399pro。在PC機(jī)上安裝交叉編譯環(huán)境,通過ssh協(xié)議遠(yuǎn)程登錄到板端,將在PC端編寫的程序用CMake工具編寫Cmakelist.txt配置文件實(shí)現(xiàn)跨平臺的編譯和管理。在pycharm上進(jìn)行python代碼的編寫訓(xùn)練,在VScode進(jìn)行C++程序的部署落地。
評價模型精確度指標(biāo)采用mAP(mean average precision),其由模型訓(xùn)練中每一類檢測目標(biāo)的精確率(Precision)對應(yīng)的召回率(Recall)在0至1的范圍內(nèi)進(jìn)行積分后求和,再除以總的檢測目標(biāo)類別數(shù)得到。
(4)
其中,TP表示檢測目標(biāo)被模型正確識別為正例的個數(shù),F(xiàn)P表示被模型錯誤識別為正例的個數(shù),F(xiàn)N表示被錯誤識別為負(fù)例的個數(shù),N值為20。
為防止單次模型訓(xùn)練中存在的誤差,文中數(shù)據(jù)均是經(jīng)過五次平均后的結(jié)果。
在原yolov5s的網(wǎng)絡(luò)結(jié)構(gòu)上進(jìn)行輕量化改進(jìn),輸入圖像大小為416×416,分別就替換特征提取網(wǎng)絡(luò)、網(wǎng)絡(luò)減枝、量化后的網(wǎng)絡(luò)與原網(wǎng)絡(luò)進(jìn)行性能對比。在PC端的模型對比為Pytorch框架下,在Rk3399pro端的對比在RKNN框架下,從pt模型轉(zhuǎn)換為RKNN模型需要模型訓(xùn)練的框架版本及神經(jīng)網(wǎng)絡(luò)op算子能被RKNN Toolkit識別進(jìn)而才能被硬件支持,而原yolov5s導(dǎo)出的pt模型并不滿足條件。RKNN模型開發(fā)應(yīng)用流程如圖5所示。
在原版yolov5s模型基礎(chǔ)上,通過更改模型訓(xùn)練框架版本、使用常規(guī)op替換特殊op算子以及編寫能被硬件支持的op算子解決硬件支持問題后,且未進(jìn)行文中的模型輕量化改進(jìn)直接導(dǎo)出的模型標(biāo)注為yolov5s.RKNN。
由表1中數(shù)據(jù)可見,與原yolov5s.pt模型相比,改進(jìn)特征提取網(wǎng)絡(luò)和進(jìn)一步剪枝后的模型在PC端的推理耗時大幅減少,檢測速度從140 fps/s提升至370 fps/s,模型精度在參數(shù)量降低了17.1%的基礎(chǔ)上損失了6.74%。而將兩種離線模型轉(zhuǎn)換為Rk3399pro支持的RKNN框架下進(jìn)行部署后,論文提供了無量化、非對稱及對稱8位量化三種不同精度和運(yùn)行速度的模型方案,供不同檢測性能需求的應(yīng)用場景下進(jìn)行選擇。其中對稱與非對稱8位量化模型參數(shù)量大小相同時,非對稱8位量化對yolov5s及文中模型均損失精度更低。
表1 不同模型性能對比
文中模型檢測精度mAP值略微低于yolov5s.RKNN,但在理論檢測速度上從18.6 fps/s大幅提升至50 fps/s。在一些要求檢測速度的特殊應(yīng)用場景下,采用文中輕量化方案會更加合理,對于存在的精度損失問題,實(shí)驗(yàn)中對較小或遮擋的目標(biāo)也能有所檢測。
該文主要針對yolov5s在輕量化部署方向上進(jìn)行探索改進(jìn),yolo其他系列算法采用Darknet網(wǎng)絡(luò)框架構(gòu)建訓(xùn)練而成,在檢測不同特征樣本的數(shù)據(jù)集時,可能相較yolov5s的適配性更高。為探索不同算法的部署效果,驗(yàn)證提出的改進(jìn)方案具有一定的普適性,對yolov2-v4系列在數(shù)據(jù)預(yù)處理后的KITTI數(shù)據(jù)集訓(xùn)練,并同樣進(jìn)行輕量化實(shí)驗(yàn),結(jié)果如表2所示。
表2 改進(jìn)yolo系列輕量化模型前后檢測效果對比
由表2可見,對yolo系列而言,采用文中改進(jìn)方式均可實(shí)現(xiàn)在Rk3399pro上進(jìn)行輕量化部署,為后續(xù)進(jìn)一步探索其他改進(jìn)方法提供了理論和數(shù)據(jù)支持。
對算法網(wǎng)絡(luò)進(jìn)行輕量化改進(jìn)后,在實(shí)際部署至終端時需要考慮最大化利用硬件設(shè)備資源,以減少圖像數(shù)據(jù)傳輸和推理中不必要的耗時。在Rk3399pro采用CPU-GPU-NPU多線程協(xié)同計算方案(見圖6)優(yōu)化算法運(yùn)行速度[18],即:(1)圖像獲取與預(yù)處理;(2)數(shù)據(jù)推理;(3)數(shù)據(jù)后處理與顯示。
以上三種分支結(jié)構(gòu)中計算復(fù)雜度最高的就是數(shù)據(jù)推理,數(shù)據(jù)推理中的卷積計算占到整個目標(biāo)檢測系統(tǒng)90%的計算量應(yīng)交由NPU工作。其余兩個分支結(jié)構(gòu)都與圖像處理相關(guān)交由GPU實(shí)現(xiàn)。而CPU則負(fù)責(zé)系統(tǒng)調(diào)度,協(xié)調(diào)各個預(yù)算單元降低GPU功耗和NPU負(fù)載。
在開發(fā)測試過程中發(fā)現(xiàn),NPU專注推理加速時整個模型推理過程耗時將極小,而圖像預(yù)處理和后處理時間較長。該文將利用兩個CPU大核分時復(fù)用NPU對GPU預(yù)處理的圖像數(shù)據(jù)進(jìn)行加速推理,隨后CPU小核調(diào)用GPU進(jìn)行數(shù)據(jù)后處理和顯示。
實(shí)驗(yàn)證明使用8位量化后的Our mobilenetv2-yolov5s模型在Rk3399pro的理論推理性能達(dá)到50幀/s,比不進(jìn)行網(wǎng)絡(luò)結(jié)構(gòu)輕量化的8位量化yolov5s.RKNN模型的基礎(chǔ)上提升了近1.7倍。
為比較Rk3399pro同其他國產(chǎn)AI芯片平臺在目標(biāo)檢測算法部署上的性能差異,同時考慮到不同國產(chǎn)平臺的AI算子支持和軟件開發(fā)環(huán)境差異,僅對yolov3 tiny模型進(jìn)行部署,檢測速度數(shù)據(jù)比較如圖7所示。
由圖7可知,雖然不同AI芯片存在算力、軟硬件開發(fā)環(huán)境差異,但Rk3399pro由于相對而言在硬件加速的適配效果較好,對yolo系列算法而言還是比較適合做目標(biāo)檢測算法應(yīng)用的嵌入式平臺之一。
以yolov5s算法為基礎(chǔ),使用MobileNetv2替換Backbone特征提取層中的BottleneckCSP結(jié)構(gòu)、Conv替換Focus模塊達(dá)到網(wǎng)絡(luò)輕量化。針對Rk3399pro芯片結(jié)構(gòu)特點(diǎn)對卷積核通道數(shù)約束后基于L1范數(shù)進(jìn)行稀疏減枝,并對比了不同量化方式后模型差異,驗(yàn)證文中算法采用非對稱8位量化精度損失更低、檢測速度相較原模型更快。為證明算法改進(jìn)的普適性,對Yolo其他系列算法同樣進(jìn)行實(shí)驗(yàn);為證明采用Rk3399pro平臺部署的合理性,對其他國產(chǎn)AI平臺也進(jìn)行相關(guān)實(shí)驗(yàn)比較??芍谑褂梦闹心P洼p量化、c++部署、多核并行等改進(jìn)后,能在Rk3399pro上實(shí)現(xiàn)實(shí)時的目標(biāo)檢測系統(tǒng)。