徐晗智,艾中良,張志超
(中國(guó)電子科技集團(tuán)公司第十五研究所,北京 100083)
目標(biāo)檢測(cè)一直以來都是計(jì)算機(jī)視覺的一個(gè)重要研究方向[1],目前已經(jīng)被廣泛應(yīng)用于人臉識(shí)別、無人車等諸多領(lǐng)域。目標(biāo)檢測(cè)的任務(wù)主要是在一張圖片上用邊框標(biāo)出待檢測(cè)物體,并識(shí)別出框內(nèi)物體所屬的類別[2]。
傳統(tǒng)的目標(biāo)檢測(cè)算法是基于創(chuàng)建建議區(qū)域的檢測(cè)算法(如R-CNN系列),這一思路是首先將圖片分為若干候選區(qū)域[3],將每個(gè)候選區(qū)域內(nèi)的部分經(jīng)過尺寸的變換得到一張?zhí)卣鲌D,然后將這些特征圖輸入到卷積神經(jīng)網(wǎng)絡(luò)[4]中學(xué)習(xí)其特征,進(jìn)行分類,最后再回歸最準(zhǔn)確的邊框的位置。很多學(xué)者沿著這一思想繼續(xù)研究,得到了一系列性能更好的網(wǎng)絡(luò)。然而由于剛開始候選區(qū)域的數(shù)量往往都很大,后面又需要反復(fù)的選擇最合適的邊框,實(shí)際上算法的步驟是比較繁瑣的,整個(gè)檢測(cè)網(wǎng)絡(luò)的耗時(shí)是相當(dāng)高的[5]。于是出現(xiàn)了以YOLO[6]為代表的直接回歸的目標(biāo)檢測(cè)算法,它將邊框的位置也納入網(wǎng)絡(luò)要學(xué)習(xí)的特征之中,將輸入網(wǎng)絡(luò)的圖片劃分為若干個(gè)格子,每個(gè)格子都用來檢測(cè)中心落在該格子中的物體,對(duì)于有物體的格子,直接使用卷積神經(jīng)網(wǎng)絡(luò)回歸其代表物體的種類以及標(biāo)出該物體邊框的坐標(biāo)信息。這樣一來,數(shù)據(jù)在送入網(wǎng)絡(luò)之前無需進(jìn)行眾多建議區(qū)域的選擇,后面也無需繁瑣的最佳邊框回歸,只需使用最簡(jiǎn)潔的卷積神經(jīng)網(wǎng)絡(luò)去提取回歸所需的特征和信息。本質(zhì)上講,后者是均勻地對(duì)圖片在不同位置進(jìn)行密集抽樣[7],通過卷積神經(jīng)網(wǎng)絡(luò)對(duì)不同長(zhǎng)寬比的邊框進(jìn)行回歸。相較于傳統(tǒng)的建議區(qū)域類檢測(cè)算法,直接回歸的方法在準(zhǔn)確度上稍有下降,但較大地提升了實(shí)時(shí)性。
目前在提升目標(biāo)檢測(cè)網(wǎng)絡(luò)性能方面,主流的方法都是設(shè)計(jì)性能更優(yōu)秀的網(wǎng)絡(luò)結(jié)構(gòu)去提取到更豐富的特征,或者參數(shù)更少計(jì)算量更少[8]。例如,YOLO的作者在其基礎(chǔ)上已經(jīng)更新了2個(gè)版本的檢測(cè)算法,其精確度和速度都得到了明顯的提升;2016年Liu等人[9]在ECCV(歐洲計(jì)算機(jī)視覺會(huì)議)上提出SSD目標(biāo)檢測(cè)網(wǎng)絡(luò),其性能超越同時(shí)期的YOLO算法和Fast R-CNN[10]算法。值得一提的是,最近一些原設(shè)計(jì)用于圖像分類的網(wǎng)絡(luò)也得到了蓬勃的發(fā)展,如谷歌提出的MobileNet[11]網(wǎng)絡(luò)引入分組卷積,大大減少了網(wǎng)絡(luò)參數(shù)量,提高了網(wǎng)絡(luò)性能;而后Zhang等人[12]提出ShuffleNet網(wǎng)絡(luò),使用通道重排技術(shù)解決了分組卷積中通道組間信息隔絕的問題,提高了網(wǎng)絡(luò)的準(zhǔn)確率。
本文通過實(shí)驗(yàn)驗(yàn)證了原本用于圖像分類的網(wǎng)絡(luò)結(jié)構(gòu)基本單元有能力完成目標(biāo)檢測(cè)任務(wù),證明了BN層[13]的時(shí)間消耗較大;根據(jù)分組卷積的原則設(shè)計(jì)一個(gè)輕量級(jí)的目標(biāo)檢測(cè)網(wǎng)絡(luò),解決了通道重排在分組卷積單元并不多時(shí)效果不明顯、反而時(shí)間開銷比較大的問題,改進(jìn)通道重排的具體實(shí)現(xiàn)方法,增加了重排通道的速度;改進(jìn)YOLO的損失函數(shù),在回歸的內(nèi)容上增加識(shí)別框的面積來約束框的長(zhǎng)和寬之間的關(guān)系,通過計(jì)算改進(jìn)損失函數(shù)中的不同項(xiàng)在總損失中所占的比例,使之在輕量級(jí)網(wǎng)絡(luò)中發(fā)揮更好的目標(biāo)檢測(cè)效果,在訓(xùn)練的過程中約束識(shí)別框長(zhǎng)和寬的比,最后訓(xùn)練得到的目標(biāo)檢測(cè)網(wǎng)絡(luò),性能在速度上超過Tiny-YOLO,達(dá)到每秒鐘處理260張以上圖片。
YOLO-tiny是YOLO的作者提供的一種輕量級(jí)高速目標(biāo)識(shí)別網(wǎng)絡(luò),其最突出的特點(diǎn)就是運(yùn)行速度快,根據(jù)官方提供的數(shù)據(jù)其fps(每秒計(jì)算的圖片數(shù))可以達(dá)到244之高,在當(dāng)今的目標(biāo)檢測(cè)網(wǎng)絡(luò)中實(shí)屬佼佼者。相較于傳統(tǒng)的R-CNN類算法,YOLO的作者首次提出了在目標(biāo)檢測(cè)任務(wù)中直接使用網(wǎng)絡(luò)回歸得出物體識(shí)別框的位置以及物體種類,并開發(fā)了適用于其網(wǎng)絡(luò)運(yùn)行的平臺(tái)框架,將一張輸入的圖片分為若干個(gè)格子,這樣使得網(wǎng)絡(luò)更加簡(jiǎn)潔,除去了傳統(tǒng)的對(duì)感興趣區(qū)域預(yù)測(cè)的部分,極大地減少了計(jì)算量和參數(shù)數(shù)量,提高了網(wǎng)絡(luò)的處理速度。而YOLO-tiny是作者給出的一個(gè)更加高速更加輕量的一個(gè)網(wǎng)絡(luò)模型,仍然使用同樣的回歸算法,但使用更少的卷積層數(shù),準(zhǔn)確率在COCO數(shù)據(jù)集上達(dá)到23.7的mAP(Mean Average Precision)值,目前已經(jīng)被作者更新到第3個(gè)版本,每秒運(yùn)算220張圖片,在COCO數(shù)據(jù)集上的mAP值達(dá)到33.1。
BN層,即Batch Normalization層,由Loffe等人[14]于2015年提出,其作用是針對(duì)每個(gè)神經(jīng)元做歸一化處理。一經(jīng)提出,便受到了廣泛的使用,這源于其加速網(wǎng)絡(luò)收斂、改善梯度彌散、防止過擬合等優(yōu)越性能[15],尤其在深度網(wǎng)絡(luò)中,網(wǎng)絡(luò)層數(shù)越多這些優(yōu)越性能效果越明顯。但使用BN層將會(huì)給網(wǎng)絡(luò)增加很大計(jì)算量,其中一個(gè)重要原因是Caffe框架對(duì)于BN層采用分離式寫法[16],在切換層傳播時(shí),操作系統(tǒng)需要執(zhí)行多個(gè)函數(shù),在底層(比如棧)調(diào)度上會(huì)浪費(fèi)一些時(shí)間[17]。經(jīng)過實(shí)驗(yàn),可以得知相同數(shù)據(jù)通過卷積層與通過BN層所用時(shí)間相仿,且網(wǎng)絡(luò)層數(shù)越多,對(duì)速度的影響越明顯;同時(shí)由于輕量級(jí)網(wǎng)絡(luò)過擬合可能性小,網(wǎng)絡(luò)層數(shù)少并結(jié)合使用梯度比較明顯的Leaky ReLU激活函數(shù)[18],所以本文選擇在網(wǎng)絡(luò)后端的卷積層中取消BN層的使用,以減少計(jì)算量,提高網(wǎng)絡(luò)速度。實(shí)驗(yàn)結(jié)果見表1。
表1 BN層對(duì)網(wǎng)絡(luò)速度的影響
網(wǎng)絡(luò)類型1層卷積+1層BN層1層卷積9層卷積+9層BN層9層卷積速度/fps315050597812225
本實(shí)驗(yàn)使用的網(wǎng)絡(luò)中僅包含卷積層和BN層。所用CPU為2塊Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20 GHz,GPU使用一塊Titan X (Pascal)。測(cè)試所使用的數(shù)據(jù)集通過在VOC 2007數(shù)據(jù)集中隨機(jī)抽取20%得到,統(tǒng)一輸入尺寸為224×224像素,卷積的輸出特征圖數(shù)設(shè)置為16。
由于實(shí)驗(yàn)中每個(gè)卷積層僅僅輸出16通道的特征圖像,使得參數(shù)量遠(yuǎn)遠(yuǎn)小于正常用于目標(biāo)檢測(cè)網(wǎng)絡(luò)的參數(shù)量;同時(shí)本文只測(cè)得數(shù)據(jù)通過網(wǎng)絡(luò)層的時(shí)間,并不考慮損失處理和目標(biāo)回歸的部分,所以整體上實(shí)驗(yàn)結(jié)果遠(yuǎn)遠(yuǎn)高于正常用于目標(biāo)檢測(cè)網(wǎng)絡(luò)的速度,同時(shí)更加明顯地體現(xiàn)了卷積層與BN層運(yùn)行速度的關(guān)系。
通道重排(Shuffle Channel)首先被Face++團(tuán)隊(duì)提出于ShuffleNet網(wǎng)絡(luò)中,它的作用是將特征圖像通道分成的各個(gè)組打亂順序,以增加不同分組的通道之間的特征交流。在之前的分組卷積中,它將一個(gè)特征圖像的多個(gè)通道分成若干個(gè)組,使得卷積操作在各個(gè)組的通道內(nèi)部進(jìn)行,不同組的通道互相之間不影響,這樣將會(huì)大大地減少計(jì)算量,但同時(shí)這種分組讓不同組通道徹底隔斷,減少了信息的交流,從而減少了網(wǎng)絡(luò)精確度。為了解決這個(gè)問題,F(xiàn)ace++團(tuán)隊(duì)提出了重排的方法,將每組通道內(nèi)部再次分組,然后將其重新組成為新的分組,送入之后的卷積層。通過重排通道來增加通道之間的信息交流,而不是某些輸出的通道只由之前特定的通道產(chǎn)生。但是這種通道重排在實(shí)現(xiàn)的時(shí)候需要大量的指針跳轉(zhuǎn)和內(nèi)存操作,并且難以良好發(fā)揮GPU的并行加速能力,這將帶來很大的時(shí)間損耗。
本文根據(jù)上文的實(shí)驗(yàn)設(shè)計(jì)一種基于通道重排的輕量級(jí)目標(biāo)檢測(cè)網(wǎng)絡(luò),其性能在速度上超過Tiny-YOLO,在精確度上與其相仿。首先,為了大幅提高速度,本文摒棄層數(shù)較多的深度網(wǎng)絡(luò),使用與Tiny-YOLO相同的9層卷積層網(wǎng)絡(luò),以減少冗余的參數(shù)帶來的過多計(jì)算量,同時(shí)也可以減少模型的存儲(chǔ)空間。在網(wǎng)絡(luò)的前幾層,本文使用普通的卷積來快速增加特征圖像的通道數(shù)。然后,使用類似于分組卷積的方法,將特征圖像的通道分為2個(gè)部分,一部分不進(jìn)行運(yùn)算原樣向后傳遞,另一部分則使用計(jì)算量較小的DW卷積和普通卷積,將兩者輸出的特征圖像連接。最后,將特征圖像按通道做重排操作,這樣可以在接下來的一個(gè)卷積層中增加不同通道之間的信息交流。相較于原來的ShuffleNet網(wǎng)絡(luò),本文將1×1卷積核替換為3×3的尺寸,這樣可以增加網(wǎng)絡(luò)提取特征的能力。網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 網(wǎng)絡(luò)結(jié)構(gòu)圖
本文對(duì)通道重排的實(shí)現(xiàn)方法進(jìn)行改進(jìn)。從當(dāng)前的實(shí)現(xiàn)方式上講,主流的選擇都是將分為g組的通道每組再分為n組,這樣一共是g×n組通道;然后將這些組通道重疊成g行n列的形式;再將這些通道矩陣轉(zhuǎn)置成n行g(shù)列的形式;最后按順序?qū)⑵淙〕?,這樣達(dá)到了將原來的通道均勻重排的目的。但這樣的實(shí)現(xiàn)方式在內(nèi)存中大量地進(jìn)行數(shù)組操作,耗時(shí)較多。本文采用將g×n組通道直接重排后再用張量拼接(concat)的方式連接,避免了之前數(shù)組矩陣的重塑、轉(zhuǎn)置等操作,節(jié)約了時(shí)間成本,且更適合用于分組數(shù)并不多的通道重排。如圖2所示,左側(cè)為原來的通道重排的實(shí)現(xiàn)流程,右側(cè)是經(jīng)過改進(jìn)后的算法流程,直接使用各個(gè)數(shù)組的首地址,減少了2次數(shù)組的內(nèi)存操作。
圖2 通道重排的改進(jìn)方法
在損失函數(shù)部分,本文采用如同YOLOv3[19]的位置定位框和測(cè)得物體置信度同時(shí)回歸的方式,這樣相對(duì)于傳統(tǒng)的在建議區(qū)域提取特征后做分類的方法大大縮小了計(jì)算復(fù)雜度,同時(shí)更適用于層數(shù)少的輕量級(jí)網(wǎng)絡(luò)。整個(gè)損失函數(shù)同樣由4個(gè)部分組成,分別是定位框中心點(diǎn)的損失、定位框?qū)捄透叩膿p失、預(yù)測(cè)類別的損失以及預(yù)測(cè)置信度的損失。在此基礎(chǔ)上,經(jīng)過一個(gè)輕量級(jí)能力較弱的網(wǎng)絡(luò),不包含物體的每個(gè)格子產(chǎn)生的損失將會(huì)更大,并且多個(gè)不存在物體的格子會(huì)將這種損失疊加,于是需要調(diào)整損失函數(shù)中的系數(shù)。若從平衡的角度出發(fā),需先將有物體的格子在損失函數(shù)中所占的權(quán)重,調(diào)整為不含物體項(xiàng)的48倍,以達(dá)到有無物體的格子對(duì)整個(gè)損失的貢獻(xiàn)度相等。如果按照傳統(tǒng)的YOLO的設(shè)計(jì),10倍的系數(shù)比在網(wǎng)絡(luò)的訓(xùn)練中很容易造成物體識(shí)別率達(dá)到負(fù)值,從而影響網(wǎng)絡(luò)的收斂。
本文選擇將像素大小為224×224的圖片劃分為7×7的網(wǎng)格陣,對(duì)于每個(gè)網(wǎng)格預(yù)測(cè)n個(gè)種類以及2組定位框信息,其中定位框信息除了中心點(diǎn)坐標(biāo)和框的寬高之外,還包含檢測(cè)到物體的種類。此時(shí),與傳統(tǒng)的YOLO檢測(cè)網(wǎng)絡(luò)的不同之處在于,原始的網(wǎng)絡(luò)選擇預(yù)測(cè)框與標(biāo)記框的重疊比(Intersection Over Union, IOU)最大的那組數(shù)據(jù)作為所需要繼續(xù)學(xué)習(xí)的數(shù)據(jù),本文拋棄這個(gè)做法,不再計(jì)算二者的IOU,而是直接選擇帶來2個(gè)最小的損失的那組數(shù)據(jù)作為繼續(xù)學(xué)習(xí)的部分,也就是選擇與標(biāo)簽圖片中心坐標(biāo)損失最小的數(shù)據(jù)和與標(biāo)簽圖片長(zhǎng)寬損失最小的數(shù)據(jù)。在網(wǎng)絡(luò)層數(shù)比較少、參數(shù)量比較小的情況下,網(wǎng)絡(luò)的學(xué)習(xí)能力并不特別強(qiáng),所以希望直接得到最接近真實(shí)值的信息,而計(jì)算IOU則會(huì)將數(shù)據(jù)按組分開,一組最小的損失未必會(huì)導(dǎo)致中心坐標(biāo)和框的大小損失分別最小。
在損失函數(shù)中,增加所需回歸的內(nèi)容,直接引入識(shí)別框的面積,這樣反向求導(dǎo)時(shí)增加了對(duì)邊框位置的二維約束,加強(qiáng)了對(duì)框的形狀的回歸。在網(wǎng)絡(luò)的訓(xùn)練方式上,為了讓網(wǎng)絡(luò)更好地收斂,對(duì)損失回歸的過程做以下操作:當(dāng)邊框的長(zhǎng)寬比大于某值時(shí),則會(huì)將網(wǎng)絡(luò)反向傳播的學(xué)習(xí)率增大一倍來增大參數(shù)的變化,以防止壞數(shù)據(jù)對(duì)網(wǎng)絡(luò)的訓(xùn)練造成較大影響,增加網(wǎng)絡(luò)的學(xué)習(xí)能力,同時(shí)加速網(wǎng)絡(luò)收斂。在實(shí)際的實(shí)驗(yàn)中,根據(jù)數(shù)據(jù)集的特點(diǎn)本文將這個(gè)閾值設(shè)置為4。損失函數(shù)見公式(1)。其中S為劃分的網(wǎng)格數(shù),B為預(yù)測(cè)框的數(shù)量,x、y、w、h分別為預(yù)測(cè)框的中心橫縱坐標(biāo)、寬度和高度,C為置信度得分,p為識(shí)別出物體的概率。
(1)
為了便于下文中展示實(shí)驗(yàn)結(jié)果,本文將提出的網(wǎng)絡(luò)模型命名為Tiny-ShuffleNet。在實(shí)驗(yàn)中,本文分別使用COCO數(shù)據(jù)集和PASCAL VOC數(shù)據(jù)集對(duì)本網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練和測(cè)試,在訓(xùn)練的過程中,直到各項(xiàng)損失都不再明顯下降時(shí)停止訓(xùn)練,然后在保存下來的模型中將取得效果最好的模型參與對(duì)比實(shí)驗(yàn)。算法使用當(dāng)下工業(yè)界流行的Caffe框架[20]實(shí)現(xiàn),實(shí)驗(yàn)所用CPU為2塊Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz,GPU使用一塊Titan X (Pascal),內(nèi)存環(huán)境由8塊金士頓16 GB大小、速度為2133 MHz的內(nèi)存條所提供。對(duì)比結(jié)果如表2和表3所示。
表2 在VOC 2007數(shù)據(jù)集上測(cè)試結(jié)果對(duì)比
檢測(cè)算法mAP/%速率/fpsFaster R-CNN(VGG-16)73.27.0Faster R-CNN(ResNet-101)76.42.4R-FCN(ResNet-101)80.59.0YOLOv163.445.0YOLOv276.867.0YOLOv2 544x54478.640.0SSD30074.346.0SSD50076.819.0DSSD32178.69.5Tiny YOLO54.2204.0Tiny ShuffleNet(original)55.8259.0Tiny-ShuffleNet55.8265.0
訓(xùn)練網(wǎng)絡(luò)時(shí),本文統(tǒng)一輸入的圖片大小為224×224像素,均使用開源的原始數(shù)據(jù)集,不做數(shù)據(jù)增強(qiáng)處理。網(wǎng)絡(luò)總共迭代6萬次,參數(shù)更新方案設(shè)置為Adam,初始學(xué)習(xí)率設(shè)置為0.001,權(quán)重衰減設(shè)置為0.0005。每組均反復(fù)訓(xùn)練多次以保證網(wǎng)絡(luò)達(dá)到最佳水平[21]。
表3 在COCO數(shù)據(jù)集上測(cè)試結(jié)果對(duì)比
檢測(cè)算法mAP/%速率/fpsSSD30041.246SSD50046.519SSD32145.416R-FCN51.912YOLOv2 608x60848.140YOLOv3 416x41655.335YOLOv3 608x60857.920Tiny YOLO23.7244YOLOv3-tiny33.1220Tiny ShuffleNet(original)32.4265Tiny-ShuffleNet32.4272
通過實(shí)驗(yàn),與Faster R-CNN[22]、YOLO、SSD、R-FCN[23]等網(wǎng)絡(luò)性能對(duì)比,可以輕易地發(fā)現(xiàn)本文所提出的Tiny-ShuffleNet網(wǎng)絡(luò)模型在速度上具有明顯的優(yōu)勢(shì)。首先,由于數(shù)據(jù)集自身特點(diǎn)的不同,COCO數(shù)據(jù)集中平均每張圖片的目標(biāo)數(shù)較多,總目標(biāo)類別數(shù)較多,同時(shí)COCO數(shù)據(jù)集每個(gè)類別的目標(biāo)數(shù)量也遠(yuǎn)超PASCAL VOC數(shù)據(jù)集,所以前者在學(xué)習(xí)和檢測(cè)中的難度是明顯高于后者的,從實(shí)驗(yàn)的結(jié)果上看也是顯而易見的,相同的網(wǎng)絡(luò)模型其準(zhǔn)確率在前者的表現(xiàn)上不如后者。
為了更加直觀地體現(xiàn)出改進(jìn)通道重排算法對(duì)于網(wǎng)絡(luò)性能的提升,本文使用未改進(jìn)的通道重排層替換改進(jìn)后的該層作為對(duì)比網(wǎng)絡(luò),并命名為Tiny ShuffleNet(original),除了通道重排層外網(wǎng)絡(luò)的其它層均不做改動(dòng)。在2個(gè)數(shù)據(jù)集中,可以看到使用改進(jìn)后的通道重排層的網(wǎng)絡(luò)比未做改進(jìn)的網(wǎng)絡(luò)每秒多處理6~7張圖片,以證明改進(jìn)通道重排算法在本網(wǎng)絡(luò)結(jié)構(gòu)中確實(shí)有其實(shí)際意義。
在不同的網(wǎng)絡(luò)模型之間,Tiny-ShuffleNet的速度是最快的,在2個(gè)數(shù)據(jù)集上分別達(dá)到265和272的fps值,相較于原先速度上的佼佼者Tiny YOLO和YOLOv3-tiny,比前者快出大概30張/秒圖片的處理速度,超出后者大概50張/秒圖片的處理速度。在準(zhǔn)確度上,Tiny-ShuffleNet在2個(gè)數(shù)據(jù)集上的mAP值明顯低于原先較復(fù)雜較深的網(wǎng)絡(luò),但與速度快的輕量級(jí)網(wǎng)絡(luò)相仿,數(shù)值上高于Tiny YOLO而比YOLOv3-tiny略低。
本文提出了一種新的輕量級(jí)目標(biāo)檢測(cè)網(wǎng)絡(luò),該算法以YOLOv3-tiny為基礎(chǔ),在網(wǎng)絡(luò)模型部分使用分組卷積,引入并改進(jìn)通道重排算法,合理使用BN層以加速網(wǎng)絡(luò)訓(xùn)練收斂,調(diào)整損失函數(shù)中的系數(shù),在損失函數(shù)中直接增加回歸框面積為所要回歸的一項(xiàng)以增加網(wǎng)絡(luò)檢測(cè)的準(zhǔn)確度,訓(xùn)練時(shí)增加對(duì)回歸框的約束以加速收斂。其實(shí)對(duì)于層數(shù)比較少的網(wǎng)絡(luò)模型,通道重排的作用并沒有在復(fù)雜的深層網(wǎng)絡(luò)中效果那么明顯,同時(shí)盡管經(jīng)過改進(jìn),通道重排本身仍然具有一定的時(shí)間開銷,在后續(xù)的研究中,筆者將試圖找到在輕量級(jí)網(wǎng)絡(luò)中取代通道重排的算法,來提高目標(biāo)檢測(cè)網(wǎng)絡(luò)的性能。