陸 峰,劉華海,黃長纓,楊 艷,謝 禹,劉財喜3,
1(上海城投環境(集團)有限公司,上海 200331)
2(上海環境物流有限公司,上海 200333)
3(百工匯智(上海)工業科技有限公司,上海 201209)
4(上海寶信軟件股份有限公司,上海 201203)
目標檢測是一種與計算機視覺和圖像處理有關的計算機技術,用于檢測數字圖像和視頻中特定類別的語義對象(例如人、建筑物或汽車等),其在視頻安防,自動駕駛,交通監控,無人機場景分析和機器人視覺等領域有廣闊的應用前景[1,2].近年來,由于卷積神經網絡的發展和硬件算力提升,基于深度學習的目標檢測取得了突破性的進展.目前,深度學習算法已在計算機視覺的整個領域得到廣泛采用,包括通用目標檢測和特定領域目標檢測.大多數最先進的目標檢測算法都將深度學習網絡用作其骨干網和檢測網絡,分別從輸入圖像(或視頻),分類和定位中提取特征.
本文將對基于深度學習的主流目標檢測算法進行總結和比較.第2 節對卷積神經網絡的發展做簡要概述;第3 節對主流卷積神經網絡進行分析和比較,總結算法性能以及優缺點;第4、5 節分別對基于候選區域和基于回歸的目標檢測算法深入分析,包括網絡結構以及創新和改進;第6 節對典型的目標檢測算法進行比較和總結;第7 節對目標檢測算法的未來研究方向進行了思考和展望.
深度學習模型可以看作是為具有深度結構的神經網絡.神經網絡的歷史可以追溯到1940年代[3],最初的目的是模擬人的大腦系統,以有原則的方式解決一般的學習問題.隨著Hinton 等[4]提出的反向傳播算法,神經網絡算法逐漸變得流行起來.但是,由于缺乏大規模的訓練數據、過度擬合、有限的計算能力以及與其他機器學習工具相比性能的不足等缺點,到2000年,各學者對神經網絡算法的研究趨于冷淡.自2006年以來,由于語音識別技術的突破,重新燃起了人們對于深度學習研究的熱情[5,6].對深度學習的重新重視可以歸因于以下幾點:
(1)大規模的帶注釋的訓練數據的出現,以充分展現其非常大的學習能力.
(2)快速開發高性能并行計算系統,例如GPU 集群.
(3)網絡結構和訓練策略設計方面的重大進步.在自動編碼器的指導下進行無監督的預訓練,可以提供良好的初始化.隨著dropout 技術和數據擴充,訓練中的過度擬合問題得到緩解.使用批量歸一化后,深層次的神經網絡的訓練變得簡單有效.同時,為了提高神經網絡的泛化性能,提出各種不同結構的神經網絡.例如AlexNet[7]、VGG[8]、GoogLeNet[9]和ResNet[10]等.
卷積神經網絡CNN是深度學習的最具代表性的模型[11].CNN的每一層稱為特征圖,輸入層的特征圖是不同顏色通道(例如RGB)像素強度的3D 矩陣.任何內部層的特征圖都是感應的多通道圖像,其“像素”可以視為特定特征.每個神經元都與前一層的一部分相鄰神經元相連.可以在特征圖上執行不同類型的轉換[12],例如濾波和池化,濾波運算將濾波器矩陣(學習的權重)與神經元感受野的值進行卷積,并采用非線性函數(例如Sigmoid,ReLU)以獲得最終響應.池化操作,諸如最大池化、平均池化和L2 池化操作[13]是將接收域的響應匯總為一個值,以生成更可靠的特征描述.通過卷積和池化之間的交織,能夠構造初始要素的層次性結構,最后添加幾個全連接層以適應不同的視覺任務.根據涉及的任務,添加不同的激活函數,以獲得每個輸出神經元的響應.通過隨機梯度下降方法在目標函數(例如均方誤差或交叉熵損失)上優化整個網絡.
與傳統方法相比,CNN的優勢可總結如下:
(1)通過分層多級結構[14,15]可以學習到從像素到高級語義特征的多級表示,從而獲得輸入數據的隱藏信息.
(2)與傳統的淺層模型相比,更深的網絡結構成倍的增加了表達能力.
(3)CNN的架構為共同優化幾個相關任務提供了可能(例如,Fast R-CNN 將分類和邊界框回歸結合為一種多任務學習方式)
圖1為目標檢測算法的發展史,時間軸下方展示了基于深度學習的分類網絡的發展歷程.其中標記框內為one-stage 算法.可以看出圖像分類算法貫穿目標檢測算法的始終,而two-stage 算法在前期占據主導地位,one-stage 目標檢測算法在后期蓬勃發展.這是因為圖像分類算法和two-stage 目標檢測算法中回歸分析方法對于one-stage 目標檢測算法的發展都有重要的促進作用.表1比較了不同目標檢測算法在COCO 數據集上的性能,可以發現隨著目標檢測技術的發展,目標檢測算法精度和檢測速度均得到了大幅提升[16-26].
手寫字體識別模型LeNet[27]誕生于1998年,是最早的卷積神經網絡之一.它利用卷積、參數共享、池化等操作提取特征,避免了大量的計算成本,最后再使用全連接神經網絡進行分類識別.

圖1 目標檢測算法發展史
LeNet 網絡結構除去輸入和輸出層后,它有6 層網絡組成,其中包括3 個卷積層(C),2 個下采樣層(S)和1 個全連接層(F).其中卷積層采用5×5的卷積核,而下采樣層分別采用的平均值池化(S2)和最大值池(S4).
LeNet 特點如下:(1)使用卷積來提取特征,組成基本的結構單元:卷積-池化-非線性激活;(2)加入非線性激活,采用tanh和Sigmoid;(3)池化層使用平均值池化;(4)分類器使用高斯分類.
2012年Krizhevsky 等[7]提出的AlexNet 以16.4%的顯著優勢問鼎ILSVRC的冠軍,它第一次采用ReLU,dropout,GPU 加速等技巧,參數數量為6000 萬個,模型大小240 MB 左右.其網絡結構如圖2所示,共8 層網絡結構,其中5 個卷積層和3 個全連接層.第一個卷積層的卷積為步長為4,大小為11×11;第二個卷積層的卷積核步長為1,大小為5×5;其余卷積層的大小均為3×3,步長為1.

表1 不同目標檢測算法性能對比

圖2 AlexNet 網絡結構圖
AlexNet 將CNN的基本原理應用到了更深的網絡中.主要應用的新技術如下:
(1)使用ReLU 作為CNN的激活函數,成功解決了Sigmoid 在網絡較深時的梯度彌散問題.
(2)訓練時使用dropout 隨機忽略一部分神經元,以避免模型過擬合.
(3)池化層使用重疊的最大池化,避免平均池化的模糊化效果.
(4)提出LRN 層,對局部神經元的活動創建競爭機制,使得其中響應比較大的值變得相對更大,并抑制其他反饋較小的神經元,增強了模型的泛化能力.
(5)使用CUDA 加速深度卷積網絡的訓練,利用GPU 強大的并行計算能力,處理神經網絡訓練時大量的矩陣運算.
(6)數據增強.隨機對圖片進行鏡像,旋轉,隨機噪聲等數據增強操作,大大降低過擬合現象.
VGGNet[8]網絡結構如圖3所示,相比AlexNet具有較深的深度,網絡表達能力進一步增強,同時在ImageNet 上測試的精度進一步提高,VGGNet 網絡優點:
(1)結構非常簡潔,整個網絡都使用了同樣大小的卷積核尺寸(3×3)和最大池化尺寸(2×2).
(2)驗證了幾個小濾波器(3×3)卷積層組合比一個大濾波器(5×5 或7×7)卷積層好.減少了參數同時得到更多非線性映射,增加網絡表達能力.
(3)驗證了深層次的網絡可以獲得高級語義特征,通過不斷加深網絡結構可以提升網絡性能.

圖3 VGGNet 網絡結構圖
GoogLeNet[9]是一個22 層的深度網絡,在主干卷積環節有3 個inception 模塊,模塊之間用3×3的最大池化層隔開.Inception 模塊如圖4所示,該結構分4 條線路并行,將CNN 中常用的卷積(1×1,3×3,5×5)、池化操作(3×3)堆疊在一起.采用不同大小的卷積核獲得不同大小的感受野,最后拼接融合不同尺度的特征,增加了網絡對尺度的適應性.為了解決計算過量的問題,在后3 條路線上增加了1×1 卷積核來進行降維.同時為了緩解梯度消失的問題,GoogLeNet 增加了兩個輔助分類器.這兩個輔助分類器被添加到網絡的中間層,它們和主分類器共享同一套訓練數據.

圖4 Inception 網絡結構圖
GoogleNet 特點:
(1)采用1×1 卷積核,性價比高,用很少的計算量就可以增加一層的特征變換和非線性變換;
(2)提出batch normalization,把每層神經元的輸入值分布回歸到均值0 方差1的正太分布,使其落入激活函數的敏感區,避免梯度消失,加快收斂;
(3)引入Inception 模塊,4 個分支結合的結構,每個分支采用1×1的卷積核;
(4)去除了最后的全連接層,大大減少計算量.
越深的網絡有越高等級特征,擁有強大表達能力.然而神經網絡隨著層數的增加,網絡退化嚴重,即深層次的網絡反而不如稍淺層次的網絡性能,這并非是過擬合導致的.何凱明等提出的ResNet[10]網絡很好的解決了這個問題,ResNet 模型的核心是通過建立前面層與后面層之間的“短路連接”,在淺層網絡的基礎上疊加y=x層,就是恒等映射(identity mapping),可以讓網絡深度增加而不退化,有助于訓練過程中梯度的反向傳播,從而能訓練出更深的CNN 網絡,實現更高的準確度.
圖5為殘差模塊的示意圖,殘差函數F(x)=H(x)?x,如果F(x)=0,即為恒等映射,這樣學習訓練過程相當于自主確定了多少層次的網絡是最優的.
ResNet 特點:
(1)通過殘差模塊將網絡深度進一步提高,解決了不斷深化神經網絡而使準確率飽和的問題.通過活用1×1 卷積降低了特征圖維度,控制了參數數量.
(2)存在明顯層級,特征圖個數層層遞進,保證輸出特征的表達能力.
(3)使用較少池化層,大量采用下采樣,提高傳播效率.

圖5 殘差網絡結構圖
DenseNet[28]模型的基本思路與ResNet 一致,通過短路連接來融合前后幾層的信息,但是DenseNet 建立前面所有層與后面層的密集連接,同時通過特征上的連接來實現特征重用.這些特點讓DenseNet 在參數和計算成本更少的情形下實現比ResNet 更優的性能,DenseNet 也因此斬獲CVPR 2017的最佳論文獎.
DenseNet 網絡結構主要結構分稠密塊(Dense blocks)和過渡層(transition layers).稠密塊結構能夠互相連接所有的層,具體就是每個層都會接受其前面所有層作為其額外的輸入.對于一個L 層的網絡,DesNet共包含L(L+1)/2 個連接,可以實現特征重用,提升效率,并且緩解了深層網絡的梯度消失問題.過渡層為相鄰2 個稠密塊的中間部分,稠密塊是連接兩個相鄰的稠密塊,并且通過池化使特征圖大小降低.
DenseNet的優勢主要體現在以下幾個方面:
(1)由于密集連接方式,DenseNet 提升了梯度的反向傳播,使得網絡更容易訓練.由于每層可以直達最后的誤差信號,實現了隱式的深度監督;
(2)參數更小且計算更高效,由于DenseNet是通過拼接特征來實現短路連接,實現特征重用;
(3)由于特征復用,最后的分類器使用了低級特征.
基于候選區域的目標檢測算法,即two-stage 目標檢測算法,該方法先提取到目標的候選區域,然后再由神經網絡做分類和回歸.本節將就two-stage 目標檢測主流算法做簡要介紹.
Girshck 等針對卷積神經網絡如何實現目標定位的問題,提出了將于Region proposal和CNN 結合的算法R-CNN[14],開創了神經網絡實現目標檢測的先河,其計算流程如圖6所示,可分為4 步,首先利用選擇搜索算法提取候選區域,接著將候選區域縮放到固定大小,然后進入卷積神經網絡提取特征,隨后將提取的特征向量送入SVM 分類器得到候選區域目標的類別信息,送入全連接網絡進行回歸得到位置信息.

圖6 R-CNN 網絡結構示意圖
R-CNN 缺點:
(1)輸入的圖像大小會進行縮放,導致圖像失真;
(2)用選擇性搜索算法提取約2000 個候選區域,每個候選區域都要送入卷積神經網絡提取特征,計算量大耗時多;
(3)訓練測試復雜,候選區域提取、特征獲、分類和回歸都是單獨運行,中間數據也是單獨保存卷積提取的特征需單獨存儲,占用大量硬盤空間.
2014年He 等針對R-CNN的缺陷進行了改進,開發出了SPP-Net (Spatial Pyramid Pooling Network)[29].SPP-Net 將整個圖片送入卷積提取特征,避免了候選區域分別送入卷積層提取特征造成的重復計算.再次,在卷積層和全連接層之間增添了空間金字塔池化層(Spatial Pyramid Pooling,SPP),可以對不同大小特征圖進行池化操作并生成特定大小的特征圖,避免了R-CNN 對圖像進行縮放導致圖像失真.
SPP-Net 缺點:
(1)與R-CNN 設計相同,訓練各個階段都是單獨運行,且中間數據必須保存.
(2)訓練數據的圖像尺寸大小不一致,使候選框感受野過大,不可以使用反向傳播有效的更新權重.
(3)網絡微調只更新了全連接層,不能實現端到端的檢測且檢測精度還需進一步提升.
借鑒空間金字塔池化層的思路,Ross 等2015年提出Fast R-CNN[16],用感興趣池化層(Region of Interest,RoI)代替了空間金字塔池化層,它去掉了SPP的多尺度池化,直接用網格將每個候選區域均勻分若干個區域塊,同時對每個塊進行最大值池化,從而將特征圖上大小不一的候選區域轉變為大小統一的特征向量.針對在訓練期間為多階段和特征重復計算造成的時間代價以及數據存儲過量的問題,將神經網絡與SVM 分類相結合,由全連接層同時負責分類和回歸任務,實現了多任務端到端訓練,使檢測精度和速度同時得到了提高.Fast R-CNN 網絡流程如圖7所示,主要分3 部分,首先將圖像送入卷積網絡提取特征,然后通過感興趣池化層將候選區域池化為同一長度的特征向量,最后通過全連接層進行分類和回歸.Fast R-CNN 在PASCAL VOC數據集中檢測時間為每張0.32 s,遠小于R-CNN的45 s和SPP-Net的2.3 s.
雖然Fast R-CNN 實現了多任務端到端的訓練,然而通過選擇性搜索算法提取候選區域耗費了較多時間,訓練和預測所需時間仍較長,不能實現實時性檢測.
Ren 等在Fast R-CNN的基礎上提出Faster R-CNN[17]算法,在卷積層后添加了區域提取網絡RPN (Region Proposal Network),代替了Fast R-CNN的選擇性搜索算法.RPN 核心思想是使用CNN 卷積神經網絡直接產生候選區域,錨框機制和邊框回歸可以得到多尺度多長寬比的候選區域.RPN 網絡也是全卷積網絡(Fully-Convolutional Network,FCN),可以針對生成檢測建議框的任務端到端訓練,能夠同時預測出目標物體的邊界和分數.
Faster R-CNN 整個流程如圖8所示,先對圖像進行卷積提取特征,然后進入RPN 層得到候選區域,最后全連接層進行分類和回歸.整個流程從圖像特征提取、候選區域獲得到分類和回歸都在神經網絡中進行,且整個網絡流程都能共享卷積神經網絡提取的特征信息,提高了算法的速度和準確率,從而實現了兩階段模型的深度.Faster R-CNN 在PASCAL VOC 2007和2012 上的mAP 分別為73.2%和70.4%,檢測速度達到5 fps.

圖7 Fast R-CNN 網絡流程圖

圖8 Faster R-CNN 網絡流程圖
Faster R-CNN 雖然大幅提高了算法精度和速度,但仍存在一些缺點:(1)獲取候選區域,再對每個候選區域分類計算量還是比較大;(2)雖然速度有了提高,但還是沒達到實時性檢測的要求.
2017年He 等在Faster R-CNN的基礎上再次改進,提出了Mask R-CNN[18]算法,通過添加Mask 分支,能夠同時實現目標檢測和語義分割任務.由于Faster RCNN 在下采樣和感興趣池化層都采取了取整運算,對檢測任務產生了影響,特別是對于像素級檢測的任務.通過RoI align 層替換RoI Pooling 層,使用雙線性插值來確定非整數位置的像素,使得每個感受野取得的特征能更好對齊原圖感受野區域.此外Mask R-CNN 采用基礎網絡ResNet+FPN (Feature Pyramid Network)來提取圖像特征,如圖9所示,在COCO 數據集上的檢測準確率從Fast R-CNN的19.7%提高至39.8%.

圖9 Mask R-CNN 網絡流程圖
Mask R-CNN 網絡的優點在于:它在Faster R-CNN網絡的基礎上增加了目標掩碼作為輸出量,掩碼是將一個對象的空間布局進行編碼,從而使得對目標的空間布局提取更精細.其缺點在于:分割分支增加了計算量,導致Mask R-CNN 比Faster R-CNN 檢測速度慢一些.
R-CNN 系列算法在檢測目標時均存在IoU 閾值選取問題,閾值選取越高就越容易得到高質量的樣本,但一味選取高閾值會引發兩個問題:(1)樣本減少引發的過擬合;(2)在推理階段出現檢測器最優的閾值與輸入候選的IOU 值發生不匹配.因此,單一檢測器很難抉擇一個合適的IOU,無論高低都是有很大弊端.
針對此類問題Cai 等[19]提出了一種級聯檢測器,他們利用前一個檢測器輸出作為下一個檢測器的輸入,同時相應的提高訓練時的IoU 閾值,使得IoU 閾值與預選框的IoU 值較為接近,訓練的3 個檢測器最后輸出結果精度更高,從而在推理階段合理的提高了檢測器優選IoU 閾值.
Cascade R-CNN 算法核心由一系列的檢測模型組成,每個檢測模型都基于不同IoU 閾值的正負樣本訓練得到,通過重采樣改變了不同階段的輸入假設分布,并且保證了每個階段有足夠固定數量的正例樣本數.通過調整閾值的方式重采樣,不斷改變候選框的分布,在保證樣本數不減少的情況下訓練出高質量的檢測器,從而不會出現過擬合,且在更深層的訓練階段可以得到更高的IoU 閾值.
目標檢測算法對圖像多尺度特征的提取主要是采用骨干網絡,影響骨干網絡進行多尺度特征提取的因素有:網絡下采樣率、網絡深度和感受野.R-CNN 系列算法中大部分學者研究了下采樣率和網絡深度對算法精度的影響,而對于目標檢測中感受野的影響很少有人研究.Li 等[20]首次提出了TridentNet 算法,通過從感受野的角度來構造多尺度目標的特征圖,對于獲取不同尺寸目標的特征過程中結構與權重相同,促進不同尺寸的目標能夠形成相似特征.實驗證明,不同的感受野對不同尺度目標的檢測有著不同的影響,大的感受野對尺度較大的目標檢測性能較好,小的感受野對小目標的檢測性能較好.
TridentNet 算法針對多尺度特征提取做了以下兩點創新:
(1)多分支結構,在最后一層增加了多分支卷積層,用來提取不同尺度目標的特征圖;
(2)不同分支之間結構相同,權重共享,唯一的不同在于不同分支所對應的感受野不一樣(使用空洞卷積來實現).
上述的設置既能夠保證為不同尺寸目標提取出特征,同時還能促進不同尺寸目標生成相似特征,即結構相同,權重共享.文獻[20]通過實驗驗證采用3 個不同卷積空洞率時算法的性能最佳,通過與現有算法(算法都采用相同的骨干網絡ResNet-101)的性能比較,采用多分支不同空洞率和可行變卷積的TridentNet 算法性能明顯提高,表明不同感受野的應用有助于算法對不同目標的檢測.
從R-CNN、SPP Net、Fast R-CNN、Faster RCNN、Mask R-CNN、Cascade R-CNN和TridentNet算法網絡逐步優化,每個算法均解決一部分難題,具體來說:
(1)RCNN 解決了使用CNN 進行目標定位問題;
(2)Fast R-CNN 解決了目標定位和分類同步問題;
(3)Faster R-CNN 解決了選擇性搜索目標問題;
(4)Mask R-CNN 解決了同時進行目標定位、分類和分割問題;
(5)Cascade R-CNN 解決了IoU 閾值選取問題;
(6)TridentNet 解決了從感受野提取圖像特征問題.
2015年Redmon 等提出了基于回歸的目標檢測算法YOLO (You Only Look Once)[30],其直接使用一個卷積神經網絡來實現整個檢測過程,創造性的將候選區和對象識別兩個階段合二為一,采用了預定義的候選區(并不是Faster R-CNN 所采用的Anchor),將圖片劃分為S×S個網格,每個網格允許預測出2 個邊框.對于每個網格,YOLO 都會預測出B個邊界框,而每個邊界框YOLO 都會預測出5 個值,其中4 個代表邊界框的位置,還有一個代表框的置信值.
YOLO的網絡結構示意圖如圖10所示,其中,卷積層用來提取特征,全連接層用來進行分類和預測.網絡結構是受GoogLeNet的啟發,把GoogLeNet的inception層替換成1×1和3×3的卷積.最終,整個網絡包括24 個卷積層和2 個全連接層,其中卷積層的前20 層是修改后的GoogLeNet.網絡經過最后一個FC 層得到一個1470×1的輸出,7×7×30的一個張量,即最終每個網格都有一個30 維的輸出,代表預測結果.

圖10 YOLO 網絡結構圖
YOLO 優點:
(1)將目標檢測問題轉化為一個回歸問題求解.結構非常簡單,直接使用一個卷積神經網絡實現同時預測邊界框的位置和類別;
(2)速度非常快,可以實現視頻的實時檢測;
(3)泛化能力強,能學習到高度泛化的特征,可以遷移到其他領域.
Redmon 等對YOLO 網絡結構做修改提出了YOLOv2 方法[21],YOLOv2 用DarkNet-19 用做基礎網絡,包含19 個卷積層、5 個最大值池化層.YOLOv2 網絡通過在每一個卷積層后添加批量歸一化層(batch normalization),同時不再使用dropout.YOLOv2 引入了錨框(anchor boxes)概念,提高了網絡召回率,YOLOv1只有98 個邊界框,YOLOv2 可以達到1000 多個.網絡中去除了全連接層,網絡僅由卷積層和池化層構成,保留一定空間結構信息.結果mAP 由69.5% 下降到69.2%,下降了0.3%,召回率由81%提升到88%,提升7%.盡管mAP 略微下降,但召回率的上升意味著模型有更大的提升空間.同時利用K-means 聚類,解決了anchor boxes的尺寸選擇問題.
YOLOv3[23]借鑒了ResNet的殘差結構,使主干網絡變得更深(從v2的DarkNet-19 上升到v3的DarkNet-53).整個YOLOv3 結構里面,沒有池化層和全連接層,在前向傳播過程中,張量的尺寸變換是通過改變卷積核的步長來實現.相應改進使YOLOv3 與SSD 相當的精確度下達到50 fps的檢測速度,并在COCO 測試數據上mAP的最佳效果達到33.0%,與RetinaNet的結果相近,速度快了3 倍,但整體模型變得更加復雜,速度和精度相互制衡.
YOLOv3 改進之處:
(1)多尺度預測,借鑒FPN,采用多尺度來對不同大小的目標進行檢測.
(2)更好的分類網絡,從DarkNet-19 到DarkNet-53.
(3)采用Logistic 對目標進行分類,替換之前用Softmax的分類方法,且Softmax 可被獨立的多個Logistic分類器替代,準確率不會下降.
Liu 等提出的SSD (Single Shot multibox Detector)方法[22]是對YOLO 算法的改進,其網絡結構如圖11所示.SSD 與YOLO 主要不同在于以下幾個方面:
(1)采用多尺度特征圖用于檢測.SSD 使用VGG16作為主干網絡,并在VGG16的基礎上添加了新的卷積層以獲得不同大小的特征圖,較大的特征圖用來檢測小目標,較小的特征圖用來檢測大目標.
(2)采用卷積進行檢測.YOLO 最后采用全連接,而SSD 直接采用卷積對不同的特征圖進行提取特征.對于形狀為m×n×p特征圖,只需要采用3×3×p這樣較小的卷積核得到檢測值.
(3)設置先驗框.YOLO 中每個單元預測多個邊界框,但是都是相對于這個單元本身,YOLO 需要在訓練過程中自適應目標的形狀.SSD 借鑒了Faster-RCNN的anchor 理念,每個單元設置尺度或者長寬比不同的先驗框,減小了訓練的難度,對重疊或近鄰的物體有更好的預測效果.

圖11 SSD 網絡結構圖
SSD 算法檢測速度較快,整個過程只需要一步.首先在圖片不同位置按照不同尺度和寬高比進行密集抽樣,然后利用CNN 提取特征后直接進行分類與回歸,速度較快,但均勻密集采樣會造成正負樣本不均衡使得訓練比較困難,導致模型準確度有所降低.SSD 對小目標的檢測沒有大目標好,因為隨著網絡的加深,在高層特征圖中小目標的信息丟失掉,適當增大輸入圖片的尺寸可以提升小目標的檢測效果.
為了提高SSD 對小目標的檢測能力,Fu 等提出了DSSD (De-convolutional Single Shot Detector)方法[31].DSSD的核心思想:提高淺層的表征能力.首先將主干網絡由VGG 替換成更深的ResNet-101,增強了網絡提取的能力,其次修改了預測模塊,添加了類似于ResNet的shortcuts 通道,將各層次之間特征相結合.DSSD的主要特點是增加了反卷積模塊DM (Deconvolution Module),DM 模塊與SSD 中的卷積層網絡構成了不對稱的“沙漏”結構.DM 模塊與整個沙漏結構,更充分利用了上下文信息和淺層的特征,從而與SSD 相比在小目標和密集目標的檢測率上有很大的提高.但是由于ResNet-101 網絡層數太深,網絡結構過于復雜,導致檢測速度大幅度降低,DSSD 檢測513×513 圖像時速度只有6 fps.
Lin 等[24]認為基于回歸的目標檢測方法精度不及基于候選區域的目標檢測方法的根本原因在于“類別不平衡”,基于候選區域的目標檢測算法由于RPN 網絡的存在,過濾掉了大部分背景框,從而緩解了“類別不平衡”的問題.而one-stage 算法直接在生成的“類別極不平衡”的邊框中進行難度極大的細分類,意圖直接輸出邊框和標簽.而原有交叉熵損失作為分類任務的損失函數,無法抗衡“類別極不平衡”,容易導致分類器訓練失敗.因此,one-stage 目標檢測算法雖然保住了檢測速度,卻喪失了檢測精度.
文獻[24]提出的RetinaNet 采用Focal Loss 損失函數代替交叉熵誤差,來抑制量大的類別所貢獻的損失值.通過此種方法,使得訓練過程中量少的類別的權重更大,從而緩解了“類別不平衡”的問題.RetinaNet的網絡結構如圖12所示,采用ResNet+FPN 網絡提取圖像的多尺度信息,再利用one-stage 目標識別法+Focal Loss,這個結構在COCO 數據集上的mAP 達到了39.1%,速度為5 fps,精度超過同期所有two-stage的檢測器.
目前大部分常用目標檢測算法(比如RCNN 系列,SSD,YOLO 系列等)都是基于錨框(即anchor boxes)進行目標檢測,引入錨框的缺點在于:(1)正負樣本不均衡.大部分檢測算法的錨框數量成千上萬,而目標數量相對少很多,導致正樣本數量會遠遠小于負樣本.(2)引入更多的超參數,比如anchor的數量、大小和寬高比等.Law 等[25]舍棄了傳統的錨框思路,提出了一種無錨框的目標檢測新算法,即CornerNet 算法,該算法使用單個卷積神經網絡將目標邊界框檢測為一對關鍵點(即邊界框的左上角和右下角),也就是使用單一卷積模型生成熱點圖和嵌入式向量.
CornerNet 算法架構包含3 部分:環面網絡、右下角和左上角的熱圖、預測模塊,如圖13所示.

圖12 RetinaNet 網絡結構圖

圖13 CornerNet 網絡結構圖
(1)環面網絡(即Hourglass 網絡)是人體姿態估計的典型架構,堆疊兩個環面網絡生成兩組熱力特征圖來預測不同分類下的角點,其中一組負責預測左上角點,另一組負責預測右下角點,每一個角都包括角合并、對應的熱圖、嵌入式向量和偏移;
(2)環面網絡同時包含多個從下往上(從高分辨率到低分辨率)和從上往下(從低分辨率到高分辨率)過程,目的是在各個尺度下抓取信息;
(3)嵌入式向量使相同目標的兩個頂點(左上角和右下角)距離最短,偏移用于調整生成更加緊密的邊界定位框.
CornerNet 算法消除了現有one stage 檢測算法中對錨框的需要,整個檢測網絡的訓練從頭開始并不基于預訓練的分類模型,用戶能夠自由設計特征提取網絡,不用受預訓練模型的限制.同時該算法提出了一種新的池化方法(即corner pooling),能夠幫助網絡更好地定位邊界框的角點,提高算法的檢測精度.
CornerNet 算法在生成邊界框的時候在生成邊界框的時候受限于檢測的角點對,即如果生成角點對的質量夠高,則對應的邊界框的質量也高;反之,則會產生錯誤的邊界框.
在生成邊界框是不能僅依靠角點對的信息,還需要角點對生成的區域內部信息.Duan 等[26]在CornerNet算法基礎上改進并提出的CenterNet 算法,使模型能夠自行判斷生成邊界框的正確性.CenterNet算法將左上角、右下角和中心點結合成為三元組進行物體框的判斷,不僅預測角點,也預測中心點,如果角點對所定義的預測框的中心區域包含中心點,則保留此預測框,否則棄掉.同時如果預測的邊界框與標注框有很大的交并比,即該預測框的質量較高,該預測框的中心區域應該包含中心關鍵點.文獻[26]為了提高檢測角點對和中心點的質量,提出具有創新性的級聯角點池化(cascade corner pooling)和中心池化(center pooling)改善上述關鍵點的生成.
(1)級聯角點池化:針對角點對的預測,級聯角點池化首先提取物體邊界最大值(corner pooling),然后在邊界最大值處繼續向內部提取最大值,并與邊界最大.
(2)值相加,以結合更多內部信息,使其具有感知內部信息的能力.
(3)中心池化:針對中心點的預測,中心池化提取中心點水平方向和垂直方向的最大值并相加,以此給中心點提供所處位置以外的信息,將有助于中心關鍵點獲取目標的更多信息、感知邊界框的中心區域.
CornerNet 算法引入了目標內的信息,同時通過級聯角點池化和中心池化兩種策略來改善了各關鍵點的生成,利用生成邊界框內部的信息來篩選出高質量的邊界框,從而顯著提升檢測效果.
目前基于深度學習的目標檢測算法受到了學者的廣泛關注和深入研究,主要分為兩大類算法:基于候選區域的two-stage 算法和基于回歸的one-stage 算法.通過國內外學者的廣泛研究兩類算法衍生出了不同神經網絡機制和特性,不同算法之間的優缺點和適用場景均不同,表2顯示了幾種典型算法優缺點.

表2 不同目標檢測算法優缺點總結
Two-stage 目標檢測算法由于事先獲取候選區域,能夠充分學習到目標的特征,其檢測精度和定位精度高,但是網絡結構復雜,計算量大,檢測速度較慢,不適用于實時性要求較高的應用場景.One-stage 目標檢測算法結構簡單,可直接對輸入圖像進行處理,檢測精度較高并且檢測速度快,可以實現實時性檢測,能滿足一些實時在線檢測應用場景,如表面缺陷實時檢測,火災實時檢測,高空作業實時檢測等,但是one-stage 算法對小目標、多目標物體檢測精度較低,特別是在復雜場景下,檢測精度并不能滿足要求,如自動駕駛領域的目標檢測.目前TridentNet和CenterNet 分別為twostage和one-stage 目標檢測系列算法中檢測精度相對較高的算法,但它們對小目標檢測的精度仍比較低,對于目標尺度跨度非常大的應用場景仍不滿足要求,因此,目前的絕大多數目標檢測算法均只能應用于場景相對較簡單卻目標尺度跨度不大的應用場景.
本文對基于深度學習的主流目標檢測算法做了簡要綜述,主要包括典型算法的思路、創新策略、檢測精度和應用場景等方面.雖然在過去的20年中物體目標檢測取得了顯著的成就,仍然存在許多難以解決的問題[32],下面是對面臨的難題以及未來發展方向的一些討論:
(1)小目標檢測.目前算法對于小目標的檢測能力相對較弱,但無人機航拍、衛星遙測、紅外目標識別等領域對小目標檢測有較強的需求.小目標圖像往往面臨著分辨率低、像素少和訓練數據難以標記的問題.例如在無人機高清航拍過程中,即使照片分辨率已經達到4k 級別,但由于小目標所占面積較小,導致難以標定和訓練.
(2)弱監督目標檢測方法.目前絕大多數目標檢測算法的精度均依賴大量標注完整的圖像數據集,在大型數據集中標注工作量大,標注時間長,對于算法模型訓練時間也長,因此目前目標檢測算法的實施成本較高,難度相對較大.弱監督目標檢測方法是利用少量完整標注的圖像自動檢測大量未完整標注的圖像,這將大大降低目標檢測模型的開發難度和周期,因此開發弱監督目標檢測方法是一個值得進一步研究的重要問題.
(3)多領域目標檢測:目前算法基本只針對特定場景特定目標物進行檢測,特定領域的檢測器只能夠在指定數據集上實現較高的檢測性能,特定領域的檢測器應用場景單一,不具備多領域多場景通用性.為了得到一種適用于各種圖像檢測領域的通用檢測器,多領域目標檢測器可以在不存在新領域先驗知識的情況下解決這一問題,但檢測領域轉移是一個具有挑戰性的課題,有待進一步研究.
(4)多任務學習:多層次特征的聚合骨干網絡是提高檢測性能的重要方法.當同時進行多個計算機視覺任務,如目標檢測、語義分割、實例分割、邊緣檢測、突出點檢測等,可以獲得更豐富的信息,大大提高單獨任務的性能.多任務學習是一種將多個任務聚合到一個網絡中的學習方法,其在保持處理速度和提高準確率同時,對研究者提出了很大的挑戰.