曾 成,蔣 瑜,張尹人
(1.成都信息工程大學 軟件工程學院,四川 成都 610000;2.武漢科技大學 計算機科學與技術學院,湖北 武漢 430081)
M_YOLOv3是在YOLOv3[1]算法上進行改進,用于快速檢測市民口罩佩戴情況的一種目標檢測算法。在目標檢測算法的發展中,過去以級聯分類器Cascade算法最為常見,近年來深度學習發展迅速,在目標檢測領域也有了許多突破。目前,基于深度卷積神經網絡的目標檢測算法主要有兩種,一種是兩階段目標檢測算法,例如:Fast R-CNN[2]、Faster RCNN[3]、Mask Rcnn[4]等,此種算法精度高,但是時效性較差,不適用于行人流量較大時的檢測。另一種是單階段目標檢測算法,例如:SSD[5]、YOLO[6]、YOLOv2[7],此類方法檢測速度快,但識別物體的精準度偏低。目前來看YOLOv3較好地平衡了檢測精度與時效性,將不同尺度的特征圖進行融合,使用邏輯回歸代替全連接softmax的方法來分類,最后進行邊框回歸,預測出目標物體的位置和大小。
YOLOv3算法的缺點是對小目標物體檢測效果不夠完美,而口罩正好屬于小目標物體范疇內。對此,改進算法M_YOLOv3采用了增添一個預測通道的方法來解決此類問題。具體方法如下:首先在特征提取網絡Darknet_D的淺層特征圖中進行分支處理,隨后進行Batch_normalization,接著和深層網絡提取的特征相融合,重構類特征金字塔,在其底部額外增添一層結構,在金字塔底部使用最大的一組先驗框作為目標物體預測框進行回歸計算[8]。
在卷積神經網絡的理論中,特征圖越大,神經網絡感受野越小,對特征的敏感度越高[9]。因此增添淺層網絡特征圖作為額外預測通道這一做法,能夠更好捕捉小目標物體,例如口罩。實驗選取的數據集來自網絡,包括了4000余張圖片以及上萬個口罩目標。在基于上述數據集的實驗中,改進后的M_YOLOv3的mAP值比原YOLOv3算法提高了7.2。
目前基于深度學習的目標檢測算法中,大多數主流算法都可分為主干網絡、尺寸變換和檢測器3個部分。主干網絡負責提取圖片數據的特征,尺寸變化則對提取到的特征進行融合傳遞給檢測器,檢測器對處理后的數據進行計算,預測出目標物體的類別及其位置等信息,YOLOv3算法也恰好由這3部分構成。
目標檢測算法首先會選用一個特征提取網絡來處理圖片信息。YOLOv3在基于往期的YOLO系列特征提取網絡結構基礎上,額外采用了類似殘差網絡Resblock結構,多次使用了步長為3×3、1×1卷積層,以及部分shortcut通道,構建了如圖1所示的Darknet-53網絡。這個網絡主要是一些卷積、池化、殘差互相的堆積復用,其結構共有53個卷積層,如圖1所示。

圖1 YOLOv3使用的Darknet-53網絡
YOLOv3使用3個尺度進行預測。這里的多尺度預測是一種類似FPN特征金字塔[10]結構。以coco數據集為例,YOLOv3采用了以下3個尺寸進行預測。
(1)小尺度:(13*13的feature map)
特征圖尺寸最小,其感受野最大。故使用最大的anchors(116*90),(156*198),(373*326),適合檢測較大尺寸目標。
(2)中尺度:(26*26的feature map)
特征圖尺寸適中,其感受野適中。故使用中間尺寸的anchors(30*61),(62*45),(59*119),適合檢測中等尺寸目標。
(3)大尺度:(52*52的feature map)
特征圖尺寸最大,其感受野最小。故使用最小的anchors(10*13),(16*30),(33*23),適合檢測較小尺寸目標。
這3個特征圖的尺寸是基于輸入圖片為416*416時,特征提取網絡每一個卷積層都會下采樣,之后的特征圖尺寸減半。YOLOv3所選取的3個尺度分別是3、4、5次殘差結構卷積后的特征圖,故其為原尺寸的1/8、1/16和1/32。
多尺度預測的核心意義在于,讓訓練網絡同時學習不同卷積層提取后的特征信息,把不同尺度且相鄰的特征圖兩兩疊加進行融合,其原理類似于殘差網絡結構中的恒等映射。因此,網絡模型能夠學習到從不同尺度,去檢測不同尺寸的目標物體,極大提高了算法的魯棒性和泛化能力。
1.3.1 anchors
YOLOv3通過訓練集的標簽數據,把xml中記錄手工標記邊框的width、height進行9個簇的K-Means聚類。其格式是(width,height),如(116*90)。數字前后代表,由先驗邊框聚類得出的寬度(width)和高度(height)。
1.3.2 預測邊框回歸計算
訓練網絡實際上學習的指標是tx、ty、tw、th這4個偏移值,再進行偏移值到真實值的編碼轉換,進而繪制出預測邊框。使用偏移值進行回歸計算這一做法的創新性在于,這種編碼格式對于輸出處理過程(通過目標置信度進行激活函數鏈接、改變對坐標中心的網格偏移量、應用錨點等)非常方便,對于網絡訓練結束后的微調過程,也有很大幫助。其中,Cx,Cy是中心點所在確定方格的相對坐標值單位,如示意圖邊框的中心點坐標是(1,1);而pw、ph代表預測框的寬高,bx、by、bw、bh則分別代表真實框的中心點與當前格子中心的相對橫、縱偏移值,以及真實框的寬、高;σ則代表某激活函數,如原算法選擇的sigmoid;真實框的計算公式與網絡學習的tx、ty、tw、th偏移值有關,如圖2所示。

圖2 YOLOv3邊框回歸
Darknet53作為YOLOv3的特征提取網絡,在原算法中把圖片信息進行特征提取后傳遞給檢測器進行邊框回歸運算,且經原作者Redmon J實驗證明,Darknet53在性能和效率上較早期Darknet系列的網絡都有顯著提升[1]。由于M_YOLOv3會增添一個預測通道,若在淺層網絡直接添加此通道進行預測,因卷積層較少,此時的特征圖并無有效的語義信息,在此基礎上進行預測幾乎沒有任何參考價值。故M_YOLOv3提出了Darknet_D網絡,它是于Darknet53的基礎上,在其尾部增添了一個殘差結構的特征提取網絡。改進后的類特征金字塔使用殘差結構3、4、5、6處理后的特征圖來進行多尺度預測,如圖3所示。

圖3 M_YOLOv3的特征提取網絡
YOLOv3算法原使用的是3*3結構的類特征金字塔結構,對應9個尺寸的邊框。原理是通過Darknet53的3層Res_body結構(其全稱為Resblock_body)類似殘差網絡的相加原理把各個特征圖進行疊加,并且因此得出3個尺寸的預測輸出Y。改進算法M_YOLOv3算法將其改造為4*4 的類特征金子塔結構,不僅層次更加分明,對不同尺寸更加敏感,且在每一個類特征金字塔輸出層額外增加一個預測候選邊框供其使用,則輸出的預測值Y會更加準確。
此外,在殘差結構Resblock_body中,M_YOLOv3保留了YOLOv3的DBL結構但對其進行參數修改,這種集卷積、歸一化、激活函數于一體的網絡模塊,能夠很好保留圖像信息并進行特征提取。
經過特征金字塔處理后的數據,模型把它打包成4個Y值,每一個Y值由4個’anchor結構’組成,每一個’anchor結構’又包含此預測值的中心坐標x、y,偏移值和預測邊框的寬高w、h,及其預測類別classes和置信度score,如圖4所示。

圖4 改進后的類似特征金字塔結構
原YOLOv3算法一共有9個先驗邊框,并且用這9個不同大小的邊框分成3組,對不同尺度的3個特征圖進行預測。
本次實驗數據的目標物體尺寸差別較大,某些口罩的像素小于64*64px,某些口罩的像素大于512*512px。這些過大的尺寸差別導致原YOLOv3算法在口罩數據集上表現欠佳。改進算法M_YOLOv3使用了16個預測邊框作為候選框。其中每4個候選框對應一個特征圖,每個特征圖使用4個候選邊框進行預測。故增加先驗邊框數量這一做法,能更好適應數據,提高算法識別精度,并增強其泛化能力。
(1)
IoU(intersection over union)的中文名稱是“交并比”,即為預測邊框和真實邊框的交集,與兩個框的并集之比,在諸多基于深度學習的目標檢測算法中,IoU都是一項重要的區域計算指標,如式(1)所示,其中B和Bgt分別代表預測框和真實框的面積。
YOLOv3使用1和IoU的差值進行梯度回歸,使用該損失函數能夠簡單有效地收斂訓練網絡損失值,如式(2)所示。但此損失函數在特定情況下無法正常使用,例如真實邊框和預測邊框出現無交集的情況,無論邊框遠近,此時LIoU都恒等于1,那么預測邊框和真實邊框的遠近就沒有意義。在這種情況下算法無法判定兩個邊框的好壞以及損失值收斂的方向,如圖5所示

圖5 邊框無交集情況
(2)
針對這個問題,Rezatofighi H提出了GIoU[11]理念,在原來的損失函數加上了懲罰項,出現邊框無交集情況時,兩個邊框距離越遠損失值越大,如式(3)所示
(3)
式中:C是兩個邊框的最小外接矩形,在此情況下,出現邊框之間無交集情況時,也能判斷距離的遠近,并因此找到下降梯度。
GIoU也無法適用于所有情況,若兩個邊框存在包含關系,如一大一小兩邊框A和B,小邊框A面積和B面積的并集等于A的面積,即BA∪BB=BA。 則在任意包含情況下Loss值始終相等,這就和上述LIoU出現的問題相似,算法無法找到損失值下降方向,如圖6所示。

圖6 邊框存在包含關系
DIoU是ZhengZhaohui等[12]在GIoU的基礎上進行了改進從而推論出的另一種交并比損失函數
(4)
式中:d表示兩個邊框中心點的歐氏距離。c是最小外接矩形的對角線距離。它的計算方式和GIoU類似,也是在原IoU損失函數的基礎上加上了懲罰項。不同的是DIoU的懲罰項更為合理,能夠解決邊框出現包含情況時難以找到回歸梯度的問題,如圖7所示。

圖7 DIoU邊框
DIoU同樣也能提供預測邊框的移動方向。但若出現兩框包含的情況,GIoU無法適應,而DIoU不僅能找到預測框移動的方向,并且損失函數收斂十分迅速。
在上述提到的IoU損失函數,其作用都是輔助最終Loss收斂,更合理的IoU損失函數能夠使算法更好地擬合數據。
在M_YOLOv3算法中使用DIoU來替換原有的LIoU作為損失函數,在此基礎上進行預測框和真實框的交并比計算,經實驗驗證有更好的檢測效果。
在YOLOv3算法中,訓練網絡的損失函數實際上是由中心點損失、寬高損失、分類損失和置信度損失,這個損失值相加得出,如式(5)所示
Loss=Lxy+Lwh+Lc+Ls
(5)
2.4節提到的DIoU損失函數會改進Lxy和Lwh的計算,使這兩個損失值的計算更加合理。
由于YOLOv3是多尺度檢測,在損失值收斂時會把每個邊框都計算一次。那么寬高較大的邊框Lxy和Lwh的值會偏高,對總體的Loss值產生了錯誤的影響。
為了解決這個問題,原作者提出了比例系數box_loss_scale這一指標,它是由數字2和偏移值w和h的乘積做差值計算得出,其中w和h是0到1之間的ground_truth寬高偏移值,如式(6)所示。在Lxy和Lwh計算的最后一步都會進行比例系數放縮,增加小尺寸邊框的影響權重,進而減小因先驗框尺寸不同而導致的無意義影響
box_loss_scale=2-w*h
(6)
因本實驗小尺寸目標偏多,在M_YOLOv3算法中比例系數m_box_loss_scale提高為原系數的1.4倍,如式(7)所示
m_box_loss_scale=(2-w*h)*1.4
(7)
如式(5)所示,總Loss值由4個獨立的Loss相加而得。因M_YOLOv3使用了DIoU且增大了比例系數,在式(5) 中等號右邊4個相加項除Lc外都進行了加權計算。為平衡4個損失值的影響權重,M_YOLOv3在最終Loss計算時,把分類損失值Lc進行了加權計算,如式(8)所示
Loss=0.95*(Lxy+Lwh+Ls)+1.15*Lc
(8)
3.1.1 數據集介紹
本次實驗選用公開口罩數據集1,該數據集來自網絡,由labelimg軟件標注。按照300 px為界限把輸入圖片分為,小尺寸、中尺寸、大尺寸、超大尺寸(長寬任意屬性大于900 px),分別有658張、1557張、566張、134張,未注明大小有1150張,共計4065張圖片。
本數據集與VOC2007數據集格式一致,每一條數據都采用圖片與其相對應的xml相結合。每一張圖片對應一個xml文件,記錄圖片上目標物體的各種屬性,如目標物體在圖片的中心點、標記框的寬高、目標物體的類別等信息。本次數據集中只有兩個類,”face_mask”和”face”。
在上述的目標物體的屬性中,目標物體標記框的長和寬顯得尤為重要,它們可以表示目標物體的尺寸。因YOLOv3原版算法的實驗是在VOC2007數據集上進行的,而本次實驗的數據是檢測人臉和口罩,與VOC2007數據集相比則目標尺寸普遍偏小。故在此把本次數據集和VOC2007數據集的目標物尺寸作比較,按照單邊64、128、256、512為界限進行尺寸大小歸類,見表1。

表1 目標尺寸大小分布
由此可見,本次數據集的分布更加廣泛和細致,且小目標尺寸偏多。改進算法提出的4層金字塔結構,并將anchors 數目從9增加到16的做法,在理論上支持M_YOLOv3 能得出更好的識別效果。
3.1.2 數據增強
在深度學習理論中,訓練數據越充足,訓練模型的效果越好。由于本次實驗數據僅4000余張圖片并不充足,使用數據增強手段來模擬更多數據樣本就具有很強的必要性。不但能使算法模型有更多的學習樣本,同時也因數據增強增加了噪聲,減少模型過擬合的現象。
在本次實驗中,使用了縮放圖片、平移變換、翻轉、顏色抖動(RGB->HSV->RGB)以及boxes的重定位等數據增強手段,確保本次實驗數據充足,增強模型的泛化能力,提高算法魯棒性。
3.2.1 環境
實驗在Windows10的操作系統下完成,計算機內存為16 G,CPU為AMD Ryzen 52600,GPU 為RTX 2060S,顯存為8 GB;python 版本為3.5,使用了Keras2.1.5、Tensorflow1.4.0、matplotlib以及cv2等三方庫的部分接口進行編碼和畫圖,并通過CUDA8.0進行網絡訓練的加速。
3.2.2 訓練參數及訓練流程
為得到合適的先驗框大小,最常用的手段就是對標記數據進行聚類。在諸多聚類方法中,在事先設定好簇的個數條件下,K-Means無疑成為了首選方案。
K-Means算法思路非常直觀,初始人為設定常數K,K代表算法最終劃分出來的類別數量值。算法會隨機選定初始點為質心,并通過計算每一個樣本與質心之間的相似度(一般使用歐氏距離),將樣本點分類到最相似的一個簇中,接著,重新計算每個簇的質心(即為簇心),重復這樣的過程,直到簇心不再改變,最終就確定了每個樣本所屬的簇以及簇心。
M_YOLOv3使用了簇數量為16的K-Means算法進行聚類。得到的16組anchors后又進行了類似歸一化的處理,最終得出anchors尺寸如下: (23,23),(35,34),(44,44),(53,54),(65,63),(76,75),(89,91),(108,105),(121,123),(142,142),(164,175),(167,158),(190,190),(215,212),(253,254),(372,362)。 括號中的兩個值(width,hight)分別代表anchor的寬和高。
考慮到本次實驗的硬件條件,輸入圖片尺寸統一resize為352*352,初始學習率設置為0.001,在回調過程中使用監視val_loss變化的方法來減小學習率,其中的參數設置為patience=6,factor=0.4。總訓練批次epoch=800,batch_size=10,訓練網絡Loss值的收斂情況如圖8所示。

圖8 Loss收斂
3.3.1 對于小目標的識別效果
在對輸入圖片進行檢測的時候,一張圖片往往包括很多個目標,就容易發生漏檢的情況,尤其是小尺寸目標物的漏檢情況更為常見,如圖9所示(文本框較長的矩形框代表“口罩”,文本框較短的矩形框代表“人臉”)。
圖9中YOLOv3算法和Tiny_YOLOv3算法發生了漏檢情況,而M_YOLOv3憑借多種改進措施,對小目標物更為敏感,不容易發生漏檢情況。實驗結果表明,改進后的算法,一定程度上改善了對小目標物體識別困難的問題,如圖9所示。

圖9 3種算法檢測效果對比
3.3.2 困難條件下的識別效果
在實驗中,3種檢測算法對于多數圖片的檢測效果比較良好,錯誤主要發生在混淆和遮擋的數據上。如圖10中,第一排圖片的口罩和人臉顏色非常接近,只有M_YOLOv3算法判定正確(文本框較長的矩形框代表“口罩”,文本框較短的矩形框代表“人臉”);第二排圖片則是紙折扇遮擋面目,其形狀顏色大小都與口罩十分類似,所有算法的識別結果均錯誤。

圖10 部分遮擋和混淆圖片識別效果
3.3.3 mAP評價指標
目標檢測領域使用的評價指標主要是mAP(mean average precision),平均精度均值,即為AP的平均值。而AP則是通過式(9)得出,本質上是選取0.1作為γ的間隔,把每個γ對應的Pinterp值相加,最后取均值。其中Pinterp是PR曲線中,以召回率(recall)作為橫坐標點,曲線所對應的縱坐標值,如式(10)所示(在計算過程中,若橫坐標x1無對應的縱坐標值,則使用最靠近兩點x2、x3所對應曲線上的點,做延長線與x=x1直線相交,交點即為x1對應縱坐標值)
(9)

(10)
圖11是類別”face”對應的P-R曲線,在圖中可得出M_YOLOv3的PR曲線略優于未改動的算法。本次實驗總共有兩個類,”face_mask”類和”face”類。mAP值就是對兩個類的AP值求和取平均。
3.3.4 實驗結果
經實驗得出,M_YOLOv3算法對比原版Tiny_YOLOv3和YOLOv3算法在mAP值上分別提升了15.9和7.2,檢測能力優于原版算法。M_YOLOv3的fps值為24,能夠在一定程度上做到實時檢測口罩佩戴情況,見表2。

表2 各算法實驗結果
改進算法M_YOLOv3算法在YOLOv3的基礎上加深特征提取網絡并增添預測通道,且使用了更合理的損失函
數,改善了YOLOv3算法對小尺寸目標識別困難的問題,適用于小目標物體的檢測。在基于小尺寸目標偏多的口罩數據集實驗中得出結論,mAP指數相較于原版YOLOv3提升了7.2。
在實驗中,部分數據迷惑性極強,例如圖10中女性用紙折扇遮擋口部,文中幾個算法都全部錯誤判定它是口罩。針對這個問題,暫時無法解決,值得下一步去思考并尋找答案,或許使用類似DOTA數據集四點坐標的數據格式會改善這一問題。
除YOLOv3算法外,其它目標檢測算法也百家爭鳴。作為學者應該緊隨時代腳步,不斷地學習理解其它的目標檢測算法及其網絡結構,如單階段的RetinaNet[13]、YOLOv4,雙階段的DCR、SNIP[14]、SNIPER等。