許曉峰,陳姚節(jié),2,劉 恒
(1.武漢科技大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,湖北 武漢 430065;2.智能信息處理與實(shí)時(shí)工業(yè)系統(tǒng)湖北省重點(diǎn)實(shí)驗(yàn)室,湖北 武漢 430065)
國(guó)內(nèi)公園人工湖、河流、湖泊、水庫(kù)以及海洋水域面積巨大,難以對(duì)所有水域?qū)崿F(xiàn)全時(shí)全面的監(jiān)管檢測(cè),而且由于安全措施不到位、監(jiān)控存在盲區(qū)和死角等等原因,導(dǎo)致溺水死亡事故頻繁發(fā)生。據(jù)報(bào)道,全國(guó)每年有超過(guò)5.7萬(wàn)人死于溺水,而放到全球,有超過(guò)37萬(wàn)人因溺水而死。人員落水以后進(jìn)行救援的黃金時(shí)間只有5分鐘,而落水事件事發(fā)突然,依靠人力往往不能在第一時(shí)間發(fā)現(xiàn)落水人員,造成了大量落水人員的傷亡。為了避免悲劇的發(fā)生,有些場(chǎng)景中已實(shí)現(xiàn)了水域狀態(tài)的全天候監(jiān)控,但是仍然需要有人對(duì)監(jiān)控畫面進(jìn)行看守,這樣做不僅費(fèi)時(shí)費(fèi)力,而且充滿了不確定性,無(wú)法保證對(duì)落水人員的檢測(cè),故對(duì)落水人員的實(shí)時(shí)自動(dòng)監(jiān)測(cè)變得尤為重要。
近年來(lái),基于深度學(xué)習(xí)的目標(biāo)檢測(cè)[1]算法在檢測(cè)效果方面突飛猛進(jìn),同傳統(tǒng)方法相比檢測(cè)性能取得了質(zhì)的飛躍。目前主要分為兩種:一種是兩階段目標(biāo)檢測(cè)算法[2],如:R-CNN[3]、Fast R-CNN[4]、Faster R-CNN[5]、Mask R-CNN[6]、R-FCN[7]等,兩階段目標(biāo)檢測(cè)算法將整個(gè)檢測(cè)過(guò)程分為兩個(gè)階段,第一個(gè)階段是先生成候選目標(biāo)框,第二個(gè)階段是進(jìn)行分類和回歸,兩階段目標(biāo)檢測(cè)算法的精度相對(duì)較高,但速度較單階段檢測(cè)算法慢了很多。另一種是以YOLO系列[8-11]、SSD[12]為代表的直接回歸物體的類別概率和空間位置坐標(biāo)的單階段目標(biāo)檢測(cè)算法,單次檢測(cè)就能得到最終檢測(cè)結(jié)果,檢測(cè)速度較雙階段目標(biāo)檢測(cè)更快,很好地滿足了實(shí)時(shí)檢測(cè)的要求。但SSD會(huì)隨著圖片規(guī)格的增加使得運(yùn)行效率顯著下降,因此YOLO系列應(yīng)用更加廣泛。
YOLO v3是Joseph Redmon,Ali Farhadi[10]在YOLO v2算法的基礎(chǔ)上,用Darknet-53替換Darknet-19作為backbone,借鑒了Resnet[13]殘差結(jié)構(gòu)、金字塔特征圖[14]等方法提出的單階段目標(biāo)檢測(cè)算法。YOLO v3模型主要包括基礎(chǔ)網(wǎng)絡(luò)部分和檢測(cè)部分,基礎(chǔ)網(wǎng)絡(luò)部分是使用Darknet-53作為整個(gè)網(wǎng)絡(luò)的backbone部分來(lái)進(jìn)行特征提取,Darknet-53特征提取網(wǎng)絡(luò)沒有池化層和全連接層,特征圖的縮小是通過(guò)增加卷積核的步長(zhǎng)實(shí)現(xiàn)的;為了有效解決深層次網(wǎng)絡(luò)的梯度問(wèn)題,Darknet-53采用了殘差的思想,在網(wǎng)絡(luò)中加入了殘差模塊;檢測(cè)部分借鑒了特征金字塔的思想,通過(guò)三個(gè)分支來(lái)對(duì)不同尺度的目標(biāo)進(jìn)行檢測(cè)。
YOLO v3的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示,其采用尺寸為416×416×3 的圖像作為輸入,利用Darknet-53網(wǎng)絡(luò)提取圖像特征,得到3個(gè)尺度分別為52×52、26×26、13×13的特征圖,越小的特征圖代表下采樣的倍數(shù)高,而感受野也大,所以13×13的y1特征圖對(duì)應(yīng)檢測(cè)大物體,26×26的y2特征圖對(duì)應(yīng)檢測(cè)中物體,52×52的y3特征圖對(duì)應(yīng)檢測(cè)小物體。
YOLO v3把圖片劃分為13×13,26×26和52×52的網(wǎng)格,每個(gè)網(wǎng)格都會(huì)預(yù)測(cè)3個(gè)邊界框,所以總共有(52×52+26×26+13×13)×3=10 647個(gè)預(yù)測(cè)。每個(gè)邊界框輸出特征圖的通道數(shù)包括位置信息、置信度、類別預(yù)測(cè),所以輸出張量的維度為N×N×3×(4+1+M),1表示置信度,4表示目標(biāo)位置輸出,M表示類別數(shù)目。
使用k-means[15]聚類方法對(duì)數(shù)據(jù)集聚類,得到9個(gè)不同尺寸的框,作為先驗(yàn)框,接著就可以解碼檢測(cè)框。以圖2為例,虛線框表示先驗(yàn)框,其寬高分別為pw和ph,(cx,cy)為偏移量,(tx,ty,tw,th)為網(wǎng)絡(luò)輸出值,其中(tx,ty)表示該點(diǎn)所在框的左上角點(diǎn)到目標(biāo)中心點(diǎn)的距離大小,(tw,th)為直接預(yù)測(cè)的寬和高,實(shí)線框表示中間網(wǎng)格輸出的值經(jīng)過(guò)運(yùn)算后得到的最終預(yù)測(cè)框,其預(yù)測(cè)框位置信息為(bx,by,bw,bh),計(jì)算公式為:
圖1 YOLO v3網(wǎng)絡(luò)結(jié)構(gòu)
圖2 YOLO v3檢測(cè)原理框圖
bx=σ(tx)+cx
(1)
by=σ(ty)+cy
(2)
bw=pwetw
(3)
bh=pheth
(4)
其中,(bx,by)為最終預(yù)測(cè)框的中心點(diǎn)的橫縱坐標(biāo),(bw,bh)為最終預(yù)測(cè)框的寬高,σ為sigmod激活函數(shù),使tx和ty為輸出0-1之間的偏移量。
通過(guò)閾值[16]設(shè)定,過(guò)濾掉得分較低的預(yù)測(cè)框,對(duì)剩下的進(jìn)行非極大值抑制(non maximum suppression)[17]處理得到最終預(yù)測(cè)結(jié)果。
在目標(biāo)檢測(cè)任務(wù)中,合適的錨點(diǎn)框Anchor Box能夠提高檢測(cè)任務(wù)的精度和速度,原始YOLO v3采用k-means算法對(duì)coco數(shù)據(jù)集聚類得到錨點(diǎn)框的尺寸,該文通過(guò)對(duì)自有落水人員數(shù)據(jù)集利用k-means++聚類算法對(duì)Anchor重新聚類,獲得更符合落水者的Anchor框。
通道注意力機(jī)制是根據(jù)各個(gè)特征通道的重要性的不同分配不同的權(quán)重,然后讓網(wǎng)絡(luò)根據(jù)權(quán)重的不同,更加關(guān)注權(quán)重比較大的特征通道,這樣網(wǎng)絡(luò)就可以加強(qiáng)包含有用信息的特征并抑制無(wú)用特征,使得目標(biāo)更好地被檢測(cè)出來(lái)。
YOLO v3雖然通過(guò)特征融合輸出三個(gè)尺度的特征圖,提高了小目標(biāo)檢測(cè)能力,但是對(duì)于以小目標(biāo)檢測(cè)為主的目標(biāo)檢測(cè)任務(wù),YOLO v3的檢測(cè)精度仍然有待提升;RFB利用擁有不同尺寸卷積核的卷積層構(gòu)成多分支結(jié)構(gòu),再引入空洞卷積增加感受野,提高了小目標(biāo)檢測(cè)精度。
在YOLO v3中,為高效地預(yù)測(cè)不同尺度與寬高比的物體邊界框,采用錨點(diǎn)框Anchor機(jī)制,合適的Anchor值可以實(shí)現(xiàn)更快速、準(zhǔn)確的定位,同時(shí)減少損失值與計(jì)算量,提高檢測(cè)速度與精度。YOLO v3原始的Anchor值是在coco數(shù)據(jù)集利用k-means算法聚類而得,每個(gè)特征圖對(duì)應(yīng)的特征點(diǎn)采用3個(gè)不同比例(1∶2,1∶1,2∶1)的Anchor框,考慮到原YOLO v3有三個(gè)不同尺度的特征圖,故聚類9個(gè)不同尺度的Anchor框來(lái)預(yù)測(cè)大小不同的目標(biāo)。
該文沿用YOLO v3中的Anchor思想,提出的改進(jìn)YOLO v3通過(guò)三個(gè)不同尺度大小的特征圖來(lái)進(jìn)行預(yù)測(cè),按照每一個(gè)特征點(diǎn)需要聚類3個(gè)不同比例的Anchor框的原則,利用k-means++聚類算法對(duì)落水人員數(shù)據(jù)集聚類9個(gè)不同尺度的Anchor。原始的k-means聚類算法隨機(jī)選取k個(gè)數(shù)據(jù)點(diǎn)作為原始的聚類質(zhì)心,這種聚類方法對(duì)初值敏感,不利于尋找全局最優(yōu)解,因此該文采用k-means++算法對(duì)原算法進(jìn)行優(yōu)化,k-means++能顯著地改善分類結(jié)果的最終誤差。k-means++聚類算法與k-means聚類算法的不同之處在于,后者在初始選取質(zhì)心時(shí),是隨機(jī)選取的聚類中心,而前者不是,其遵循在聚類中心選取時(shí),讓各中心的間距盡量遠(yuǎn)的原則。k-means++聚類算法的步驟如下:
步驟一:隨機(jī)選取一個(gè)點(diǎn)作為第一個(gè)聚類中心;
步驟二:計(jì)算每一個(gè)點(diǎn)與當(dāng)前已有聚類中心的最短距離(即與最近一個(gè)聚類中心的距離),這個(gè)值越大,表示其被選取作為聚類中心的概率值越大,采用輪盤賭法依據(jù)概率大小進(jìn)行抽選,選出下一個(gè)聚類中心;
步驟三:重復(fù)步驟二,直到選出k個(gè)聚類中心;
步驟四:選出聚類中心后,繼續(xù)使用k-means 算法進(jìn)行聚類。
該文使用上述聚類方法,對(duì)自有落水人員數(shù)據(jù)集進(jìn)行聚類,得到的9個(gè)不同尺寸的Anchor Box框的寬高分別為:(7,15)、(10,23)、(12,34)、(13,19)、(15,27)、(18,36)、(20,26)、(29,47)、(54,88)。為了驗(yàn)證基于數(shù)據(jù)集的k-means++聚類算法能提高對(duì)落水人員的檢測(cè)效果,同時(shí)對(duì)原始YOLO v3與只改進(jìn)了基于落水人員數(shù)據(jù)集的聚類算法的YOLO v3的檢測(cè)結(jié)果進(jìn)行對(duì)比,如表1所示。可以看出,使用了基于落水人員數(shù)據(jù)集的k-means++聚類算法的YOLO v3對(duì)目標(biāo)的檢測(cè)效果有明顯的提升。
表1 只改進(jìn)聚類的YOLO v3與原始YOLO v3對(duì)比
因?yàn)槟繕?biāo)被遮擋、環(huán)境復(fù)雜或者天氣環(huán)境等因素,輸入的特征圖在神經(jīng)網(wǎng)絡(luò)中語(yǔ)義信息不豐富導(dǎo)致目標(biāo)不能被很好地識(shí)別檢測(cè)出來(lái)。所以在改進(jìn)YOLO v3中加入通道注意力機(jī)制模塊SE_Block(Squeeze-and-Excitation),其關(guān)注通道信息,可以自動(dòng)學(xué)習(xí)到不同通道特征的重要程度,然后分配相應(yīng)權(quán)重,有效解決各個(gè)通道的不同重要性所帶來(lái)的損失問(wèn)題,提高對(duì)于重要特征的表征能力。
SE_Block通過(guò)對(duì)各個(gè)特征通道的重要性的不同分配不同的權(quán)重,然后讓網(wǎng)絡(luò)根據(jù)權(quán)重的不同,更加關(guān)注權(quán)重比較大的特征通道,讓其占的比重更大,從而進(jìn)行參數(shù)的更新。首先對(duì)輸入的特征圖進(jìn)行全局平均池化,全局平均池化不同于平均池化和最大池化,通常用來(lái)聚集空間信息,它是對(duì)特征圖全局平均后輸出一個(gè)值,使其具有全局感受野,讓淺層網(wǎng)絡(luò)也可以利用全局信息,然后再連接兩個(gè)全連接層,進(jìn)行降維再升維操作,增加更多的非線性處理過(guò)程,擬合通道之間復(fù)雜的相關(guān)性。
在原始YOLO v3的網(wǎng)絡(luò)中含有很多的殘差連接,所以在殘差塊中加入SE_Block,其主要分為兩個(gè)部分:擠壓操作和激活操作。擠壓操作Fsq,就是將長(zhǎng)度H、寬度W、通道數(shù)C的H×W×C輸入特征圖轉(zhuǎn)換為1×1×C的輸出,具體操作如下式:
(5)
激活操作就是在得到擠壓操作的1×1×C的表示后,學(xué)習(xí)各通道的依賴程度,并根據(jù)依賴程度對(duì)不同的特征圖進(jìn)行調(diào)整,得到最后的輸出,公式如下:
s=Sigmoid(FC2×ReLU(FC1×Zc))
(6)
式中,F(xiàn)C1×Zc是一個(gè)全連接操作,進(jìn)行降維處理,再經(jīng)過(guò)一個(gè)ReLU進(jìn)行非線性操作,輸出維度不變,然后再進(jìn)行一個(gè)全連接操作進(jìn)行升維,最后使用一個(gè)sigmoid函數(shù)激活,得到輸出s,s是特征圖的權(quán)重。用對(duì)應(yīng)的權(quán)重來(lái)激活每一層通道,即用不同通道的值乘上對(duì)應(yīng)權(quán)重,從而提高重要特征的表征能力,尺度函數(shù)為:
(7)
相對(duì)之前的YOLO v3,由于引入了注意力機(jī)制,增加了兩個(gè)全連接層和一個(gè)全局平均池化以及特征加權(quán),大大增加了算法的計(jì)算量,在速度上會(huì)比原YOLO v3低。其算法流程如圖3所示。
圖3 SE模塊流程
為了驗(yàn)證改進(jìn)后加入SE_Block的有效性,同時(shí)對(duì)原始YOLO v3與只加入通道注意力機(jī)制模塊的改進(jìn)YOLO v3在落水人員數(shù)據(jù)集上進(jìn)行落水人員的目標(biāo)檢測(cè),結(jié)果表明,加入通道注意力機(jī)制模塊的YOLO v3在落水人員數(shù)據(jù)集上進(jìn)行檢測(cè)的AP和F1 score有明顯的提高,檢測(cè)對(duì)比結(jié)果如表2所示。
表2 原始YOLO v3與只加入SE_Block的YOLO v3的對(duì)比
在卷積神經(jīng)網(wǎng)絡(luò)中,淺層特征分辨率高,細(xì)節(jié)信息比較豐富,對(duì)檢測(cè)圖像小目標(biāo)有很大的幫助,但感受野小無(wú)法包含足夠的上下文信息。為了增大特征圖的感受野,在YOLO v3中引入RFB模塊。RFB是模仿了人類的視覺系統(tǒng),通過(guò)模擬RF的大小和偏心率之間的關(guān)系,來(lái)增強(qiáng)特征的可辨性和模型的魯棒性。RFB的結(jié)構(gòu)主要包括兩個(gè)部分:多分支結(jié)構(gòu)和空洞卷積層。
不同尺寸卷積核的卷積層構(gòu)成了多分支結(jié)構(gòu),卷積核分別為1×1、3×3和5×5,這些不同的卷積核模擬大小不同的群體感受野,然后分別在卷積層之后加入對(duì)應(yīng)間隔跨度的空洞卷積,間隔跨度分別為1、3、5,構(gòu)成了空洞卷積層,這些空洞卷積用來(lái)模擬群體感受野的大小和偏心率之間的關(guān)系。再將三個(gè)分支的輸出連接在一起,達(dá)到融合不同特征的目的,從而增大感受野,增加特征提取的能力。
該文在52×52×255的特征圖前的淺層特征后連接RFB-s模塊來(lái)加強(qiáng)網(wǎng)絡(luò)的特征提取功能,然后再與深層特征進(jìn)行融合,最后輸出52×52的特征圖。RFB-s的RFB不同之處在于:一是RFB使用5×5的卷積層,而RFB-s對(duì)應(yīng)的是使用3×3的卷積層;另一處是RFB使用的是3×3的卷積,而RFB-s對(duì)應(yīng)使用的是1×3和3×1卷積,RFB-s使用更多具有較小核的分支,減少了計(jì)算量,兩種感受野模塊的結(jié)構(gòu)如圖4所示。
(a)RFB結(jié)構(gòu)
為了驗(yàn)證改進(jìn)后,在小目標(biāo)檢測(cè)分支加入RFB-s模塊的有效性,同時(shí)對(duì)加入了RFB-s模塊的改進(jìn)YOLO v3與原始YOLO v3在落水人員數(shù)據(jù)集上進(jìn)行落水人員的目標(biāo)檢測(cè),結(jié)果對(duì)比如表3。結(jié)果表明,加入RFB-s模塊的YOLO v3在落水人員數(shù)據(jù)集上進(jìn)行目標(biāo)檢測(cè)時(shí),平均精度AP提升了2.27%,F(xiàn)1提高了2.56%。因此,加入RFB-s模塊可以提高檢測(cè)落水人員的檢測(cè)精度。
表3 只加入RFB-s模塊的YOLO v3與原始YOLO v3檢測(cè)結(jié)果對(duì)比
模型的訓(xùn)練與測(cè)試都在同一設(shè)備進(jìn)行,實(shí)驗(yàn)設(shè)備配置為:操作系統(tǒng)為Windows 10,CPU為Intel? i3-8100,GPU為NVIDIA GTX 1660 SUPER,內(nèi)存為16 GB,開發(fā)環(huán)境為Python 3.8、Pytorch 1.5、Cuda 10.1、Cudnn 7.6。
使用Adam優(yōu)化器對(duì)網(wǎng)絡(luò)進(jìn)行優(yōu)化,使用固定步長(zhǎng)衰減進(jìn)行學(xué)習(xí)率的調(diào)整,實(shí)驗(yàn)中的學(xué)習(xí)率設(shè)為0.001,step_size取為2,gamma取0.95,批處理大小設(shè)為16,衰減系數(shù)設(shè)為0.000 5,動(dòng)量設(shè)為0.9。
實(shí)驗(yàn)使用的數(shù)據(jù)集是一個(gè)包含1 014張落水人員的小規(guī)模圖像數(shù)據(jù)集,其中圖像包括單人落水以及多人落水情況。數(shù)據(jù)是在長(zhǎng)江邊以及湖邊拍攝所得,將不同場(chǎng)景下的拍攝所得視頻提取單幀圖像作為數(shù)據(jù)集,通過(guò)YOLO系列算法常用的數(shù)據(jù)集標(biāo)注工具LabelImg手工標(biāo)注圖像中目標(biāo)的矩形框坐標(biāo)以及標(biāo)簽值,并生成相對(duì)應(yīng)的xml配置文件。為保證訓(xùn)練的數(shù)據(jù)盡可能多以及測(cè)試集的普遍性,將數(shù)據(jù)集按9∶1的比例劃分為訓(xùn)練集與測(cè)試集。
采用的模型評(píng)估指標(biāo)主要包括:調(diào)和均值和平均精確度。平均精確度與調(diào)和均值是同時(shí)考慮精確率和召回率的量化指標(biāo),它們的數(shù)值越大,識(shí)別效果越好。
(1)平均精確度AP衡量的是學(xué)出來(lái)的模型在每個(gè)類別上的好壞。理想的檢測(cè)網(wǎng)絡(luò)的精確率和召回率應(yīng)當(dāng)都保持在較高的水平,但實(shí)際上隨著閾值變化兩個(gè)值并不都是正相關(guān)變化的,召回率與精確率呈現(xiàn)負(fù)相關(guān)變化,所以通常采取的方法是將精確率和召回率所形成的PR(Precision-Recall)所圍成的最大面積作為最優(yōu)解,而圍成的面積使用AP來(lái)衡量。AP的計(jì)算公式為:
(8)
其中精確率和召回率的計(jì)算公式如下:
(9)
(10)
(2)調(diào)和均值F1,能同時(shí)兼顧模型的精確率和召回率,取值在0~1之間,F(xiàn)1越大,模型效果越好。F1的計(jì)算公式為:
(11)
將改進(jìn)的YOLO v3算法在自由落水人員的數(shù)據(jù)集上進(jìn)行目標(biāo)檢測(cè)任務(wù)的訓(xùn)練與測(cè)試,得到該模型的評(píng)估指標(biāo),評(píng)估指標(biāo)結(jié)果如圖5所示。
(a)改進(jìn)YOLO v3的AP
同時(shí)對(duì)原始YOLO V3與改進(jìn)的YOLO v3算法均在自由落水人員數(shù)據(jù)集上進(jìn)行訓(xùn)練與測(cè)試,然后進(jìn)行對(duì)比,圖6為檢測(cè)效果對(duì)比情況。從效果圖來(lái)看,改進(jìn)的YOLO v3將全部目標(biāo)都檢測(cè)出來(lái),而原始YOLO v3有一個(gè)目標(biāo)沒有檢測(cè)出來(lái),并且存在誤檢的情況。
圖6 檢測(cè)效果對(duì)比
實(shí)驗(yàn)結(jié)果表明,改進(jìn)的YOLO v3算法在落水人員檢測(cè)任務(wù)中相較于原始YOLO v3,平均精確度提高了3.83%,F(xiàn)1提高了3.66%。從檢測(cè)結(jié)果來(lái)看,改進(jìn)的YOLO v3在檢測(cè)準(zhǔn)確率上有了較大的提升,對(duì)小目標(biāo)的漏檢率也有所下降,性能要強(qiáng)于原算法。改進(jìn)的YOLO v3與原始YOLO v3對(duì)比如表4所示。
表4 改進(jìn)YOLO v3與原始YOLO v3的對(duì)比
通過(guò)對(duì)YOLO v3算法進(jìn)行改進(jìn),使其更適合完成對(duì)落水人員的檢測(cè)任務(wù)。以原始YOLO v3為基礎(chǔ),通過(guò)k-means++算法聚類初始候選框的大小,提升候選框的精度,加入RFB模塊加強(qiáng)網(wǎng)絡(luò)的特征提取能力,將SE注意力模塊嵌入原始的網(wǎng)絡(luò)中,提高網(wǎng)絡(luò)對(duì)有用特征的敏感度。實(shí)驗(yàn)表明,文中算法提高了檢測(cè)的準(zhǔn)確率,檢測(cè)精度更高,具有一定的優(yōu)越性。