邵延華 張 鐸 楚紅雨 張曉強 饒云波
①(西南科技大學信息工程學院 綿陽 621010)
②(電子科技大學 成都 610054)
目標檢測是計算機視覺中的一個研究熱點,在很多領(lǐng)域都有應用需求,例如監(jiān)控安全、自動駕駛、交通監(jiān)控和機器人視覺等場景[1]。目標檢測一般是檢測一些預定義類別的目標實例(例如人和車等)。
傳統(tǒng)目標檢測依賴精巧的手工特征設(shè)計與提取[1,2],例如方向梯度直方圖(Histogram of Oriented Gradient, HOG)[3]。2012年,基于深度卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)的AlexNet[4]以顯著優(yōu)勢奪得ImageNet圖像識別比賽冠軍,從此深度學習開始受到廣泛的關(guān)注[5]。目標檢測也逐步進入深度學習時代[1,2]。
基于深度學習的目標檢測依據(jù)檢測方式被分為兩類[6]:兩階段檢測和單階段檢測,前者是一個“從粗到細”的過程;而后者端到端“一步完成”[2]。通常,兩階段檢測的定位和目標識別精度較高,單階段檢測速度較快[6]。限于篇幅,兩階段檢測算法的分析可參見文獻[1,6]。
通常,單階段檢測嘗試直接將每個感興趣區(qū)域分類為背景或目標對象[7]。即只通過一個階段便可直接給出物體的類別概率和位置坐標值。典型代表有YOLO(You Only Look Once)[8]等。
2015年的YOLOv1[8]直接將圖像劃分為若干區(qū)域,并同時預測每個區(qū)域的邊界框和概率,檢測速度得到極大提高。但與當時的兩階段檢測器相比,定位精度有所欠缺,特別是對小目標。
YOLO[8]是一種先進的單階段目標檢測框架,經(jīng)歷了v1~v4的演變,到目前為止已發(fā)展到結(jié)合傳統(tǒng)壓縮感知的YOLOR(You Only Learn One Representation)[9]和不依賴錨框的YOLOX[10]。如圖1所示,簡要展示了YOLO檢測模型的發(fā)展歷程[8–15]。
YOLOv1[8]的基本框架如圖2所示,首先調(diào)整輸入圖片大小到448×448,送入CNN提取特征,然后處理網(wǎng)絡(luò)預測結(jié)果,實現(xiàn)端到端的目標檢測。
YOLOv1放棄傳統(tǒng)的滑動窗口技術(shù),其CNN將輸入圖片劃分成S×S網(wǎng)格,然后每個單元格負責去檢測那些中心點落在該網(wǎng)格內(nèi)的目標,每個單元格會預測B個邊界框及邊界框的置信度。置信度包含該邊界框含有目標的可能性大小和該邊界框的準確度。每個邊界框預測5個元素:(x,y,w,h,c),分別表示邊界框的位置、大小與置信度。每個單元格預測(B×5+C)個值,其中C為類別數(shù)。之后利用非極大值抑制(Non-Maximum Suppression,NMS)算法進行網(wǎng)絡(luò)預測。
后續(xù)YOLO系列均傳承該基本思想。另外,基于PyTorch開發(fā)的YOLOv5[14]尚處于快速發(fā)展的實驗階段,且沒有論文公開發(fā)表,其特點是代碼更容易理解和擴展。因此,本文后續(xù)進行相關(guān)模塊的介紹,重點是YOLOv1[8]和里程碑的YOLOv3[12],以及在COCO(Common Objects in COntext)數(shù)據(jù)集[16]上表現(xiàn)更佳的最新的YOLOv4[13,15]和YOLOX[10]。
本文調(diào)研大量目標檢測技術(shù)論文和綜述,進而對YOLO算法做出更全面的總結(jié)。Wu等人[7]系統(tǒng)地分析了現(xiàn)有的目標檢測框架,并將其總結(jié)為檢測組件、學習策略及應用和數(shù)據(jù)集3個主要部分。Zou等人[2]對檢測器、數(shù)據(jù)集和指標等都進行了分析,還對行人、人臉和文本等檢測進行了概括綜述,并分析了面臨的挑戰(zhàn)。Liu等人[1]的研究主要包括檢測框架、目標特征表示、目標建議生成、上下文建模、訓練策略和評估指標。Jiao等人[6]對各類檢測都進行了說明。同時,參考國內(nèi)最新出版的綜述[17],發(fā)現(xiàn)檢測領(lǐng)域發(fā)展迅速,但限于篇幅和側(cè)重點,上述綜述對YOLOv3之后的發(fā)展基本尚未提及。因此,業(yè)界急需對YOLO更專注、更細致和更新的調(diào)研分析。
本文結(jié)構(gòu)如下。第2節(jié)討論了YOLO家族的網(wǎng)絡(luò)結(jié)構(gòu)。第3節(jié)對目標檢測領(lǐng)域最具代表性的損失函數(shù)進行了闡述。第4節(jié)描述了常用的數(shù)據(jù)集、指標和性能評估。然后,根據(jù)5個典型領(lǐng)域,在第5節(jié)對YOLO系列的幾個主流的改進和應用進行了分析。最后,給出了本文總結(jié),并對今后的工作和發(fā)展趨勢進行了討論。
檢測器通常由兩部分組成,一個是提取特征的主干網(wǎng)絡(luò)(backbone),即基礎(chǔ)網(wǎng)絡(luò),一般在ImageNet數(shù)據(jù)集上進行預訓練。另一個是預測對象類別和邊界框的頭部(Head)[12,13]。近幾年,頸部(Neck)被構(gòu)建在主干與頭部之間,用于匯集不同的特征圖,YOLOv4對該部分進行了詳細的對比實驗。
下面將對YOLO的基礎(chǔ)網(wǎng)絡(luò)進行詳細分析。其中關(guān)于頸部和頭部的更多描述可參見文獻[13]。
2.1.1 YOLOv1的網(wǎng)絡(luò)結(jié)構(gòu)
YOLOv1[8]使用了類似GoogleNet[18]的主干網(wǎng)絡(luò),有24個卷積層和2個全連接層。在ImageNet上進行預訓練,然后遷移到檢測任務(wù),在VOC(Visual Object Classes)數(shù)據(jù)集[19]上進行驗證。
YOLOv1將輸入圖片分為7× 7的網(wǎng)格,每個網(wǎng)格預測兩個邊界框,因此有7× 7× 2個邊界框。最多識別49個目標。因此YOLOv1不利于識別密集型目標和小目標。
2.1.2 YOLOv2的網(wǎng)絡(luò)結(jié)構(gòu)
YOLOv2[11]在v1基礎(chǔ)上,借鑒了VGG網(wǎng)絡(luò),構(gòu)建新的主干網(wǎng)絡(luò)Darknet-19。
YOLOv1利用全連接層直接預測邊界框,丟失空間信息較多,引發(fā)定位不準。因此YOLOv2引入錨框代替v1的全連接層來預測邊界框。同時,YOLOv2將輸入尺寸修為416 ×416,最后得到13× 13的特征圖,維數(shù)為奇數(shù),所得特征圖恰好只有一個中心。利用這個中心位置預測中心點落入該位置的目標,對該類目標的檢測會更容易。圖3展現(xiàn)了其邊界框的預測方法。
圖3虛線矩形框為先驗框,實線矩形框為通過網(wǎng)絡(luò)預測的偏移量得到的預測邊界框。其中(cx,cy)表示單元網(wǎng)格左上角的坐標,(pw,ph)為先驗框的寬和高,(tx,ty) 和(tw,th)分別為網(wǎng)絡(luò)預測邊界框的中心偏移量和寬高縮放比;特征圖中真值坐標為(Gx,Gy,Gw,Gh)。 (bx,by,bw,bh)為最終預測的目標邊界框,從預設(shè)邊界框到預測邊界框的轉(zhuǎn)換過程如圖3右側(cè)公式所示,其中σ函數(shù)是Sigmoid函數(shù),其目的是將預測偏移量縮放到0~1,加快網(wǎng)絡(luò)收斂。
YOLOv2[11]開創(chuàng)性地提出聯(lián)合使用分類和檢測的訓練方法,擴展目標檢測到缺乏檢測樣本的對象。明顯提升預測準確性的同時保持了推理快的優(yōu)勢。
2.1.3 YOLOv3的網(wǎng)絡(luò)結(jié)構(gòu)
YOLOv3[12]的基礎(chǔ)網(wǎng)絡(luò)為Darknet-53,它借鑒了ResNet[20]的殘差結(jié)構(gòu),加深網(wǎng)絡(luò)結(jié)構(gòu)的同時,又防止了網(wǎng)絡(luò)梯度爆炸引發(fā)的網(wǎng)絡(luò)難以收斂的問題。前向傳播過程中,移除池化層和全連接層,通過改變卷積核的步長來改變張量的尺寸。與v2類似,Darknet-53會將輸出特征縮小到輸入的1/32,因此通常要求輸入圖片分辨率是32的倍數(shù)。
同時YOLOv3采用張量拼接擴充張量的維度,以提取更多信息,具體操作是將Darknet-53中間層和后面的某一層經(jīng)過上采樣之后進行拼接。
Darknet-53從第0~74層,共有53個卷積層,其余為殘差層[12]。第75~105層為YOLOv3的特征融合層,其中YOLOv3增加了多尺度檢測(相當于頸部),使用了3種尺度,其輸出分別是52 ×52, 26× 26,13× 13用于檢測小、中、大目標,每種尺度預測3個錨框。
總之,YOLOv3的預測框較YOLOv2增加了10多倍,且它們是在不同尺度上進行的,所以整體檢測精度以及對小物體的檢測準確率都有很大的提升,故成為單階段檢測中的里程碑算法之一。
2.1.4 YOLOv4的網(wǎng)絡(luò)結(jié)構(gòu)
YOLOv4[13]將v3之后的各類改進方法進行總結(jié),分為免費包和特價包。其中,前者表示提升訓練而對推理速度沒有影響的模塊,后者表示對推理時間影響較小而性能回報較高的模塊,例如主干網(wǎng)絡(luò)中采用的局部跨階段結(jié)構(gòu) (Cross Stage Partial,CSP)[21]在保持較高推理速度的同時,仍具有較高的精度。同時,YOLOv4更適合在單個顯卡上訓練[13]。
Bochkovskiy等人[13]發(fā)現(xiàn)模型分類最優(yōu)時,其檢測未必是最佳的,例如CSPResNeXt-50的分類精度比CSPDarknet-53要高,但后者檢測精度更高。同時使用免費包和Mish[22]提高了檢測的準確率。因此YOLOv4選用CSPDarknet-53為主干網(wǎng)絡(luò)。
基礎(chǔ)網(wǎng)絡(luò)部分,YOLOv4的整體架構(gòu)與YOLOv3相同,但對各個子結(jié)構(gòu)都進行了改進。圖4展現(xiàn)了Darknet-53與CSPDarknet-53[21]兩種網(wǎng)絡(luò)結(jié)構(gòu),其中黑色表示Darknet-53,CSPDarknet-53網(wǎng)絡(luò)只需換為紅色框中的結(jié)構(gòu),同時將濾波器的數(shù)值換為括號中的紅色數(shù)值即可,YOLOv4刪去了最后的池化層、全連接層以及Softmax層,其主干網(wǎng)絡(luò)有5個CSP模塊[13]。
頸部模塊,YOLOv4引入空間金字塔池化(Spatial Pyramid Pooling, SPP)與路徑聚合網(wǎng)絡(luò)(Path Aggregation Network, PANet)[23]模塊。其中,SPP顯著增加了感受野,在不降低運行速度的情況下分離了重要的上下文特征。PANet[23]代替YOLOv3中的特征金字塔網(wǎng)絡(luò)(Feature Pyramid Network, FPN)[24,25]進行參數(shù)聚合,并使用張量連接代替原來的短連接。
頭部模塊,YOLOv4繼承了YOLOv3的多尺度思想來進行預測。
2.1.5 YOLOv5的網(wǎng)絡(luò)結(jié)構(gòu)
YOLOv5[14]基本結(jié)構(gòu)與YOLOv4類似,最大不同為根據(jù)不同通道的尺度縮放,依據(jù)模型從小到大構(gòu)建了YOLOv5-N/S/M/L/X 5種模型。
2.1.6 YOLOX的網(wǎng)絡(luò)結(jié)構(gòu)
YOLOX[10]依據(jù)YOLOv3[12]和YOLOv5[14],使用了CSPNet[21],SiLU[26]激活函數(shù)以及PANet[23],并遵循縮放規(guī)則設(shè)計了YOLOX-S/M/L/X 4種模型;然后將模型進一步縮小構(gòu)建了YOLOX-Tiny和面向移動邊緣設(shè)備的YOLOX-Nano。
部分檢測算法的計算量較大或模型較大,對計算能力和功耗受限的邊緣計算設(shè)備或物聯(lián)網(wǎng)場景的部署提出了巨大的挑戰(zhàn)。
當前,輕量化主要有兩個方式:一種是設(shè)計輕量化的基礎(chǔ)網(wǎng)絡(luò),比如MobileNet系列[27]、Shuffle-Net系列[28]等。主要通過深度可分離卷積、分組卷積、可調(diào)超參數(shù)降低空間分辨率和減少通道數(shù)。另一種是壓縮整體網(wǎng)絡(luò)參數(shù),減少卷積層等設(shè)計一些“小而薄”的網(wǎng)絡(luò),例如YOLO的tiny系列。李成躍等人[29]基于YOLOv3,保留對提取特征有較大幫助的全卷積結(jié)構(gòu)、FPN以及ResNet的同時,盡可能減少每層的參數(shù)量和殘差層數(shù),并加入密集連接網(wǎng)絡(luò)和SPP。最終檢測速度大幅度優(yōu)化,且檢測精度優(yōu)于YOLOv3-tiny。
YOLO還可通過引入注意力機制來提高算法的檢測精度。注意力機制[30–32]被應用于許多計算機視覺任務(wù),如圖像分類[30]等。從原理上來講,注意力模型可分為空間型、通道型和混合型3種。
文獻[31]通過添加全局上下文(Global Context,GC),提升檢測效果,其GC對來自空間和通道維度的輸入特征分配不同的權(quán)重,以突出有用的信息。
YOLOv4嘗試了多種注意力機制[13,30,32],并最終選用空間注意力機制[32]。對新場景和新算法的實驗有一定的指導意義。
大多數(shù)深度學習算法都涉及某種形式的優(yōu)化[6]。目標檢測也是如此,它不僅定位目標,還需要分類。損失函數(shù)、交并比(Intersection over Union,IoU)損失[33,34]和激活函數(shù)這3部分對YOLO至關(guān)重要。下面對它們分別進行分析和總結(jié)。
YOLOv1的一個主要創(chuàng)新是設(shè)計了一個巧妙的損失函數(shù),涵蓋了目標檢測中必要的幾個損失函數(shù)模塊,如邊界框、目標置信度和目標類別。定義為
YOLOv1的損失函數(shù)中,大小物體的IoU誤差在網(wǎng)絡(luò)訓練中對損失函數(shù)貢獻值接近。因此,對于小物體,小的IoU誤差也會對網(wǎng)絡(luò)優(yōu)化過程造成很大的影響,從而降低物體檢測的定位準確性。
3.1.2 YOLOv3的損失函數(shù)
YOLOv3[12]的損失函數(shù)如式(7)—式(9)所示,其Lobj采用了二分交叉熵。由于YOLOv3在3種不同尺度下進行預測,所以最終的損失函數(shù)為3種尺度下?lián)p失函數(shù)之和
在訓練過程中,利用網(wǎng)格本身滿足條件的最佳錨框來回歸寬高的坐標偏差
YOLOv3訓練中忽略了大量背景產(chǎn)生的損失,在一定程度上提升了正樣本的作用。
3.1.3 YOLOv4的損失函數(shù)
YOLOv4[13]認為(x,y,w,h)并不獨立,需要一個損失函數(shù)表達它們之間的相互關(guān)系,采用CIoU(Complete-IoU)[33]取得較好效果。關(guān)于IoU[33,34]的內(nèi)容將在下節(jié)進行分析。
IoU[33]是目標檢測的一個重要評價指標,可衡量預測框和真值之間的距離。常用來計算Lbbox,多個檢測框可能有相同大小的損失,但IoU可能差異很大,為此需引入IoU損失。其定義為
3.2.2 DIoU (Distance-IoU)
當目標框完全包裹預測框時,IoU和GIoU的值相等,此時GIoU退化為IoU,即GIoU嚴重依賴IoU,因此在兩個垂直方向,誤差大,難收斂。由此提出DIoU[33]
DIoU的懲罰項直接最小化兩個中心點之間的距離,對包含兩個框在水平方向和垂直方向上的情況,可加速模型回歸。
同時,NMS是目標檢測的主流后處理方法,可過濾預測同一物體、但效果差的邊界框,僅保留較好的邊界框。基于DIoU的NMS,其結(jié)果更加合理和有效[35]。
3.2.3 CIoU (Complete-IoU)
目標框損失應考慮3個重要的幾何因素:重疊面積、中心點距離和長寬比。而DIoU未考慮到檢測框的長寬比。長寬比更接近的邊框應有更低的損失,因此提出了CIoU[33]
文獻[30]對各種IoU在YOLOv3上用VOC 2007數(shù)據(jù)集進行了豐富的消融實驗,可知各IoU對YOLOv3的提升程度。YOLOv3引入CIoU結(jié)合DIoU-NMS,可帶來5.91%平均精度(Average Precision, AP)的巨大改進[33]。
3.2.4 其他
面向具有高“長寬比”和復雜背景的對象時,PIoU(Pixels-IoU)[36]可顯著提高方向邊界框檢測性能,優(yōu)于GIoU。
YOLOv1-v2的最后一層使用Softmax激活函數(shù),對每個框分配一個類別(得分最大的一個),不適合目標可能存在重疊類別標簽的數(shù)據(jù)集。同時,Softmax可被多個獨立的Logistic替代,且準確率不會下降。因此v3采用Logistic回歸,用于對錨框包圍的部分進行目標性評分,即該位置是目標的可能性(得分)有多大。這一步是在預測之前進行的,可去掉不必要錨框,減少計算量。
YOLOv4[13]在主干網(wǎng)絡(luò)中采用了Mish激活函數(shù)[23],其特點有低成本、平滑、非單調(diào)、無上界、有下界等,與線性整流函數(shù)(Rectified Linear Unit, ReLU)、Swish等常用函數(shù)相比,提高了性能[23]。
YOLOv5[14]尚處于快速發(fā)展的實驗階段,中間層使用Leaky ReLU激活函數(shù),最后的檢測層使用Sigmoid激活函數(shù)。
YOLOR[9]與YOLOX[10]選用SiLU激活函數(shù)[26]。
大量可靠的帶標注數(shù)據(jù)集是深度學習成功的前提之一。數(shù)據(jù)集不僅是衡量算法性能的基礎(chǔ),還極大地推動了目標檢測的發(fā)展,不同數(shù)據(jù)集特點不同[1,2,6,7]。本節(jié)將分析VOC[19], COCO[16]和Vis-Drone[37]等目標檢測領(lǐng)域中的部分典型數(shù)據(jù)集。
4.1.1 VOC數(shù)據(jù)集
VOC數(shù)據(jù)集[19]是計算機視覺中常用的數(shù)據(jù)集之一,主要任務(wù)有分類、檢測和分割。針對檢測任務(wù),典型的VOC2007由train/val/test 3部分組成,而VOC2012則將訓練集和驗證集組合起來分為trainval/test兩部分。
VOC中物體可分4大類,亦可細粒度的分為20類,其中,“person”類實例最多,“sheep”是數(shù)據(jù)實例最少的類,此外,VOC還存在一定的檢測難度,例如“cat”和“dog”在視覺上較相似。
4.1.2 COCO數(shù)據(jù)集
隨著深度學習的發(fā)展,VOC數(shù)據(jù)集的規(guī)模略顯不足,業(yè)界需要新的數(shù)據(jù)集,其中COCO[16]是最著名的一個。其官網(wǎng)為:http://mscoco.org/。可用來圖像識別、分割、檢測等任務(wù)。分為訓練集、驗證集和測試集。具體來講,目標檢測賽道的主要特點如下:(1)多目標;(2)部分對象存在遮擋與噪聲;(3)包含各種尺寸的物體;(4)超過300000張圖片;(5)超過2000000個實例;(6)80個目標類別[16]。
COCO中單圖的平均目標數(shù)是VOC的3倍左右,且小目標居多。在種類方面,COCO平均每幅圖片包含3.5個類別。
4.1.3 VisDrone數(shù)據(jù)集
截至目前,各領(lǐng)域?qū)τ跓o人機的應用需求非常廣泛。VisDrone數(shù)據(jù)集[37]發(fā)布于2018年,并在2019年由天津大學等進行擴展。為目標檢測提供了10209張圖片,其中6471張圖像用于訓練,548張用于驗證,3190張用于測試,同時還提供了96個用于目標檢測的視頻剪輯,包括56個用于訓練(共計24201幀),7個用于驗證(共計2819幀)和33個用于測試(共計12968幀)[37]。相對而言,VisDrone數(shù)據(jù)集場景復雜,遮擋情況嚴重,同時標簽密集,對算法的要求也隨之上升。其部分典型場景如圖5所示。
4.1.4 其他
除了上述典型數(shù)據(jù)集,各行業(yè)的具體需求催生一些檢測比賽,使智能檢測應用至各個領(lǐng)域。如中國模式識別與計算機視覺學術(shù)會議(chinese conference on Pattern Recognition and Computer Vision, PRCV)對火焰、后廚老鼠、安全帽的檢測比賽,以及Kaggle比賽對小麥的檢測等[38],其數(shù)據(jù)集示例如圖6所示。YOLO在這些比賽中通常都會占有一席之地。促進了YOLO的進步和落地實戰(zhàn),更加驗證了其優(yōu)勢。
如何評估檢測器的有效性?不同的數(shù)據(jù)集給出了不同的指標答案。
4.2.1 VOC數(shù)據(jù)集的指標
對于VOC數(shù)據(jù)集,使用插值平均精度來評估分類和檢測。其設(shè)計是為了在出現(xiàn)重檢測、誤檢測以及目標丟失時對算法進行懲罰。主要指標為[6]
精確度(precision)即預測為真的真實正例與所有預測正例的比值,召回率(recall)即預測為真與所有真實正例的比值[1,6]。幾乎所有的目標檢測論文中,基于0.5IoU的平均精度均值(mean AP, mAP)已成為多年來目標檢測問題最重要的實際度量標準之一[2]。在判斷檢測速度方面,每秒處理幀數(shù)(Frames Per Second, fps)是公認的度量方法。
4.2.2 COCO數(shù)據(jù)集的指標
COCO的指標比VOC更嚴格,采用多IoU評估方法更關(guān)注邊界框的準確性。在閾值設(shè)置方面,不同于VOC的常值0.5,COCO將其分為以0.5為起始值,0.95為終止值,間隔為0.05的10個值[16]。通過計算不同閾值的平均精度,來確定度量標準,更能反映檢測算法的綜合性能。此外,COCO還分別計算了大、中、小3類物體的平均精度,來衡量檢測器檢測不同尺度目標的性能。在COCO評價指標中,所有的AP默認為mAP[16]。
VisDrone數(shù)據(jù)集采用COCO的度量指標。
4.3.1 VOC數(shù)據(jù)集
表1列舉了不同YOLO在VOC2012上的檢測結(jié)果。其中,當輸入尺寸增大時,精度會隨之增加,相應的檢測速度會隨之降低。

表1 YOLO系列在VOC2012的檢測結(jié)果
由于YOLOv4在速度和精度方面相較之前版本都有了重大提升,因此YOLOv4之后的模型一般在規(guī)模更大的COCO數(shù)據(jù)集上進行測試。
4.3.2 COCO數(shù)據(jù)集
表2列舉了幾種典型的YOLO算法在COCO數(shù)據(jù)集的結(jié)果,并給出了其使用的圖形處理器(Graphics Processing Unit, GPU)類別。可見COCO數(shù)據(jù)集對目前的檢測器來說仍是一個巨大的挑戰(zhàn)。

表2 各類YOLO算法在COCO test2017上的表現(xiàn)
4.3.3 VisDrone數(shù)據(jù)集
盡管在通用目標檢測場景有了巨大進步,但是面向航拍場景的目標檢測,精度依然較低[41]。另外,無人機的機載計算能力通常受限,因此航拍目標檢測仍是一個巨大的挑戰(zhàn)[37]。
歷年VisDrone比賽中YOLO被許多團隊采用并改進,詳情可在VisDrone官方網(wǎng)址:http://aiskyeye.com/visdrone-2020-leaderboard/中查詢。
YOLO的代碼實現(xiàn)主要基于Darknet和PyTorch。Darknet[8]是一種基于CUDA (Compute Unified Device Architecture) 和 C的較PyTorch與Tensor-Flow輕量的開源框架。其支持中央處理器(Central Processing Unit, CPU)與GPU,具有易安裝,編譯速度快、依賴少和易部署等優(yōu)點,因此其更適合用來研究底層。YOLOv1-v4的文獻開源代碼均基于Darknet。YOLOv5代碼基于PyTorch,且代碼不再適配Darknet的數(shù)據(jù)組織方式。
除常規(guī)場景外,YOLO還被應用到其他場景中。例如3D場景[42–44]、邊緣計算[45,46]、航拍場景[47–49]等。針對不同的場景和需求,眾多研究者對YOLO提出了不同的改進策略。
對于目標抓取這一典型應用場景,不僅需要物體的3D空間位置(x,y,z),同時還需要物體的旋轉(zhuǎn)狀態(tài)。Tekin等人[42]提出一種僅使用一張2D圖片來預測物體6D姿態(tài)的方法。除此之外,結(jié)合視覺語義[43]和引入3D-IoU[44]被證明是有效的手段。
邊緣計算需要更好的平衡精度和網(wǎng)絡(luò)體積[40]。其中自動售貨機也是邊緣計算檢測的一種典型應用場景,例如Lee等人[46]通過消除對不感興趣區(qū)域的計算,在精度下降2.81%的情況下,將YOLOv3的運算速度提高了3.29倍。基于現(xiàn)場可編程邏輯門陣列的YOLO加速實現(xiàn)了體積小、運行速度快、功耗小的需求[45]。
為了應對不同平臺的部署需求,研究人員提出了尺度縮放網(wǎng)絡(luò),基于基礎(chǔ)結(jié)構(gòu),通過加深、加寬網(wǎng)絡(luò)或者改變網(wǎng)絡(luò)分辨率從而實現(xiàn)神經(jīng)網(wǎng)的尺度縮放[15]。典型的YOLOv4-tiny適合部署在低端設(shè)備。最新的YOLOX[10]更是推出了6個不同大小的模型面對不同的需求。
隨著無人機的廣泛應用,航拍目標檢測應運而生。其主要問題有:目標尺度變化大、背景復雜以及場景明暗變化等問題[47–49]。針對上述問題,通道隨機混合、分組卷積、可變形卷積模塊[47]和剪枝[49]被證明是有效的。自Tijtgat等人[48]在NVIDIA Jetson TX2上成功部署YOLOv2以后,NVIDIA Jetson TX2已成為航拍算法驗證的標準平臺之一。
5.5.1 交通
當前,面向交通場景的YOLO應用越來越多。例如,汽車牌照檢測[50]、卡車的盲區(qū)檢測[51]、汽車類型檢測[52]和車輛徽標檢測[53]。可進一步提升車輛行駛安全以及交通管制的智能化程度。
5.5.2 農(nóng)業(yè)
YOLO目標檢測在農(nóng)業(yè)方面也有重要需求和應用。例如農(nóng)業(yè)溫室檢測[54]、蘋果花實時檢測[55]和青芒果檢測[56]。
5.5.3 醫(yī)學
在醫(yī)學領(lǐng)域,2020年便有多篇應用YOLO的論文發(fā)表[57,58]。例如,基于YOLOv2的白細胞定位[57]和基于YOLO心臟矢量流映射分析與評價方法[58]。上述研究證明了YOLO在醫(yī)學領(lǐng)域的適應性。
5.5.4 行人檢測
行人檢測是智能自動駕駛中的重要領(lǐng)域[59,60]。針對紅外感知場景,在U-FOV紅外行人數(shù)據(jù)集上,通過構(gòu)建特征金字塔和注意力模塊,對比YOLOv3提升了26.49%[60]。Kri?to等人[61]使用YOLOv3在熱圖像中自動檢測人,同時給出了人體和動物在熱圖像中的識別結(jié)果。
5.5.5 工業(yè)
YOLO算法在電力[62]、建筑足跡[63]以及航空工業(yè)[64]等方面也有一定的應用。例如,Liu等人[62]基于改進的YOLOv3進行了輸電線路檢測;Xie等人[63]基于YOLO實現(xiàn)檢測小目標與密集分布的建筑足跡;Luo等人[64]基于YOLOv3-tiny的改進模型,使得渦旋區(qū)域檢測有了更好更快的提升。
本文根據(jù)YOLO的模型結(jié)構(gòu)、損失函數(shù)、交并比等的改進,對YOLO系列的幾個重要版本進行了詳細的分析與總結(jié)。并對經(jīng)注意力、輕量化等方式改進后的YOLO算法進行了對比分析,體現(xiàn)了其被廣泛使用的原因。之后對常用的典型數(shù)據(jù)集進行了介紹,展現(xiàn)了YOLO系列算法目前所能達到的效果。最后,分析了YOLO在不同場景下的應用。
綜合當前目標檢測的研究現(xiàn)狀,對今后的研究做出如下展望:
(1) 盡管YOLO系列是目標檢測領(lǐng)域中速度-精度均衡的佼佼者,但其主要工作是面向電腦端。當前,邊緣計算已成為人工智能(Artificial Intelligence,AI)發(fā)展的重要趨勢之一。面向Nvidia Jetson TX2,Nano和樹莓派等嵌入式AI計算設(shè)備,如何使YOLO更輕更快是一個值得深思的問題。
(2) 技術(shù)角度講,自里程碑式的YOLOv3到集成創(chuàng)新大成者YOLOv4,再到最新的結(jié)合傳統(tǒng)壓縮感知的YOLOR[9]和不依賴錨框的YOLOX[10]。融合各種先進的算法成為YOLO算法發(fā)展的重要方式,例如探索融入注意力聚合FPN,變結(jié)構(gòu)IoU損失以及廣義焦點損失等。
(3) 經(jīng)過數(shù)年的發(fā)展,YOLO算法雖取得了顯著的進步,但在解決更多現(xiàn)實問題時仍需要進一步的研究,例如旋轉(zhuǎn)矩形框、3D目標、少樣本、航拍場景以及如何將所研究算法進行TensorRT等優(yōu)化部署等。