魏 龍,王 羿,姚克明
(江蘇理工學院電氣信息工程學院,江蘇常州 213001)
隨著機器視覺和深度學習的發(fā)展,目標檢測算法應(yīng)用越來越廣泛,可進行工件檢測[1]、布匹瑕疵檢測、行人檢測[2],車輛檢測[3]以及醫(yī)學影像分析[4]等。
目前常用的深度學習目標檢測算法主要有:two stage方法,如Faster R-CNN[5]、Mask R-CNN[6]等通過對樣本圖像生成一系列預(yù)測框,利用卷積神經(jīng)網(wǎng)絡(luò)進行分類和回歸實現(xiàn)預(yù)測;one stage 方法,如SSD[7]、YOLO[8]等直接對圖像進行檢測生成預(yù)測框,通過回歸輸出預(yù)測結(jié)果。后者在檢測速度上有很大優(yōu)勢,對一些需要實時檢測的場景十分有效。
一般目標檢測通過多層卷積神經(jīng)網(wǎng)絡(luò)進行特征提取可以獲取豐富的語義信息,進而實現(xiàn)對目標的檢測。對于小尺寸目標,由于在圖片中占有的像素點較少導(dǎo)致有效特征不足,檢測往往比較困難并出現(xiàn)漏檢情況。針對小目標檢測精度不高的問題,Liu 等[9]提出圖像金字塔和逐層預(yù)測方法對小目標特征層進行定位。但該方法對計算機硬件和計算能力要求非常高,因此使用較少;Bell 等[10]參考RNN 算法中的長短期記憶,記錄多層的特征信息對小目標進行預(yù)測,但由于該方法固有速率比較慢而實用性不高。
本文基于YOLO v4 網(wǎng)絡(luò),對原網(wǎng)絡(luò)的目標檢測層和卷積結(jié)構(gòu)進行改進,提出一種多尺度目標檢測和深度可分離卷積的特征提取算法,對高分辨率大圖片的檢測進行優(yōu)化,增加了一種自適應(yīng)先驗框,在保證檢測速率的精度前提下,提升對高分辨率圖片里的小目標和低分辨率圖像檢測效果。
YOLO 算法本質(zhì)是一種目標回歸問題,其檢測過程是將輸入圖像劃分為一定的網(wǎng)格,對整個圖片進行一次遍歷,當每個網(wǎng)格中檢測到目標時就根據(jù)當前網(wǎng)格的先驗框繪制出預(yù)測框,進而直接預(yù)測出目標結(jié)果。
YOLO v1 算法將圖像劃分為7×7 的網(wǎng)格,每個網(wǎng)格有兩個預(yù)測框,根據(jù)預(yù)測框的IOU 直接給出結(jié)果;YOLO v2[11]是將圖像劃分為13×13 的網(wǎng)格,每個網(wǎng)格有5 個先驗框(an?chor box),根據(jù)先驗框的結(jié)果進行邊框回歸最后繪制出預(yù)測框(bounding box);YOLO v3[12]和YOLO v4[13]在之前的基礎(chǔ)上增加3 個不同尺度的預(yù)測網(wǎng)絡(luò),分別對應(yīng)13×13、26×26、52×52 的網(wǎng)格,用來檢測大目標中的中等目標和小目標,每個預(yù)測網(wǎng)絡(luò)分別有3 個預(yù)設(shè)好的先驗框。當檢測到目標后在不同的預(yù)測網(wǎng)絡(luò)上進行邊框回歸,最后輸出預(yù)測框結(jié)果。
YOLO v4 的檢測網(wǎng)絡(luò)主要由CSPDarknet53 網(wǎng)絡(luò)、SPP[14]和PANet[15]組成。CSPDarknet53為主干特征提取網(wǎng)絡(luò),主要由CBM 卷積網(wǎng)絡(luò)模塊、CBL 卷積網(wǎng)絡(luò)模塊和CSP[16]殘差網(wǎng)絡(luò)模塊構(gòu)成。SPP 為特征金字塔網(wǎng)絡(luò),將輸入的任意圖像大小最終統(tǒng)一到寬高大小由CBL 卷積網(wǎng)絡(luò)模塊和Max?pool 組成。PANet 為特征增強網(wǎng)絡(luò),主要采用上采樣和下采樣對不同的特征層進行特征融合,輸出更高語義信息。
CBM 卷積網(wǎng)絡(luò)模塊由卷積網(wǎng)絡(luò)、標準化和Mish[17]激活函數(shù)組成,如圖1 所示。
Fig.1 CBM convolution network module圖1 CBM 卷積網(wǎng)絡(luò)模塊
CBL 卷積網(wǎng)絡(luò)模塊由卷積網(wǎng)絡(luò)、標準化和Leaky Re?lu[18]激活函數(shù)組成,構(gòu)成如圖2 所示。
Fig.2 CBL convolution network module圖2 CBL 卷積網(wǎng)絡(luò)模塊
CSP 殘差網(wǎng)絡(luò)由殘差網(wǎng)絡(luò)塊(Res unit)、CBM 卷積塊和大殘差邊組成,構(gòu)成如圖3 所示。
伴隨企業(yè)的運行及發(fā)展,在企業(yè)集團運行中,戰(zhàn)略性成本管理作為較為重要的內(nèi)容,是企業(yè)經(jīng)濟發(fā)展的保障。在企業(yè)運行中,若只是依靠短期成本降低是無法滿足企業(yè)發(fā)展需求的。在成本管理中,應(yīng)該結(jié)合成本管理的理念,轉(zhuǎn)變以往的成本核算以及成本經(jīng)營控制機制,結(jié)合企業(yè)成本管理工作的特點,進行成本管理策略的完善,逐漸提高企業(yè)的經(jīng)濟性,為企業(yè)成本功能、成本質(zhì)量以及成本管理的制度完善提供參考。
Fig.3 CSP residual network圖3 CSP 殘差網(wǎng)絡(luò)
其中Res unit 為進行n 次殘差網(wǎng)絡(luò)的殘差結(jié)構(gòu),構(gòu)成如圖4 所示。
Fig.4 Res unit圖4 Res unit
YOLO v4 主干特征提取網(wǎng)絡(luò)中,CBM 卷積模塊通過多次下采樣獲取較高的特征信息。在特征融合網(wǎng)絡(luò)中具有較高語義信息的特征層進行上采樣融合時,CBM 卷積模塊會有一定的信息丟失,因此對于小目標的檢測準確度會降低,所以考慮在特征提取和特征融合網(wǎng)絡(luò)中采用一種深度可分離卷積塊替換原YOLO 網(wǎng)絡(luò)中的普通卷積塊,盡可能多地保留較高的特征信息。
深度可分離卷積[19]模塊實現(xiàn)過程:對特征層所有的通道先進行1×1 的卷積升維,再進行一定大小的卷積得到所需要的特征大小。與普通卷積相比,深度可分解卷積在深層次網(wǎng)絡(luò)中可以大大減少網(wǎng)絡(luò)參數(shù)量,加快計算過程,并且可以同時考慮通道數(shù)和特征區(qū)域大小的改變,實現(xiàn)了通道和區(qū)域的分離。經(jīng)過深度可分離卷積后進行標準化和Swish 激活函數(shù)過程,深度可分離卷積模塊構(gòu)成如圖5 所示。
Fig.5 Depth separable convolution module圖5 深度可分離卷積模塊
在深度可分離卷積塊完成后引入注意力機制(Atten?tion Mechanism)[20],對深度可分離卷積后的特征層實行通道注意力機制,同時在深度可分離卷積后引入殘差邊。
注意力機制過程:對輸入的特征層進行全局池化操作,Reshap 后先進行1×1 的卷積對通道數(shù)降維,接著進行1×1 的卷積,使注意力機制的通道數(shù)與輸入的特征層通道數(shù)相同。將兩個通道數(shù)相乘即可成功加入注意力機制,對相乘的結(jié)果通過Sigmod 函數(shù)將輸出值固定在0~1 的范圍內(nèi)。
對加入注意力機制的特征層進行1×1 卷積并進行標準化,同時判別是否滿足殘差條件,判別輸入的特征層進行卷積時的步長是否一致。卷積的步長不同會改變特征層的長寬,造成特征層維度不同;另一個條件是特征層通道數(shù)必須相同,只有特征層的維度和通道數(shù)都相同時,將該殘差邊進行特征層相加,完成殘差結(jié)構(gòu)輸出。
在YOLO v4 網(wǎng)絡(luò)中對小目標進行預(yù)測的特征層為52×52,當輸入圖片為416×416 時可以檢測到的最小像素值為8×8,若輸入的圖片尺寸過小,YOLO 網(wǎng)絡(luò)會將圖像自動放大,圖像中的小目標會產(chǎn)生失真導(dǎo)致無法準確檢測。本文考慮在原預(yù)測網(wǎng)絡(luò)中增加104×104 的特征層,將在主干特征提取網(wǎng)絡(luò)進行兩次下采樣后得到的特征層,與其余特征層通過CBL 卷積塊上采樣特征匹配后進行向量融合,得到更豐富的語義信息。再將該特征層進行下采樣傳遞,輸出104×104 的特征層進行預(yù)測,這樣可以使特征預(yù)測網(wǎng)絡(luò)更加細致,檢測范圍更廣泛。改進后的YOLO 網(wǎng)絡(luò)結(jié)構(gòu)如圖6所示。
Fig.6 Improved YOLO v4 network圖6 改進的YOLO v4 網(wǎng)絡(luò)
在YOLO v3 的預(yù)測網(wǎng)絡(luò)中,每個預(yù)測特征層都有3 個預(yù)先設(shè)定好的先驗框,在訓(xùn)練過程時根據(jù)訓(xùn)練圖片中目標尺寸的大小選擇合適的先驗框進行邊框回歸輸出預(yù)測框。YOLO V4 網(wǎng)絡(luò)中加入了K-means 聚類方法,對所有預(yù)先標定好真實框的訓(xùn)練數(shù)據(jù)通過聚類到合適的先驗框,再根據(jù)聚類后的先驗框進行數(shù)據(jù)訓(xùn)練,使預(yù)測框的結(jié)果更接近標注的真實框。由于實際數(shù)據(jù)中小目標的標注在所有數(shù)據(jù)中占比不大,通過固定的先驗框和聚類得到的先驗框在預(yù)測時會忽略小目標標注框,所以預(yù)測框結(jié)果對小目標效果不佳。
YOLO 檢測過程:將輸入的圖像大小固定到一定尺寸然后進行目標檢測,當YOLO 網(wǎng)絡(luò)的輸入為416×416 時進行采樣。負責檢測小目標的大特征層為52×52,每個特征網(wǎng)格對應(yīng)圖像的感受野為416/52=8,8×8 大小。當輸入圖像大小為1 920×1 080 時,通過YOLO 網(wǎng)絡(luò)壓縮對應(yīng)長邊為1 920/416×8=37,即當目標特征大小小于37 像素點時將無法學習特征信息。
對火災(zāi)進行遠距離拍攝或者使用遙感圖像時,為了獲得更豐富的圖像信息往往會采用高分辨率的大圖片,而檢測目標常常在大圖像中存在的位置偏小,直接使用大圖像進行YOLO 檢測會將圖像壓縮從而使得小目標特性丟失,因此需要對大圖像進行處理后再檢測。
考慮到Y(jié)OLO 網(wǎng)絡(luò)是將圖像固定到一定尺寸進行檢測的,因此可將高分辨率的大圖片進行分割,使用分割后的小圖片進行檢測。為了避免特征信息的遺漏以及檢測目標被圖像分割所截斷,在圖像分割時要設(shè)置一定的重疊區(qū)域。當分割后的圖像大小為416×416 時,可以將重疊區(qū)域設(shè)置為416×25%=104 像素。對分割后的每張小圖片分別進行檢測,檢測完成后對所有圖像進行還原,再對原圖進行非極大值抑制,剔除同一目標的重復(fù)檢測框。這樣小目標的特征就可全部學習,一定程度上提高了檢測準確性,也可以避免小目標漏檢,檢測結(jié)果有很大提升。
本文的實驗環(huán)境為:處理器Inter? Core?i7-10875H CPU @2.3GHz,顯卡NVIDIA GeForce RTX 2060,內(nèi) 存16GB,Windows10 64 位系統(tǒng)。GPU 加速庫為CUDA10.0 和CUDNN7.4.15;深度學習框架為PyTorch,版本:torch 1.2,torchvision:0.4.0;開發(fā)環(huán)境為Pycharm,編程語言Py?thon3.6。
使用YOLO v4 算法進行目標檢測時需使用大量數(shù)據(jù)集進行訓(xùn)練。利用訓(xùn)練好的權(quán)重進行檢測,本文使用布匹瑕疵檢測和火災(zāi)檢測驗證改進后的算法對小目標檢測的效果。
布匹瑕疵檢測數(shù)據(jù)集選擇公開的天池數(shù)據(jù)集,包含5 000 余張有瑕疵的圖像,使用COCO 數(shù)據(jù)集進行整理歸類后分為20個類別,將所有圖片與標注好的XML 文件相對應(yīng),使用Python 文件生成包含標注信息的txt 文件進行讀取。
為了加快YOLO 模型訓(xùn)練引入遷移學習思想。遷移學習是將在已知源域進行訓(xùn)練學習后的模型遷移到具有相似特點的目標領(lǐng)域,使用遷移學習可以使網(wǎng)絡(luò)模型快速在新的特征領(lǐng)域獲取特征信息,減少數(shù)據(jù)集的網(wǎng)絡(luò)初始化和訓(xùn)練時間,加快模型收斂過程。
使用YOLO v4 預(yù)訓(xùn)練好的權(quán)重進行遷移學習訓(xùn)練。整個訓(xùn)練過程分為50 輪,前25 個輪訓(xùn)練學習率設(shè)置為1×10-3,每次讀取圖片數(shù)量為4,同時凍結(jié)一部分網(wǎng)絡(luò)參數(shù),加快網(wǎng)絡(luò)的初步學習;后25 輪訓(xùn)練學習率設(shè)置為1× 10-4,每次讀取圖片數(shù)量為2,并解凍所有網(wǎng)絡(luò)參數(shù)使網(wǎng)絡(luò)優(yōu)化。將數(shù)據(jù)的90%進行訓(xùn)練,10%進行驗證,訓(xùn)練過程具有反向梯度,驗證過程無反向梯度。保存每一輪訓(xùn)練完成的權(quán)重并計算loss 值,訓(xùn)練集和驗證集的loss 值變化情況如圖7、圖8 所示。
Fig.7 Changes of training loss value圖7 訓(xùn)練集loss 值變化情況
Fig.8 Change of loss of verification set圖8 驗證集loss 值變化情況
由loss 曲線圖可以看出,在訓(xùn)練了2 500 步后loss 值趨于穩(wěn)定,在迭代了48 輪后驗證集的loss 值具有較好的特征信息。將訓(xùn)練完成后loss 值較優(yōu)的權(quán)重載入到Y(jié)OLO 檢測網(wǎng)絡(luò)中即可使用YOLO v4 進行實時檢測。
對布匹瑕疵的識別中,由于布匹瑕疵種類繁多,背景比較單一,因此對檢測圖像亮度和清晰度有一定要求。本文方法在對布匹扎洞瑕疵識別中,識別準確率acc 可達89%,mAP 值為73.56%。在對視頻圖像的連續(xù)識別中,640×480 大小的視頻識別幀率為20fps,可以達到實時檢測效果。布匹瑕疵識別效果如圖9 所示。
Fig.9 Recognition effect of cloth defects圖9 布匹瑕疵識別效果
對火災(zāi)識別中,由于火焰圖像特征信息豐富,本文方法對背景明顯圖像的識別準確率acc 可達95%,其mAP 值為88%。通過本文的改進,一些小特征和低分辨率圖像也有很好的識別效果,如圖10 所示。
Fig.10 Fire identification effect圖10 火災(zāi)識別效果
針對目前檢測算法對小目標檢測的不足,本文基于YOLOv4 網(wǎng)絡(luò)通過對主干特征提取網(wǎng)絡(luò)使用可分離卷積模塊和增加多尺度檢測網(wǎng)絡(luò)的方法,提升對小目標的檢測效率。同時改進自適應(yīng)先驗框,通過對高分辨率大圖片的分割識別,使大圖片里的小目標可以有效監(jiān)測。通過本文的改進,在使用YOLO 算法進行檢測時可有效檢測出小瑕疵和目標。
由于在YOLO 網(wǎng)絡(luò)中增加了多尺度計算,導(dǎo)致在訓(xùn)練過程中訓(xùn)練時間會略有增加,但對檢測效率影響不大,可以達到實時檢測效果。后續(xù)工作中要對網(wǎng)絡(luò)進一步優(yōu)化,使其可以搭載到移動設(shè)備或簡易終端中,進一步提升檢測精度和速度。