總體介紹
目標檢測是計算機視覺裡面十分重要的任務,其主要解決檢測在數字影像中某一類別可見的例項。最終的目的是為了開發一種計算模型和技術,來提供計算機視覺應用所需要的一個基礎的資訊即:目標在哪?
作為計算機視覺中眾多基礎問題中的一個,目標檢測成為了許多其他計算機視覺任務的基礎,比如:例項分割,目標跟蹤和姿態估計等。從應用的角度來看,目標檢測一般被分為兩個研究課題:目標檢測的理論研究和目標檢測的實際應用。前者是在某一框架下模仿人類視覺和感知檢測不同型別的物體,後者則是在特定的應用場景下,如:行人檢測、面部檢測以及文字檢測等。
深度學習的飛速發展使得目標檢測重獲新生,以至於其獲得了重大突破,並使其成為了研究的熱點。目標檢測如今已經廣泛的應用於現實生活中的各種應用之中:無人駕駛、機器人視覺、視訊監控等。
目標檢測中的難點與挑戰
關於目標檢測到底存在什麼困難與挑戰?事實上,這個問題並不是那麼容易回答或者答案比較籠統。因為不同的目標檢測任務會遇到不同的問題和障礙。當然也存在一些計算機視覺上普遍存在的問題,例如:目標的旋轉性、尺度的變換、精準的目標定位、密集與遮擋目標以及檢測速度的提升等。
目標檢測的發展(1999~2019)
里程碑意義的檢測器
傳統的檢測器
如果今天的目標檢測器是在由於深度學習提供源源不斷的動力而熠熠生輝,那麼追溯到20年前則可以被認為是冷兵器時代了。大多數早期的演算法都是基於人工設計的特徵提取器,由於缺失了有效的影像特徵表達,人們不得不設計基於經驗的特徵表達。
- Viola Jones Detectors
18年前,P. Viola 和 M. Jones 已經實現了人臉的實時識別而且不需要任何的限制。當時,"Viola-Jones(VJ)"檢測器在相同的檢測精度的情況下,已經比任何其他演算法快十甚至上百倍。其靠著以下三個重要技術提升速度:
1) \(\ Integral\ image\):積分圖是用來加速 box filtering 和卷積計算的方法。
2) \(\ Feature\ selection\):作者使用 Adaboost 演算法來替換了人工選擇的 Haar basis filters。使其更有效的從大量隨機的特徵中選取一小部分對面部檢測有益的特徵。
3) \(\ Detection\ cascades\):VJ 檢測器提出了一種多階段檢測方式使其花更少的計算在背景視窗,更多的面部目標上。
- Histogram of Oriented Gradients (HOG)
HOG 主要是針對尺度不變特徵轉換和 shape context 而做的改進。為了均衡特徵不變性和非線性的特性,HOG 設計了密集均勻的網格和使用 local contrast normalization 來改善精度。雖然 HOG 能被用來檢測不同種類的類,但它最初是由行人檢測的問題而提出的。為了檢測不同 size 的目標,HOG 會多次 rescale 輸入圖片,但是 detection window的 size 保持不變。HOG 在很長段時間內成為了許多檢測器的基礎,並應用於計算機視覺應用中很多年。
- Deformable Part-based Model (DPM)
DPM 作為 VOC-07,08和09的 winner成為了傳統目標檢測方法的巔峰之作,其是 HOG 的延續。
DPM 的訓練階段可以認為是學習一種分解目標的方式,推理階段則是對目標不同部分識別的整合。例如,一個車的識別問題可以認為是車窗、車身和車輪的識別。這就是眾所周知的 "star-model",後來被髮展為"mixture models"用以解決現實世界中變化多樣的目標。
典型的 DPM 檢測器由一個 root-filter 和許多的 part-filters 組成。其被髮展成為一種弱監督的學習方法,所有的 part-filters 能作為隱變數進行學習。R.Girshick 進一步將其推導為一種多例項學習的特殊情況,同時"hard negative mining"、"bounding box regression"和"context priming"等技術也被應用到其中以提升精度。
雖然今天的目標檢測器已經遠遠超越了 DPM 其所用的技巧對後來的目標檢測有著深遠的影響。P. Felzenszwalb 與 R. Girshick 也被 PASCAL VOC 獎以終生成就的獎項。
CNN base Two-stage Detectors
在手工特徵的效能達到飽和,目標檢測在2010後進入了瓶頸。然而,同時世界見證了卷積神經網路重生後的學習魯棒性以及高層語義特徵的表達能力。目標檢測開始以前所未有的速度進行發展了。
- RCNN
RCNN 的思路並不複雜:首先,它需要通過選擇搜尋提取一系列的目標建議框。然後每一個建議區域會被 resize 到一個固定的尺寸送入 CNN 模型之中(其是在 ImageNet 中進行預訓練的)提取特徵。最後,線性的 SVM 分類器進行預測每個區域目標的存在性,並識別其類別。RCNN 在 VOC07 上的 mAP 由\(33.7\%\)(DPM-v5)上升到\(58.5\%\)。
雖然 RCNN 的取得了巨大的進步,但是仍然有明顯的缺陷:大量重疊區域冗餘的特徵的計算以致檢測速度十分慢。
- SPPNet
K.He 在2014年提出了 Spatial Pyramid Pooling Networks (SPPNet)。之前的 CNN 模型需要一個固定尺寸的輸入。SPPNet 的主要貢獻在於引入了 Spatial Pyramid Pooling(SPP) layer,其可以使 CNN 在不需要關注輸入的尺寸同時,產生一個固定長度的特徵圖。當 SPPNet進行目標檢測的時候,特徵圖能由最初的輸入一次計算獲得,然後生成任意區域的固定長度的特徵表達,這樣的做法避免了重複計算卷積過後的特徵。SPPNet 在沒有精度損失的情況下,比 RCNN 快了20倍。
SPPNet 存在的問題在於:訓練仍然是多階段的,SPPNet 只 fine-tune 了其全連線層,同時忽略了之前所有的層。
- Fast RCNN
Fast RCNN 能在同一個網路配置下訓練檢測器和 bounding box 的迴歸,其在 VOC07 的表現為:比 RCNN 快200倍的同時,mAP 由\(58.5\%\)提升至\(70.0\%\)。雖然Fast RCNN整合了 RCNN 和 SPPNet 所有的優點,但它的檢測速度仍然受到了建議檢測的限制。
- Faster RCNN
Faster RCNN 的主要貢獻在於其提出了Region Proposal Network(RPN),一個幾乎無 cost 的區域建議。從 RCNN 到 Faster-RCNN,大多數的獨立模組,例如:建議檢測、特徵提取、以及 bounding box 的迴歸,都被整合到一個端到端的網路裡了。
雖然 Faster-RCNN 突破了 RCNN 的瓶頸,但仍然在其子檢測階段有著冗餘的計算。但之後的一些模型有改善這個問題:RFCN、Light head RCNN。
- Feature Pyramid Networks(FPN)
2017年基於 Faster RCNN 的 FPN 的提出使得定位更加精準。原因在於深層的特徵圖更容易表達高層語義,其對種類的識別十分有益。但是,對於目標的定位卻用處不大。因此,FPN是一種自頂而下的結構,並帶有橫向的連線,以此來建立所有尺度的高層語義以及融合。FPN 對於檢測尺度變化範圍大的目標顯現出了巨大的優勢,其現在已經成為了許多新的檢測器的基礎模組了。
CNN based One-stage Detectors
- You Only Look Once (YOLO)
YOLO 是由 R. Joseph 在2015年提出的,也是深度學習時代第一個一階段檢測器。YOLO 檢測速度非常的快:其中較快的版本可在 VOC07 精度\(52.7 \%\)的情況下達到 155fps;增強版本在 fps 為45的情況下,VOC07的 mAP 達到\(63.4 \%\)和VOC12的 mAP 達到\(57.9 \%\)。從 YOLO 的名字便可得知,其擯棄了建議檢測加上驗證的方式,取而代之的是使用單個神經網路來檢測。它將圖片劃分為一個一個區域,然後預測每個區域的 bounding boxes 和概率。在之後的 V3和 V4版本中,繼續改進其精度的同時保持著較高的速度。
- Single Shot MultiBox Detector (SSD)
同年 W. Liu 提出了 SSD ,它是深度學習時代第二個一階段檢測器。SSD 的貢獻在於其多推理和多解析度檢測技術,使用它們提高了一階段檢測器的檢測精度,特別是對於小目標。SSD 與之前所有的檢測器的區別在於:前者在不同的層檢測不同尺度的目標,後者只在最高層檢測。
- RetinaNet
儘管一階段檢測器保有較快的速度,然而在精度上一直落後於兩階段的檢測器。T.-Y. Lin 發現了背後的原因,並在2017年提出了 RetinaNet。他認為密集檢測器在訓練時遇到的前景和背景類別極度的不均衡是主要原因,並提出了 Focal Loss 來使檢測器更多關注難的、易分錯的樣本。這使得單階段的檢測器的精度追上了兩階段的檢測器。
目標檢測資料集及衡量指標
常用資料集
衡量指標
在早期的目標檢測,沒有廣泛接受的針對檢測效能的評價標準。例如:行人檢測的早期研究中,漏檢率和每個視窗的誤檢(miss rate vs. false positives per-window FPPW)經常被使用作為指標。可是,把 FPPW 作為整張圖片的檢測效能評價室友缺陷的。在2009年,the Caltech pedestrian detection benchmark 的創立,評價標準由 FPPW 轉化為 false positives per image(FPPI)。
最近幾年,頻繁用於目標檢測的評價標準的是"Average Precision (AP)",最開始是 VOC2007提出的。AP 是在不同的召回率(recall)下定義的平均檢測準確率,而且通常是針對一個類別的評價而言的。mean AP(mAP)則是所有類別的平均 AP 來作為最後指標的表現。為了衡量目標的位置精度,則使用預測框和真值框的交併比(the Intersection over Union (IoU))大於某一閾值,如0.5,就認為是成功檢測,否則則認為是漏檢。
在2014年後,由於 MS-COCO 資料集的流行,研究人員更加關注 bounding box 的位置精度了。因此,不再使用一個固定的 IoU 閾值,MS-COCO AP 是0.5到0.95之間的許多 IoU 閾值的平均值。衡量指標的變化使得研究者更加追求目標的位置精度,也促使更多現實世界的應用形成。
目標檢測的技術革新
早期進行目標檢測的卷積神經網路
早期進行目標檢測的 CNN 是在1990年,其中 Y. LeCun 做出了巨大貢獻。由於計算資源的限制,那時候的 CNN 模型比起今天既小又淺的。儘管如此,在早期,計算的效率依然被認為是基於 CNN 的目標檢測需要突破的難題。Y. LeCun 做出了一系列的改進,如:權重共享、空間位移網路等。使用這種方法,整張影像的任意位置的特徵都能被在一次前向傳播中提取。這基本上可以認為是今天全卷積神經網路(FCN)的原型。
多尺度目標檢測
不同尺寸和不同縱橫比物體的多尺度檢測是目標檢測中主要的技術挑戰之一。在過去二十年裡,多尺度目標檢測經歷了多個歷史階段。
Feature pyramids + sliding windows(2014年以前)隨著在 VJ 檢測器之後的算力的提升,研究者開始將更多的注意力放在基於 feature pyramids + sliding windows 的檢測上。在2004到2014期間,許多具有里程碑意義的檢測器都是基於這種策略進行研發的,如 HOG、DPM 甚至深度學習時期的 Overfeat。早期的檢測器像 VJ 和 HOG 之類的,都是以固定的縱橫比來檢測目標的。為了實現變化縱橫比的檢測,混合模型被提出,即訓練多個模型,每個模型有著不同的額縱橫比。
目標建議(object proposals)是指一組可能含有任意物體的候選 boxes,第一次提出是在2010年。使用目標建議可以幫助避免竭力使用滑窗在整個影像上進行搜尋。目標建議檢測的演算法應該具有以下要求:召回率高;位置精度高;在滿足前者的同時,減少處理時間。在2014年後,目標建議檢測已經從 the bottom-up vision 到 overfitting to a specific set of object classes,而且檢測器和建議生成器的界線已經變得模糊了。
2013-2016年,由於 GPU 算力的增強,人們解決多尺度檢測的方式也越來越直接和暴力,其直接預測 bounding boxes 在特徵圖上的座標。這種方法的好處就是十分簡單而且易於實施,不好的地方在於對於一些小目標位置可能不是足夠精準。
Multi-reference detection 是用於多尺度檢測最普遍的框架,它主要的想法則是在影像的不同位置預設一系列具有不同大小和縱橫比的 reference boxes(也就是 anchor boxes)。anchor-based 模型的典型的 loss 一般分為兩部分:類別損失(常用交叉熵損失)、位置損失(常用L1\L2 迴歸損失)
\(IoU\{a, a^*\}\)代表了 anchor \(a\) 和它的真值 \(a^*\) 的 IoU,大於某一閾值表示其含有目標,定義為正樣本進行計算位置的損失,否則不進行計算。
最近兩年最流行的多解析度檢測是在網路不同的層檢測不同尺度的目標。因為 CNN 在前向傳播的時候,很自然的形成了特徵金字塔。在深層的網路更容易檢測大目標,淺層的網路更容易檢測小目標。Multi-reference 和 multi-resolution detection 已經成為了目標檢測系統最基礎的兩個模組了。
Bounding Box Regression
Bounding box(BB)的迴歸是目標檢測中的一項重要的技術,在過去20年,BB 的迴歸經歷了三個歷史階段:沒有 BB 迴歸(2008以前)、從 BB 到 BB(2008-2013)以及從特徵到 BB (2013以後)
大多數早期的檢測方法如 VJ 和 HOG 沒有使用 BB 迴歸,經常是直接使用滑窗作為檢測的結果。為了獲取精確的位置資訊,研究者不得不建立更密集的金字塔和更密的進行滑窗。
第一次使用 BB 迴歸是在DPM。BB 迴歸在那時候是用作的後處理模組。
在 Faster RCNNN 後,BB 迴歸不再作為獨立的後處理模組,而是直接和檢測器整合到一起,端到端地訓練。同一時間,BB 迴歸進化為直接在 CNN 的特徵上進行預測 BB 。為了得到更加魯棒的預測,使用了 smooth L1 loss
或者使用根方函式
作為迴歸的 loss,一些研究者也會選擇標準化座標來獲得魯棒性的結果。
Context Priming
可見目標常常是在環境中的特殊背景之中的。我們的大腦常常會利用目標與環境之間的聯絡來利於視覺感知。Context Priming 一直以來被利用改善檢測,其經歷了三個發展階段:使用 local context 進行檢測;使用 global context 進行檢測;context interactives。
Local context 是指圍繞在目標周圍區域所包含的視覺資訊。早在2000年,Sinha 和 Torralba 發現面部的邊界輪廓是潛在能改善面部識別的效能的。Dalal 和 Triggs 也發現混合一系列小的背景資訊也是能提高行人檢測的精度的。深度學習常常使用增大感受野和目標建議區域的 size 來利用 local context。
Global context 把場景結構當作一個額外的目標檢測的資訊來源。早期,整合場景元素的統計學上的 summary 來進行利用 global context。對於如今深度學習的檢測器,通過增大感受野(甚至比輸入圖片都大)或者 global pooling 來整合 global context。在 RNN 中,則是將 global context 當作序列資訊來進行學習。
Context interactive 指的是通過可見元素的互動來傳遞的一段資訊,比如:constrains 和 dependencies。對於大多數目標檢測器,目標例項是被單獨地檢測和識別的,沒有挖掘它們之間的聯絡。最近的研究者發現,可以通過考慮 context interactives 來提高檢測器。其方法有兩種:一是挖掘兩個單獨目標之間的關係,二是挖掘目標和背景之間的依賴。
Non-Maxium Suppression(NMS)
NMS 是用來去除可能檢測同一目標的其他冗餘檢測框的後處理過程。在早期 NMS 由於檢測模型的輸出並不清晰所以並不是總是被使用。其發展經歷了三個階段:greedy selection;bounding box aggregation;learning to NMS。
Greedy selection 是老版本,但是在目標檢測中最流行的方法。其使用的思路是十分簡單和直接:對於一系列有重疊區域的 bounding boxes,其中檢測分數最高的 bounding box會被保留,然後它鄰近的 IoU 超過一定閾值的框都會被去除。其表現為一種貪心的方式。其仍然存在很多問題,例如:最高分數的 box 也許不是最合適的;它可能抑制掉密集情況下其周圍的檢測框;它也無法抑制 FP 的情況。
BB aggregation 是一種 combine 或者 cluster 許多重疊的 bounding boxes 到最後一個檢測框的思路。這種方式的在於,其充分利用了目標之間的關係和它們之間的空間佈局。
Learning to NMS 是把 NMS 當作一種對raw bounding boxes 進行重新打分的 filter 來進行學習。這種方法目前來看最有前景的做法,即:使目標檢測變為一種端到端的模型,不再使用人工設計(hand-crafted)的後處理。
Hard Negative Mining
目標檢測模型訓練的本質就是不均衡資料學習的問題。在這種情況下,基於滑窗進行檢測的模型,背景和目標的不均衡性甚至達到\(10^4-10^5\)當今模型資料集需要目標縱橫比的預測,不均衡比進一步擴大到\(10^6-10^7\)。在這種情況下,使用所有的背景資料則對模型是有害的,巨大數量的易分類的負樣本會在學習過程占主導地位。Hard negative mining(HNM)便是解決訓練過程中資料不均衡的問題。
Bootstrap 是指訓練以背景樣本的一小部分開始,然後逐漸加入新的易分錯的背景到訓練過程裡。最開始 Bootstrap 是用於減少背景樣本的計算量,後來被 DPM 和 HOG 當作解決資料不均衡問題的方法。
由於算力的改善,bootstrap 很快就被丟棄了。為了緩解訓練的不均衡問題,Faster-RCNN 和 YOLO 只是簡單地改變正負框的權重。很快,研究者發現權重平衡法不能完全解決資料不均衡問題。在2016年後,bootstrap 再次被應用到深度學習模型中,比如:SSD 和 OHEM中,只有一小部分樣本(那些會產生較大 loss)會進行後向傳播。在 RefineDet 中,"anchor refinementi module" 被設計到模型用於過濾簡單易分類的負樣本。另外,像 Focal Loss 則是通過改變 loss 來使網路更加關注難分類的樣本。
目標檢測的加速
過去20年裡已經形成了一些成熟的加速技巧,如下圖所示。
特徵圖的共享計算
在不同目標檢測的不同計算階段,特徵的提取佔了大量的計算。對於基於滑窗的檢測器來說,位置和 scales 導致了計算的冗餘性。前者導致了毗鄰的框有重疊區域,後者在毗鄰的 scales 特徵的關聯性導致計算的冗餘性。
空間計算的冗餘性和加速
最常用來減少空間計算冗餘性的方法是共享特徵圖的計算,即在 sliding window 進行之前,只計算一次全圖象的特徵圖。如圖所示是用來加快 HOG 的行人檢測。可是,這種方法的缺點也是顯然的。特徵圖的解析度(即滑窗在特徵圖上的最小步長)會首先於 cell size。如果一個目標在兩個 cells 之間的話,就會造成漏檢。當然特徵圖共享的思路也被廣泛地應用於深度學習的模型裡。
為了減少 the scale computational redundancy,最有成功的辦法就是直接 scale the features,而不是 scale 影像本身,第一次應用是在 VJ 檢測器。可是,這樣的辦法無法應用到像 HOG-like 這樣的 feature,因為有 blur effect。為了解決這個問題,P.Dollar 通過統計學研究發現鄰近 scale 的 HOG 和 integral channel features有強的相關性。這種相關性可以用於加速;特徵金字塔的計算。此外,建立檢測器金字塔可以避免 scale computational redundancy。檢測不同 scale 的目標使用多個檢測器來計算一張特徵圖,而不是去 rescale 影像或者特徵。
分類器的加速
基於滑窗的傳統檢測器,由於其較低的計算複雜性常常使用線性分類器而不是非線性的分類器。但是使用非線性分類器的檢測器,比如使用 SVM,雖然能夠獲得較高的精度,但是同時帶來了很高的計算成本。一旦訓練集比較大,檢測速度就會變得極慢。當時常常使用"model approximation"來進行加速
Network Pruning and Quantification
模型剪枝和網路量化使兩種比較常見用於 CNN 模型加速的,前者使用於簡化模型結構或者權重以達到減小它的規模的目的,後者指的是減小 activations or weights of the code-length。
- Network Pruning
最早進行模型剪枝研究是 Y.LeCun,他提出一種叫做"optimal brain damage"來壓縮多層感知網路的引數。這種方法中的 loss 函式是由二階導數近似計算得到的,達到去除一些不重要權重的目的。傳統的模型剪枝簡單地去掉一些不重要的權重,這樣在 convolutional filter 中可能會引起一些 sparse connectivity patterns,因此不能直接用於壓縮 CNN。一個簡單解決這個問題的辦法就是用獨立的權重代替整個 filters。
- Network Quantification
最近對網路量化的研究關注點放在了網路的二值化上,其目的是將其 activations 和權重進行二值化(0或者1)以達到浮點數操作轉為邏輯操作。這種方法能顯著加快計算和減少網路的儲存,因此可以輕鬆的用於移動裝置之中。另外一種思路是用最小二乘法的二值化變數來近似計算卷積,想要更精確的話,則可以考慮使用多個二值卷積的線性組合進行逼近。此外,發展 GPU 對二值計算的加速也是有顯著的提升效果。
- Network Distillation
知識蒸餾是一個將達巨型網路(“教師網路”)的知識壓縮至較小網路(“學生網路”)的框架。最近這種思路已經被用於目標檢測加速中了。比較直接的辦法就是用教師網路“指導”學生網路的學習、訓練(light-weight)讓後者能夠加速檢測。另外一種方法,使 candidate region 得到轉換以達到減小學生網路和教師網路的 features 距離。這使得在相同的精度下,得到兩倍速度的提升。
輕量級網路的設計
Factorizing Convolutions
Factorizing convolution 是最簡單和直接建立輕量級模型的方法。其中有兩類方法:如上圖(b)所示,將一個大的卷積核在空間維度 factorize 成一系列小的卷積核。比如,將\(7 \times 7\)的卷積核換成三個$ 3 \times 3$卷積核,兩種卷積核的感受野相同,但是後者效率更高;如上圖(c)所示,第二種方法則是將一大組的卷積在通道維度換為兩小組卷積,通道數為 \(d\) ,size 為\(k \times k\)的卷積核對通道數為 c 的特徵圖進行計算,替換為先用\(d^{'}\)維卷積核進行卷積,然後用一個非線性的啟用函式進行啟用,最後再用\(d\)維的卷積核進行卷積。計算複雜度由\(\mathcal{O}(dk^2c)\)減小為\(\mathcal{O}(d^{'}k^2c)+\mathcal{O}(dd^{'})\)
組卷積
組卷積通過將特徵的通道分為多組分別卷積來減少引數量。如圖(d)所示,如果我們平均將特徵的通道分為\(m\)組,計算量則會變為原來的\(1/m\)。
深度可分離卷積
如上圖(e),深度可分離卷積可以看作組卷積的特殊情況,即組數等於通道數。假設我們有一層卷積核為\(d\)維的卷積層和通道數為\(c\)的特徵圖,每個卷積核的大小為\(k \times k\)。對於深度可分離卷積每一個\(k \times k \times c\)的卷積核分為了\(c\)個\(k \times k \times 1\)個卷積核,然後它們分別和特徵圖對應的每個通道進行卷積,最後再用\(1 \times 1\)大小的卷積核進行通道的轉為,最後的輸出通道為\(d\)維。計算量便由\(\mathcal{O}(dk^2c)\)變為\(\mathcal{O}(ck^2)+\mathcal{O}(dc)\)
Bottle-neck Design
Bottleneck 常常被用來用減少維度的方式更有效的學習資料的 encoding,最近幾年,其常常被用來設計輕量化網路。最常用的一種方法是壓縮檢測器的輸入層,來減少大量的計算。另外一種是壓縮檢測器的輸出使得特徵圖更薄。
Neural Architecture Search
使用網路結構搜尋(NAS)而不是經驗來自動地設計網路成為了一大熱點。NAS 已經被成功應用到影像分類,目標檢測和影像分割任務中了。因而,其表現出在設計輕量級網路有著較好地前景。
目標檢測的最新進展
Detection with Better Engines
在眾多的計算機視覺的任務中,深層的 CNN 有著重要的作用。檢測器的精確度和它提取特徵的網路深深聯絡在一起。一般這部分我們叫 backbone 如:ResNet、VGG 等,將其當作檢測器的“發動機”。
- GoogLeNet:也是眾所周知的 Inception 系列。其最主要的成果便是介紹了 factorize convolution 和 BN。
- ResNet:一種通過殘差函式來使得網路更容易訓練和加深。
- DenseNet:ResNet 的成功告訴我們 CNN 中的殘差連線使得網路更容易加深並獲得更精準的結果。於是提出了一種密集連線的模組,其將每一層到其他每一層進行連線。
- SENet:其主要貢獻將全域性池化和 shuffle 來學習特徵圖的通道量級的重要性進行整合。
另外,ResNet 的改進版 ResNeXt 也是十分優秀的 backbone。為了加快速度 Xception 引入了深度可分離卷積,成為 Inception 的改進版。
Detection with Better Features
特徵表達的質量對於目標檢測至關重要。許多研究者在改善影像特徵上不懈努力,其主要分為兩類方法:特徵融合;用大的感受野學習高解析度特徵。
特徵融合的重要性
不變性和等變性是影像特徵表達的兩種重要特性。分類希望得到不變性的特徵表達,因為它的目的是學習到高層語義資訊;目標定位則是希望等變性的特徵表達,因為它需要區分位置和 scale 的變化。在 CNN 中的卷積層、池化層會使不變性增強,等變性減弱。因此,在深層的特徵有更多高層的語義資訊,其幫助分類,在淺層的特徵有更多幫助定位的資訊,所以要將兩者進行融合。
不同方式的特徵融合
- Processing Flow
特徵融合的方式主要分為兩種:bottom-up fusion;top-down fusion,如上圖(a)-(b)所示。Bottom-up fusion 將淺層的特徵通過跳躍連線喂入較深層,相反 top-down fusion 是將較深層的特徵喂入較淺層。不同層的特徵圖往往在空間和通道有著不同的 size,這時候可以通過調整通道數的數量、上取樣低解析度特徵圖、下采樣高解析度特徵圖到合適的尺寸。最簡單的方式就是用鄰近插值和雙線性插值的方法。此外,小數級步長的卷積(a.k.a 轉置卷積)是另外一種 resize 特徵圖和調整通道數量。
- Element-wise Operation
From a local point of view,特徵融合實際是元素級(element-wise)的運算,主要的方式分為:點和;點乘;concatenation。如上圖(c)-(e)。
對位求和是最簡單進行特徵融合的方式。對位相乘與對位相加十分相近,不過前者能被用來抑制或者加強某一特定區域的特徵,這對小目標檢測也許有益。特徵的 concat 是另一種特徵通融合的方式,其優勢在於能夠整合不同區域的語境資訊,缺點在於會增加記憶體。
- Learning High Resolution Features with Large Receptive Fields
感受野和特徵解析度是 CNN 兩個很重要的特性,擁有較大感受野的網路能捕捉到更大範圍的 context 資訊,較小的感受野則只能關注區域性的細節。之前提到特徵圖解析度越低,小目標的檢測就越難。提升特徵解析度最直接的方式就是去除池化層或者減小卷積層的下采樣率,然而這樣做會造成檢測器的"sight"會變得"narrow",引起一些大目標的漏檢。有一個主流的做法同時增加感受野和提升特徵解析度就是引入 dilated convolution(a.k.a atrous convlution)。空洞卷積最開始是在分割任務中提出的。其主要的思路是,擴張卷積核和使用稀疏引數。例如:kernelsize 為 \(3 \times 3\)空洞率為2的卷積核,其感受野和\(5 \times 5\)是一樣的,但是隻有9個引數。現在空洞卷積已經被廣泛用於目標檢測,增大感受野的同時不用增加引數量和計算量。
Beyond Sliding Window
- Detection as sub-region search
子區域的搜尋提供一種新的目標檢測方法,最近的方法將目標檢測當做路徑規劃的過程即:從最開始的 grids 最後聚集到期望的真值框。另一種是將目標檢測當做反覆更新的過程即:不斷修正預測框的 corners。
- Detection as key points localization
關鍵點定位在計算機視覺裡有著較為廣泛的應用,例如:臉部表情識別、人體姿勢識別。在圖片中的任意目標都是由它左上角和右下角的角點唯一確定的,其中的一個應用思路是用角點預測熱圖。這種方法的優點在於可以在語義分割的框架中使用,而且不需要設計 anchor boxes。
Improvements of Localization
Bounding Box Refinement
最直接進行改善定位精度的方法就是 bounding box 的修正,其可以看做一種目標檢測結果的後處理。如今雖然 bounding box 的迴歸都被整合到目標檢測器裡了,然而仍然有一些 unexpected scales 的目標不能很好的被預設的 anchor 所捕捉到,這必然導致位置精度的預測不準。"iterative bounding box refinement"是一種不斷將檢測結果喂入 BB regressor 進行修正直到預測結果理想為止的方法。但是,一些研究者認為這種方法使用多次,the BB regression 對位置敏感性進行衰退。
- Improving Loss Functions for Accurate Localization
目標檢測中的定位一直被當做座標迴歸的問題。可是,這種正規化有兩個致命的缺點:第一,迴歸的 loss 和最終的位置評價是不相關的,如,我們不能保證在較低的迴歸誤差情況下,總是產生更高的 IoU,特別是有較大縱橫比的情況;第二,傳統的迴歸方法不能提供位置的置信度,這會在 nms 的時候,可能將位置迴歸好,但是分類分數低的框進行抑制。為了解決這個問題,有的研究者直接將 IoU 進行當做 loss,一些研究者則是將 IoU 的預測來當做框的質量估計。此外,一些研究者也試著改善 probabilistic inference framework 的位置預測,直接學習位置的概率分佈。
Learning with Segmentation
為什麼分割能改善檢測
- Segmentation helps category recognition
在計算機視覺任務中,目標(人或者車)與 stuff (天空、水或者玻璃)的區別在於前者有封閉的、有定義的邊界,而後者沒有。作為分割任務的特徵能很好的捕獲目標的邊界,其對分類有幫助。
- Segmentation helps accurate localization
目標的真值框取決於它的邊界,對於有些物體的形狀比較特殊(比如貓有著長尾巴)。這樣很難預測出較高的 IoU 定位,然而目標的邊界能很好的編碼進入分割之中,進一步幫助定位。
- Segmentation can be embedded as context
利用分割的語義資訊,可以幫助目標檢測。比如,飛機更多可能是飛在天上,魚兒更多可能是遊在水中。
分割如何改善檢測
- Learning with enriched features
最簡單的方法就是將分割網路當做特徵的提取,然後將其整合進入目標檢測網路作為額外的特徵。這種方法的優點在於它易於實施,缺點在於分割網路會帶來額外的計算。
- Learning with multi-task loss functions
另外一種方法就是新增一個分割的分支,然後用多工的 loss 來訓練網路。在大多數情況下,分割分支會被在推理階段移除。這種方法的優點在於速度不會受到影響,缺點在於需要畫素級的標籤。最後,有些研究者使用弱監督學習,不使用畫素級的標籤而是使用 bounding box level 的標籤。
Training from Scratch
多數深度學習的檢測器首先都是基於較大資料集的預訓練。人們常常認為預訓練能幫助改善泛化能力於訓練速度,問題是我們真的需要進行在如 ImageNet 的資料集進行訓練嗎?事實上,當在目標檢測中做這件事的時候有著一些限制。首先是分類和檢測區別,它們的 loss 和各種分佈都不一樣。另外一個是 域的不匹配(the domain mismatch),許多在 ImageNet 的圖片是 RGB,但是檢測的圖片可能是 RGB-D 或者 3D medical 圖片,預訓練的知識可能不能很好的進行轉換。
最近幾年,研究者試著在 scratch 上進行預訓練。為了加快訓練和改善穩定性,研究者引入了 dense connection 和 BN 在淺層加速後向傳播。K.He 等人用隨機初始的標準模型來訓練檢測 COCO 資料集,僅僅花了較少的額外訓練時間,模型便收斂了。這意味著 ImageNet 可能預訓練會加速收斂,但是沒有提供必要的泛化或改善最後的檢測精度。
Adversarial Training
The Generative Adversarial Networks (GAN)由 A.Goodfellow 在2014年提出後獲得了巨大的關注。GAN 一般由兩部分組成:生成器網路和辨別器網路,其進行互相博弈,並使用 minimax optimization 進行優化。生成器學習後將 latent space 對映到特定資料中感興趣的分佈,辨別器則是分辨、判斷真實資料分佈和生成器生成的資料。GAN 被廣泛應用到許多計算機視覺的任務中,如影像生成、影像風格遷移以及影像超分等。最近兩年,GAN 被應用到目標檢測中以改善小目標和遮擋目標。
為了改善遮擋目標的檢測,有一個思路為:用 adversarial training 生成遮擋的 mask,直接使特徵去模仿遮擋。此外對抗攻擊也引起了研究者的注意,這對像自動駕駛等領域十分重要,因為其在具有魯棒性之前不能被真正應用到實際當中。
Weakly Supervised Object Detection
目標檢測常常需要大量人工標註資料,然而標註資料的過程耗時、昂貴而且效率低。弱監督目標檢測(WSOD)使用圖片級的標註來替代這個問題。最近,例項學習被應用到 WSOD 中,使用一系列的標註包每一個含有多個例項來替換單獨標註。如果我們認為在一張圖片中的目標候選為一個包,並且圖片級標註作為 label,那麼 WSOD 就成為了多例項學習的過程。
一些其他的研究者認為 WSOD 是一種通過選擇最重要的區域來建議排序的過程,然後在圖片級標註上訓練這些區域。另一個簡單的方法是 WSOD 可以用來掩膜圖片的不同部分,如果目標檢測分數急速下降,目標便有著較高的概率。此外,在訓練過程中,互動標註將人的反饋納入考慮來改善 WSOD。最近,生成對抗訓練也被應用到 WSOD 中。
待續~
From Object Detection in 20 Years