洪哲昊,陳東方+,王曉峰
(1.武漢科技大學 計算機科學與技術學院,湖北 武漢 430065; 2.武漢科技大學 智能信息處理與實時工業系統湖北省重點實驗室,湖北 武漢 430065)
目前在目標檢測算法[1-3]中,對不同尺度目標的檢測一直是一個難點,其最直觀的一種解決方式是采用多尺度圖像金字塔[4],然而這種方式檢測太費時,使其難以在實際生產中應用。一些其它的算法采用在網絡內部構建特征金字塔的方式,降低圖像金字塔的計算成本,例如SSD[5]、DSSD[6]、RSSD[7]、FPN[8]、YOLO系列檢測器[9-11],還有一些兩步檢測的算法例如Faster R-CNN[12]、R-FCN[13]、Mask R-CNN[14]等。上述算法雖然取得了較好的檢測結果,但仍然存在一些不足。SSD算法各層特征之間相互獨立,沒有充分利用各尺度特征的特點,導致小目標檢測;DSSD和RSSD算法采用較深的網絡結構進行特征融合,使其參數量大大增加導致檢測速度過于緩慢;FPN網絡只將高層特征引入底層,沒有考慮底層特征對高層的影響,使得特征融合不夠充分。為了解決上述存在的問題,從特征金字塔的角度出發,提出了一種多任務分支SSD的目標檢測算法。第一個分支為高層和淺層融合位置信息和語義信息,第二個分支為中間特征層融合語義位置信息,之后通過多尺度通道聚合將兩個分支結果融合,加強對不同尺度目標的檢測能力和重要特征的表征能力。
研究人員已經投入了大量的努力來提高不同尺度物體的檢測精度,無論是一階段檢測器還是二階段檢測器,近年來針對檢測過程中出現的尺度變化問題,主要有兩個策略來改善尺度變換帶來的影響。
第一個策略是圖像金字塔,該策略將原圖像縮放到不同尺度,以獲取具有代表性的多尺度特征。不同尺度圖像的特征分別產生預測,最后這些預測總和在一起作為最終的預測。在識別精度和定位精度方面,來自不同大小圖像的特征確實超越了僅僅基于單尺度圖像的特征。SNIP[4]就采用了這種策略,盡管在性能方面有所提高,但帶來的問題是消耗了大量的時間和內存,這使得這種策略在實時任務中難以實現。
第二種方法是從網絡內部的固有層提取特征金字塔來檢測目標,同時只提取單一尺度的圖像。與第一種策略相比,這種策略所需的額外內存和計算成本要少得多,因此可以實時的進行網絡測試,更容易在實時任務中部署。MS-CNN[15]將多尺度特征引入到深度卷積神經網絡中進行目標檢測任務的構建;SSD使用VGG16網絡結構作為基礎特征提取網絡,并從其結構中抽取不同尺度的特征層進行檢測;DSSD采用ResNet加深了主干網絡,并將反卷積層應用在深淺層的特征融合中;FPN使用橫向連接操作構建了一個自頂向下的通路,實現了高層語義信息的傳遞。
在對特征金字塔的研究中[5,6,8,15-17]表明,高層和低層具有的特征信息是不相同的,高層具有更多的語義信息,而低層特征圖的分辨率較大,含有更多的位置信息和細節特征,而整合不同尺度的特征有利于各種目標檢測任務[18]。SSD采用不同尺度特征圖分別檢測,底層高分辨率的大特征圖往往用于檢測小目標,高層低分辨率的小特征圖的感受野更大往往用來檢測大目標,這樣的結構可以看出各層特征之間沒有關聯,底層特征缺乏語義信息,使得小目標檢測效果不好,而高層特征分辨率低沒有足夠的位置信息容易導致中大型目標出現漏檢情況。FPN和DSSD能夠有效的把高層語義信息傳遞到底層特征,使得在底層高分辨率特征圖上進行小目標檢測的效果有了提升。但同時只使用了單一的特征金字塔結構,忽略了底層特征對高層的影響,使最后融合的特征不夠充分,有效檢測中大型目標的高層特征仍然缺乏位置信息。
基于此,本文算法借鑒FPN的思想構建了兩個分支,其中第一個分支針對語義信息和定位信息采用了不同的兩個模塊進行級聯,加強對深淺層中所包含的語義和定位信息在深層和淺層特征中的表征能力,第二個分支采用融合分裂的方式將深淺層的信息傳遞到中間層,之后將兩個分支的輸出經過一個多尺度通道聚合模塊,融合整體的特征得到一個具有多尺度的特征金字塔,這種結構加強了SSD網絡中各層特征的關聯,同時也彌補了原始FPN網絡特征融合不充分的問題。
本文算法的整體結構如圖1所示,整體上分為3步。第一步通過VGG16主干網絡提取不同尺度的六層特征記為 {G1,G2,G3,G4,G5,G6}, 其各層特征的大小為(38,19,10,5,3,1),之后通過瓶頸層改變各個尺度特征的通道數。第二步是一個包含二個任務分支的并行結構,使用上一步瓶頸層處理之后的一組特征圖作為輸入,在第一個分支中,將語義信息增強模塊(semantic information enhancement module, SIEM)和定位信息增強模塊(localization information enhancement module, LIEM)級聯,對深層特征所包含的豐富語義信息和淺層特征所包含的豐富定位信息進行雙向傳遞;第二個分支才采用融合分裂增強模塊(fusion split enhancement module, FSEM)將深淺層所具有代表性的語義和定位信息向中間層傳遞。第三步將第二部分中不同分支的輸出送入多尺度通道聚合模塊(multi-scale channel aggregation, MSCA),進行兩個分支輸出特征的融合,并為不同尺度特征通道之間引入權重系數,對同一尺度下不同特征的關系進行表征,增強了原本響應較大的特征同時也對那些不敏感的特征進行一定程度的抑制。最后同SSD相似,圖1中Detection per Class這一步驟,通過在不同尺度的特征圖上進行卷積來生成若干個不同形狀與比例的預選框,每一個預選框都包含著預測的類別與邊界位置信息。然后通過非最大抑制(non-maximum suppression, NMS)操作生成最終結果。
圖1中Bottleneck為瓶頸層,為了減少網絡的參數量和回傳梯度過大帶來影響,Bottleneck層使用了1×1卷積對主干網提取到的不同尺度的特征進行平滑處理,將各個尺度的特征通道數減少到256,以提高計算效率。同時因為G0的大小為(1,1),位置信息已經丟失,但其語義信息豐富,因此作為一個全局平均池化(global average pooling, GAP)之后的全局特征引入前五層特征。輸出得到一組多尺度的基礎特征 {C1,C2,C3,C4,C5} 和G0, 在這些特征圖中,從C1到C5其特征圖分辨率逐漸降低,包含的位置信息逐漸減少而語義信息逐漸增多。下面介紹網絡中各個模塊的具體細節。

圖1 本文算法具體網絡結構
語義信息增強模塊(SIEM)主要采用自頂向下的特征金字塔結構,另外在基礎FPN結構上做了一些修改:①使用了最小層的特征圖G0作為GAP操作之后的全局特征引入到低層特征中,G0可以學習到更多的語義信息,突出識別出的目標區域;②采用雙線性插值代替最鄰近插值進行上采樣操作,彌補最鄰近插值帶來的精度損失。SIEM結構如圖2所示。

圖2 SIEM結構
首先將G0層進行上采樣到C5特征圖同樣大小,將其與C5特征圖融合,把具有全局語義信息的特征傳遞到C5特征圖上,之后把融合過的特征圖通過一個上采樣操作將分辨率增加到(10,10),之后將C4特征層與上采樣操作過后的C5特征層進行融合,通過這樣的方式得到五層融合過后的特征,最后對這五層特征分別使用一個3×3卷積來減少上采樣導致混疊效應的影響,輸出五層特征記為 {T1,T2,T3,T4,T5}。
自頂向下特征金字塔結構中的每一個特征圖(Ti)由主干網中提取到的同一層特征圖(Ci)和高一層的特征(Ti+1)融合得到
Ti=Ki?(S(Ti+1)+Ci)
(1)
式中:Ki為一個3×3大小的卷積核,?表示一個卷積操作,用于減少上采樣帶來的混疊效應, S(Ti+1) 表示一個將特征圖大小增加為原來兩倍的雙線性插值上采樣操作。這種自頂向下的特征金字塔將高層主干特征的語義信息逐層傳播到分辨率更高的底層特征上,所以原本缺乏語義信息的低層特征得到了加強,對小目標的檢測更加有利。
在SIEM中,自頂向下的特征金字塔將深層的語義信息傳導至淺層特征中,讓位置信息豐富的高分辨率特征圖上具有了更多的語義信息,但是這種單一的特征金字塔結構沒有考慮到淺層特征所包含的位置信息對深層特征的作用。本文設計了定位信息增強模塊(LIEM),并于SIEM進行級聯,在SIEM的基礎上加強淺層特征定位信息向深層傳遞。SIEM和LIEM級聯之后的結構如圖3所示。

圖3 SIEM和LIEM級聯結構
LIEM與SIEM結構相反,利用SIEM輸出的特征 {T1,T2,T3,T4,T5}, 從最大的特征圖開始自底向上逐步構建特征金字塔,首先對T2進行上采樣增大分辨率,將其與T1特征圖融合,得到第一個融合的特征圖,通過池化的方式減少分辨率并獲取最重要的特征,第二次再以同樣的方式對T2,T3進行融合。特別的,LIEM增加了對原始特征層相鄰上下文的融合,以此方式減少池化時分辨率減小帶來的信息丟失問題,最后得到的特征圖記為 {B1,B2,B3,B4,B5}。
每一個自底向上特征金字塔中的特征層(Bi)都由同一大小的主干網特征(Ti)和其上一層特征(Ti+1)與特征金字塔中低一層的特征(Bi-1)融合得到
Bi=Ki?(M(Bi-1)+Ti+S(Ti+1))
(2)
式中:Ki同樣為一個3×3的卷積核,?表示一個卷積操作來減小上采樣帶來的混疊效應的影響,M(·) 表示一個大小為2,步長為2的最大池化操作,將大特征圖的尺寸減小為原始的一半。 S(Ti+1) 為一個雙線性插值操作,將Ti+1這層特征圖上采樣到原來的兩倍大小。由于這種自底向上的特征金字塔結構將底層主干特征的空間定位信息較好傳播至高層特征,使得原本缺乏位置信息的高層特征得到加強,從而加強了對大目標的檢測,在這個級聯結構中SIEM將語義信息傳遞至淺層特征,通過LIEM將淺層中的定位信息反向傳遞至深層特征中,彌補了深層特征中定位信息不夠的缺陷,從而提升了對大小目標的檢測能力。
SIEM和LIEM中的特征金字塔結構都是順序構造結構,分別針對底層特征語義信息不足和高層特征定位信息不足的問題進行優化。而從深層和淺層特征圖直接的關系出發,設計了融合分裂增強模塊(FSEM)分別融合主干網上深層的特征和淺層的特征,之后把這兩組特征進行累加混合,再分裂至不同尺寸的特征層上,如圖4所示。

圖4 FSEM結構
在SSD主干網提取到的六層特征中,使用前四層 {C1,C2,C3,C4} 來構建中型目標任務分支,其尺寸分別是(38,38)、(19,19)、(10,10)、(5,5),后兩層特征圖(3,3)、(1,1)尺寸過小,位置信息較差,但有著較為豐富的語義信息。首先將G0通過雙線性插值上采樣到C5特征圖大小,隨后將它們融合,把融合后的特征圖再次通過雙線性插值到C4特征圖大小并與C4特征圖融合,這樣將后兩層分辨率較低的特征層所包含的語義信息融合到下面的特征層當中,記融合過后的特征圖為Cfix。
在前四層特征圖中, {C1,C2} 為淺層高分辨率特征,通過池化將C1的尺寸減小到(19,19),之后與C2進行融合得到一個具有豐富位置信息的特征圖?low
?low=M(C1)+C2
(3)
之后利用融合后的特征層Cfix與C3進行深層特征的融合,得到一個尺寸為(10,10)并具有豐富語義信息的特征圖?hight
?hight=S(Cfix)+C3
(4)
在分別對深層和淺層特征進行融合之后,得到大小為(10,10)和大小為(19,19)的兩個特征圖?hight和?low, 其通道數都為256,之后將?hight和?low進行合并得到兩個具有全面信息的特征圖δlow和δhight
δlow=Klow?cat(?low,S(?hight))δhight=Khight?cat(M(?low),?hight)
(5)
式中:Klow和Khight為兩個3×3卷積操作, cat(·) 代表沿通道維數的Concat操作,在此之后,特征圖δlow和δhight同時融合了來自主干網深層特征和淺層特征的信息,最后對δlow和δhight分別進行雙線性插值和池化操作得到各個尺度的特征圖
F1=S(δlow),F2=δlowF3=δhight,F4=M(δhight)
(6)
另外將F4通過最大池化操作得到特征金字塔中的第五層:F5=M(F4)。 通過上述對深層和淺層特征的融合和分裂,中間大小的特征層(F2和F3)包含了來自主干網中淺層的位置信息和深層的語義信息,加強了對中型目標需要的位置和語義信息的提取。
在經過兩個分支對不同尺度中所包含的信息融合之后,輸出了兩個特征金字塔,一個特征金字塔中的深淺層包含了定位和語義信息,另一個特征金字塔中的中間層包含了定位和語義信息,本文通過一個MSCA模塊將這兩組特征金字塔進行整合。在近期的研究中表明,通過求和組合特征圖是一種常見的從多個特征中收集上下文信息的方法[19],然而,Huang等[20]認為求和會削弱網絡中的信息流。此外每一個尺度中不同的通道表示了不同的特征,而這些特征之間缺乏關聯,以至于重要的特征不能夠顯著的表示。
因此本文設計了一個多尺度通道聚合模塊(MSCA)如圖5所示,第一步沿著通道維將同等大小尺度的特征串聯在一起,最后聚合的特征金字塔可以表示為P=[P1,P2,…,Pi], 其中每一個P表示為Pi=cat(Bi,Fi), 這樣聚合金字塔中的每個尺度都包含多層次深度的特征,然而,簡單的連接操作不能夠表征通道之間的關系。第二步,和SE Block[21]相似,引入了一組通道權重,針對不同尺度特征中的關系進行加權,顯著表征網絡更感興趣的特征,同時抑制其它的特征。先對每個尺度聚合的特征在通道維度上采用全局平均池化(GAP),對每個尺度的特征進行壓縮獲取權重系數z, 通道數目為C, 之后為了捕獲通道之間的依賴關系,使用了兩個全連接層對權重系數進行激活
S=fex(z,W)=σ(W2φ(W1,z))
(7)
式中:σ為Relu激活函數,φ為sigmoid激活函數,W1為第一個全連接層FC1參數,其尺寸為C/r×C,W2為第二個全連接層FC2參數,其尺寸為C×C/r,r是一個縮放比例,在本實驗中采用r=16, 最終將得到的權重系數S與原始特征圖Pi在同一通道Ci上相乘
(8)

圖5 MSCA結構
本文算法目的為對圖中目標的檢測,需要進行定位與分類,本次實驗使用的損失函數為位置回歸損失函數與分類損失函數之和。其公式如下
(9)
式中:N為預測框匹配到目標框的數量,如果N為0,那么損失函數值為0;x為預測框與真實目標框關于每一個類別的指示器,其取值為0或1;c為網絡對樣本的輸出的概率值;l為預測框的位置信息,g為真實目標框的位置信息;α為一個權重系數因子,在訓練過程中設置為1。對于分類損失函數,采用交叉熵損失函數,其公式如下
(10)

(11)
(12)

本文使用MAP(mean average precision)作為指標來對算法的性能進行衡量,其公式如下
(13)
MAP為在所有圖片上對所有類別的目標識別的精確程度,其中N(Classes) 為數據集中共有物體的類別數, ∑AveragePrecisionC則是對所有類別物體的平均精度求和。AveragePrecisionC表示C這類物體的平均精度,其公式如下
(14)
式中:N(TotalImages)C則表示所有包含C這一類的目標的圖像的數量,PrecisionC為在測試集的所有圖像當中C這一類的精度,其計算方式如下
(15)
N(TotalObjects)C表示測試圖像當中含有C這一類目標的數量,N(TruePositives)C為C這一類目標被正確預測的數量。
本實驗的軟件環境為Ubuntu 16.04.6 LTS,深度學習框架為PyTorch。硬件環境使用CPU型號為Intel(R) Xeon(R) CPU E5-2628 v3,GPU型號為NVIDIA GeForceRTX2080,8 G顯存。
本次實驗所使用的數據集為PASCAL VOC 07+12 trai-nval和PASCAL VOC 2007 test,其中訓練集PASCAL VOC 07+12 trainval一共包含16 551幅圖像,49 653個目標對象,PASCAL VOC 2007 test作為測試集一共包含4952幅圖像,14 856個目標對象,其中共有20個類別的目標對象。
在本次實驗過程中,使用300*300的分辨率作為網絡的輸入,訓練過程中采用的BatchSize大小為16,總訓練次數為120 000次,使用SGD優化器,初始學習率為0.001,優化器動量設置為0.9,學習率衰減率為0.1,分別在訓練到第80 000次,第100 000次進行學習率的變更。在訓練過程中,每1000次進行保存一次模型權重結果,整體訓練損失值結果如圖6所示,平均精度曲線如圖7所示。
圖6中,本次實驗使用了預訓練的VGG16權重,前期loss下降的較快,然后在不斷的振蕩,最終大概在80 000次左右收斂。

圖6 損失函數收斂曲線

圖7 平均精度收斂曲線
圖7中,利用訓練過程中保存的權重模型在VOC2007test數據集上進行測試,一共120次測試,其中實線為本文算法的平均精度曲線,短橫虛線為SSD算法的平均精度曲線,點虛線為FPN算法,點加橫虛線為DSSD算法,可以看出在前期存在一些振蕩,在60 000次左右逐漸穩定,最后收斂的結果比其它算法要高。
為了驗證本文算法的檢測效果,將與原始SSD算法、其改進算法DSSD和基于特征金字塔的算法FPN算法進行實驗對比。對比結果見表1,其中MAP為算法的整體檢測精度,Fps為每秒檢測的圖像數量,單位為幀/秒,Backbone為算法采用的基礎特征提取網絡,our表示本文算法的實驗結果。
如表1所示,原始SSD算法整體檢測精度MAP為77.1,本文算法的整體檢測精度為79.6,較原始SSD算法增加了2.5個百分點,而DSSD和FPN算法分別采用了resnet-101和resnet-50作為基礎特征提取網絡,其網絡較深導致了檢測速度慢,但加入了自頂向下的特征金字塔,對船只、飛機等小目標檢測比原始SSD較好,本文算法采用VGG16,網絡層數相對較淺,相對于DSSD算法和FPN算法在這些類別目標上檢測精度相近,而對于其它類別的目標,本文算法有了一定的提升,總體上也較DSSD算法和FPN算法相比增加了1.0和1.3個百分點,同時保證了檢測速度。從其中選取了部分檢測結果,如圖8所示,圖8(a)為原始SSD,圖8(b)為DSSD算法,圖8(c)為FPN算法,圖8(d)為本文算法。可以看出,本文對一些小目標的檢測有所加強,例如火車旁邊的行人,原始SSD只檢測出了尺度較大的3個人,FPN則檢測出了重復的人,而本文能夠檢測出右側較為明顯的人和左側的一個小尺度的人。對于中型和大型目標的檢測,本文也能夠進行有效的檢測,例如中等尺度大小的鸚鵡,SSD、DSSD和FPN都出現了漏檢的情況,本文算法能夠較為全面地檢測出所有的鸚鵡。

圖8 各個算法檢測對比
為了進一步驗證本文提出的4種模塊對不同尺度下目標檢測的效果,對PASCAL VOC 2007 test進行分析處理,得到14 856個目標對象中最大目標所占像素掩碼為245 000,而最小的目標所占的像素掩碼為44,根據測試集中所有目標的尺度范圍將14 856個目標劃分為L、M、S這3組,分別對應大、中、小3種尺度。對本文設計的4種模塊(SIEM、LIEM、FSEM、MSCA)分別進行實驗并與SSD算法進行對比。如表2所示,SSD+SIEM(S)表示在SSD算法上只使用了SIEM,SSD+SIEM+LIEM(S+L)表示將SIEM與LIEM級聯加入網絡,SSD+FSEM(F)表示只使用了FSEM,SSD+SIEM+LIEM+FSEM(S+L+F)表示,同時采用這3種模塊,但沒有使用MSCA,Our表示在使用前面3種模塊的基礎上加入了特征融合模塊MSCA,其結果見表2。

表2 對不同尺度目標的檢測結果
從表2可以看出,原始SSD算法以不同尺度目標劃分時檢測的整體精度為64.5,本文提出的3種模塊對不同尺度目標的貢獻程度不同,語義信息增強模塊(SIEM)更好利用了高層語義信息,將小尺度目標的檢測精度提升了2.1;而級聯語義信息增強模塊(SIEM)和定位信息增強模塊(LIEM)之后可以看到在保證小目標檢測能力的同時提升大目標檢測效果,將大尺度目標檢測精度提升了1.8;而分裂融合增強模塊(FSEM)將語義和位置信息融入到中間大小特征層,將中等尺度目標檢測精度提升了0.8,在第五行(SSD+S+L+F)和第六行(Our)可以看出,在使用了前面3種模塊后,加入多尺度通道聚合(MSCA)模塊對網絡整體效果有0.1~0.4的提升。最后本文算法對以不同尺度目標劃分時檢測整體精度為66.5,較原始SSD算法提升了2.0??梢则炞C針對不同尺度目標,本文改進的SSD算法都有所加強。
本文提出了一種多任務分支SSD的目標檢測算法,針對檢測時目標的不同尺度,采用FPN的思想和深層和淺層特征的關系設計了3種不同模塊(SIEM、LIEM、FSEM),分別是自頂向下的結構、自底向上的結構和深層淺層向中間層融合的結構,SIEM加強對語義信息的傳遞,LIEM加強對位置信息的傳遞,FSEM將語義信息和定位信息引入中間層針對中等尺度目標檢測,之后將SIEM與LIEM進行級聯得到一組適合對大小尺度目標檢測的特征金字塔。
在此基礎上,將FSEM與級聯結構采用并行架構組裝為兩個分支進行,更好的對不同尺度目標進行學習訓練,在得到兩個分支的特征金字塔后,使用多尺度通道聚合模塊(MSCA)將兩組特征金字塔聚合,并且訓練了一組通道權重尋找同一尺度特征之間的依賴關系,加強對當前檢測任務貢獻程度大的特征的利用,同時抑制不重要的特征,讓網絡更注重感興趣的特征進行學習,最后通過實驗對比,可以看出本文算法相對于SSD、DSSD、FPN有更好的整體檢測效果。未來可以采用更深一些的基礎特征提取主干網加強對基礎特征的提取,獲取更好的特征,以提升檢測的效果。