帥澤群 李軍
(重慶交通大學機電與車輛工程學院)
目標檢測是一個重要的計算機視覺任務,主要是處理和檢測視覺上特定的類(如人、動物或標志等)在數(shù)字圖像上的類別和位置分布情況。目標檢測就是建立有效的計算機應用模型,提供計算機視覺所需要的最基本的信息,即什么目標類別在什么地方[1]。所以目標檢測可以認為是圖像識別和目標定位2個任務的結(jié)合,是其他許多計算機視覺任務的基礎,比如實例分割[2]、人臉識別[3]、目標跟蹤[4]等。圖像識別是利用對圖像的特征進行提取,從而能進行分類。目標定位是進行邊界框的回歸,最終能準確定位,屬于回歸問題[5]。對于目標檢測的研究大致分為2個方向:1)針對一個固定模型下的檢查來判斷其能否擁有和人類一樣的感受視線;2)檢測特定復雜的應用場景,如遮擋物檢測[6]、行人檢測[7]、車輛檢測[8]等等。近些年來,由于傳統(tǒng)的目標檢測算法出現(xiàn)的一些弊端,加上深度學習技術的出現(xiàn),加速了目標檢測的發(fā)展。
在無人駕駛汽車領域,目標檢測主要應用于行人檢測、車道線檢測、交通標識檢測以及障礙物檢測等等,根據(jù)不同的需求對特定的、復雜多變的場景進行指定目標的檢測。民用運載工具數(shù)量的增長帶來了更復雜的運輸環(huán)境,需進一步提高該技術在工程應用上的實時性和魯棒性。
目標檢測發(fā)展的第1個階段,即傳統(tǒng)目標檢測時期。由于當時缺乏有效的圖像表示,人們不得不設計復雜的特征表示以彌補手工特征表達能力上的缺陷。這種做法不僅消耗了大量的計算資源,而且使檢測的實時性變得很差。
隨著深度學習的到來,目標檢測發(fā)展到第2個階段。人們發(fā)現(xiàn)深度學習的監(jiān)督學習或無監(jiān)督學習能夠很好地提取圖像的特征。在這個階段,目標檢測大致分為“一階段檢測”和“兩階段檢測”2種檢測方式。一階段的檢測器在檢測的實時性上更強[9];兩階段的檢測器在檢測精度上更具有優(yōu)勢。
Paul Viola和Michael Jones設計了一個準確定位人臉的檢測器。在當時硬件條件有限的情況下可以達到很高的精度和效率,每秒鐘大概可以處理15張圖像。在手動提取特征的階段,這是目標檢測技術的里程碑。為了紀念研究人員,這種能應用在實際生活中的檢測器被稱為Viola-Jones(VJ)檢測器。
Navneet Dalal和Bill Triggs在2005年提出HOG檢測器。它的核心思想是對梯度信息進行統(tǒng)計,因為圖像的梯度信息主要存在于圖像的邊緣,所以圖像局部目標的表象和形狀能夠被這些梯度信息很好的表示出來。之后再與機器學習中作為分類算法的支持向量機相結(jié)合,因此在圖像識別和目標檢測的領域有著很高的實用價值。目前大多數(shù)的人體或行人檢測都是采用HOG+SVM的檢測方式來進行檢測,或者基于這樣的思路來進行一些更加出色的改進。
2012年,卷積神經(jīng)網(wǎng)絡出現(xiàn)在人們的視線之中[10]。卷積神經(jīng)網(wǎng)絡因其能有效地提取圖像特征,在復雜場景下有很強的魯棒性和高級特征表示,所以在目標檢測上有巨大的應用價值。
RCNN[11]是典型的兩階段檢測器,它的數(shù)學模型原理簡單,首先利用自己設置的選擇性搜索在目標圖片上搜索很多的預選框,由于預選框內(nèi)圖片的大小不一樣,直接傳入網(wǎng)絡進行特征提取很可能使得數(shù)據(jù)出現(xiàn)問題,所以在輸入圖像之前要先對預選框內(nèi)的圖像進行縮放處理,使它們的尺寸變得一致。最后利用分類器,如支持向量機等進行判斷分類和邊界框回歸處理。
2014年,空間金字塔池化網(wǎng)絡(SPPNet)被提出[12]。SPP的提出是為了解決RCNN在檢測方面的一些缺陷。RCNN需在預選框內(nèi)縮放圖片使其產(chǎn)生固定尺寸的圖片[13]。而SPP對輸入圖片的尺寸無任何要求,在結(jié)果段都能輸出一樣大小的特征圖片,在不影響檢測精度的前提下很大程度上提高了檢測速度。SPP還采用了多級池化層,保留物體的最主要特征,在復雜背景和一些強干擾下有很好的魯棒性,在各個尺度上的檢測效果良好。
2015年劉偉等人提出SSD[14]算法。SSD是一種直接預測目標類別的多目標檢測算法,它首先通過CNN網(wǎng)絡模型提取特征圖,再對特征圖進行回歸分類。同時,SSD算法增加了多尺度特征圖功能,能夠在不同層次的特征圖上回歸不同尺寸的候選框,檢測不同大小的目標,提高了識別準確度。
目前YOLO系列算法已經(jīng)更新至第5代版本,第1代到第4代已經(jīng)在市面上開源,很多深度學習框架都可以很好地實現(xiàn)YOLO系列算法。文章以較為經(jīng)典的一階段檢測算法YOLOv3為例,詳細介紹YOLO系列算法的模型原理[15]。
主干特征提取網(wǎng)絡是YOLO算法比較核心的部分,它的主要作用就是提取圖像的特征。YOLOv2算法的主干網(wǎng)絡是一系列卷積層和池化層等組成的共19層的網(wǎng)絡,稱為Darknet-19,而YOLOv3將主干網(wǎng)絡的層數(shù)加深至53層,它將每一層打包為一個殘差模塊,結(jié)構(gòu)十分清晰,每個殘差模塊包括卷積層、激活函數(shù)層、Batch Normalization層等,以及在加深網(wǎng)絡中起到重要作用的殘差連接。殘差連接中的跨層加和操作很好地解決了純粹疊加出來的網(wǎng)絡檢測效果很差的問題。
圖片在輸入時像素大小調(diào)整為416×416,為了防止失真,會在圖像上加上灰度條。在通過主干網(wǎng)絡特征提取之后分成3個不同尺寸的特征圖,即13×13、26×26、52×52,由于圖像在多次卷積壓縮之后,小物體的特征容易消失,所以52×52的圖像用來檢測小物體,26×26的圖像用來檢測中等物體,而13×13的圖像用來檢測大物體。每個特征圖被大小相同的網(wǎng)絡劃分,每個網(wǎng)格點負責其右下角區(qū)域的檢測,即只要物體的中心點落在這個區(qū)域,這個物體就由這個網(wǎng)格來確定。
從YOLO算法輸出的參數(shù)并不能直接看出檢測的最終結(jié)果,需要進行一定的計算解碼。最終輸出結(jié)果中每張圖的通道數(shù)是根據(jù)具體檢測的類別數(shù)而定的。預測框的位置為2軸坐標以及高寬,一共是4維,預測的置信度為1維,如果檢測COCO數(shù)據(jù)的類別,那么類別數(shù)就是80維。最后的通道數(shù)就是(80+1+4)×3=255。其中,3代表預先設置好的3個不同的用來回歸的初始框,也叫先驗框。
3.2.1 先驗框
在YOLO最初的版本中,對于預測框的回歸都采用的是直接回歸邊界框的寬和高,這種方式導致學習的困難程度增加,且回歸效果不理想。之后在YOLOv2版本中提出了先驗框概念,即根據(jù)要檢測的目標提前設置邊界框,可以理解為開始學習時的初始值?;谙闰灴蛟龠M行回歸操作遠比毫無目的的直接回歸的學習難度要小得多。YOLOv3在這個基礎上又進行了改進,檢測的目標尺寸有大有小,所以對先驗框的尺寸進行調(diào)整,可以理解為調(diào)出較好的初始值來進行更好的訓練。目前大多數(shù)論文都是利用k-means算法對數(shù)據(jù)中的真實框進行聚類,得到大中小3種先驗框,又因為YOLOv3輸出3個特征圖,所以一共有9個先驗框。另外,先驗框只關心和目標物大小的匹配程度,即先驗框只和預測框的寬和高有關系。
3.2.2 檢驗框解碼
下面是檢驗框的解碼公式:
檢測端輸出數(shù)據(jù)是(tx,ty,tw,th),即這4個參數(shù)是已知的。而且物體的中心落在了(cx,cy)處,所以通過這個中心再加上相對于這個左上角中心的偏移量σ(tx),σ(ty)就可以求得預測框的中心坐標。pw,ph是先驗框的高度,顯然可以求出預測框的寬和高。這樣預測框的4個值都可以解碼出來,再乘以特征圖的采樣率就可以得到真實預測的邊界框參數(shù)。
3.2.3 檢測置信度與類別的解碼
檢測值信度的解碼并不是很復雜,但十分重要。置信度的維度在所有維度中占1維,由sigmoid函數(shù)解碼使數(shù)值在0~1之間。這會影響最終的檢測正確率和召回率,是對檢測器好壞的直接評價標準。訓練和推理時的解碼過程有一些小不同,在網(wǎng)絡學習時所有的預測框都會進行損失函數(shù)的計算,進行權(quán)重的更新迭代。而在推理過程中,預測參數(shù)直接輸出。
當觀察圖像時,人的視覺會首先接受鮮明、尺寸較大的目標,而那些大面積無關主題的物體和目標就會淪為背景。注意力機制[16]就是基于這個思想,通過不斷的訓練學習,更新出最優(yōu)的權(quán)重系數(shù),這組權(quán)重系數(shù)可以強化之前特征提取出來的感興趣區(qū)域,抑制與主題不相關的背景目標,這種做法會使后續(xù)的檢測效果有很大提升。在計算機視覺領域運用較多的是通道域和空間域[17]。將通道注意力機制和空間注意力機制融合的研究也很多,而且實驗表明將2種注意力機制串行排列效果更佳。
通道注意力機制和空間注意力機制的區(qū)別就是2個機制的關注點不同,通道注意力機制將問題聚焦在通道數(shù)上,即在通道數(shù)很多的特征圖像上哪些才是真正需要、有意義的圖像[18]?;谶@樣的設計思路,往往需要將空間信息進行壓縮和聚合,采用的操作是最大池化和平均池化同時進行,得到2個同維度的張量。再將這2個張量送到由多層感知機組成的共享網(wǎng)絡中。另外,它的一個很大的優(yōu)點就是能輕易地接入其他網(wǎng)絡中去,提高其網(wǎng)絡的性能。空間注意力機制重點關注如何從特征圖上保留更加關鍵的信息,這樣的操作有點類似于池化層保留特征的方式,其模型的提出者認為池化層的操作太過于簡單,雖然操作方便,但很容易造成特征的丟失,導致關鍵的信息無法識別出來??臻g注意力機制的設計思路就是將原輸入圖片的信息轉(zhuǎn)換到另一個空間中去保留起來[19]。
數(shù)據(jù)融合[20]目前較多應用于自然語言處理的研究上,在計算機視覺和無人駕駛領域的應用主要有多傳感器信息的融合[21]、遙感影像數(shù)據(jù)的融合[22]等。數(shù)據(jù)融合思想產(chǎn)生是因為單一數(shù)據(jù)集無法滿足網(wǎng)絡的學習和訓練,通過這種屬性融合加上智能化的合成,產(chǎn)生的數(shù)據(jù)信息源更加的穩(wěn)定精確,能進行更加可靠的計算。同時數(shù)據(jù)融合在技術層面還存在許多待攻克的難題,例如提高數(shù)據(jù)的可信度、融合模型不統(tǒng)一導致訓練結(jié)果不一樣、數(shù)據(jù)融合前的預處理過程的精度也需要提高等[23]。
在實際生活中,根據(jù)場景以及目標檢測物的不同,能夠隨時修改模型,達到實驗所需。例如可以針對小尺寸目標物進行檢測,也可以對多個目標物進行多尺度檢測。常州大學人工智能與計算機學院提出了一種基于頭部識別的安全帽佩戴檢測算法,通過膚色識別和頭部檢測交叉識別頭部區(qū)域,再使用YOLOv4目標檢測網(wǎng)絡識別安全帽,通過安全帽區(qū)域與頭部區(qū)域的位置關系判斷安全帽的佩戴情況[24]。江南大學的人工智能與計算機學院基于YOLO算法提出了可見光與紅外光融合的行人檢測算法,提出了結(jié)合注意力機制的模態(tài)加權(quán)融合層,使得對于行人的檢測在夜間以及目標物被嚴重遮擋的情況下也能有較高的識別精度和較快的檢測速度[25]。華東政法大學信息科學與技術系基于輕量級的YOLO模型改進了它的殘差網(wǎng)絡[26],提出了部分殘差連接,使得模型參數(shù)進一步減少,檢測的精度也能滿足需求[27]。武漢科技大學汽車與交通工程學院提出了一種小型化的改進YOLOv3神經(jīng)網(wǎng)絡的實時車輛檢測算法,可以滿足實際無人駕駛過程中對車輛檢測的精度和速度的基本條件[28]。上海電力大學電子與信息工程學院提出了一種基于輕量級網(wǎng)絡的虹膜圖像人眼定位及左右眼分類算法。利用YOLO算法結(jié)合高性能的輕量級網(wǎng)絡模型設計EL-YOLO模型,損失函數(shù)引入廣義交并比,使得網(wǎng)絡訓練可以快速收斂,且定位精度高[29]。
文章介紹了傳統(tǒng)的目標檢測算法與基于深度學習的目標檢測算法的原理和發(fā)展歷史,詳細介紹了YOLOv3算法的網(wǎng)絡結(jié)構(gòu)和工作原理,分析了輸出值的解碼過程。結(jié)果表明,YOLO系列算法在檢測速度上更具優(yōu)勢。為進一步提高檢測效率及精度,可引入注意力機制模塊和數(shù)據(jù)融合技術,并在特殊復雜的檢測場景中采用改進卷積神經(jīng)網(wǎng)絡或融合各類網(wǎng)絡優(yōu)勢模塊進行針對性訓練,以提高檢測器的綜合性能。