邱 春,路 紅,秦彬鑫,萬(wàn)文明,戴云周
(南京工程學(xué)院機(jī)械工程學(xué)院, 江蘇 南京 211167)
近年來(lái),隨著目標(biāo)檢測(cè)的發(fā)展,對(duì)湖面和海面的船舶目標(biāo)檢測(cè)技術(shù)研究越來(lái)越受到重視,其在軍事與民用方面都具有重要意義[1].目前,基于深度學(xué)習(xí)的目標(biāo)檢測(cè)技術(shù)需要大量的計(jì)算,卷積網(wǎng)絡(luò)里大量的參數(shù)占用內(nèi)存空間.為了解決神經(jīng)網(wǎng)絡(luò)中計(jì)算量大、占用內(nèi)存多等問(wèn)題,本文采用剪枝技術(shù)來(lái)對(duì)模型進(jìn)行壓縮[2],并用知識(shí)蒸餾技術(shù)對(duì)剪枝后的模型進(jìn)行蒸餾,補(bǔ)償剪枝后模型的檢測(cè)精度損失.
卷積神經(jīng)網(wǎng)絡(luò)常用于分類與檢測(cè)等任務(wù)[3],主要由卷積層、池化層、全連接層組成.卷積層是通過(guò)感受野即卷積核在圖像上進(jìn)行滑動(dòng)卷積,以此來(lái)提取圖像中不同維度的特征;將卷積層輸出的特征放到池化層中對(duì)特征圖進(jìn)行池化操作,池化層與卷積層相似,是在感受野上建立一個(gè)窗口來(lái)進(jìn)行滑動(dòng)操作,從而達(dá)到特征降維的作用;將池化后輸出的特征送到全連接層中進(jìn)行維度的轉(zhuǎn)換,在全連接層中對(duì)特征進(jìn)行分類等操作,輸出不同類型的特征.典型的卷積神經(jīng)網(wǎng)絡(luò)有VGG、AlexNet、ResNet等.
在計(jì)算機(jī)視覺(jué)領(lǐng)域中,基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法主要分為兩階段算法和單階段算法:1) 兩階段算法有R-CNN、Faster R-CNN算法,先獲得候選區(qū)域(region proposal),然后將其分成不同的目標(biāo)類別,該類算法的定位和檢測(cè)準(zhǔn)確率較高,但運(yùn)算速度較慢,實(shí)時(shí)性達(dá)不到要求;2) 單階段算法有YOLO、SSD、YOLO900算法等,依據(jù)回歸思想使實(shí)時(shí)檢測(cè)成為可能,但檢測(cè)精度比兩階段算法低.本研究模型選擇單階段算法中的YOLO v3算法.YOLO v3算法主要由特征提取網(wǎng)絡(luò)Darknet53和檢測(cè)網(wǎng)絡(luò)組成,Darknet53網(wǎng)絡(luò)由53個(gè)卷積層組成,檢測(cè)網(wǎng)絡(luò)是在不同尺度的特征圖上選取3個(gè)尺度的特征圖進(jìn)行目標(biāo)預(yù)測(cè)輸出[4].YOLO v3算法檢測(cè)原理是:首先將輸入的圖像送到Darknet53網(wǎng)絡(luò)中進(jìn)行特征提取,得到多個(gè)尺度不一的特征圖,對(duì)特征圖進(jìn)行處理獲得目標(biāo)的相關(guān)類別與回歸框;然后經(jīng)過(guò)極大值抑制與類別置信度對(duì)目標(biāo)邊框進(jìn)行過(guò)濾;最后得到合格的目標(biāo)信息.YOLO v3算法檢測(cè)精度高、速度快,滿足了人們對(duì)目標(biāo)檢測(cè)的實(shí)時(shí)性要求.YOLO v3算法的網(wǎng)絡(luò)結(jié)構(gòu)圖如圖1所示.
圖1 YOLO v3算法網(wǎng)絡(luò)結(jié)構(gòu)圖
基于深度學(xué)習(xí)的模型極其復(fù)雜,實(shí)際應(yīng)用中往往會(huì)受到計(jì)算資源消耗大、存儲(chǔ)空間要求高等阻礙,對(duì)于嵌入到微型機(jī)或者移動(dòng)端來(lái)說(shuō)更加困難.神經(jīng)網(wǎng)絡(luò)模型中有大量的神經(jīng)元與權(quán)重冗余,真正對(duì)模型產(chǎn)生影響的只有5%~10%.將模型中不重要的參數(shù)去掉來(lái)減小模型大小的方法越來(lái)越多,最常見(jiàn)的模型壓縮方法是模型剪枝[5-6].剪枝不僅可以降低模型復(fù)雜度、防止過(guò)擬合,還可以壓縮模型大小、提高模型的速度.剪枝方式可分為通道剪枝、權(quán)值剪枝、層剪枝.層剪枝效果最粗糙,但無(wú)軟硬件要求、靈活性好;權(quán)值剪枝靈活性最好,但是對(duì)軟硬件有要求,需要專門(mén)的系數(shù)矩陣運(yùn)算庫(kù)或者硬件來(lái)做加速;通道剪枝集成了層剪枝和權(quán)值剪枝的優(yōu)點(diǎn),精細(xì)且靈活性好.本研究采用通道與層相結(jié)合方式來(lái)對(duì)模型進(jìn)行剪枝.模型剪枝示意圖如圖2所示.
圖2 模型剪枝示意圖
通道剪枝對(duì)軟硬件要求不高,在細(xì)粒度方面進(jìn)行了很好的平衡,采用過(guò)隨機(jī)拋棄channel-wise的連接引入稀疏化,將常見(jiàn)的L1約束添加到各個(gè)通道的縮放因子上,使其能夠更加便捷地優(yōu)化目標(biāo),通道剪枝的目標(biāo)函數(shù)為:
(1)
式中:W為訓(xùn)練的權(quán)值;x、y為訓(xùn)練數(shù)據(jù)中的輸入、輸出;γ為批量歸一化(BN)的縮放因子;g(γ)為稀疏對(duì)比例因子的懲罰函數(shù);λ為平衡因子.
通道剪枝主要是引入BN中的縮放因子γ和稀疏訓(xùn)練中的懲罰項(xiàng)L1.最常見(jiàn)的操作方式是首先在模型中的每個(gè)通道都放入一個(gè)γ,與通道的輸出結(jié)果進(jìn)行乘積運(yùn)算,在進(jìn)行稀疏化時(shí)將這些比例因子與聯(lián)合訓(xùn)練的網(wǎng)絡(luò)權(quán)重結(jié)合起來(lái)進(jìn)行正則化;然后按照縮放因子的大小進(jìn)行排序,設(shè)置一個(gè)閾值,根據(jù)閾值將小的縮放因子通道直接裁剪掉,重復(fù)多次進(jìn)行該操作,選取效果較好的一組;最后對(duì)網(wǎng)絡(luò)進(jìn)行微調(diào)即可[7].
層剪枝操作是針對(duì)模型中每一層的shortcut層的前一個(gè)CBL進(jìn)行評(píng)價(jià),每層γ的取值按照從大到小規(guī)則進(jìn)行排序,取最小的進(jìn)行層剪枝,每剪去一個(gè)shortcut結(jié)構(gòu),相當(dāng)于減掉1個(gè)shortcut層和它前面的2個(gè)卷積層[8].
在通道剪枝結(jié)束后,將模型再匯總進(jìn)行層剪枝,最后輸出剪枝完的模型.
目前,深度學(xué)習(xí)需要對(duì)海量的數(shù)據(jù)進(jìn)行訓(xùn)練來(lái)提取特征,這些數(shù)據(jù)數(shù)量較大且冗余,需要消耗大量資源,在沒(méi)有實(shí)時(shí)性要求下訓(xùn)練得到的模型精度較高,但是模型結(jié)構(gòu)笨重.在實(shí)際應(yīng)用中,考慮各方面成本,特別是在計(jì)算資源方面有所限制,使用一個(gè)較大的神經(jīng)網(wǎng)絡(luò)模型有較多局限性.因此,本文采用知識(shí)蒸餾模型,讓大模型為小模型進(jìn)行知識(shí)遷移.
知識(shí)蒸餾的原理是將復(fù)雜的教師網(wǎng)絡(luò)中的dark knowledge遷移到簡(jiǎn)單的學(xué)生網(wǎng)絡(luò)中[9],知識(shí)蒸餾模型示意圖如圖3所示.
圖3 知識(shí)蒸餾模型示意圖
知識(shí)蒸餾模型用簡(jiǎn)單目標(biāo)來(lái)輔助困難目標(biāo)一起訓(xùn)練,soft target來(lái)自于教師網(wǎng)絡(luò)的預(yù)測(cè)輸出[10],通過(guò)在softmax中增加溫度參數(shù)T來(lái)實(shí)現(xiàn)簡(jiǎn)單目標(biāo),公式為:
(2)
式中:qi為函數(shù)的目標(biāo)輸出;T為溫度參數(shù),是從統(tǒng)計(jì)力學(xué)的玻爾茲曼分布中借用的概念,當(dāng)溫度T趨向于0時(shí),softmax輸出將收斂為一個(gè)one-hot向量,溫度T趨向于無(wú)窮時(shí),softmax的輸出則更「軟」;Z為softmax層輸出的分類類別概率.
在訓(xùn)練新模型時(shí),使用較高的T使softmax產(chǎn)生的分布足夠軟,讓新模型(同樣溫度下)的softmax輸出近似原模型;在訓(xùn)練結(jié)束后使用正常的溫度T來(lái)預(yù)測(cè).
本文所有的模型訓(xùn)練及相關(guān)試驗(yàn)均在深度學(xué)習(xí)框架pytorch下實(shí)現(xiàn),試驗(yàn)的硬件配置為:Intel i5處理器,8 G內(nèi)存、NVIDIA GTX 2070super GPU、 PC、Windows 10 操作系統(tǒng).
國(guó)際上公開(kāi)的海面船舶目標(biāo)檢測(cè)數(shù)據(jù)集較少,為評(píng)估本文船舶目標(biāo)檢測(cè)模型的準(zhǔn)確性,自建船舶目標(biāo)檢測(cè)的小樣本數(shù)據(jù)集.通過(guò)網(wǎng)上截取船舶視頻片段進(jìn)行視頻的分幀得到一定數(shù)量的船舶圖像,并采用幾何變換中的旋轉(zhuǎn)、裁剪、像素變換中的高斯噪聲等方式進(jìn)行數(shù)據(jù)集的擴(kuò)增,即先對(duì)數(shù)據(jù)集采用旋轉(zhuǎn)方式進(jìn)行擴(kuò)增,再隨機(jī)選取一部分圖像進(jìn)行裁切和高斯噪聲操作,將兩次擴(kuò)增的數(shù)據(jù)集集合構(gòu)成總的船舶數(shù)據(jù)集;采用LabelImg標(biāo)定工具對(duì)數(shù)據(jù)集進(jìn)行標(biāo)定,得到符合YOLO格式的txt標(biāo)簽文件;將標(biāo)注后的圖像數(shù)據(jù)集中的樣本按照7∶2∶1的比例劃分為訓(xùn)練集、驗(yàn)證集和測(cè)試集,擴(kuò)增后的船舶數(shù)據(jù)集信息如表1所示.
表1 船舶數(shù)據(jù)集信息
首先對(duì)船舶目標(biāo)檢測(cè)模型進(jìn)行剪枝壓縮,將制作的船舶數(shù)據(jù)集放入YOLO v3模型中進(jìn)行訓(xùn)練;然后對(duì)模型進(jìn)行稀疏訓(xùn)練后進(jìn)行通道剪枝、層剪枝;最后對(duì)剪枝后的模型進(jìn)行微調(diào),在微調(diào)的過(guò)程中對(duì)模型進(jìn)行知識(shí)蒸餾,使模型得到更好的效果.
表2為不同剪枝系數(shù)的通道剪枝結(jié)果對(duì)比.由表2可見(jiàn),當(dāng)剪枝系數(shù)在0.85時(shí)效果最好,經(jīng)過(guò)剪枝后模型的參數(shù)量由61 523 734個(gè)減少到2 323 692個(gè),減掉約96%,檢測(cè)精度由0.931 304降低到0.920 625,下降近1%,總體效果較好.
表2 不同剪枝系數(shù)的通道剪枝結(jié)果對(duì)比
通道剪枝后進(jìn)行層剪枝,表3為不同剪枝系數(shù)的層剪枝結(jié)果對(duì)比.由表3可見(jiàn),剪枝系數(shù)增大,檢測(cè)精度不斷下降,參數(shù)量下降緩慢,層剪枝沒(méi)有通道剪枝效果明顯;剪枝系數(shù)為3時(shí)檢測(cè)精度最高,與原始檢測(cè)精度接近,參數(shù)量沒(méi)有太多減少;綜合來(lái)看,選取剪枝系數(shù)為3來(lái)進(jìn)行層剪枝效果最好.
表3 不同剪枝系數(shù)的層剪枝結(jié)果對(duì)比
圖4為模型剪枝前后的檢測(cè)效果對(duì)比圖.由圖4可見(jiàn),剪枝后的模型檢測(cè)精度與剪枝前相比沒(méi)有太多下降,甚至在小目標(biāo)檢測(cè)中剪枝后的模型檢測(cè)精度比剪枝前有所提升.
(a) 剪枝前
(b) 剪枝后
(c) 剪枝與微調(diào)后
本文采用模型剪枝與知識(shí)蒸餾技術(shù)對(duì)船舶目標(biāo)檢測(cè)模型進(jìn)行壓縮.通過(guò)剪枝技術(shù)將模型的參數(shù)量減少了超過(guò)90%,大大壓縮了模型體積,使該模型能夠部署到內(nèi)存空間條件不足的硬件設(shè)施上,提升了模型的計(jì)算速度,提高了模型的實(shí)時(shí)性,解決了大部分硬件設(shè)施運(yùn)行慢的問(wèn)題.對(duì)模型進(jìn)行剪枝后采用知識(shí)蒸餾技術(shù)對(duì)檢測(cè)精度進(jìn)行微調(diào),提高了模型的檢測(cè)精度.