曾浩文,汪慧蘭,趙 侃,王桂麗
(安徽師范大學(xué) 物理與電子信息學(xué)院,安徽 蕪湖 241002)
近年來(lái)隨著深度學(xué)習(xí)的快速發(fā)展,計(jì)算機(jī)視覺(jué)任務(wù)也發(fā)展得非常迅速[1-2]。其中較熱門(mén)的領(lǐng)域有目標(biāo)檢測(cè)[3]、語(yǔ)義分割[4]、實(shí)例分割[5]等。實(shí)例分割需要將圖像中所有的物體都準(zhǔn)確地區(qū)分出來(lái),同時(shí)在語(yǔ)義層面的像素點(diǎn)級(jí)別上分割出每個(gè)實(shí)例,是一項(xiàng)具有挑戰(zhàn)性的任務(wù)。
實(shí)例分割的研究長(zhǎng)期以來(lái)都依賴(lài)較為復(fù)雜的兩階段(two-stage)方法,即先通過(guò)目標(biāo)檢測(cè)方法找到實(shí)例所在區(qū)域,再在檢測(cè)框內(nèi)進(jìn)行語(yǔ)義分割,每個(gè)分割結(jié)果都作為一個(gè)不同的實(shí)例輸出。例如Mask RCNN[6-7]、PANet[8]、HTC[9]等都是使用此方法。兩階段方法的精度較高,但是速度較慢,不能適應(yīng)實(shí)時(shí)性的場(chǎng)景,從而導(dǎo)致它的實(shí)用性并不高。所以,出現(xiàn)了單階段(one-stage)實(shí)例分割方法。
單階段實(shí)例分割方法是先將輸入圖像進(jìn)行像素級(jí)別的語(yǔ)義分割,再通過(guò)聚類(lèi)、度量等學(xué)習(xí)方法在語(yǔ)義層面的像素點(diǎn)上區(qū)分并分割不同的實(shí)例,最后進(jìn)行實(shí)例輸出。經(jīng)典的方法如YOLACT[10]、PolarMask[11]、TensorMask[12]等。以上單階段的方法提高了速度,但是普遍存在精度有所下降的問(wèn)題?;诖?Wang等人在2020年提出SOLOV2(Dynamic,Faster and Stronger)[13]單階段的算法,通過(guò)提出“實(shí)例類(lèi)別”的概念,根據(jù)實(shí)例的位置和大小,對(duì)每個(gè)實(shí)例的像素點(diǎn)賦予一個(gè)類(lèi)別,巧妙地將實(shí)例掩碼分割問(wèn)題轉(zhuǎn)換為一個(gè)分類(lèi)問(wèn)題,SOLOV2算法從精度和速度上超越目前存在的實(shí)例分割算法,得到了廣泛的應(yīng)用。Liu等人[14]通過(guò)對(duì)卷積結(jié)構(gòu)進(jìn)行優(yōu)化并將其應(yīng)用到農(nóng)業(yè)上;Zhu等人[15]將其應(yīng)用到無(wú)人機(jī)中可以快速地檢測(cè)與分割目標(biāo)。SOLOV2是一種以ResNet[16]為基礎(chǔ)網(wǎng)絡(luò)的實(shí)例分割算法,并且在骨干網(wǎng)絡(luò)后連接FPN結(jié)構(gòu)進(jìn)行特征提取和特征融合,以此提高算法的精確度。最后通過(guò)Category Branch(分類(lèi)分支)和Mask Branch (掩膜分支)分別得到語(yǔ)義分類(lèi)和掩膜輸出的結(jié)果,并輸出最后的圖像。但ResNet網(wǎng)絡(luò)的計(jì)算量隨著網(wǎng)絡(luò)深度加深會(huì)逐漸增大,基于此,該文使用ResNext[17]作為骨干網(wǎng)絡(luò),在與ResNet相同參數(shù)量和計(jì)算量的情況下網(wǎng)絡(luò)精度有所提升。此外,使用NAS-FPN[18]代替FPN[19]結(jié)構(gòu)進(jìn)行特征的提取和融合,NAS-FPN使用重新組合和融合特征圖的方式使網(wǎng)絡(luò)能夠充分地感知特征圖從而提升網(wǎng)絡(luò)精度。實(shí)驗(yàn)結(jié)果表明,改進(jìn)后的SOLOV2算法在速度不變的情況下精度提升2.1%,證明了算法的可行性。
SOLOV2是一種單階段逐像素的實(shí)例分割算法,并且是以FCN為基礎(chǔ)架構(gòu)添加兩個(gè)并行分支組成,可以實(shí)現(xiàn)端到端的目標(biāo)檢測(cè)與分割。SOLOV2網(wǎng)絡(luò)整體架構(gòu)如圖1所示。
圖1 網(wǎng)絡(luò)整體結(jié)構(gòu)
整體網(wǎng)絡(luò)架構(gòu)由ResNet特征提取網(wǎng)絡(luò)、FPN特征金字塔網(wǎng)絡(luò)、語(yǔ)義類(lèi)別分類(lèi)分支和掩膜分支、像素級(jí)實(shí)例分類(lèi)與掩膜輸出4個(gè)部分組成。
SOLOV2的核心思想就是將實(shí)例分割問(wèn)題重新表示為類(lèi)別預(yù)測(cè)和實(shí)例掩碼生成兩個(gè)問(wèn)題。具體就是,算法將輸入圖像劃分為若干一致的網(wǎng)格,即S×S。如果物體的中心落在某網(wǎng)格內(nèi),該網(wǎng)格負(fù)責(zé)預(yù)測(cè)語(yǔ)義類(lèi)別和分割該物體實(shí)例。具體過(guò)程如圖1中語(yǔ)義分類(lèi)分支和實(shí)例掩膜分支所示。
語(yǔ)義分類(lèi):對(duì)于每個(gè)網(wǎng)格,SOLOV2預(yù)測(cè)一個(gè)C維度的輸出,表示語(yǔ)義類(lèi)別的概率,C是類(lèi)別的個(gè)數(shù)。這些概率值取決于這些網(wǎng)格。如果將圖像劃分為S×S個(gè)網(wǎng)格,則輸出空間為S×S×C,如圖1語(yǔ)義分類(lèi)分支所示。這樣設(shè)計(jì)是基于一個(gè)假定,即每一個(gè)網(wǎng)格都屬于一個(gè)單獨(dú)的實(shí)例,因此只屬于一個(gè)語(yǔ)義類(lèi)別。在推理時(shí),C維度的輸出表示每個(gè)實(shí)例的類(lèi)別概率。由于此分支需要對(duì)C維度的網(wǎng)格進(jìn)行分類(lèi),但一般網(wǎng)格是實(shí)例所在區(qū)域概率較小,大部分是背景區(qū)域,這種差異如果較大則會(huì)影響檢測(cè)結(jié)果,所以此分支中使用Focal loss損失函數(shù)可以很好地抑制這種差異較大導(dǎo)致精度降低的現(xiàn)象。
實(shí)例掩膜:與語(yǔ)義類(lèi)別預(yù)測(cè)平行,每個(gè)網(wǎng)格都會(huì)輸出一個(gè)相應(yīng)的實(shí)例掩碼。給定一個(gè)輸入圖像i,將之劃分為S×S個(gè)網(wǎng)格,總共就有至多S2個(gè)預(yù)測(cè)掩碼。在3D輸出張量中,將在第三個(gè)維度中直接對(duì)這些掩碼進(jìn)行編碼。輸出的實(shí)例掩碼的維度就是H1×W1×S2。第k個(gè)通道負(fù)責(zé)在第(i,j)個(gè)網(wǎng)格中分割實(shí)例,k=i·S+j(i,j都是從0開(kāi)始)。這樣就在語(yǔ)義類(lèi)別和掩碼之間構(gòu)建起了一一對(duì)應(yīng)的關(guān)系,如圖2所示[13]。當(dāng)此分支開(kāi)始對(duì)擁有實(shí)例的網(wǎng)格進(jìn)行掩膜時(shí),有些網(wǎng)格中實(shí)例占比可能較少,從而導(dǎo)致掩膜精度降低,所以使用Dice loss損失函數(shù)來(lái)抑制這種現(xiàn)象,從而有效提升精度。
圖2 實(shí)例掩膜對(duì)應(yīng)關(guān)系
SOLOV2常用的骨干網(wǎng)絡(luò)是ResNet-50 /101殘差網(wǎng)絡(luò),ResNet網(wǎng)絡(luò)中加入了一個(gè)殘差結(jié)構(gòu),解決了隨著網(wǎng)絡(luò)加深準(zhǔn)確率下降的問(wèn)題。ResNet網(wǎng)絡(luò)殘差結(jié)構(gòu)如圖3所示[16]。
圖3 ResNet網(wǎng)絡(luò)殘差結(jié)構(gòu)
殘差結(jié)構(gòu)對(duì)每層的輸入做一個(gè)反饋(X),通過(guò)加深層學(xué)習(xí)形成殘差函數(shù),這種殘差函數(shù)更容易優(yōu)化,能使網(wǎng)絡(luò)層數(shù)大大加深。但是隨著網(wǎng)絡(luò)層數(shù)的不斷增加,網(wǎng)絡(luò)計(jì)算量和參數(shù)也隨之增加,導(dǎo)致速度降低精度卻沒(méi)有增加,所以,該文采用改進(jìn)的ResNext網(wǎng)絡(luò),在ResNet網(wǎng)絡(luò)殘差結(jié)構(gòu)中增加了Inception結(jié)構(gòu)[20],如圖4所示。
圖4 Inception結(jié)構(gòu)
從圖5中可以看出,改進(jìn)后的ResNext網(wǎng)絡(luò)在ResNet網(wǎng)絡(luò)結(jié)構(gòu)的基礎(chǔ)上增加了平行堆疊拓?fù)浣Y(jié)構(gòu),在網(wǎng)絡(luò)深度不變的情況下增加了基數(shù),將多維度的乘積運(yùn)算變?yōu)楦途S度的求和運(yùn)算,網(wǎng)絡(luò)的參數(shù)量和計(jì)算量不會(huì)變多,但能有效提升網(wǎng)絡(luò)精度。表1顯示了ResNet網(wǎng)絡(luò)和ResNext網(wǎng)絡(luò)參數(shù)量和計(jì)算量的對(duì)比。
表1 網(wǎng)絡(luò)參數(shù)量和計(jì)算量對(duì)比
圖5 網(wǎng)絡(luò)結(jié)構(gòu)對(duì)比
傳統(tǒng)的FPN結(jié)構(gòu)如圖1中FPN方框中所示。FPN結(jié)構(gòu)從不同的網(wǎng)絡(luò)層次提取不同尺度的特征圖,將提取的特征圖每個(gè)都做1 × 1卷積,從而減少卷積核的個(gè)數(shù)。經(jīng)過(guò)處理的特征圖從頂層開(kāi)始依次向下做上采樣操作,目的是為了和上一層的特征圖尺寸一樣從而做特征圖的融合操作??稍谌诤现筮€會(huì)再采用3×3的卷積核對(duì)每個(gè)融合結(jié)果進(jìn)行卷積來(lái)消除上采樣的混疊效應(yīng)。經(jīng)過(guò)融合操作后最底層的特征圖所包含的特征語(yǔ)義信息最多,但是還會(huì)對(duì)過(guò)程中的每個(gè)特征圖都做預(yù)測(cè)操作,這樣就大大減少了在特征融合過(guò)程中因?yàn)榫矸e所損失 。但是FPN的這種結(jié)構(gòu)不能充分的利用特征圖,所以使用改進(jìn)的NAS-FPN結(jié)構(gòu)來(lái)提升網(wǎng)絡(luò)精度。
NAS-FPN結(jié)構(gòu)對(duì)于FPN的改進(jìn)之處在于將原來(lái)的FPN結(jié)構(gòu)中所得到的那些特征圖重新進(jìn)行組合,不再是通過(guò)從高層次特征圖依次向下和低層次的特征圖融合的這種方式。NAS-FPN結(jié)構(gòu)如圖6所示。
圖6 NAS-FPN結(jié)構(gòu)
NAS-FPN對(duì)5個(gè)尺度上的特征圖進(jìn)行重組,5個(gè)尺度的特征圖分別表示為:{C3,C4,C5,C6,C7},相對(duì)輸入圖像的步長(zhǎng)(縮放倍數(shù))分別為{8,16,32,64,128},其中C3、C4、C5是ResNext提取的三個(gè)尺度上的特征層,C6和C7是把C5特征層池化后得到的。
NAS-FPN的核心設(shè)計(jì)是合并單元,它負(fù)責(zé)搜索、抽取輸入特征圖以及經(jīng)過(guò)二元操作得到輸出特征圖。具體步驟如下:
(1)從候選特征層中選取2個(gè)作為輸入特征層。
(2)選擇輸出特征的分辨率。
(3)選擇一個(gè)二元操作將兩個(gè)輸入特征層整成新的輸出特征,并加入候選特征層中。
上述步驟重復(fù)進(jìn)行,最初的候選特征層就是5個(gè)尺度的特征圖,最后5個(gè)循環(huán)分別生成最終輸出特征層{P3,P4,P5,P6,P7},這5個(gè)特征層的分辨率分別與最初的5個(gè)候選特征層相對(duì)應(yīng)。合并單元通常會(huì)疊加多個(gè),上一個(gè)合并單元的5個(gè)輸出特征層作為下一個(gè)合并單元的5個(gè)初始候選特征層。合并單元的操作過(guò)程和二元操作如圖7所示[18]。
圖7 合并單元和二進(jìn)制操作過(guò)程
實(shí)驗(yàn)使用ResNext網(wǎng)絡(luò)作為特征提取骨干網(wǎng)絡(luò),為了可以在不增加網(wǎng)絡(luò)參數(shù)量和計(jì)算量的情況下提升網(wǎng)絡(luò)精度,使用NAS-FPN結(jié)構(gòu)對(duì)特征圖進(jìn)行重新組合和融合。為了使網(wǎng)絡(luò)可以更好地感知特征圖,改進(jìn)后的網(wǎng)絡(luò)結(jié)構(gòu)如圖8所示。
圖8 改進(jìn)后的網(wǎng)絡(luò)
在SOLOV2測(cè)試模型時(shí),給定一個(gè)輸入圖像,先通過(guò)骨干網(wǎng)絡(luò)處理得到一系列特征圖,再通過(guò)金字塔結(jié)構(gòu)將特征圖進(jìn)行處理,并傳入到能對(duì)特征圖進(jìn)行分類(lèi)和預(yù)測(cè)的算法頭部中,最后得到一個(gè)帶有將目標(biāo)用掩膜覆蓋的圖像。整個(gè)算法步驟大致如下:
(1)對(duì)輸入圖像進(jìn)行預(yù)處理操作。
(2)搭建如圖8所示的網(wǎng)絡(luò)框架,將輸入圖像送入ResNext基礎(chǔ)網(wǎng)絡(luò)得到輸入圖像的特征圖,在特征圖的每一點(diǎn)上面進(jìn)行回歸操作,訓(xùn)練獲取網(wǎng)絡(luò)模型。
(3)將預(yù)訓(xùn)練的網(wǎng)絡(luò)模型應(yīng)用到測(cè)試圖像中,從特征金字塔的多個(gè)Head獲得預(yù)測(cè)結(jié)果;其中Head檢測(cè)網(wǎng)絡(luò)分為語(yǔ)義分類(lèi)分支和實(shí)例掩膜分支。并且兩個(gè)分支使用不同的損失函數(shù),語(yǔ)義分類(lèi)分支使用的是Focal loss損失函數(shù),掩膜分支使用的是Dice loss損失函數(shù)。
(4)使用NMS后處理操作得到最終預(yù)測(cè)結(jié)果。
(1)Focal loss損失函數(shù)。
此損失函數(shù)主要是為解決類(lèi)別不平衡的問(wèn)題所提出的。因?yàn)榫W(wǎng)絡(luò)在處理數(shù)據(jù)時(shí)負(fù)樣本數(shù)量太大,占總的損失的大部分,而且多是容易分類(lèi)的,由于負(fù)樣本太多可能會(huì)不能夠正確地識(shí)別正樣本,從而導(dǎo)致準(zhǔn)確率變低。計(jì)算公式為:
FL(pt)=-αt(1-pt)γlogpt
(1)
其中,(1-pt)γ為調(diào)制系數(shù),pt的范圍是0到1,為任意數(shù),α一般會(huì)取0到0.5來(lái)增加-1這個(gè)類(lèi)的樣本的權(quán)重。
(2)Dice loss損失函數(shù)。
Dice loss損失函數(shù)源于二分類(lèi),本質(zhì)上是衡量?jī)蓚€(gè)樣本的重疊部分。該指標(biāo)范圍從0到1,其中“1”表示完整的重疊。其計(jì)算公式為:
(2)
其中,|A∩B|表示集合A、B之間的共同元素,|A|表示A中的元素個(gè)數(shù),B也用相似的表示方法。為了計(jì)算預(yù)測(cè)的分割圖的dice系數(shù),將|A∩B|近似為預(yù)測(cè)圖的每個(gè)類(lèi)別的得分和目標(biāo)之間的點(diǎn)乘,并將結(jié)果函數(shù)中的元素相加。
基于Pytorch深度學(xué)習(xí)框架上實(shí)現(xiàn)SOLOV2實(shí)例分割模型并進(jìn)行模型的訓(xùn)練和測(cè)試。操作系統(tǒng)為L(zhǎng)inux 16.04.5LT,服務(wù)器的處理器為Intel Xeon(R) CPU E5-2678V3內(nèi)存64G,實(shí)驗(yàn)顯卡為NVIDIA GeForce GTX1080TiGPU,GPU數(shù)量為4,使用的CUDA版本為10.2。
實(shí)驗(yàn)采用Microsoft COCO2017標(biāo)準(zhǔn)數(shù)據(jù)集,COCO2017數(shù)據(jù)集分為目標(biāo)檢測(cè)、關(guān)鍵點(diǎn)檢測(cè)、實(shí)例分割、全景分割、圖像說(shuō)明等5種標(biāo)注類(lèi)型;標(biāo)注信息使用JSON格式存儲(chǔ),預(yù)處理通過(guò)COCO API用于訪問(wèn)和操作所有“標(biāo)注”。其中訓(xùn)練數(shù)據(jù)集圖像11萬(wàn)8千多張,測(cè)試數(shù)據(jù)集圖像5千多張。數(shù)據(jù)集中包含人、車(chē)等80個(gè)類(lèi)別。為了加速訓(xùn)練,實(shí)驗(yàn)使用遷移學(xué)習(xí)來(lái)訓(xùn)練。首先加載已經(jīng)訓(xùn)練好的ResNext模型的權(quán)重,使用monentum=0.9,weigt_decay=0.000 1的SGD優(yōu)化器,使用GN,一共迭代100 000次大約12個(gè)epoch。初始的學(xué)習(xí)率設(shè)為0.01,在第7個(gè)epoch和第10個(gè)epoch分別將學(xué)習(xí)率除以10。模型改進(jìn)前后的損失值如圖9所示,其中l(wèi)oss_cls為語(yǔ)義分類(lèi)中的損失值,loss_mask為實(shí)例掩膜中的損失值,loss為總的損失值。
圖9 改進(jìn)前后的損失值對(duì)比
圖中下方曲線為改進(jìn)后的損失值曲線。從圖9(a)語(yǔ)義分類(lèi)損失中可以看出,改進(jìn)后的損失值從1.0下降到0.2左右,比原先的0.25更小,且在迭代70k次后學(xué)習(xí)率衰減10%,損失值逐漸趨于穩(wěn)定。圖9(b)中看到在迭代20k次時(shí)損失值產(chǎn)生震蕩,后繼續(xù)下行縮小,最后在0.5左右趨于穩(wěn)定。從圖9(c)總的損失中可以看出,改進(jìn)后的損失值下降更為迅速,且損失值趨于穩(wěn)定后相對(duì)較小。通過(guò)分析改進(jìn)前后的損失變化情況可知,改進(jìn)后的損失下降迅速,說(shuō)明網(wǎng)絡(luò)收斂速度較快,穩(wěn)定后的損失值較小和整體震蕩較小,證明網(wǎng)絡(luò)的魯棒性較好。
實(shí)驗(yàn)采用AP作為準(zhǔn)確度的評(píng)價(jià)指標(biāo),同時(shí)也展示了AP50、AP75的精度。計(jì)算公式如式(3)所示:
AP=∑precision/N
(3)
其中,precision為準(zhǔn)確率,AP為平均準(zhǔn)確率,N為一個(gè)類(lèi)別的圖像總數(shù),TP為正確識(shí)別并標(biāo)定目標(biāo)的數(shù)目,FP為錯(cuò)誤識(shí)別但標(biāo)定目標(biāo)的數(shù)目。表2展示了不同模型之間的精度與改進(jìn)前后的模型精度對(duì)比。
表2 不同模型的精度對(duì)比 %
由表2數(shù)據(jù)可以看出,改進(jìn)前單階段SOLOV2算法精度已經(jīng)高于表中所列出的其它單階段和兩階段算法。進(jìn)一步可以看出改進(jìn)后的精度,當(dāng)只對(duì)骨干網(wǎng)絡(luò)改進(jìn)時(shí)即使用ResNext網(wǎng)絡(luò)作為特征提取網(wǎng)絡(luò),AP精度相較于原來(lái)提升了1百分點(diǎn),這是因?yàn)镽esNext網(wǎng)絡(luò)在不改變網(wǎng)絡(luò)參數(shù)量和計(jì)算量的情況下增加了網(wǎng)絡(luò)基數(shù),減少了超參數(shù),從而提升了網(wǎng)絡(luò)精度。當(dāng)只對(duì)FPN結(jié)構(gòu)進(jìn)行改進(jìn)時(shí),AP精度相較于原來(lái)提升了0.8百分點(diǎn),NAS-FPN結(jié)構(gòu)可以將提取的特征圖進(jìn)行隨機(jī)的組合和融合操作,使網(wǎng)絡(luò)可以更好地感知特征圖,從而提升網(wǎng)絡(luò)精度。當(dāng)同時(shí)對(duì)骨干網(wǎng)絡(luò)和FPN結(jié)構(gòu)進(jìn)行改進(jìn)時(shí),從表2可以看出AP精度相較于原來(lái)提升了2.1百分點(diǎn)。圖10為改進(jìn)前后網(wǎng)絡(luò)的實(shí)例分割效果對(duì)比圖以及道路場(chǎng)景下的效果圖。
從圖中可以看出,SOLOV2算法可以很好地應(yīng)用在各種交通場(chǎng)景中,如城市街頭人流量和車(chē)輛較多的情況等,且改進(jìn)后的SOLOV2算法能更好地將小目標(biāo)進(jìn)行掩膜輸出,這是因?yàn)镹AS-FPN結(jié)構(gòu)對(duì)于特征圖的感知更加精確。也可以看出,改進(jìn)后的SOLOV2算法對(duì)于多個(gè)實(shí)例的分割效果更好,邊緣效果處理得也更好。結(jié)合效果圖可以看出,改進(jìn)后的SOLOV2算法精度更高且能用于實(shí)際場(chǎng)景,證明了算法的可行性。
以SOLOV2算法為基礎(chǔ),通過(guò)改變骨干網(wǎng)絡(luò)和FPN結(jié)構(gòu)來(lái)達(dá)到提升精度的目的。首先,以ResNext骨干網(wǎng)絡(luò)為基礎(chǔ),因?yàn)榭梢栽诓桓淖兙W(wǎng)絡(luò)參數(shù)量和計(jì)算量的前提下減少了超參數(shù)的量,從而有效提升了網(wǎng)絡(luò)的精度;其次,采用NAS-FPN結(jié)構(gòu)與骨干網(wǎng)絡(luò)結(jié)合來(lái)實(shí)現(xiàn)目標(biāo)特征的提取和融合,由于NAS-FPN結(jié)構(gòu)可以對(duì)特征圖進(jìn)行重新組合和融合的操作,不再是原來(lái)的自頂向下的方式,使網(wǎng)絡(luò)可以更好地感知特征圖,從而提升整個(gè)模型的精度。實(shí)驗(yàn)使用COCO2017數(shù)據(jù)集驗(yàn)證整體模型精度提升了2.1%,證明了改進(jìn)網(wǎng)絡(luò)的有效性。
計(jì)算機(jī)技術(shù)與發(fā)展2023年9期