1. 程式人生 > >珍藏 | 基於深度學習的目標檢測全面梳理總結(下)

珍藏 | 基於深度學習的目標檢測全面梳理總結(下)

關於作者:@李家丞

同濟大學數學系本科在讀,現為格靈深瞳演算法部實習生

作者個人主頁:李家丞 | 個人主頁 | 關於我


導言:目標檢測的任務表述

 

如何從影象中解析出可供計算機理解的資訊,是機器視覺的中心問題。深度學習模型由於其強大的表示能力,加之資料量的積累和計算力的進步,成為機器視覺的熱點研究方向。

 

那麼,如何理解一張圖片?根據後續任務的需要,有三個主要的層次。

 

影象理解的三個層次

 

一是分類(Classification),即是將影象結構化為某一類別的資訊,用事先確定好的類別 (string) 或例項 ID 來描述圖片。這一任務是最簡單、最基礎的影象理解任務,也是深度學習模型最先取得突破和實現大規模應用的任務。其中,ImageNet 是最權威的評測集,每年的 ILSVRC 催生了大量的優秀深度網路結構,為其他任務提供了基礎。在應用領域,人臉、場景的識別等都可以歸為分類任務。

 

二是檢測(Detection)。分類任務關心整體,給出的是整張圖片的內容描述,而檢測則關注特定的物體目標,要求同時獲得這一目標的類別資訊和位置資訊。相比分類,檢測給出的是對圖片前景和背景的理解,我們需要從背景中分離出感興趣的目標,並確定這一目標的描述(類別和位置),因而,檢測模型的輸出是一個列表,列表的每一項使用一個數據組給出檢出目標的類別和位置(常用矩形檢測框的座標表示)。

 

三是分割(Segmentation)。分割包括語義分割(semantic segmentation)和例項分割(instance segmentation),前者是對前背景分離的拓展,要求分離開具有不同語義的影象部分,而後者是檢測任務的拓展,要求描述出目標的輪廓(相比檢測框更為精細)。分割是對影象的畫素級描述,它賦予每個畫素類別(例項)意義,適用於理解要求較高的場景,如無人駕駛中對道路和非道路的分割。

 

本系列文章關注的領域是目標檢測,即影象理解的中層次。

 

 

目標檢測入門(三):基礎網路演進、分類與定位的權衡

 

從此篇開始,我們對近幾年檢測領域的工作提供一個概覽,並試圖從中歸納出一些趨勢。由於篇幅和視野所限,文章不會求全,相對注重思路的演進,淡化實驗結果的報告。事實上,我們並沒有看到這一任務上的 "The Best Paper" 和 "The Final Paper",現階段的工作遠遠沒有到解決這一問題的程度,深度學習模型也仍然是非常年輕的研究領域。

 

實驗結果方面,筆者維護了一個檢測模型進展追蹤專案:Obj_Det_Progress_Tracker(https://github.com/ddlee96/Obj_Det_progress_tracker),收集了論文匯報的在 VOC 和 COCO 上的精度進展,可供參考。

 

文章結構

 

本篇關注基礎網路架構的演進和處理分類、定位這一矛盾問題上的進展。

 

基礎網路結構的演進

 

基礎網路(Backbone network)作為特徵提取器,對檢測模型的效能有著至關重要的影響。在分類任務的權威評測集 ImageNet 上,基於卷積網路的方法已經取得超越人類水平的進步,並也促使 ImageNet 完成了她的歷史使命。這也是機器視覺領域的整體進步,優秀的特徵、深刻的解釋都為其他任務的應用提供了良好的基礎。在本節中,我們選取了幾個在檢測任務上成功應用的基礎網路做一些介紹。

 

卷積網路結構演進的趨勢

 

筆者認為,卷積網路已經有如下幾個經典的設計正規化:

 

  • Repeat. 由 AlexNet 和 VGG 等開拓,被之後幾乎所有的網路採用。即堆疊相同的拓撲結構,整個網路成為模組化的結構。

  • Multi-path. 由 Inception 系列發揚,將前一層的輸入分割到不同的路徑上進行變換,最後拼接結果。

  • Skip-connection. 最初出現於 Highway Network,由 ResNet 發揚併成為標配。即建立淺層資訊與深層資訊的傳遞通道,改變原有的單一線性結構。

 

以這些正規化為脈絡整理卷積網路的演進歷程,可以歸納出下面的圖景:

 

CNN 的經典設計正規化

 

需要說明的是,上圖並不能概括完全近年來卷積網路的進步,各分支之間也有很多相互借鑑和共通的特徵,而致力於精簡網路結構的工作如 SqueezeNet 等則沒有出現。除了上面歸納的三個正規化,卷積網路結構方面另一個重要的潮流是深度可分離卷積(Depth-wise seperable convolution)的應用。下面我們選擇幾個在檢測任務上成功應用的基礎網路結構進行介紹。

 

ResNet: 殘差學習

 

Deep Residual Learning for Image Recognition

https://arxiv.org/abs/1512.03385

殘差單元將原函式分解為殘差

 

作者將網路的訓練解釋為對某一複雜函式的擬合,通過新增跳躍連線,變對這一函式的擬合為每層對某一殘差的擬合(有點 Boosting 的意思),引入的恆等項也讓 BP 得到的梯度更為穩定。

 

殘差網路以 skip-connection 的設計較為成功地緩解了深層網路難以收斂的問題,將網路的深度提高了一個數量級,也帶動了一系列對殘差網路的解釋研究和衍生網路的提出。

 

在檢測領域,VGG 作為特徵提取器的地位也逐漸被 ResNet 系列網路替代,文章中以 ResNet 作為基礎網路的 Faster R-CNN 也常作為後續工作的基線進行比較。

 

Xception:可分離卷積的大面積應用

 

Xception: Deep Learning with Depthwise Separable Convolutions

https://arxiv.org/abs/1610.02357

 

Xception 網路可以看做對 Inception 系列網路的推進,也是深度可分離卷積的成功應用。

 

文章指出,Inception 單元背後的假設是跨 Channel 和跨空間的相關性可以充分解耦,類似的還有長度和高度方向上的卷積結構(在 Inception-v3 裡的 3×3 卷積被 1×3 和 3×1 卷積替代)。

 

進一步的,Xception 基於更強的假設:跨 channel 和跨空間的相關性完全解耦。這也是深度可分離卷積所建模的理念。

 

一個簡化的 Inception 單元:

 

簡化的 Inception 單元,去掉了 Pooling 分支

 

等價於:

 

等價的簡化 Inception 單元,將 1x1 卷積合併

 

將 channel 的 group 推向極端,即每個 channel 都由獨立的 3×3 卷積處理:

 

把分組的粒度降為 1

 

這樣就得到了深度可分離卷積。

 

Xception 最終的網路結構如下,簡單講是線性堆疊的 Depthwise Separable 卷積,並附加了 Skip-connection。

 

Xceptiong 的網路結構

 

在 MS COCO Chanllege 2017 中,MSRA 團隊以對齊版本的 Xception 為基礎網路取得前列的成績,一定程度上說明了這一網路提取特徵的能力;另一方面,Xception 的一個改編版本也被 Light-head R-CNN 的工作(將在下一篇的實時性部分介紹)應用,以兩階段的方式取得了精度和速度都超越 SSD 等單階段檢測器的表現。

 

ResNeXt:新的維度

 

Aggregated Residual Transformations for Deep Neural Networks

https://arxiv.org/abs/1611.05431

 

本文提出了深度網路的新維度,除了深度、寬度(Channel 數)外,作者將在某一層並行 transform 的路徑數提取為第三維度,稱為 "cardinality"。跟 Inception 單元不同的是,這些並行路徑均共享同一拓撲結構,而非精心設計的卷積核並聯。除了並行相同的路徑外,也添加了層與層間的 shortcut connection。

 

相比 Inception-ResNet,ResNeXt 相當於將其 Inception Module 的每條路徑規範化了,並將規範後的路徑數目作為新的超引數。

 

ResNeXt 的基本單元

 

上圖中,路徑被擴充套件為多條,而每條路徑的寬度(channel 數)也變窄了(64->4)。

 

在近期 Facebook 開源的 Detectron 框架中,ResNeXt 作為 Mask R-CNN 的基礎網路也取得了非常高的精度。

 

SENet:卷積網路的 Attention 元件

 

Squeeze and Excitation Network

https://arxiv.org/abs/1709.01507

 

SENet 是最後一屆 ImageNet Challenge 的奪冠架構,中心思想是新增旁路為 channel 之間的相關性進行建模,可以認為是 channel 維度的 attention。

 

Squeeze 和 Excitation 分支

 

SENet 通過'特徵重標定'(Feature Recalibration)來完成 channel 層面的注意力機制。具體地,先通過 Squeeze 操作將特徵的空間性壓縮掉,僅保留 channel 維度,再通過 Excitation 操作為每個特徵通道生成一個權重,用於顯式地建模 channel 之間的相關性,最後通過 Reweight 操作將權重加權到原來的 channel 上,即構成不同 channel 間重標定。

 

SENet 可以作為網路中模組間的額外連線附屬到原有的經典結構上,其 Squeeze 操作在壓縮資訊的同時也降低了這一附屬連線的開銷。

 

 

SE 作為額外部件新增在經典結構上

 

經 SENet 改進的 ResNet 被 UCenter 團隊應用在 MS COCO Chanllenge 2017 上,也取得了不錯的效果。

 

NASNet:網路結構搜尋

 

Learning Transferable Architectures for Scalable Image Recognition

https://arxiv.org/abs/1707.07012

 

NAS(Neural Architecture Searh,神經網路結構搜尋)的框架最早出現於作者的另一項工作 Neural Architecture Search with Reinforcement Learning,其核心思想是用一個 RNN 學習定義網路結構的超參,通過強化學習的框架來更新這一 RNN 來得到更好表現的網路結構。

 

NAS 的結構

 

在本文中,作者參考本節最初提到的 "Repeat" 正規化,認為在小資料集上搜索到的結構單元具有移植性和擴充套件性,將這個結構單元通過堆疊得到的大網路能夠在較大資料集上取得較好的表現。這就構成了文章的基本思路:將網路搜尋侷限在微觀的區域性結構上,以相對原工作較小的開銷(實際開銷仍然巨大)得到可供擴充套件的網路單元,再由這些單元作為基本部件填入人工設計的 "元結構"。

 

微觀層面,作者仍選擇用 RNN 作為 Controller,挑選跳躍連線、最大池化、空洞卷積、深度可分離卷積等等操作構成基本搜尋空間,以逐元素相加(element-wise addition)和拼接(concatenation)作為合併操作,並重復一定的構建次數來搜尋此基本單元。

 

RNN 作為 Controller 的微觀結構搜尋,右為示例結構

 

巨集觀層面,將基本單元分為 Normal Cell(不改變 feature map 大小)和 Reduction Cell(使 feature map 的 spatial 維度減半,即 stride=2),交替堆疊一定數量的 Normal Cell 和 Reduction Cell 形成下面的元結構。

NASNet 在不同資料集上的元結構,ImageNet 的圖片具有更多的畫素數,需要更多的 Reduction 單元

 

NASNet 採取了自動搜尋的方式去設計網路的結構,人工的部分遷移到對搜尋空間的構建和評測指標的設立上,是一種 "元學習" 的策略。應用在檢測領域,NASNet 作為基礎框架的 Faster R-CNN 取得了 SOTA 的表現,也支撐了這一搜索得到結構的泛化效能。在最近的工作中,作者團隊又設計了 ENAS 降低搜尋的空間和時間開銷,繼續推動著這一方向的研究。

 

分類與定位問題的權衡

 

從 R-CNN 開始,檢測模型常採用分類任務上表現最好的卷積網路作為基礎網路提取特徵,在其基礎上新增額外的頭部結構來實現檢測功能。然而,分類和檢測所面向的場景不盡相同:分類常常關注具有整體語義的影象(第二篇中介紹 COCO 資料集中提到的 iconic image),而檢測則需要區分前景和背景(non-iconic image)。

 

分類網路中的 Pooling 層操作常常會引入平移不變性等使得整體語義的理解更加魯棒,而在檢測任務中我們則需要位置敏感的模型來保證預測位置的精確性,這就產生了分類和定位兩個任務間的矛盾。

 

R-FCN

 

R-FCN: Object Detection via Region-based Fully Convolutinal Networks

https://arxiv.org/abs/1605.06409

 

文章指出了檢測任務之前的框架存在不自然的設計,即全卷積的特徵提取部分 + 全連線的分類器,而表現最好的影象分類器都是全卷積的結構(ResNet 等)。這篇文章提出採用 "位置敏感分數圖(Position Sensitive Score Map)" 的方法來使檢測網路保持全卷積結構的同時又擁有位置感知能力。

 

R-FCN 中位置敏感分數圖

 

位置敏感分數圖的生成有兩個重要操作,一是生成更 "厚" 的 feature map,二是在 RoI Pooling 時選擇性地輸入 feature map。

 

Faster R-CNN 中,經過 RPN 得到 RoI,轉化成分類任務,還加入了一定量的卷積操作(ResNet 中的 conv5 部分),而這一部分卷積操作是不能共享的。R-FCN 則著眼於全卷積結構,利用卷積操作在 Channel 這一維度上的自由性,賦予其位置敏感的意義。下面是具體的操作:

 

  • 在全卷積網路的最後一層,生成 個 Channel 的 Feature map,其中 C 為類別數, 代表 k*k 網格,用於分別檢測目標物體的 k*k 個部分。即是用不同 channel 的 feature map 代表物體的不同區域性(如左上部分,右下部分)。

 

  • 將 RPN 網路得到的 Proposal 對映到上一步得到的 feature map(厚度為 )後,相應的,將 RoI 等分為 k*k 個 bin,對第(i,j)個 bin,僅考慮對應(i,j)位置的(C+1)個 feature map,進行如下計算:其中(x0,y0)是這個 RoI 的錨點,得到的即是(i,j)號 bin 對 類別的相應分數。

 

 

  • 經過上一步,每個 RoI 得到的結果是大小的分數張量, K*K 編碼著物體的區域性分數資訊,進行 vote(平均)後得到(C+1)維的分數向量,再接入 softmax 得到每一類的概率。

 

上面第二步操作中 "僅選取第(i,j)號 feature map" 是位置資訊產生意義的關鍵。這樣設計的網路結構,所有可學習的引數都分佈在可共享的卷積層,因而在訓練和測試效能上均有提升。

 

小結

 

R-FCN 是對 Faster R-CNN 結構上的改進,部分地解決了位置不變性和位置敏感性的矛盾。通過最大化地共享卷積引數,使得在精度相當的情況下訓練和測試效率都有了很大的提升。

 

Deformable Convolution Networks

 

Deformable Convolution Networks

https://arxiv.org/abs/1703.06211

 

本篇文章則提出在卷積和 RoI Pooling 兩個層新增旁路顯式學習偏置,來建模物體形狀的可變性。這樣的設計使得在保持目標全域性上位置敏感的同時,對目標區域性的建模新增靈活性。

可變形卷積的旁支

 

RoI Pooling 的旁支

 

如上兩圖所示,通過在卷積部分新增旁路,顯式地用一部分張量表示卷積核在圖片不同部分的偏移情況,再新增到原有的卷積操作上,使卷積具有靈活性的特徵,提取不同物體的特徵時,其形狀可變。而在 RoI Pooling 部分,旁路的新增則賦予取樣塊可活動的特性,更加靈活地匹配不同物體的形狀。

 

可變形卷積和 RoIPooling 的示例

 

在 MS COCO Chanllege 2017 上,MSRA 團隊的結果向我們展示了可變形卷積在提升檢測模型效能上的有效性:

 

可變形卷積帶來的增益

 

總結

 

本篇中,我們概述了檢測領域基礎網路的演進和處理分類定位這一矛盾問題上的進展,基礎網路提供更具有語義級區分性的特徵,為影象提供更有意義的編碼,而分析分類和定位這一對矛盾,則提供給我們對這一任務另一種理解和分治的角度。在下一篇中,我們將關注基礎網路提取的特徵如何更有效地在檢測模型的頭部網路中得到利用,以及面向實時性檢測的一些進展。

 

 

目標檢測入門(四):特徵複用、實時性

 

文章結構

 

本文的第一部分關注檢測模型的頭部部分。對與每張圖片,深度網路其實是通過級聯的對映獲得了在某一流形上的一個表徵,這個表徵相比原圖片更有計算機視角下的語義性。例如,使用 Softmax 作為損失函式的分類網路,最後一層獲得的張量常常展現出成簇的分佈。

 

深度網路因分散式表示帶來的指數級增益,擁有遠超其他機器學習模型的表示能力,近年來,有不少致力於對深度網路習得特徵進行視覺化的工作,為研究者提供了部分有直觀意義的感知,如淺層學習線條紋理,深層學習物體輪廓。然而,現階段的深度模型仍然是一個灰盒,缺乏有效的概念去描述網路容量、特徵的好壞、表達能力等等被研究者常常提到但又給不出精確定義的指代。

 

本篇的第一節將介紹通過頭部網路結構的設計來更有效利用基礎網路所提供特徵的工作,幫助讀者進一步理解檢測任務的難點和研究者的解決思路。

 

第二部分則關注面向實時性檢測的工作,這也是檢測任務在應用上的目標。如本系列文章第二篇所述,實時性這一要求並沒有通用的評價標準,應用領域也涉及到更多網路的壓縮、加速和工程上的優化乃至硬體層面的工作等,則不在本文的介紹範圍。

 

 

特徵複用與整合

 

FPN

 

Feature Pyramid Networks for Object Detection

https://arxiv.org/abs/1612.03144

 

對圖片資訊的理解常常關係到對位置和規模上不變性的建模。在較為成功的圖片分類模型中,Max-Pooling 這一操作建模了位置上的不變性:從區域性中挑選最大的響應,這一響應在區域性的位置資訊就被忽略掉了。而在規模不變性的方向上,新增不同大小感受野的卷積核(VGG),用小卷積核堆疊感受較大的範圍(GoogLeNet),自動選擇感受野的大小(Inception)等結構也展現了其合理的一面。

 

回到檢測任務,與分類任務不同的是,檢測所面臨的物體規模問題是跨類別的、處於同一語義場景中的。

 

一個直觀的思路是用不同大小的圖片去生成相應大小的 feature map,但這樣帶來巨大的引數,使本來就只能跑個位數圖片的視訊記憶體更加不夠用。另一個思路是直接使用不同深度的卷積層生成的 feature map,但較淺層的 feature map 上包含的低等級特徵又會干擾分類的精度。

 

本文提出的方法是在高等級 feature map 上將特徵向下回傳,反向構建特徵金字塔。

FPN 結構

 

從圖片開始,照常進行級聯式的特徵提取,再新增一條回傳路徑:從最高階的 feature map 開始,向下進行最近鄰上取樣得到與低等級的 feature map 相同大小的回傳 feature map,再進行逐元素相加(lateral connection),構成這一深度上的特徵。

 

這種操作的信念是,低等級的 feature map 包含更多的位置資訊,高等級的 feature map 則包含更好的分類資訊,將這兩者結合,力圖達到檢測任務的位置分類雙要求。

 

特徵金字塔本是很自然的想法,但如何構建金字塔同時平衡檢測任務的定位和分類雙目標,又能保證視訊記憶體的有效利用,是本文做的比較好的地方。如今,FPN 也幾乎成為特徵提取網路的標配,更說明了這種組合方式的有效性。

 

TDM

 

Beyond Skip Connections: Top-down Modulation for Object Detection

https://arxiv.org/abs/1612.06851

 

本文跟 FPN 是同一時期的工作,其結構也較為相似。作者認為低層級特徵對小物體的檢測至關重要,但對低層級特徵的選擇要依靠高層及特徵提供的 context 資訊,於是設計 TDM(Top-Down Modulation)結構來將這兩種資訊結合起來處理。

 

TDM 整體結構

 

可以看到,TDM 的結構跟 FPN 相當類似,但也有如下顯著的不同:

 

  • T 模組和 L 模組都是可供替換的子網路單元,可以是 Residual 或者 Inception 單元,而在 FPN 中,二者分別是最近鄰上取樣(Neareast UpSample)和逐元素相加(Element-wise Addition)。

  • FPN 在每個層級得到的 feature map 都進行 RoI Proposal 和 RoI Pooling,而 TDM 只在自上而下傳播後的最大 feature map 上接入檢測頭部。

 

TDM 中的 T 模組和 L 模組

 

TDM 的設計相比 FPN 擁有更多可學習的引數和靈活性,文章的實驗顯示,TDM 結構對小物體檢測精度的提升幫助明顯。而且,TDM 是對檢測頭部的改進,也有推廣到單階段模型的潛力。

 

DSSD

 

Deconvolutional Single Shot Multibox Detector

https://arxiv.org/abs/1701.06659

 

本文是利用反捲積操作對 SSD 的改進。

 

DSSD 的網路結構

 

在原版 SSD 中,檢測頭部不僅從基礎網路提取特徵,還添加了額外的卷積層,而本文則在這些額外卷積層後再新增可學習的反捲積層,並將 feature map 的尺度擴充套件為原有尺寸,把兩個方向上具有相同尺度的 feature map 疊加後再進行檢測,這種設計使檢測頭部同時利用不同尺度上的低階特徵和高階特徵。跟 FPN 不同的是,反傳的特徵通過反捲積得到而非簡單的最近鄰上取樣。

 

同時,在反捲積部分添加了額外的卷積層提供 "緩衝",以免反捲積分支影響網路整體的收斂性。另外,文章也通過加入跳躍連線改進了檢測頭部,使得頭部結構相比原版 SSD 更加複雜。

DSSD 的頭部結構

 

RON

 

RON: Reverse Connection with Objectness Prior Networksfor Object Detection

https://arxiv.org/abs/1707.01691

 

 

RON 結構

 

文章關注兩個問題:1) 多尺度目標檢測,2)正負樣本比例失衡的問題。

 

對於前者,文章將相鄰的 feature map 通過 reverse connection 相連,並在每個 feature map 上都進行檢測,最後再整合過濾。對於後者,類似 RPN,對每個 anchor box 生成一個 Objectness priori,作為一個指標來過濾過多的 box(但不對 box 進行調整,RPN 對 box 進行調整,作者指出這會造成重複計算)。文章的實驗顯示 RON 在較低的解析度下取得了超過 SSD 的表現。

 

FSSD

 

Feature Fusion Single Shot Multibox Detector

https://arxiv.org/abs/1712.00960

 

FSSD 提出了另一種對不同層級特徵進行融合的方式,從基礎網路不同層級得到 feature map 後,利用取樣操作將它們在 spatial 方向上規整化,再拼接到一起,並通過 BN 層以使不同層級特徵的啟用值數量級一致。最後,拼接後的 feature map 經過一系列的卷積操作,產生不同大小的融合 feature map 傳入檢測頭部的預測網路。

FSSD 的特徵融合方式

 

文章指出,特徵融合的初衷還是同時利用高層級 feature map 提供的語義資訊和低層級 feature map 的位置資訊,而像 FPN 中的逐元素相加操作進行融合的方式要求不同層級的 feature map 具有完全一致的大小,本文則採用拼接的方式,不受 channel 數的限制。

 

RefineDet

 

Single-Shot Refinement Neural Network for Object Detection

https://arxiv.org/abs/1711.06897

 

RefineDet 的 ARM 和 ODM

 

本文是單階段的模型,但思路上卻是兩階段的。文章指出兩階段方法精度有優勢的原因有三點:

 

1)兩階段的設計使之有空間來用取樣策略處理類別不均衡的問題;

2)級聯的方式進行 box 迴歸;

3)兩階段的特徵描述。

 

文章提出兩個模組來在一階段檢測器中引入兩階段設計的優勢:Anchor Refinement Module(ARM) 和 Object Detection Module(ODM)。前者用於識別並過濾背景類 anchor 來降低分類器的負擔,並且調整 anchor 位置以更好的向分類器輸入,後者用於多分類和 box 的進一步迴歸。

 

Single-shot 的體現在上面兩個模組通過 Transfer Connection Block 共用特徵。除此之外,Transfer Connection Block 還將特徵圖反傳,構成類似 FPN 的效果。兩個模組建立聯合的損失使網路能夠端到端訓練。

 

實驗結果顯示 RefineNet 的效果還是不錯的,速度跟 YOLOv2 相當,精度上更有優勢。之後的 Ablation experiments 也分別支撐了負樣本過濾、級聯 box 迴歸和 Transfer Connection Block 的作用。可以說這篇文章的工作讓兩階段和一階段檢測器的界限更加模糊了。

 

面向實時性的工作

 

Light Head R-CNN

 

Light-Head R-CNN: In Defense of Two-Stage Object Detector

https://arxiv.org/abs/1711.07264

 

文章指出兩階段檢測器通常在生成 Proposal 後進行分類的 "頭"(head) 部分進行密集的計算,如 ResNet 為基礎網路的 Faster-RCNN 將整個 stage5(或兩個 FC)放在 RCNN 部分, R-FCN 要生成一個具有隨類別數線性增長的 channel 數的 Score map,這些密集計算正是兩階段方法在精度上領先而在推斷速度上難以滿足實時要求的原因。

 

針對這兩種元結構 (Faster-RCNN 和 RFCN),文章提出了 "頭" 輕量化方法,試圖在保持精度的同時又能減少冗餘的計算量,從而實現精度和速度的 Trade-off。

Light-head R-CNN 與 Faster R-CNN, R-FCN 的對比

 

如上圖,虛線框出的部分是三種結構的 R-CNN 子網路(在每個 RoI 上進行的計算),light-head R-CNN 中,在生成 Score map 前,ResNet 的 stage5 中卷積被替換為深度可分離卷積,產生的 Score map 也減少至 10×p×p(相比原先的類別數 ×p×p,p 為網格劃分粒度,R-FCN 中取 7)。

 

一個可能的解釋是,"瘦"(channel 數較少)的 score map 使用於分類的特徵資訊更加緊湊,原先較 "厚" 的 score map 在經過 PSROIPooling 的操作時,大部分資訊並沒有提取(只提取了特定類和特定位置的資訊,與這一資訊處在同一 score map 上的其他資料都被忽略了)。

 

進一步地,位置敏感的思路將位置性在 channel 上表達出來,同時隱含地使用了更類別數相同長度的向量表達了分類性(這一長度相同帶來的好處即是 RCNN 子網路可以免去引數)。

 

light-head 在這裡的改進則是把這一個隱藏的嵌入空間壓縮到較小的值,而在 RCNN 子網路中加入 FC 層再使這個空間擴充套件到類別數的規模,相當於是把計算量分擔到了 RCNN 子網路中。

 

粗看來,light-head 將原來 RFCN 的 score map 的職責兩步化了:thin score map 主攻位置資訊,RCNN 子網路中的 FC 主攻分類資訊。另外,global average pool 的操作被去掉,用於保持精度。

 

YOLOv2

 

YOLO9000: Better, Faster, Stronger

 

單階段檢測模型的先驅工作 YOLO 迎來了全面的更新:

 

  • 在卷積層新增 BN,捨棄 Dropout

  • 更大尺寸的輸入

  • 使用 Anchor Boxes,並在頭部運用卷積替代全連線層

  • 使用聚類方法得到更好的先驗,用於生成 Anchor Boxes

  • 參考 Fast R-CNN 的方法對位置座標進行 log/exp 變換使座標迴歸的損失保持在合適的數量級

  • passthrough 層:類似 ResNet 的 skip-connection,將不同尺寸的 feature map 拼接到一起

  • 多尺度訓練

  • 更高效的網路 Darknet-19,類似 VGG 的網路,在 ImageNet 上以較少的引數量達到跟當前最佳相當的精度

 

YOLOv2 的改進

 

此次改進後,YOLOv2 吸收了很多工作的優點,達到跟 SSD 相當的精度和更快的推斷速度。

 

SSDLite(MobileNets V2)

 

SSDLite 是在介紹 MobileNets V2 的論文 Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation(https://arxiv.org/abs/1801.04381) 中提出的。

 

MobileNets 是一系列大面積應用深度可分離卷積的網路結構,試圖以較小的引數量來達到跟大型網路相當的精度,以便能夠在移動端部署。在本文中,作者提出了對 MobileNets 的改進版本,通過移動跳躍連線的位置並去掉某些 ReLU 層來實現更好的引數利用。可參考這個問題了解更多關於這一改進的解釋。

 

在檢測方面,SSDLite 的改進之處在於將 SSD 的檢測頭部中的卷積運算替換為深度可分離卷積,降低了頭部計算的引數量。另外,這項工作首次給出了檢測模型在移動裝置 CPU 上單核執行的速度,提供了現在移動終端執行類似任務效能的一個參考。

 

總結

 

從基礎網路的不同層級提取習得的 feature map 並通過一定的連線將它們整合,是近年來檢測模型的重要趨勢。這些針對檢測頭部網路的改進也越來越多地體現著研究者們對檢測任務要求的表述和探索。另一方面,面向實時性的改進則繼續推動這檢測任務在應用領域的發展。

 

 

目標檢測入(五):目標檢測新趨勢拾遺

 

文章結構

 

本篇為讀者展現檢測領域多樣性的一個視角,跟其他任務聯合,有 YOLO9000、Mask R-CNN;改進損失函式,有 Focal Loss;利用 GAN 提升檢測模型的魯棒性,有 A-Fast-RCNN;建模目標關聯,有 Relation Moduel;還有 mimicking 思路、引入大 batch 訓練的 MegDet 和從零訓練的 DSOD,再加上未收錄的 Cascade R-CNN、SNIP 等,多樣性的思路為檢測任務的解決上注入著前所未有的活力,也推動著理解視覺這一終極目標的進步。

 

 

工作拾遺

 

YOLO9000

 

YOLO9000: Better, Faster, Stronger

 

這篇文章裡,YOLO 的作者不僅提出 YOLOv2,大幅改進了原版 YOLO,而且介紹了一種新的聯合訓練方式:同時訓練分類任務和檢測任務,使得檢測模型能夠泛化到檢測訓練集之外的目標類上。

 

YOLO9000 使用了 ImageNet 和 COCO 資料集聯合訓練,在合併兩者的標籤時,根據 WordNet 的繼承關係構建了了樹狀的類別預測圖:

 

標籤的合併

 

類似條件概率的方式計算每個子標籤的概率值,超出一定的閾值 com 時則選定該類作為輸出,訓練時也僅對其路徑上的類別進行損失的計算和 BP。

 

YOLO9000 為我們提供了一種泛化檢測模型的訓練方式,文章的結果顯示 YOLO9000 在沒有 COCO 標註的類別上有約 20 的 mAP 表現,能夠檢測的物體類別超過 9000 種。當然,其泛化效能也受檢測標註類別的制約,在有類別繼承關係的類上表現不錯,而在完全沒有語義聯絡的類上表現很差。

 

Mask R-CNN

 

Mask R-CNN 通過將檢測和例項分割聯合訓練的方式同時提高了分割和檢測的精度。在原有 Faster R-CNN 的頭部中分類和位置迴歸兩個並行分支外再加入一個例項分割的並行分支,並將三者的損失聯合訓練。

 

Mask R-CNN 的頭部結構

 

在分割方面,文章發現對每個類別單獨生成二值掩膜(Binary Mask)相比之前工作中的多分類掩膜更有效,這樣避免了類間競爭,仍是分類和標記的解耦。文章另外的一個貢獻是 RoIAlign 的提出,筆者認為會是檢測模型的標配操作。

 

FAIR 團隊在 COCO Chanllege 2017 上基於 Mask R-CNN 也取得了前列的成績,但在實踐領域,例項分割的標註相比檢測標註要更加昂貴,而且按照最初我們對影象理解的三個層次劃分,中層次的檢測任務借用深層次的分割資訊訓練,事實上超出了任務的要求。

 

Focal Loss(RetinaNet)

 

Focal Loss for Dense Object Detection

 

由於缺少像兩階段模型的樣本整理操作,單階段模型的檢測頭部常常會面對比兩階段多出 1-2 個數量級的 Region Proposal,文章作者認為,這些 Proposal 存在類別極度不均衡的現象,導致了簡單樣本的損失掩蓋了難例的損失,這一 easy example dominating 的問題是單階段模型精度不如兩階段的關鍵。

 

Focal Loss 隨概率變化曲線

 

於是,文章提出的解決措施即是在不同樣本間製造不平衡,讓簡單樣本的損失在整體的貢獻變小,使模型更新時更關注較難的樣本。具體的做法是根據預測概率給交叉熵的相應項新增懲罰係數,使得預測概率越高(越有把握)的樣本,計算損失時所佔比例越小。

 

RetinaNet 結構

 

以 ResNet 的 FPN 為基礎網路,添加了 Focal Loss 的 RetinaNet 取得了跟兩階段模型相當甚至超出的精度。另外,Focal Loss 的應用也不只侷限在單階段檢測器,其他要處理類別不均衡問題任務上的應用也值得探索。

 

Mimicking

 

Mimicking Very Efficient Network for Object Detection

http://openaccess.thecvf.com/content_cvpr_2017/papers/Li_Mimicking_Very_Efficient_CVPR_2017_paper.pdf

 

本篇文章是 Mimicking 方法在檢測任務上的嘗試。mimicking 作為一種模型壓縮的方法,採用大網路指導小網路的方式將大網路習得的資訊用小網路表徵出來,在損失較小精度的基礎上大幅提升速度。

 

Mimicking 方法通常會學習概率輸出的前一層,被稱為 "Deep-ID",這一層的張量被認為是資料在經過深度網路後得到的一個高維空間嵌入,在這個空間中,不同類的樣例可分性要遠超原有表示,從而達到表示學習的效果。本文作者提出的 mimicking 框架則是選擇檢測模型中基礎網路輸出的 feature map 進行學習,構成下面的結構:

 

Mimicking 網路結構

 

圖中,上面分支是進行學習的小網路,下面分支的大網路則由較好表現的模型初始化,輸入圖片後,分別得到不同的 feature map,小網路同時輸入 RPN 的分類和位置迴歸,根據這一 RoI Proposal,在兩個分支的 feature map 上提取區域 feature,令大網路的 feature 作為監督資訊跟小網路計算 L2 Loss,並跟 RPN 的損失構成聯合損失進行學習。而對 RCNN 子網路,可用分類任務的 mimicking 方法進行監督。

 

文章在 Pascal VOC 上的實驗顯示這種 mimicking 框架可以在相當的精度下實現 2 倍以上的加速效果。

 

CGBN(Cross GPU Batch Normalization)

 

MegDet: A Large Mini-Batch Object Detector

https://arxiv.org/abs/1711.07240

 

這篇文章提出了多卡 BN 的實現思路,使得檢測模型能夠以較大的 batch 進行訓練。

 

之前的工作中,兩階段模型常常僅在一塊 GPU 上處理 1-2 張圖片,生成數百個 RoI Proposal 供 RCNN 子網路訓練。這樣帶來的問題是每次更新只學習了較少語義場景的資訊,不利於優化的穩定收斂。要提高 batch size,根據 Linear Scaling Rule,需要同時增大學習率,但較大的學習率又使得網路不易收斂,文章嘗試用更新 BN 引數的方式來穩定優化過程(基礎網路的 BN 引數在檢測任務上 fine-tuning 時通常固定)。加上檢測中常常需要較大解析度的圖片,而 GPU 記憶體限制了單卡上的圖片個數,提高 batch size 就意味著 BN 要在多卡(Cross-GPU)上進行。

 

BN 操作需要對每個 batch 計算均值和方差來進行標準化,對於多卡,具體做法是,單卡獨立計算均值,聚合(類似 Map-Reduce 中的 Reduce)算均值,再將均值下發到每個卡,算差,再聚合起來,計算 batch 的方差,最後將方差下發到每個卡,結合之前下發的均值進行標準化。

CGBN 實現流程

 

更新 BN 引數的檢測模型能夠在較大的 batch size 下收斂,也大幅提高了檢測模型的訓練速度,加快了演算法的迭代速度。

 

DSOD(Deeply Supervised Object Detector)

 

DSOD: Learning Deeply Supervised Object Detectors from Scratch

https://arxiv.org/abs/1708.01241

 

R-CNN 工作的一個深遠影響是在大資料集(分類)上 pre-train,在小資料集(檢測)fine-tune 的做法,本文指出這限制了檢測任務上基礎網路結構的調整(需要在 ImageNet 上等預訓練的分類網路),也容易引入分類任務的 bias,因而提出從零訓練檢測網路的方法。

 

作者認為,由於 RoI 的存在,兩階段檢測模型從零訓練難以收斂,從而選擇 Region-free 的單階段方法進行嘗試。一個關鍵的發現是,從零訓練的網路需要 Deep Supervision,文中採用緊密連線的方式來達到隱式 Deep Supervision 的效果,因而 DSOD 的基礎網路部分類似 DenseNet,淺層的 feature map 也有機會得到更接近損失函式的監督。

 

DSOD 結構

 

文章的實驗顯示,DSOD 從零開始訓練也可以達到更 SSD 等相當的精度,並且模型的引數更少,但速度方面有所下降。

 

A-Fast-RCNN

 

A-Fast-RCNN: Hard Positive Generation via Adversary for Object Detection

https://arxiv.org/abs/1704.03414

 

本文將 GAN 引入檢測模型,用 GAN 生成較難的樣本以提升檢測網路應對遮擋 (Occlusion)、形變 (Deformation) 的能力。

 

對於前者,作者設計了 ASDN(Adversarial Spatial Dropout Network),在 feature map 層面生成 mask 來產生對抗樣本。對於 feature map,在旁支上為每個位置生成一個概率圖,根據一定的閾值將部分 feature map 上的值 drop 掉,再傳入後面的頭部網路。

ASDN

 

類似的,ASTN(Adversarial Spatial Transformer Network) 在旁支上生成旋轉等形變並施加到 feature map 上。整體上,兩個對抗樣本生成的子網路串聯起來,加入到 RoI 得到的 feature 和頭部網路之間。

 

ASDN 和 ASTN 被串聯

 

文中的實驗顯示,在 VOC 上,對抗訓練對 plant, bottle 等類別的檢測精度有提升,但對個別類別卻有損害。這項工作是 GAN 在檢測任務上的試水,在 feature 空間而不是原始資料空間生成對抗樣本的思路值得借鑑。

 

Relation Module

 

Relation Networks for Object Detection

https://arxiv.org/abs/1711.11575

 

Attention 機制在自然語言處理領域取得了有效的進展,也被 SENet 等工作引入的計算機視覺領域。本文試圖用 Attention 機制建模目標物體之間的相關性。

 

理解影象前背景的語義關係是檢測任務的潛在目標,權威資料集 COCO 的收集過程也遵循著在日常情景中收集常見目標的原則,本文則從目標物體間的關係入手,用 geometric feature(fG) 和 appearance feature(fA) 來表述某一 RoI,並聯合其他 RoI 建立 relation 後,生成一個融合後的 feature map。計算如下圖:

 

Relation Module

 

作者將這樣的模組插入兩階段檢測器的頭部網路,並用改裝後的 duplicate removal network 替代傳統的 NMS 後處理操作,形成真正端到端的檢測網路。在 Faster R-CNN, FPN, Deformable ConvNets 上的實驗顯示,加入 Relation Module 均能帶來精度提升。

Relation Module 應用在頭部網路和替代 NMS

 

結語

 

檢測領域在近年來取得的進展只是這場深度模型潮流的一個縮影。理解影象、理解視覺這一機器視覺的中心問題上,仍不斷有新鮮的想法出現。推動整個機器視覺行業躍進的同時,深度模型也越來越來暴露出自身的難收斂、難解釋等等問題,整個領域仍在負重前行。

 

本系列文章梳理了檢測任務上深度方法的經典工作和較新的趨勢,並總結了常用的測評集和訓練技巧,期望為讀者建立對這一任務的基本認識。在介紹物件的選擇和章節的劃分上,都帶有筆者自己的偏見,本文僅僅可作為一個導讀,更多的細節應參考實現的程式碼,更多的討論應參考文章作者的擴充套件實驗。

 

事實上,每項工作都反映著作者對這一問題的洞察,而諸多工作間的橫向對比也有助於培養獨立和成熟的視角來評定每項工作的貢獻。另外,不同文獻間的相互引述、所投會議期刊審稿人的意見等,都是比本文更有參考價值的資訊來源。

 

在工業界還有更多的問題,比如如何做到單模型滿足各種不同場景的需求,如何解決標註中的噪聲和錯誤干擾,如何針對具體業務型別(如人臉)設計特定的網路,如何在廉價的硬體裝置上做更高效能的檢測,如何利用優化的軟體庫、模型壓縮方法進行加速等等,就不在本文討論之列。