許曉峰,陳姚節(jié),2,劉 恒
(1.武漢科技大學 計算機科學與技術(shù)學院,湖北 武漢 430065;2.智能信息處理與實時工業(yè)系統(tǒng)湖北省重點實驗室,湖北 武漢 430065)
國內(nèi)公園人工湖、河流、湖泊、水庫以及海洋水域面積巨大,難以對所有水域?qū)崿F(xiàn)全時全面的監(jiān)管檢測,而且由于安全措施不到位、監(jiān)控存在盲區(qū)和死角等等原因,導致溺水死亡事故頻繁發(fā)生。據(jù)報道,全國每年有超過5.7萬人死于溺水,而放到全球,有超過37萬人因溺水而死。人員落水以后進行救援的黃金時間只有5分鐘,而落水事件事發(fā)突然,依靠人力往往不能在第一時間發(fā)現(xiàn)落水人員,造成了大量落水人員的傷亡。為了避免悲劇的發(fā)生,有些場景中已實現(xiàn)了水域狀態(tài)的全天候監(jiān)控,但是仍然需要有人對監(jiān)控畫面進行看守,這樣做不僅費時費力,而且充滿了不確定性,無法保證對落水人員的檢測,故對落水人員的實時自動監(jiān)測變得尤為重要。
近年來,基于深度學習的目標檢測[1]算法在檢測效果方面突飛猛進,同傳統(tǒng)方法相比檢測性能取得了質(zhì)的飛躍。目前主要分為兩種:一種是兩階段目標檢測算法[2],如:R-CNN[3]、Fast R-CNN[4]、Faster R-CNN[5]、Mask R-CNN[6]、R-FCN[7]等,兩階段目標檢測算法將整個檢測過程分為兩個階段,第一個階段是先生成候選目標框,第二個階段是進行分類和回歸,兩階段目標檢測算法的精度相對較高,但速度較單階段檢測算法慢了很多。另一種是以YOLO系列[8-11]、SSD[12]為代表的直接回歸物體的類別概率和空間位置坐標的單階段目標檢測算法,單次檢測就能得到最終檢測結(jié)果,檢測速度較雙階段目標檢測更快,很好地滿足了實時檢測的要求。但SSD會隨著圖片規(guī)格的增加使得運行效率顯著下降,因此YOLO系列應用更加廣泛。
YOLO v3是Joseph Redmon,Ali Farhadi[10]在YOLO v2算法的基礎上,用Darknet-53替換Darknet-19作為backbone,借鑒了Resnet[13]殘差結(jié)構(gòu)、金字塔特征圖[14]等方法提出的單階段目標檢測算法。YOLO v3模型主要包括基礎網(wǎng)絡部分和檢測部分,基礎網(wǎng)絡部分是使用Darknet-53作為整個網(wǎng)絡的backbone部分來進行特征提取,Darknet-53特征提取網(wǎng)絡沒有池化層和全連接層,特征圖的縮小是通過增加卷積核的步長實現(xiàn)的;為了有效解決深層次網(wǎng)絡的梯度問題,Darknet-53采用了殘差的思想,在網(wǎng)絡中加入了殘差模塊;檢測部分借鑒了特征金字塔的思想,通過三個分支來對不同尺度的目標進行檢測。
YOLO v3的網(wǎng)絡結(jié)構(gòu)如圖1所示,其采用尺寸為416×416×3 的圖像作為輸入,利用Darknet-53網(wǎng)絡提取圖像特征,得到3個尺度分別為52×52、26×26、13×13的特征圖,越小的特征圖代表下采樣的倍數(shù)高,而感受野也大,所以13×13的y1特征圖對應檢測大物體,26×26的y2特征圖對應檢測中物體,52×52的y3特征圖對應檢測小物體。
YOLO v3把圖片劃分為13×13,26×26和52×52的網(wǎng)格,每個網(wǎng)格都會預測3個邊界框,所以總共有(52×52+26×26+13×13)×3=10 647個預測。每個邊界框輸出特征圖的通道數(shù)包括位置信息、置信度、類別預測,所以輸出張量的維度為N×N×3×(4+1+M),1表示置信度,4表示目標位置輸出,M表示類別數(shù)目。
使用k-means[15]聚類方法對數(shù)據(jù)集聚類,得到9個不同尺寸的框,作為先驗框,接著就可以解碼檢測框。以圖2為例,虛線框表示先驗框,其寬高分別為pw和ph,(cx,cy)為偏移量,(tx,ty,tw,th)為網(wǎng)絡輸出值,其中(tx,ty)表示該點所在框的左上角點到目標中心點的距離大小,(tw,th)為直接預測的寬和高,實線框表示中間網(wǎng)格輸出的值經(jīng)過運算后得到的最終預測框,其預測框位置信息為(bx,by,bw,bh),計算公式為:

圖1 YOLO v3網(wǎng)絡結(jié)構(gòu)

圖2 YOLO v3檢測原理框圖
bx=σ(tx)+cx
(1)
by=σ(ty)+cy
(2)
bw=pwetw
(3)
bh=pheth
(4)
其中,(bx,by)為最終預測框的中心點的橫縱坐標,(bw,bh)為最終預測框的寬高,σ為sigmod激活函數(shù),使tx和ty為輸出0-1之間的偏移量。
通過閾值[16]設定,過濾掉得分較低的預測框,對剩下的進行非極大值抑制(non maximum suppression)[17]處理得到最終預測結(jié)果。
在目標檢測任務中,合適的錨點框Anchor Box能夠提高檢測任務的精度和速度,原始YOLO v3采用k-means算法對coco數(shù)據(jù)集聚類得到錨點框的尺寸,該文通過對自有落水人員數(shù)據(jù)集利用k-means++聚類算法對Anchor重新聚類,獲得更符合落水者的Anchor框。
通道注意力機制是根據(jù)各個特征通道的重要性的不同分配不同的權(quán)重,然后讓網(wǎng)絡根據(jù)權(quán)重的不同,更加關注權(quán)重比較大的特征通道,這樣網(wǎng)絡就可以加強包含有用信息的特征并抑制無用特征,使得目標更好地被檢測出來。
YOLO v3雖然通過特征融合輸出三個尺度的特征圖,提高了小目標檢測能力,但是對于以小目標檢測為主的目標檢測任務,YOLO v3的檢測精度仍然有待提升;RFB利用擁有不同尺寸卷積核的卷積層構(gòu)成多分支結(jié)構(gòu),再引入空洞卷積增加感受野,提高了小目標檢測精度。
在YOLO v3中,為高效地預測不同尺度與寬高比的物體邊界框,采用錨點框Anchor機制,合適的Anchor值可以實現(xiàn)更快速、準確的定位,同時減少損失值與計算量,提高檢測速度與精度。YOLO v3原始的Anchor值是在coco數(shù)據(jù)集利用k-means算法聚類而得,每個特征圖對應的特征點采用3個不同比例(1∶2,1∶1,2∶1)的Anchor框,考慮到原YOLO v3有三個不同尺度的特征圖,故聚類9個不同尺度的Anchor框來預測大小不同的目標。
該文沿用YOLO v3中的Anchor思想,提出的改進YOLO v3通過三個不同尺度大小的特征圖來進行預測,按照每一個特征點需要聚類3個不同比例的Anchor框的原則,利用k-means++聚類算法對落水人員數(shù)據(jù)集聚類9個不同尺度的Anchor。原始的k-means聚類算法隨機選取k個數(shù)據(jù)點作為原始的聚類質(zhì)心,這種聚類方法對初值敏感,不利于尋找全局最優(yōu)解,因此該文采用k-means++算法對原算法進行優(yōu)化,k-means++能顯著地改善分類結(jié)果的最終誤差。k-means++聚類算法與k-means聚類算法的不同之處在于,后者在初始選取質(zhì)心時,是隨機選取的聚類中心,而前者不是,其遵循在聚類中心選取時,讓各中心的間距盡量遠的原則。k-means++聚類算法的步驟如下:
步驟一:隨機選取一個點作為第一個聚類中心;
步驟二:計算每一個點與當前已有聚類中心的最短距離(即與最近一個聚類中心的距離),這個值越大,表示其被選取作為聚類中心的概率值越大,采用輪盤賭法依據(jù)概率大小進行抽選,選出下一個聚類中心;
步驟三:重復步驟二,直到選出k個聚類中心;
步驟四:選出聚類中心后,繼續(xù)使用k-means 算法進行聚類。
該文使用上述聚類方法,對自有落水人員數(shù)據(jù)集進行聚類,得到的9個不同尺寸的Anchor Box框的寬高分別為:(7,15)、(10,23)、(12,34)、(13,19)、(15,27)、(18,36)、(20,26)、(29,47)、(54,88)。為了驗證基于數(shù)據(jù)集的k-means++聚類算法能提高對落水人員的檢測效果,同時對原始YOLO v3與只改進了基于落水人員數(shù)據(jù)集的聚類算法的YOLO v3的檢測結(jié)果進行對比,如表1所示。可以看出,使用了基于落水人員數(shù)據(jù)集的k-means++聚類算法的YOLO v3對目標的檢測效果有明顯的提升。

表1 只改進聚類的YOLO v3與原始YOLO v3對比
因為目標被遮擋、環(huán)境復雜或者天氣環(huán)境等因素,輸入的特征圖在神經(jīng)網(wǎng)絡中語義信息不豐富導致目標不能被很好地識別檢測出來。所以在改進YOLO v3中加入通道注意力機制模塊SE_Block(Squeeze-and-Excitation),其關注通道信息,可以自動學習到不同通道特征的重要程度,然后分配相應權(quán)重,有效解決各個通道的不同重要性所帶來的損失問題,提高對于重要特征的表征能力。
SE_Block通過對各個特征通道的重要性的不同分配不同的權(quán)重,然后讓網(wǎng)絡根據(jù)權(quán)重的不同,更加關注權(quán)重比較大的特征通道,讓其占的比重更大,從而進行參數(shù)的更新。首先對輸入的特征圖進行全局平均池化,全局平均池化不同于平均池化和最大池化,通常用來聚集空間信息,它是對特征圖全局平均后輸出一個值,使其具有全局感受野,讓淺層網(wǎng)絡也可以利用全局信息,然后再連接兩個全連接層,進行降維再升維操作,增加更多的非線性處理過程,擬合通道之間復雜的相關性。
在原始YOLO v3的網(wǎng)絡中含有很多的殘差連接,所以在殘差塊中加入SE_Block,其主要分為兩個部分:擠壓操作和激活操作。擠壓操作Fsq,就是將長度H、寬度W、通道數(shù)C的H×W×C輸入特征圖轉(zhuǎn)換為1×1×C的輸出,具體操作如下式:
(5)
激活操作就是在得到擠壓操作的1×1×C的表示后,學習各通道的依賴程度,并根據(jù)依賴程度對不同的特征圖進行調(diào)整,得到最后的輸出,公式如下:
s=Sigmoid(FC2×ReLU(FC1×Zc))
(6)
式中,F(xiàn)C1×Zc是一個全連接操作,進行降維處理,再經(jīng)過一個ReLU進行非線性操作,輸出維度不變,然后再進行一個全連接操作進行升維,最后使用一個sigmoid函數(shù)激活,得到輸出s,s是特征圖的權(quán)重。用對應的權(quán)重來激活每一層通道,即用不同通道的值乘上對應權(quán)重,從而提高重要特征的表征能力,尺度函數(shù)為:
(7)
相對之前的YOLO v3,由于引入了注意力機制,增加了兩個全連接層和一個全局平均池化以及特征加權(quán),大大增加了算法的計算量,在速度上會比原YOLO v3低。其算法流程如圖3所示。

圖3 SE模塊流程
為了驗證改進后加入SE_Block的有效性,同時對原始YOLO v3與只加入通道注意力機制模塊的改進YOLO v3在落水人員數(shù)據(jù)集上進行落水人員的目標檢測,結(jié)果表明,加入通道注意力機制模塊的YOLO v3在落水人員數(shù)據(jù)集上進行檢測的AP和F1 score有明顯的提高,檢測對比結(jié)果如表2所示。

表2 原始YOLO v3與只加入SE_Block的YOLO v3的對比
在卷積神經(jīng)網(wǎng)絡中,淺層特征分辨率高,細節(jié)信息比較豐富,對檢測圖像小目標有很大的幫助,但感受野小無法包含足夠的上下文信息。為了增大特征圖的感受野,在YOLO v3中引入RFB模塊。RFB是模仿了人類的視覺系統(tǒng),通過模擬RF的大小和偏心率之間的關系,來增強特征的可辨性和模型的魯棒性。RFB的結(jié)構(gòu)主要包括兩個部分:多分支結(jié)構(gòu)和空洞卷積層。
不同尺寸卷積核的卷積層構(gòu)成了多分支結(jié)構(gòu),卷積核分別為1×1、3×3和5×5,這些不同的卷積核模擬大小不同的群體感受野,然后分別在卷積層之后加入對應間隔跨度的空洞卷積,間隔跨度分別為1、3、5,構(gòu)成了空洞卷積層,這些空洞卷積用來模擬群體感受野的大小和偏心率之間的關系。再將三個分支的輸出連接在一起,達到融合不同特征的目的,從而增大感受野,增加特征提取的能力。
該文在52×52×255的特征圖前的淺層特征后連接RFB-s模塊來加強網(wǎng)絡的特征提取功能,然后再與深層特征進行融合,最后輸出52×52的特征圖。RFB-s的RFB不同之處在于:一是RFB使用5×5的卷積層,而RFB-s對應的是使用3×3的卷積層;另一處是RFB使用的是3×3的卷積,而RFB-s對應使用的是1×3和3×1卷積,RFB-s使用更多具有較小核的分支,減少了計算量,兩種感受野模塊的結(jié)構(gòu)如圖4所示。

(a)RFB結(jié)構(gòu)
為了驗證改進后,在小目標檢測分支加入RFB-s模塊的有效性,同時對加入了RFB-s模塊的改進YOLO v3與原始YOLO v3在落水人員數(shù)據(jù)集上進行落水人員的目標檢測,結(jié)果對比如表3。結(jié)果表明,加入RFB-s模塊的YOLO v3在落水人員數(shù)據(jù)集上進行目標檢測時,平均精度AP提升了2.27%,F(xiàn)1提高了2.56%。因此,加入RFB-s模塊可以提高檢測落水人員的檢測精度。

表3 只加入RFB-s模塊的YOLO v3與原始YOLO v3檢測結(jié)果對比
模型的訓練與測試都在同一設備進行,實驗設備配置為:操作系統(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)化器對網(wǎng)絡進行優(yōu)化,使用固定步長衰減進行學習率的調(diào)整,實驗中的學習率設為0.001,step_size取為2,gamma取0.95,批處理大小設為16,衰減系數(shù)設為0.000 5,動量設為0.9。
實驗使用的數(shù)據(jù)集是一個包含1 014張落水人員的小規(guī)模圖像數(shù)據(jù)集,其中圖像包括單人落水以及多人落水情況。數(shù)據(jù)是在長江邊以及湖邊拍攝所得,將不同場景下的拍攝所得視頻提取單幀圖像作為數(shù)據(jù)集,通過YOLO系列算法常用的數(shù)據(jù)集標注工具LabelImg手工標注圖像中目標的矩形框坐標以及標簽值,并生成相對應的xml配置文件。為保證訓練的數(shù)據(jù)盡可能多以及測試集的普遍性,將數(shù)據(jù)集按9∶1的比例劃分為訓練集與測試集。
采用的模型評估指標主要包括:調(diào)和均值和平均精確度。平均精確度與調(diào)和均值是同時考慮精確率和召回率的量化指標,它們的數(shù)值越大,識別效果越好。
(1)平均精確度AP衡量的是學出來的模型在每個類別上的好壞。理想的檢測網(wǎng)絡的精確率和召回率應當都保持在較高的水平,但實際上隨著閾值變化兩個值并不都是正相關變化的,召回率與精確率呈現(xiàn)負相關變化,所以通常采取的方法是將精確率和召回率所形成的PR(Precision-Recall)所圍成的最大面積作為最優(yōu)解,而圍成的面積使用AP來衡量。AP的計算公式為:

(8)
其中精確率和召回率的計算公式如下:
(9)
(10)
(2)調(diào)和均值F1,能同時兼顧模型的精確率和召回率,取值在0~1之間,F(xiàn)1越大,模型效果越好。F1的計算公式為:
(11)
將改進的YOLO v3算法在自由落水人員的數(shù)據(jù)集上進行目標檢測任務的訓練與測試,得到該模型的評估指標,評估指標結(jié)果如圖5所示。

(a)改進YOLO v3的AP
同時對原始YOLO V3與改進的YOLO v3算法均在自由落水人員數(shù)據(jù)集上進行訓練與測試,然后進行對比,圖6為檢測效果對比情況。從效果圖來看,改進的YOLO v3將全部目標都檢測出來,而原始YOLO v3有一個目標沒有檢測出來,并且存在誤檢的情況。

圖6 檢測效果對比
實驗結(jié)果表明,改進的YOLO v3算法在落水人員檢測任務中相較于原始YOLO v3,平均精確度提高了3.83%,F(xiàn)1提高了3.66%。從檢測結(jié)果來看,改進的YOLO v3在檢測準確率上有了較大的提升,對小目標的漏檢率也有所下降,性能要強于原算法。改進的YOLO v3與原始YOLO v3對比如表4所示。

表4 改進YOLO v3與原始YOLO v3的對比
通過對YOLO v3算法進行改進,使其更適合完成對落水人員的檢測任務。以原始YOLO v3為基礎,通過k-means++算法聚類初始候選框的大小,提升候選框的精度,加入RFB模塊加強網(wǎng)絡的特征提取能力,將SE注意力模塊嵌入原始的網(wǎng)絡中,提高網(wǎng)絡對有用特征的敏感度。實驗表明,文中算法提高了檢測的準確率,檢測精度更高,具有一定的優(yōu)越性。