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

?

基于深度神經(jīng)壓縮的YOLO加速研究

2019-05-27 01:18陳莉君李卓
現(xiàn)代計(jì)算機(jī) 2019年11期
關(guān)鍵詞:剪枝權(quán)值嵌入式

陳莉君,李卓

(西安郵電大學(xué)計(jì)算機(jī)學(xué)院,西安710100)

0 引言

從AlphaGo開(kāi)始,深度學(xué)習(xí)漸漸進(jìn)入業(yè)內(nèi)研究者的視線。深度學(xué)習(xí)近些年大熱的主要原因是由于近些年設(shè)備的計(jì)算力的增加,尤其是圖形處理器(Graphics Processing Unit,GPU)對(duì)于浮點(diǎn)數(shù)運(yùn)算的有力支持。YOLO[1]的提出了一種在目標(biāo)識(shí)別領(lǐng)域新的方式,將檢測(cè)和回歸問(wèn)題集合在一起,大大的增加了對(duì)于目標(biāo)的檢測(cè)速度。但是,YOLO的網(wǎng)絡(luò)層數(shù)相較于傳統(tǒng)的網(wǎng)絡(luò)也增加很多,導(dǎo)致訓(xùn)練和推理的計(jì)算量會(huì)大大增加。尤其是嵌入式設(shè)備和移動(dòng)設(shè)備,這些設(shè)備可能并不能很好地支撐層數(shù)增加之后帶來(lái)的計(jì)算量增加。為了能讓更多的設(shè)備和更多的人用上和享受到深度學(xué)習(xí)給他們帶來(lái)的方便,對(duì)于深度神經(jīng)網(wǎng)絡(luò)推理加速需求就漸漸增多了[2-4]。

國(guó)內(nèi)外現(xiàn)有的研究結(jié)果中有一部分是利用并行化神經(jīng)網(wǎng)絡(luò)進(jìn)行加速,這樣可以將一個(gè)深度神經(jīng)網(wǎng)絡(luò)并行化拆分,分布式運(yùn)行這個(gè)模型。另外一部分是使用軟件加速深度神經(jīng)網(wǎng)絡(luò)的例子。例如:EIE(Efficient Inference Engine)[5]這個(gè)軟件提出了一個(gè)推理引擎,對(duì)這個(gè)壓縮的網(wǎng)絡(luò)模型進(jìn)行推理,并利用權(quán)重共享進(jìn)行加速稀疏矩陣的相乘過(guò)程。DeepX[6]:用于移動(dòng)設(shè)備上低功耗深度學(xué)習(xí)推斷的軟件加速器。Eyeriss[7]:用于深度卷積神經(jīng)網(wǎng)絡(luò)的節(jié)能可重構(gòu)加速器。針對(duì)深度神經(jīng)網(wǎng)絡(luò)模型的壓縮,Kim等人在2015年提出了一種壓縮CNN模型的方法。Soulie等人在2016年提出一種在模型訓(xùn)練階段進(jìn)行壓縮的方法。首先在全連接層損失函數(shù)上增加額外的歸一項(xiàng),使得權(quán)重趨向于二值,然后對(duì)于輸出層進(jìn)行量化。

現(xiàn)有的加速方案都是基于大型GPU設(shè)備的。對(duì)于嵌入式和移動(dòng)設(shè)備,加速的效果并不是很明顯。嵌入式和移動(dòng)設(shè)備的硬件限制仍然是影響神經(jīng)網(wǎng)絡(luò)發(fā)展的一個(gè)重要的因素。

針對(duì)上述問(wèn)題,本文中主要對(duì)YOLO神經(jīng)網(wǎng)絡(luò)進(jìn)行壓縮,測(cè)試深度神經(jīng)壓縮[8]中剪枝方式對(duì)于卷積神經(jīng)網(wǎng)絡(luò)的模型減少和推理加速效果。

1 深度神經(jīng)壓縮

深度神經(jīng)網(wǎng)絡(luò)中通常會(huì)有過(guò)多的參數(shù),存在大量的計(jì)算冗余的情況。這種情況將浪費(fèi)設(shè)備的內(nèi)存和計(jì)算資源,加大了嵌入式設(shè)備、低功耗設(shè)備和移動(dòng)設(shè)備的消耗[9-11]。

深度神經(jīng)壓縮(Deep Compression)存在四種方式,參數(shù)共享方法、網(wǎng)絡(luò)刪減方法、暗知識(shí)方法和矩陣分解方法。

參數(shù)共享的主要思路是多個(gè)參數(shù)共享一個(gè)值。通常實(shí)現(xiàn)的方法可以有很多選擇。例如Vanhoucke和Hwang等人使用定點(diǎn)方法江都參數(shù)精度,從而是值相近的參數(shù)共享一個(gè)值。Chen等人提出一種基于哈希算法的方法,將參數(shù)映射到相應(yīng)的哈希表上,實(shí)現(xiàn)參數(shù)共享。Gong等人使用K-means聚類方法將錢(qián)全部的參數(shù)進(jìn)行聚類,每簇參數(shù)共享參數(shù)的中心值。

網(wǎng)絡(luò)刪減用來(lái)降低網(wǎng)絡(luò)復(fù)雜度,防止過(guò)擬合。Han等人針對(duì)模型的訓(xùn)練效果,然后在基于參數(shù)共享和哈夫曼編碼進(jìn)一步對(duì)網(wǎng)絡(luò)壓縮。

在基于暗知識(shí)的方法中,Sau等人基于老師-學(xué)生學(xué)習(xí)框架對(duì)網(wǎng)絡(luò)進(jìn)行壓縮。

基于矩陣分解理論,Sainath、Denil等人采用低秩分解對(duì)神經(jīng)網(wǎng)絡(luò)不同曾的參數(shù)進(jìn)行壓縮。Denton等人在神經(jīng)網(wǎng)絡(luò)使用矩陣分解的方法加速了卷積層的計(jì)算過(guò)程,減少了全連接層的網(wǎng)絡(luò)參數(shù),對(duì)于神經(jīng)網(wǎng)絡(luò)進(jìn)行壓縮。

深度神經(jīng)壓縮主要表現(xiàn)在三個(gè)部分:存儲(chǔ)、訓(xùn)練復(fù)雜度和推理復(fù)雜度。以上介紹的方法中,都有各自的優(yōu)點(diǎn)和不足。參數(shù)共享方法、網(wǎng)絡(luò)刪減方法、暗知識(shí)方法和矩陣分解方法都可以有效的降低模型的存儲(chǔ)復(fù)雜度,但是在訓(xùn)練復(fù)雜度和推理復(fù)雜度上沒(méi)有重要影響。暗知識(shí)方法雖然在三個(gè)方面都有比較好的表現(xiàn),但是在準(zhǔn)確率方面,相較于其他三種方法,會(huì)有較大的變化。

2 YOLO

YOLO屬于CNN,由卷積層、池化層和全連接層組成。與CNN不同的是,YOLO的輸出層不再是max函數(shù),而是張量(Tensor)。

YOLO的訓(xùn)練和推理過(guò)程和其他CNN存在不同之處[12],例如 R-CNN、Fast R-CNN和 Faster R-CNN 三種網(wǎng)絡(luò)。RCC、Fast R-CNN采用模塊分離的方式進(jìn)行推理過(guò)程。在檢測(cè)目標(biāo)的過(guò)程中,兩種網(wǎng)絡(luò)需要將待檢測(cè)的目標(biāo)區(qū)域進(jìn)行預(yù)提取,再將包含目標(biāo)的區(qū)域進(jìn)行卷積/池化操作提取特征,最后進(jìn)行檢測(cè)行為。在Faster R-CNN中,使用 RPN(Region Proposal Network)代替R-CNN/Fast R-CNN中的選擇搜索模塊,將RPN集成到Fast R-CNN模塊中,得到一個(gè)統(tǒng)一的檢測(cè)網(wǎng)絡(luò)。但是在模型的訓(xùn)練過(guò)程中,需要反復(fù)訓(xùn)練RPN網(wǎng)絡(luò)和Fast R-CNN網(wǎng)絡(luò)。上述三種網(wǎng)絡(luò)最大的特點(diǎn)就是在推理的過(guò)程中,需要將待檢測(cè)的目標(biāo)區(qū)域進(jìn)行預(yù)讀取。預(yù)讀取會(huì)耗費(fèi)大量的磁盤(pán)(內(nèi)存)空間,會(huì)對(duì)一些嵌入式設(shè)備、低功耗設(shè)備和移動(dòng)設(shè)備造成壓力。YOLO在設(shè)計(jì)的過(guò)程中就針對(duì)的進(jìn)行了改進(jìn)。

3 基于深度神經(jīng)壓縮的YOLO加速

原始的YOLO模型在完成訓(xùn)練后,模型大小達(dá)到200M,對(duì)于嵌入式設(shè)備和移動(dòng)設(shè)備而言。200M的模型進(jìn)行內(nèi)存預(yù)讀,會(huì)對(duì)設(shè)備的性能造成較大的影響,所以論文主要從深度神經(jīng)壓縮理論入手,對(duì)于YOLO進(jìn)行修改,達(dá)到對(duì)于模型進(jìn)行體積壓縮,改善其在嵌入式設(shè)備和移動(dòng)設(shè)備上的表現(xiàn)[15]。針對(duì)YOLO進(jìn)行深度神經(jīng)壓縮,主要是以下步驟:

(1)權(quán)值修剪

(2)權(quán)值共享和量化

流程如圖1所示。

圖1 壓縮框架圖

3. 1 權(quán)值修剪

權(quán)值修剪[16]主要目的是保存YOLO中重要的鏈接來(lái)達(dá)到降低存儲(chǔ)數(shù)量和計(jì)算復(fù)雜度的目的。傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程中,在神經(jīng)網(wǎng)絡(luò)訓(xùn)練之前,神經(jīng)網(wǎng)絡(luò)的框架結(jié)構(gòu)就已經(jīng)被固定了。用戶只需要進(jìn)行數(shù)據(jù)的輸入,就可以在迭代訓(xùn)練后獲得需要的權(quán)重。但是這種固定框架結(jié)構(gòu)的方式,導(dǎo)致不能在訓(xùn)練的過(guò)程中,隨時(shí)對(duì)于神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)進(jìn)行優(yōu)化。因此,常規(guī)訓(xùn)練出的模型文件大小都不適合于部署在嵌入式設(shè)備或者移動(dòng)設(shè)備上。YOLO常規(guī)訓(xùn)練后的模型大小達(dá)到200M,對(duì)于嵌入式設(shè)備,將模型預(yù)讀進(jìn)內(nèi)存中,提供給推理過(guò)程使用,將會(huì)消耗設(shè)備的所有內(nèi)存。所以,利用深度神經(jīng)壓縮的剪枝思路,對(duì)于YOLO模型進(jìn)行壓縮,是提高YOLO在各種設(shè)備上通用性的一個(gè)方式。剪枝過(guò)程分為四個(gè)步驟;

(1)通過(guò)訓(xùn)練找到權(quán)重小于閾值的神經(jīng)網(wǎng)絡(luò)鏈接;

(2)刪除權(quán)重小于閾值的神經(jīng)網(wǎng)絡(luò)鏈接;

(3)重新對(duì)于神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練;

(4)將修剪后的以 CSR(Compressed Sparse Row)方式存儲(chǔ)。

在訓(xùn)練的過(guò)程中使用公式:

對(duì)權(quán)重進(jìn)行計(jì)算,使一部分權(quán)重趨向于0,然后將小于閾值的鏈接剪枝。使用公式的目的是能夠減少在訓(xùn)練剪枝過(guò)程中的過(guò)擬合現(xiàn)象,并且可以保持較高的精度。相對(duì)的,通常訓(xùn)練過(guò)程中的Droupout概率也需要進(jìn)行調(diào)整。在深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練的過(guò)程中,Droupout主要是用來(lái)防止訓(xùn)練出的模型數(shù)據(jù)有過(guò)擬合的現(xiàn)象。因?yàn)樵谏鲜龅募糁^(guò)程中,使用了L2正則進(jìn)行過(guò)擬合的預(yù)防。所以,在重訓(xùn)練的過(guò)程中,按照剪枝后的神經(jīng)網(wǎng)絡(luò)數(shù)量進(jìn)行對(duì)Droupout概率進(jìn)行等比例的調(diào)整。初步剪枝之后將要進(jìn)行對(duì)于本次鏈接層的一個(gè)重訓(xùn)練。每一次的剪枝過(guò)后的重新訓(xùn)練都是一個(gè)原子操作。重新訓(xùn)練的目的是為了神經(jīng)網(wǎng)絡(luò)模型有更好的精確度,以及更小的過(guò)擬合的可能。

剪枝之后的權(quán)重按照CSR方式進(jìn)行存儲(chǔ),CSR方式可以減少存儲(chǔ)元素位置index帶來(lái)的額外存儲(chǔ)開(kāi)銷。按CSR方式轉(zhuǎn)換完成的稀疏矩陣,在存儲(chǔ)的過(guò)程中使用按位存儲(chǔ)的方式,存儲(chǔ)過(guò)程中,每一個(gè)非零元素都會(huì)進(jìn)行標(biāo)記。如果使用3bit形式進(jìn)行存儲(chǔ),每一個(gè)非零元素和另外一個(gè)非零元素之間的距離在標(biāo)記后將會(huì)被檢查。如果一個(gè)非零元素和另外一個(gè)非零元素的超過(guò)8,則這個(gè)第八位的位置將會(huì)被填充一個(gè)0,這樣防止在使用按位存儲(chǔ)的時(shí)候出現(xiàn)數(shù)據(jù)的溢出。

3. 2 權(quán)值共享和量化

為了進(jìn)一步的壓縮剪枝之后的YOLO,第二部將使用權(quán)值共享的方法[17],對(duì)于剪枝結(jié)束的權(quán)值,進(jìn)行一個(gè)K-means聚類。

式(2)中,W代表權(quán)值C代表聚類。

聚類之后的結(jié)果代表著一類權(quán)值的聚類執(zhí)行,這個(gè)質(zhì)心的值將作為共享的權(quán)值進(jìn)行存儲(chǔ)。最后存儲(chǔ)的結(jié)果是一個(gè)碼書(shū)和一個(gè)索引表。

K-means算法中,聚類的核心是聚類中心的選擇和初始化。常規(guī)的初始化方式有三種:

(1)隨機(jī)初始化

(2)密度分布初始化

(3)線性初始化

由于在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中,權(quán)值越大,對(duì)神經(jīng)網(wǎng)絡(luò)精確度的影響越高,所以使用將權(quán)重排序后進(jìn)行線性劃分的線性初始化較為合適。

本層的權(quán)重完成剪枝和共享之后,將執(zhí)行神經(jīng)網(wǎng)絡(luò)層與層之間的前向傳播和反向傳播。前向傳播時(shí)需要將每個(gè)權(quán)值用其經(jīng)過(guò)聚類的中心進(jìn)行代替,反向傳播時(shí),計(jì)算每個(gè)聚類中權(quán)值的梯度,用來(lái)進(jìn)行聚類中心的更新和迭代。

4 實(shí)驗(yàn)結(jié)果與分析

實(shí)驗(yàn)結(jié)果分析算法在經(jīng)過(guò)深度神經(jīng)壓縮之后壓縮率、準(zhǔn)確率和執(zhí)行速度。運(yùn)行YOLO模型的設(shè)備為NVIDIA TX2嵌入式開(kāi)發(fā)板。YOLO的訓(xùn)練數(shù)據(jù)集為基于VoC2007和ImageNet的常見(jiàn)數(shù)據(jù)集。

4. 1 壓縮率

表1中展示了YOLO未壓縮和已壓縮之后的大小對(duì)比。

表1 YOLO壓縮體積對(duì)比

由表1可以看出,經(jīng)過(guò)深度神經(jīng)壓縮后的模型只有原模型的3%,減少了嵌入式設(shè)備和移動(dòng)設(shè)備在預(yù)讀模型時(shí)的內(nèi)存消耗,提高了模型預(yù)讀的速度。

4. 2 準(zhǔn)確率

表2 僅剪枝YOLO模型大小和準(zhǔn)確率

表3 僅共享權(quán)重

表4 剪枝+共享權(quán)重

從表2、3、4可以得到,準(zhǔn)確率隨著模型體積的下降而下降。僅剪枝能達(dá)到的最低壓縮率為4.5%。僅共享權(quán)重最低壓縮率可以達(dá)到6%。剪枝和共享權(quán)重可以達(dá)到最低的壓縮率3%。

4. 3 運(yùn)行速度

表5 壓縮YOLO在嵌入式設(shè)備上運(yùn)行時(shí)間

表5可以看出壓縮網(wǎng)絡(luò)對(duì)比原始網(wǎng)絡(luò),在嵌入式GPU設(shè)備上可以獲得5倍加速。

5 結(jié)語(yǔ)

本方案基于深度升級(jí)壓縮理論,提出了YOLO算法的改進(jìn)方案。對(duì)于YOLO算法進(jìn)行剪枝、共享權(quán)重、霍夫曼編碼等步驟。并且將壓縮后的YOLO算法部署到NVIDIA TX2上,進(jìn)行目標(biāo)識(shí)別實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明,經(jīng)過(guò)優(yōu)化的YOLO可以在原體積3%的情況下穩(wěn)定運(yùn)行,并且準(zhǔn)確率相較于原模型只有-2%的差距。并且在嵌入式設(shè)備上獲得原模型5倍的加速效果。但是該實(shí)驗(yàn)只是單純的進(jìn)行L2范式的權(quán)重衡量,沒(méi)有做到多情況的權(quán)重衡量。并且K-means只選擇了線性初始化的情況。后期實(shí)驗(yàn)可以進(jìn)行優(yōu)化,找到更好的剪枝方式和聚類方式[19-20]。

猜你喜歡
剪枝權(quán)值嵌入式
一種融合時(shí)間權(quán)值和用戶行為序列的電影推薦模型
基于IMX6ULL的嵌入式根文件系統(tǒng)構(gòu)建
人到晚年宜“剪枝”
Focal&Naim同框發(fā)布1000系列嵌入式揚(yáng)聲器及全新Uniti Atmos流媒體一體機(jī)
基于5G MR實(shí)現(xiàn)Massive MIMO權(quán)值智能尋優(yōu)的技術(shù)方案研究
基于YOLOv4-Tiny模型剪枝算法
基于激活-熵的分層迭代剪枝策略的CNN模型壓縮
一種基于互連測(cè)試的綜合優(yōu)化算法?
基于ARM嵌入式的關(guān)于圖像處理的交通信號(hào)燈識(shí)別
TS系列紅外傳感器在嵌入式控制系統(tǒng)中的應(yīng)用