陸 峰,劉華海,黃長纓,楊 艷,謝 禹,劉財喜3,
1(上海城投環(huán)境(集團)有限公司,上海 200331)
2(上海環(huán)境物流有限公司,上海 200333)
3(百工匯智(上海)工業(yè)科技有限公司,上海 201209)
4(上海寶信軟件股份有限公司,上海 201203)
目標檢測是一種與計算機視覺和圖像處理有關(guān)的計算機技術(shù),用于檢測數(shù)字圖像和視頻中特定類別的語義對象(例如人、建筑物或汽車等),其在視頻安防,自動駕駛,交通監(jiān)控,無人機場景分析和機器人視覺等領(lǐng)域有廣闊的應(yīng)用前景[1,2].近年來,由于卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展和硬件算力提升,基于深度學習的目標檢測取得了突破性的進展.目前,深度學習算法已在計算機視覺的整個領(lǐng)域得到廣泛采用,包括通用目標檢測和特定領(lǐng)域目標檢測.大多數(shù)最先進的目標檢測算法都將深度學習網(wǎng)絡(luò)用作其骨干網(wǎng)和檢測網(wǎng)絡(luò),分別從輸入圖像(或視頻),分類和定位中提取特征.
本文將對基于深度學習的主流目標檢測算法進行總結(jié)和比較.第2 節(jié)對卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展做簡要概述;第3 節(jié)對主流卷積神經(jīng)網(wǎng)絡(luò)進行分析和比較,總結(jié)算法性能以及優(yōu)缺點;第4、5 節(jié)分別對基于候選區(qū)域和基于回歸的目標檢測算法深入分析,包括網(wǎng)絡(luò)結(jié)構(gòu)以及創(chuàng)新和改進;第6 節(jié)對典型的目標檢測算法進行比較和總結(jié);第7 節(jié)對目標檢測算法的未來研究方向進行了思考和展望.
深度學習模型可以看作是為具有深度結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò).神經(jīng)網(wǎng)絡(luò)的歷史可以追溯到1940年代[3],最初的目的是模擬人的大腦系統(tǒng),以有原則的方式解決一般的學習問題.隨著Hinton 等[4]提出的反向傳播算法,神經(jīng)網(wǎng)絡(luò)算法逐漸變得流行起來.但是,由于缺乏大規(guī)模的訓練數(shù)據(jù)、過度擬合、有限的計算能力以及與其他機器學習工具相比性能的不足等缺點,到2000年,各學者對神經(jīng)網(wǎng)絡(luò)算法的研究趨于冷淡.自2006年以來,由于語音識別技術(shù)的突破,重新燃起了人們對于深度學習研究的熱情[5,6].對深度學習的重新重視可以歸因于以下幾點:
(1)大規(guī)模的帶注釋的訓練數(shù)據(jù)的出現(xiàn),以充分展現(xiàn)其非常大的學習能力.
(2)快速開發(fā)高性能并行計算系統(tǒng),例如GPU 集群.
(3)網(wǎng)絡(luò)結(jié)構(gòu)和訓練策略設(shè)計方面的重大進步.在自動編碼器的指導下進行無監(jiān)督的預訓練,可以提供良好的初始化.隨著dropout 技術(shù)和數(shù)據(jù)擴充,訓練中的過度擬合問題得到緩解.使用批量歸一化后,深層次的神經(jīng)網(wǎng)絡(luò)的訓練變得簡單有效.同時,為了提高神經(jīng)網(wǎng)絡(luò)的泛化性能,提出各種不同結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò).例如AlexNet[7]、VGG[8]、GoogLeNet[9]和ResNet[10]等.
卷積神經(jīng)網(wǎng)絡(luò)CNN是深度學習的最具代表性的模型[11].CNN的每一層稱為特征圖,輸入層的特征圖是不同顏色通道(例如RGB)像素強度的3D 矩陣.任何內(nèi)部層的特征圖都是感應(yīng)的多通道圖像,其“像素”可以視為特定特征.每個神經(jīng)元都與前一層的一部分相鄰神經(jīng)元相連.可以在特征圖上執(zhí)行不同類型的轉(zhuǎn)換[12],例如濾波和池化,濾波運算將濾波器矩陣(學習的權(quán)重)與神經(jīng)元感受野的值進行卷積,并采用非線性函數(shù)(例如Sigmoid,ReLU)以獲得最終響應(yīng).池化操作,諸如最大池化、平均池化和L2 池化操作[13]是將接收域的響應(yīng)匯總為一個值,以生成更可靠的特征描述.通過卷積和池化之間的交織,能夠構(gòu)造初始要素的層次性結(jié)構(gòu),最后添加幾個全連接層以適應(yīng)不同的視覺任務(wù).根據(jù)涉及的任務(wù),添加不同的激活函數(shù),以獲得每個輸出神經(jīng)元的響應(yīng).通過隨機梯度下降方法在目標函數(shù)(例如均方誤差或交叉熵損失)上優(yōu)化整個網(wǎng)絡(luò).
與傳統(tǒng)方法相比,CNN的優(yōu)勢可總結(jié)如下:
(1)通過分層多級結(jié)構(gòu)[14,15]可以學習到從像素到高級語義特征的多級表示,從而獲得輸入數(shù)據(jù)的隱藏信息.
(2)與傳統(tǒng)的淺層模型相比,更深的網(wǎng)絡(luò)結(jié)構(gòu)成倍的增加了表達能力.
(3)CNN的架構(gòu)為共同優(yōu)化幾個相關(guān)任務(wù)提供了可能(例如,Fast R-CNN 將分類和邊界框回歸結(jié)合為一種多任務(wù)學習方式)
圖1為目標檢測算法的發(fā)展史,時間軸下方展示了基于深度學習的分類網(wǎng)絡(luò)的發(fā)展歷程.其中標記框內(nèi)為one-stage 算法.可以看出圖像分類算法貫穿目標檢測算法的始終,而two-stage 算法在前期占據(jù)主導地位,one-stage 目標檢測算法在后期蓬勃發(fā)展.這是因為圖像分類算法和two-stage 目標檢測算法中回歸分析方法對于one-stage 目標檢測算法的發(fā)展都有重要的促進作用.表1比較了不同目標檢測算法在COCO 數(shù)據(jù)集上的性能,可以發(fā)現(xiàn)隨著目標檢測技術(shù)的發(fā)展,目標檢測算法精度和檢測速度均得到了大幅提升[16-26].
手寫字體識別模型LeNet[27]誕生于1998年,是最早的卷積神經(jīng)網(wǎng)絡(luò)之一.它利用卷積、參數(shù)共享、池化等操作提取特征,避免了大量的計算成本,最后再使用全連接神經(jīng)網(wǎng)絡(luò)進行分類識別.
圖1 目標檢測算法發(fā)展史
LeNet 網(wǎng)絡(luò)結(jié)構(gòu)除去輸入和輸出層后,它有6 層網(wǎng)絡(luò)組成,其中包括3 個卷積層(C),2 個下采樣層(S)和1 個全連接層(F).其中卷積層采用5×5的卷積核,而下采樣層分別采用的平均值池化(S2)和最大值池(S4).
LeNet 特點如下:(1)使用卷積來提取特征,組成基本的結(jié)構(gòu)單元:卷積-池化-非線性激活;(2)加入非線性激活,采用tanh和Sigmoid;(3)池化層使用平均值池化;(4)分類器使用高斯分類.
2012年Krizhevsky 等[7]提出的AlexNet 以16.4%的顯著優(yōu)勢問鼎ILSVRC的冠軍,它第一次采用ReLU,dropout,GPU 加速等技巧,參數(shù)數(shù)量為6000 萬個,模型大小240 MB 左右.其網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示,共8 層網(wǎng)絡(luò)結(jié)構(gòu),其中5 個卷積層和3 個全連接層.第一個卷積層的卷積為步長為4,大小為11×11;第二個卷積層的卷積核步長為1,大小為5×5;其余卷積層的大小均為3×3,步長為1.
表1 不同目標檢測算法性能對比
圖2 AlexNet 網(wǎng)絡(luò)結(jié)構(gòu)圖
AlexNet 將CNN的基本原理應(yīng)用到了更深的網(wǎng)絡(luò)中.主要應(yīng)用的新技術(shù)如下:
(1)使用ReLU 作為CNN的激活函數(shù),成功解決了Sigmoid 在網(wǎng)絡(luò)較深時的梯度彌散問題.
(2)訓練時使用dropout 隨機忽略一部分神經(jīng)元,以避免模型過擬合.
(3)池化層使用重疊的最大池化,避免平均池化的模糊化效果.
(4)提出LRN 層,對局部神經(jīng)元的活動創(chuàng)建競爭機制,使得其中響應(yīng)比較大的值變得相對更大,并抑制其他反饋較小的神經(jīng)元,增強了模型的泛化能力.
(5)使用CUDA 加速深度卷積網(wǎng)絡(luò)的訓練,利用GPU 強大的并行計算能力,處理神經(jīng)網(wǎng)絡(luò)訓練時大量的矩陣運算.
(6)數(shù)據(jù)增強.隨機對圖片進行鏡像,旋轉(zhuǎn),隨機噪聲等數(shù)據(jù)增強操作,大大降低過擬合現(xiàn)象.
VGGNet[8]網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示,相比AlexNet具有較深的深度,網(wǎng)絡(luò)表達能力進一步增強,同時在ImageNet 上測試的精度進一步提高,VGGNet 網(wǎng)絡(luò)優(yōu)點:
(1)結(jié)構(gòu)非常簡潔,整個網(wǎng)絡(luò)都使用了同樣大小的卷積核尺寸(3×3)和最大池化尺寸(2×2).
(2)驗證了幾個小濾波器(3×3)卷積層組合比一個大濾波器(5×5 或7×7)卷積層好.減少了參數(shù)同時得到更多非線性映射,增加網(wǎng)絡(luò)表達能力.
(3)驗證了深層次的網(wǎng)絡(luò)可以獲得高級語義特征,通過不斷加深網(wǎng)絡(luò)結(jié)構(gòu)可以提升網(wǎng)絡(luò)性能.
圖3 VGGNet 網(wǎng)絡(luò)結(jié)構(gòu)圖
GoogLeNet[9]是一個22 層的深度網(wǎng)絡(luò),在主干卷積環(huán)節(jié)有3 個inception 模塊,模塊之間用3×3的最大池化層隔開.Inception 模塊如圖4所示,該結(jié)構(gòu)分4 條線路并行,將CNN 中常用的卷積(1×1,3×3,5×5)、池化操作(3×3)堆疊在一起.采用不同大小的卷積核獲得不同大小的感受野,最后拼接融合不同尺度的特征,增加了網(wǎng)絡(luò)對尺度的適應(yīng)性.為了解決計算過量的問題,在后3 條路線上增加了1×1 卷積核來進行降維.同時為了緩解梯度消失的問題,GoogLeNet 增加了兩個輔助分類器.這兩個輔助分類器被添加到網(wǎng)絡(luò)的中間層,它們和主分類器共享同一套訓練數(shù)據(jù).
圖4 Inception 網(wǎng)絡(luò)結(jié)構(gòu)圖
GoogleNet 特點:
(1)采用1×1 卷積核,性價比高,用很少的計算量就可以增加一層的特征變換和非線性變換;
(2)提出batch normalization,把每層神經(jīng)元的輸入值分布回歸到均值0 方差1的正太分布,使其落入激活函數(shù)的敏感區(qū),避免梯度消失,加快收斂;
(3)引入Inception 模塊,4 個分支結(jié)合的結(jié)構(gòu),每個分支采用1×1的卷積核;
(4)去除了最后的全連接層,大大減少計算量.
越深的網(wǎng)絡(luò)有越高等級特征,擁有強大表達能力.然而神經(jīng)網(wǎng)絡(luò)隨著層數(shù)的增加,網(wǎng)絡(luò)退化嚴重,即深層次的網(wǎng)絡(luò)反而不如稍淺層次的網(wǎng)絡(luò)性能,這并非是過擬合導致的.何凱明等提出的ResNet[10]網(wǎng)絡(luò)很好的解決了這個問題,ResNet 模型的核心是通過建立前面層與后面層之間的“短路連接”,在淺層網(wǎng)絡(luò)的基礎(chǔ)上疊加y=x層,就是恒等映射(identity mapping),可以讓網(wǎng)絡(luò)深度增加而不退化,有助于訓練過程中梯度的反向傳播,從而能訓練出更深的CNN 網(wǎng)絡(luò),實現(xiàn)更高的準確度.
圖5為殘差模塊的示意圖,殘差函數(shù)F(x)=H(x)?x,如果F(x)=0,即為恒等映射,這樣學習訓練過程相當于自主確定了多少層次的網(wǎng)絡(luò)是最優(yōu)的.
ResNet 特點:
(1)通過殘差模塊將網(wǎng)絡(luò)深度進一步提高,解決了不斷深化神經(jīng)網(wǎng)絡(luò)而使準確率飽和的問題.通過活用1×1 卷積降低了特征圖維度,控制了參數(shù)數(shù)量.
(2)存在明顯層級,特征圖個數(shù)層層遞進,保證輸出特征的表達能力.
(3)使用較少池化層,大量采用下采樣,提高傳播效率.
圖5 殘差網(wǎng)絡(luò)結(jié)構(gòu)圖
DenseNet[28]模型的基本思路與ResNet 一致,通過短路連接來融合前后幾層的信息,但是DenseNet 建立前面所有層與后面層的密集連接,同時通過特征上的連接來實現(xiàn)特征重用.這些特點讓DenseNet 在參數(shù)和計算成本更少的情形下實現(xiàn)比ResNet 更優(yōu)的性能,DenseNet 也因此斬獲CVPR 2017的最佳論文獎.
DenseNet 網(wǎng)絡(luò)結(jié)構(gòu)主要結(jié)構(gòu)分稠密塊(Dense blocks)和過渡層(transition layers).稠密塊結(jié)構(gòu)能夠互相連接所有的層,具體就是每個層都會接受其前面所有層作為其額外的輸入.對于一個L 層的網(wǎng)絡(luò),DesNet共包含L(L+1)/2 個連接,可以實現(xiàn)特征重用,提升效率,并且緩解了深層網(wǎng)絡(luò)的梯度消失問題.過渡層為相鄰2 個稠密塊的中間部分,稠密塊是連接兩個相鄰的稠密塊,并且通過池化使特征圖大小降低.
DenseNet的優(yōu)勢主要體現(xiàn)在以下幾個方面:
(1)由于密集連接方式,DenseNet 提升了梯度的反向傳播,使得網(wǎng)絡(luò)更容易訓練.由于每層可以直達最后的誤差信號,實現(xiàn)了隱式的深度監(jiān)督;
(2)參數(shù)更小且計算更高效,由于DenseNet是通過拼接特征來實現(xiàn)短路連接,實現(xiàn)特征重用;
(3)由于特征復用,最后的分類器使用了低級特征.
基于候選區(qū)域的目標檢測算法,即two-stage 目標檢測算法,該方法先提取到目標的候選區(qū)域,然后再由神經(jīng)網(wǎng)絡(luò)做分類和回歸.本節(jié)將就two-stage 目標檢測主流算法做簡要介紹.
Girshck 等針對卷積神經(jīng)網(wǎng)絡(luò)如何實現(xiàn)目標定位的問題,提出了將于Region proposal和CNN 結(jié)合的算法R-CNN[14],開創(chuàng)了神經(jīng)網(wǎng)絡(luò)實現(xiàn)目標檢測的先河,其計算流程如圖6所示,可分為4 步,首先利用選擇搜索算法提取候選區(qū)域,接著將候選區(qū)域縮放到固定大小,然后進入卷積神經(jīng)網(wǎng)絡(luò)提取特征,隨后將提取的特征向量送入SVM 分類器得到候選區(qū)域目標的類別信息,送入全連接網(wǎng)絡(luò)進行回歸得到位置信息.
圖6 R-CNN 網(wǎng)絡(luò)結(jié)構(gòu)示意圖
R-CNN 缺點:
(1)輸入的圖像大小會進行縮放,導致圖像失真;
(2)用選擇性搜索算法提取約2000 個候選區(qū)域,每個候選區(qū)域都要送入卷積神經(jīng)網(wǎng)絡(luò)提取特征,計算量大耗時多;
(3)訓練測試復雜,候選區(qū)域提取、特征獲、分類和回歸都是單獨運行,中間數(shù)據(jù)也是單獨保存卷積提取的特征需單獨存儲,占用大量硬盤空間.
2014年He 等針對R-CNN的缺陷進行了改進,開發(fā)出了SPP-Net (Spatial Pyramid Pooling Network)[29].SPP-Net 將整個圖片送入卷積提取特征,避免了候選區(qū)域分別送入卷積層提取特征造成的重復計算.再次,在卷積層和全連接層之間增添了空間金字塔池化層(Spatial Pyramid Pooling,SPP),可以對不同大小特征圖進行池化操作并生成特定大小的特征圖,避免了R-CNN 對圖像進行縮放導致圖像失真.
SPP-Net 缺點:
(1)與R-CNN 設(shè)計相同,訓練各個階段都是單獨運行,且中間數(shù)據(jù)必須保存.
(2)訓練數(shù)據(jù)的圖像尺寸大小不一致,使候選框感受野過大,不可以使用反向傳播有效的更新權(quán)重.
(3)網(wǎng)絡(luò)微調(diào)只更新了全連接層,不能實現(xiàn)端到端的檢測且檢測精度還需進一步提升.
借鑒空間金字塔池化層的思路,Ross 等2015年提出Fast R-CNN[16],用感興趣池化層(Region of Interest,RoI)代替了空間金字塔池化層,它去掉了SPP的多尺度池化,直接用網(wǎng)格將每個候選區(qū)域均勻分若干個區(qū)域塊,同時對每個塊進行最大值池化,從而將特征圖上大小不一的候選區(qū)域轉(zhuǎn)變?yōu)榇笮〗y(tǒng)一的特征向量.針對在訓練期間為多階段和特征重復計算造成的時間代價以及數(shù)據(jù)存儲過量的問題,將神經(jīng)網(wǎng)絡(luò)與SVM 分類相結(jié)合,由全連接層同時負責分類和回歸任務(wù),實現(xiàn)了多任務(wù)端到端訓練,使檢測精度和速度同時得到了提高.Fast R-CNN 網(wǎng)絡(luò)流程如圖7所示,主要分3 部分,首先將圖像送入卷積網(wǎng)絡(luò)提取特征,然后通過感興趣池化層將候選區(qū)域池化為同一長度的特征向量,最后通過全連接層進行分類和回歸.Fast R-CNN 在PASCAL VOC數(shù)據(jù)集中檢測時間為每張0.32 s,遠小于R-CNN的45 s和SPP-Net的2.3 s.
雖然Fast R-CNN 實現(xiàn)了多任務(wù)端到端的訓練,然而通過選擇性搜索算法提取候選區(qū)域耗費了較多時間,訓練和預測所需時間仍較長,不能實現(xiàn)實時性檢測.
Ren 等在Fast R-CNN的基礎(chǔ)上提出Faster R-CNN[17]算法,在卷積層后添加了區(qū)域提取網(wǎng)絡(luò)RPN (Region Proposal Network),代替了Fast R-CNN的選擇性搜索算法.RPN 核心思想是使用CNN 卷積神經(jīng)網(wǎng)絡(luò)直接產(chǎn)生候選區(qū)域,錨框機制和邊框回歸可以得到多尺度多長寬比的候選區(qū)域.RPN 網(wǎng)絡(luò)也是全卷積網(wǎng)絡(luò)(Fully-Convolutional Network,FCN),可以針對生成檢測建議框的任務(wù)端到端訓練,能夠同時預測出目標物體的邊界和分數(shù).
Faster R-CNN 整個流程如圖8所示,先對圖像進行卷積提取特征,然后進入RPN 層得到候選區(qū)域,最后全連接層進行分類和回歸.整個流程從圖像特征提取、候選區(qū)域獲得到分類和回歸都在神經(jīng)網(wǎng)絡(luò)中進行,且整個網(wǎng)絡(luò)流程都能共享卷積神經(jīng)網(wǎng)絡(luò)提取的特征信息,提高了算法的速度和準確率,從而實現(xiàn)了兩階段模型的深度.Faster R-CNN 在PASCAL VOC 2007和2012 上的mAP 分別為73.2%和70.4%,檢測速度達到5 fps.
圖7 Fast R-CNN 網(wǎng)絡(luò)流程圖
圖8 Faster R-CNN 網(wǎng)絡(luò)流程圖
Faster R-CNN 雖然大幅提高了算法精度和速度,但仍存在一些缺點:(1)獲取候選區(qū)域,再對每個候選區(qū)域分類計算量還是比較大;(2)雖然速度有了提高,但還是沒達到實時性檢測的要求.
2017年He 等在Faster R-CNN的基礎(chǔ)上再次改進,提出了Mask R-CNN[18]算法,通過添加Mask 分支,能夠同時實現(xiàn)目標檢測和語義分割任務(wù).由于Faster RCNN 在下采樣和感興趣池化層都采取了取整運算,對檢測任務(wù)產(chǎn)生了影響,特別是對于像素級檢測的任務(wù).通過RoI align 層替換RoI Pooling 層,使用雙線性插值來確定非整數(shù)位置的像素,使得每個感受野取得的特征能更好對齊原圖感受野區(qū)域.此外Mask R-CNN 采用基礎(chǔ)網(wǎng)絡(luò)ResNet+FPN (Feature Pyramid Network)來提取圖像特征,如圖9所示,在COCO 數(shù)據(jù)集上的檢測準確率從Fast R-CNN的19.7%提高至39.8%.
圖9 Mask R-CNN 網(wǎng)絡(luò)流程圖
Mask R-CNN 網(wǎng)絡(luò)的優(yōu)點在于:它在Faster R-CNN網(wǎng)絡(luò)的基礎(chǔ)上增加了目標掩碼作為輸出量,掩碼是將一個對象的空間布局進行編碼,從而使得對目標的空間布局提取更精細.其缺點在于:分割分支增加了計算量,導致Mask R-CNN 比Faster R-CNN 檢測速度慢一些.
R-CNN 系列算法在檢測目標時均存在IoU 閾值選取問題,閾值選取越高就越容易得到高質(zhì)量的樣本,但一味選取高閾值會引發(fā)兩個問題:(1)樣本減少引發(fā)的過擬合;(2)在推理階段出現(xiàn)檢測器最優(yōu)的閾值與輸入候選的IOU 值發(fā)生不匹配.因此,單一檢測器很難抉擇一個合適的IOU,無論高低都是有很大弊端.
針對此類問題Cai 等[19]提出了一種級聯(lián)檢測器,他們利用前一個檢測器輸出作為下一個檢測器的輸入,同時相應(yīng)的提高訓練時的IoU 閾值,使得IoU 閾值與預選框的IoU 值較為接近,訓練的3 個檢測器最后輸出結(jié)果精度更高,從而在推理階段合理的提高了檢測器優(yōu)選IoU 閾值.
Cascade R-CNN 算法核心由一系列的檢測模型組成,每個檢測模型都基于不同IoU 閾值的正負樣本訓練得到,通過重采樣改變了不同階段的輸入假設(shè)分布,并且保證了每個階段有足夠固定數(shù)量的正例樣本數(shù).通過調(diào)整閾值的方式重采樣,不斷改變候選框的分布,在保證樣本數(shù)不減少的情況下訓練出高質(zhì)量的檢測器,從而不會出現(xiàn)過擬合,且在更深層的訓練階段可以得到更高的IoU 閾值.
目標檢測算法對圖像多尺度特征的提取主要是采用骨干網(wǎng)絡(luò),影響骨干網(wǎng)絡(luò)進行多尺度特征提取的因素有:網(wǎng)絡(luò)下采樣率、網(wǎng)絡(luò)深度和感受野.R-CNN 系列算法中大部分學者研究了下采樣率和網(wǎng)絡(luò)深度對算法精度的影響,而對于目標檢測中感受野的影響很少有人研究.Li 等[20]首次提出了TridentNet 算法,通過從感受野的角度來構(gòu)造多尺度目標的特征圖,對于獲取不同尺寸目標的特征過程中結(jié)構(gòu)與權(quán)重相同,促進不同尺寸的目標能夠形成相似特征.實驗證明,不同的感受野對不同尺度目標的檢測有著不同的影響,大的感受野對尺度較大的目標檢測性能較好,小的感受野對小目標的檢測性能較好.
TridentNet 算法針對多尺度特征提取做了以下兩點創(chuàng)新:
(1)多分支結(jié)構(gòu),在最后一層增加了多分支卷積層,用來提取不同尺度目標的特征圖;
(2)不同分支之間結(jié)構(gòu)相同,權(quán)重共享,唯一的不同在于不同分支所對應(yīng)的感受野不一樣(使用空洞卷積來實現(xiàn)).
上述的設(shè)置既能夠保證為不同尺寸目標提取出特征,同時還能促進不同尺寸目標生成相似特征,即結(jié)構(gòu)相同,權(quán)重共享.文獻[20]通過實驗驗證采用3 個不同卷積空洞率時算法的性能最佳,通過與現(xiàn)有算法(算法都采用相同的骨干網(wǎng)絡(luò)ResNet-101)的性能比較,采用多分支不同空洞率和可行變卷積的TridentNet 算法性能明顯提高,表明不同感受野的應(yīng)用有助于算法對不同目標的檢測.
從R-CNN、SPP Net、Fast R-CNN、Faster RCNN、Mask R-CNN、Cascade R-CNN和TridentNet算法網(wǎng)絡(luò)逐步優(yōu)化,每個算法均解決一部分難題,具體來說:
(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],其直接使用一個卷積神經(jīng)網(wǎng)絡(luò)來實現(xiàn)整個檢測過程,創(chuàng)造性的將候選區(qū)和對象識別兩個階段合二為一,采用了預定義的候選區(qū)(并不是Faster R-CNN 所采用的Anchor),將圖片劃分為S×S個網(wǎng)格,每個網(wǎng)格允許預測出2 個邊框.對于每個網(wǎng)格,YOLO 都會預測出B個邊界框,而每個邊界框YOLO 都會預測出5 個值,其中4 個代表邊界框的位置,還有一個代表框的置信值.
YOLO的網(wǎng)絡(luò)結(jié)構(gòu)示意圖如圖10所示,其中,卷積層用來提取特征,全連接層用來進行分類和預測.網(wǎng)絡(luò)結(jié)構(gòu)是受GoogLeNet的啟發(fā),把GoogLeNet的inception層替換成1×1和3×3的卷積.最終,整個網(wǎng)絡(luò)包括24 個卷積層和2 個全連接層,其中卷積層的前20 層是修改后的GoogLeNet.網(wǎng)絡(luò)經(jīng)過最后一個FC 層得到一個1470×1的輸出,7×7×30的一個張量,即最終每個網(wǎng)格都有一個30 維的輸出,代表預測結(jié)果.
圖10 YOLO 網(wǎng)絡(luò)結(jié)構(gòu)圖
YOLO 優(yōu)點:
(1)將目標檢測問題轉(zhuǎn)化為一個回歸問題求解.結(jié)構(gòu)非常簡單,直接使用一個卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)同時預測邊界框的位置和類別;
(2)速度非???可以實現(xiàn)視頻的實時檢測;
(3)泛化能力強,能學習到高度泛化的特征,可以遷移到其他領(lǐng)域.
Redmon 等對YOLO 網(wǎng)絡(luò)結(jié)構(gòu)做修改提出了YOLOv2 方法[21],YOLOv2 用DarkNet-19 用做基礎(chǔ)網(wǎng)絡(luò),包含19 個卷積層、5 個最大值池化層.YOLOv2 網(wǎng)絡(luò)通過在每一個卷積層后添加批量歸一化層(batch normalization),同時不再使用dropout.YOLOv2 引入了錨框(anchor boxes)概念,提高了網(wǎng)絡(luò)召回率,YOLOv1只有98 個邊界框,YOLOv2 可以達到1000 多個.網(wǎng)絡(luò)中去除了全連接層,網(wǎng)絡(luò)僅由卷積層和池化層構(gòu)成,保留一定空間結(jié)構(gòu)信息.結(jié)果mAP 由69.5% 下降到69.2%,下降了0.3%,召回率由81%提升到88%,提升7%.盡管mAP 略微下降,但召回率的上升意味著模型有更大的提升空間.同時利用K-means 聚類,解決了anchor boxes的尺寸選擇問題.
YOLOv3[23]借鑒了ResNet的殘差結(jié)構(gòu),使主干網(wǎng)絡(luò)變得更深(從v2的DarkNet-19 上升到v3的DarkNet-53).整個YOLOv3 結(jié)構(gòu)里面,沒有池化層和全連接層,在前向傳播過程中,張量的尺寸變換是通過改變卷積核的步長來實現(xiàn).相應(yīng)改進使YOLOv3 與SSD 相當?shù)木_度下達到50 fps的檢測速度,并在COCO 測試數(shù)據(jù)上mAP的最佳效果達到33.0%,與RetinaNet的結(jié)果相近,速度快了3 倍,但整體模型變得更加復雜,速度和精度相互制衡.
YOLOv3 改進之處:
(1)多尺度預測,借鑒FPN,采用多尺度來對不同大小的目標進行檢測.
(2)更好的分類網(wǎng)絡(luò),從DarkNet-19 到DarkNet-53.
(3)采用Logistic 對目標進行分類,替換之前用Softmax的分類方法,且Softmax 可被獨立的多個Logistic分類器替代,準確率不會下降.
Liu 等提出的SSD (Single Shot multibox Detector)方法[22]是對YOLO 算法的改進,其網(wǎng)絡(luò)結(jié)構(gòu)如圖11所示.SSD 與YOLO 主要不同在于以下幾個方面:
(1)采用多尺度特征圖用于檢測.SSD 使用VGG16作為主干網(wǎng)絡(luò),并在VGG16的基礎(chǔ)上添加了新的卷積層以獲得不同大小的特征圖,較大的特征圖用來檢測小目標,較小的特征圖用來檢測大目標.
(2)采用卷積進行檢測.YOLO 最后采用全連接,而SSD 直接采用卷積對不同的特征圖進行提取特征.對于形狀為m×n×p特征圖,只需要采用3×3×p這樣較小的卷積核得到檢測值.
(3)設(shè)置先驗框.YOLO 中每個單元預測多個邊界框,但是都是相對于這個單元本身,YOLO 需要在訓練過程中自適應(yīng)目標的形狀.SSD 借鑒了Faster-RCNN的anchor 理念,每個單元設(shè)置尺度或者長寬比不同的先驗框,減小了訓練的難度,對重疊或近鄰的物體有更好的預測效果.
圖11 SSD 網(wǎng)絡(luò)結(jié)構(gòu)圖
SSD 算法檢測速度較快,整個過程只需要一步.首先在圖片不同位置按照不同尺度和寬高比進行密集抽樣,然后利用CNN 提取特征后直接進行分類與回歸,速度較快,但均勻密集采樣會造成正負樣本不均衡使得訓練比較困難,導致模型準確度有所降低.SSD 對小目標的檢測沒有大目標好,因為隨著網(wǎng)絡(luò)的加深,在高層特征圖中小目標的信息丟失掉,適當增大輸入圖片的尺寸可以提升小目標的檢測效果.
為了提高SSD 對小目標的檢測能力,Fu 等提出了DSSD (De-convolutional Single Shot Detector)方法[31].DSSD的核心思想:提高淺層的表征能力.首先將主干網(wǎng)絡(luò)由VGG 替換成更深的ResNet-101,增強了網(wǎng)絡(luò)提取的能力,其次修改了預測模塊,添加了類似于ResNet的shortcuts 通道,將各層次之間特征相結(jié)合.DSSD的主要特點是增加了反卷積模塊DM (Deconvolution Module),DM 模塊與SSD 中的卷積層網(wǎng)絡(luò)構(gòu)成了不對稱的“沙漏”結(jié)構(gòu).DM 模塊與整個沙漏結(jié)構(gòu),更充分利用了上下文信息和淺層的特征,從而與SSD 相比在小目標和密集目標的檢測率上有很大的提高.但是由于ResNet-101 網(wǎng)絡(luò)層數(shù)太深,網(wǎng)絡(luò)結(jié)構(gòu)過于復雜,導致檢測速度大幅度降低,DSSD 檢測513×513 圖像時速度只有6 fps.
Lin 等[24]認為基于回歸的目標檢測方法精度不及基于候選區(qū)域的目標檢測方法的根本原因在于“類別不平衡”,基于候選區(qū)域的目標檢測算法由于RPN 網(wǎng)絡(luò)的存在,過濾掉了大部分背景框,從而緩解了“類別不平衡”的問題.而one-stage 算法直接在生成的“類別極不平衡”的邊框中進行難度極大的細分類,意圖直接輸出邊框和標簽.而原有交叉熵損失作為分類任務(wù)的損失函數(shù),無法抗衡“類別極不平衡”,容易導致分類器訓練失敗.因此,one-stage 目標檢測算法雖然保住了檢測速度,卻喪失了檢測精度.
文獻[24]提出的RetinaNet 采用Focal Loss 損失函數(shù)代替交叉熵誤差,來抑制量大的類別所貢獻的損失值.通過此種方法,使得訓練過程中量少的類別的權(quán)重更大,從而緩解了“類別不平衡”的問題.RetinaNet的網(wǎng)絡(luò)結(jié)構(gòu)如圖12所示,采用ResNet+FPN 網(wǎng)絡(luò)提取圖像的多尺度信息,再利用one-stage 目標識別法+Focal Loss,這個結(jié)構(gòu)在COCO 數(shù)據(jù)集上的mAP 達到了39.1%,速度為5 fps,精度超過同期所有two-stage的檢測器.
目前大部分常用目標檢測算法(比如RCNN 系列,SSD,YOLO 系列等)都是基于錨框(即anchor boxes)進行目標檢測,引入錨框的缺點在于:(1)正負樣本不均衡.大部分檢測算法的錨框數(shù)量成千上萬,而目標數(shù)量相對少很多,導致正樣本數(shù)量會遠遠小于負樣本.(2)引入更多的超參數(shù),比如anchor的數(shù)量、大小和寬高比等.Law 等[25]舍棄了傳統(tǒng)的錨框思路,提出了一種無錨框的目標檢測新算法,即CornerNet 算法,該算法使用單個卷積神經(jīng)網(wǎng)絡(luò)將目標邊界框檢測為一對關(guān)鍵點(即邊界框的左上角和右下角),也就是使用單一卷積模型生成熱點圖和嵌入式向量.
CornerNet 算法架構(gòu)包含3 部分:環(huán)面網(wǎng)絡(luò)、右下角和左上角的熱圖、預測模塊,如圖13所示.
圖12 RetinaNet 網(wǎng)絡(luò)結(jié)構(gòu)圖
圖13 CornerNet 網(wǎng)絡(luò)結(jié)構(gòu)圖
(1)環(huán)面網(wǎng)絡(luò)(即Hourglass 網(wǎng)絡(luò))是人體姿態(tài)估計的典型架構(gòu),堆疊兩個環(huán)面網(wǎng)絡(luò)生成兩組熱力特征圖來預測不同分類下的角點,其中一組負責預測左上角點,另一組負責預測右下角點,每一個角都包括角合并、對應(yīng)的熱圖、嵌入式向量和偏移;
(2)環(huán)面網(wǎng)絡(luò)同時包含多個從下往上(從高分辨率到低分辨率)和從上往下(從低分辨率到高分辨率)過程,目的是在各個尺度下抓取信息;
(3)嵌入式向量使相同目標的兩個頂點(左上角和右下角)距離最短,偏移用于調(diào)整生成更加緊密的邊界定位框.
CornerNet 算法消除了現(xiàn)有one stage 檢測算法中對錨框的需要,整個檢測網(wǎng)絡(luò)的訓練從頭開始并不基于預訓練的分類模型,用戶能夠自由設(shè)計特征提取網(wǎng)絡(luò),不用受預訓練模型的限制.同時該算法提出了一種新的池化方法(即corner pooling),能夠幫助網(wǎng)絡(luò)更好地定位邊界框的角點,提高算法的檢測精度.
CornerNet 算法在生成邊界框的時候在生成邊界框的時候受限于檢測的角點對,即如果生成角點對的質(zhì)量夠高,則對應(yīng)的邊界框的質(zhì)量也高;反之,則會產(chǎn)生錯誤的邊界框.
在生成邊界框是不能僅依靠角點對的信息,還需要角點對生成的區(qū)域內(nèi)部信息.Duan 等[26]在CornerNet算法基礎(chǔ)上改進并提出的CenterNet 算法,使模型能夠自行判斷生成邊界框的正確性.CenterNet算法將左上角、右下角和中心點結(jié)合成為三元組進行物體框的判斷,不僅預測角點,也預測中心點,如果角點對所定義的預測框的中心區(qū)域包含中心點,則保留此預測框,否則棄掉.同時如果預測的邊界框與標注框有很大的交并比,即該預測框的質(zhì)量較高,該預測框的中心區(qū)域應(yīng)該包含中心關(guān)鍵點.文獻[26]為了提高檢測角點對和中心點的質(zhì)量,提出具有創(chuàng)新性的級聯(lián)角點池化(cascade corner pooling)和中心池化(center pooling)改善上述關(guān)鍵點的生成.
(1)級聯(lián)角點池化:針對角點對的預測,級聯(lián)角點池化首先提取物體邊界最大值(corner pooling),然后在邊界最大值處繼續(xù)向內(nèi)部提取最大值,并與邊界最大.
(2)值相加,以結(jié)合更多內(nèi)部信息,使其具有感知內(nèi)部信息的能力.
(3)中心池化:針對中心點的預測,中心池化提取中心點水平方向和垂直方向的最大值并相加,以此給中心點提供所處位置以外的信息,將有助于中心關(guān)鍵點獲取目標的更多信息、感知邊界框的中心區(qū)域.
CornerNet 算法引入了目標內(nèi)的信息,同時通過級聯(lián)角點池化和中心池化兩種策略來改善了各關(guān)鍵點的生成,利用生成邊界框內(nèi)部的信息來篩選出高質(zhì)量的邊界框,從而顯著提升檢測效果.
目前基于深度學習的目標檢測算法受到了學者的廣泛關(guān)注和深入研究,主要分為兩大類算法:基于候選區(qū)域的two-stage 算法和基于回歸的one-stage 算法.通過國內(nèi)外學者的廣泛研究兩類算法衍生出了不同神經(jīng)網(wǎng)絡(luò)機制和特性,不同算法之間的優(yōu)缺點和適用場景均不同,表2顯示了幾種典型算法優(yōu)缺點.
表2 不同目標檢測算法優(yōu)缺點總結(jié)
Two-stage 目標檢測算法由于事先獲取候選區(qū)域,能夠充分學習到目標的特征,其檢測精度和定位精度高,但是網(wǎng)絡(luò)結(jié)構(gòu)復雜,計算量大,檢測速度較慢,不適用于實時性要求較高的應(yīng)用場景.One-stage 目標檢測算法結(jié)構(gòu)簡單,可直接對輸入圖像進行處理,檢測精度較高并且檢測速度快,可以實現(xiàn)實時性檢測,能滿足一些實時在線檢測應(yīng)用場景,如表面缺陷實時檢測,火災實時檢測,高空作業(yè)實時檢測等,但是one-stage 算法對小目標、多目標物體檢測精度較低,特別是在復雜場景下,檢測精度并不能滿足要求,如自動駕駛領(lǐng)域的目標檢測.目前TridentNet和CenterNet 分別為twostage和one-stage 目標檢測系列算法中檢測精度相對較高的算法,但它們對小目標檢測的精度仍比較低,對于目標尺度跨度非常大的應(yīng)用場景仍不滿足要求,因此,目前的絕大多數(shù)目標檢測算法均只能應(yīng)用于場景相對較簡單卻目標尺度跨度不大的應(yīng)用場景.
本文對基于深度學習的主流目標檢測算法做了簡要綜述,主要包括典型算法的思路、創(chuàng)新策略、檢測精度和應(yīng)用場景等方面.雖然在過去的20年中物體目標檢測取得了顯著的成就,仍然存在許多難以解決的問題[32],下面是對面臨的難題以及未來發(fā)展方向的一些討論:
(1)小目標檢測.目前算法對于小目標的檢測能力相對較弱,但無人機航拍、衛(wèi)星遙測、紅外目標識別等領(lǐng)域?qū)π∧繕藱z測有較強的需求.小目標圖像往往面臨著分辨率低、像素少和訓練數(shù)據(jù)難以標記的問題.例如在無人機高清航拍過程中,即使照片分辨率已經(jīng)達到4k 級別,但由于小目標所占面積較小,導致難以標定和訓練.
(2)弱監(jiān)督目標檢測方法.目前絕大多數(shù)目標檢測算法的精度均依賴大量標注完整的圖像數(shù)據(jù)集,在大型數(shù)據(jù)集中標注工作量大,標注時間長,對于算法模型訓練時間也長,因此目前目標檢測算法的實施成本較高,難度相對較大.弱監(jiān)督目標檢測方法是利用少量完整標注的圖像自動檢測大量未完整標注的圖像,這將大大降低目標檢測模型的開發(fā)難度和周期,因此開發(fā)弱監(jiān)督目標檢測方法是一個值得進一步研究的重要問題.
(3)多領(lǐng)域目標檢測:目前算法基本只針對特定場景特定目標物進行檢測,特定領(lǐng)域的檢測器只能夠在指定數(shù)據(jù)集上實現(xiàn)較高的檢測性能,特定領(lǐng)域的檢測器應(yīng)用場景單一,不具備多領(lǐng)域多場景通用性.為了得到一種適用于各種圖像檢測領(lǐng)域的通用檢測器,多領(lǐng)域目標檢測器可以在不存在新領(lǐng)域先驗知識的情況下解決這一問題,但檢測領(lǐng)域轉(zhuǎn)移是一個具有挑戰(zhàn)性的課題,有待進一步研究.
(4)多任務(wù)學習:多層次特征的聚合骨干網(wǎng)絡(luò)是提高檢測性能的重要方法.當同時進行多個計算機視覺任務(wù),如目標檢測、語義分割、實例分割、邊緣檢測、突出點檢測等,可以獲得更豐富的信息,大大提高單獨任務(wù)的性能.多任務(wù)學習是一種將多個任務(wù)聚合到一個網(wǎng)絡(luò)中的學習方法,其在保持處理速度和提高準確率同時,對研究者提出了很大的挑戰(zhàn).