目標檢測入門(四):特徵復用、實時性
關於作者: @李家丞 同濟大學數學系本科在讀,現為格靈深瞳演算法部實習生。
作者個人主頁:李家丞|個人主頁|關於我
本章是《乾貨 | 目標檢測入門,看這篇就夠了》的第四篇連載。搭乘電梯可直達前三篇:
格靈深瞳DeepGlint:乾貨 | 目標檢測入門,看這篇就夠了格靈深瞳DeepGlint:目標檢測入門(二):模型的評測與訓練技巧格靈深瞳DeepGlint:目標檢測入門(三):基礎網路演進、分類與定位的權衡(四)目標檢測領域的新趨勢之特徵復用、實時性
文章結構
本文的第一部分關注檢測模型的頭部部分。對與每張圖片,深度網路其實是通過級聯的映射獲得了在某一流形上的一個表徵,這個表徵相比原圖片更有計算機視角下的語義性。例如,使用Softmax作為損失函數的分類網路,最後一層獲得的張量常常展現出成簇的分布。深度網路因分散式表示帶來的指數級增益,擁有遠超其他機器學習模型的表示能力,近年來,有不少致力於對深度網路習得特徵進行可視化的工作,為研究者提供了部分有直觀意義的感知,如淺層學習線條紋理,深層學習物體輪廓。然而,現階段的深度模型仍然是一個灰盒,缺乏有效的概念去描述網路容量、特徵的好壞、表達能力等等被研究者常常提到但又給不出精確定義的指代。本篇的第一節將介紹通過頭部網路結構的設計來更有效利用基礎網路所提供特徵的工作,幫助讀者進一步理解檢測任務的難點和研究者的解決思路。
第二部分則關注面向實時性檢測的工作,這也是檢測任務在應用上的目標。如本系列文章第二篇所述,實時性這一要求並沒有通用的評價標準,應用領域也涉及到更多網路的壓縮、加速和工程上的優化乃至硬體層面的工作等,則不在本文的介紹範圍。
特徵復用與整合
FPN
Feature Pyramid Networks for Object Detection
對圖片信息的理解常常關係到對位置和規模上不變性的建模。在較為成功的圖片分類模型中,Max-Pooling這一操作建模了位置上的不變性:從局部中挑選最大的響應,這一響應在局部的位置信息就被忽略掉了。而在規模不變性的方向上,添加不同大小感受野的卷積核(VGG),用小卷積核堆疊感受較大的範圍(GoogLeNet),自動選擇感受野的大小(Inception)等結構也展現了其合理的一面。
回到檢測任務,與分類任務不同的是,檢測所面臨的物體規模問題是跨類別的、處於同一語義場景中的。
一個直觀的思路是用不同大小的圖片去生成相應大小的feature map,但這樣帶來巨大的參數,使本來就只能跑個位數圖片的顯存更加不夠用。另一個思路是直接使用不同深度的卷積層生成的feature map,但較淺層的feature map上包含的低等級特徵又會干擾分類的精度。
本文提出的方法是在高等級feature map上將特徵向下回傳,反向構建特徵金字塔。
從圖片開始,照常進行級聯式的特徵提取,再添加一條回傳路徑:從最高級的feature map開始,向下進行最近鄰上採樣得到與低等級的feature map相同大小的回傳feature map,再進行逐元素相加(lateral connection),構成這一深度上的特徵。
這種操作的信念是,低等級的feature map包含更多的位置信息,高等級的feature map則包含更好的分類信息,將這兩者結合,力圖達到檢測任務的位置分類雙要求。
特徵金字塔本是很自然的想法,但如何構建金字塔同時平衡檢測任務的定位和分類雙目標,又能保證顯存的有效利用,是本文做的比較好的地方。如今,FPN也幾乎成為特徵提取網路的標配,更說明了這種組合方式的有效性。
TDM
Beyond Skip Connections: Top-down Modulation for Object Detection
本文跟FPN是同一時期的工作,其結構也較為相似。作者認為低層級特徵對小物體的檢測至關重要,但對低層級特徵的選擇要依靠高層及特徵提供的context信息,於是設計TDM(Top-Down Modulation)結構來將這兩種信息結合起來處理。
可以看到,TDM的結構跟FPN相當類似,但也有如下顯著的不同:
- T模塊和L模塊都是可供替換的子網路單元,可以是Residual或者Inception單元,而在FPN中,二者分別是最近鄰上採樣(Neareast UpSample)和逐元素相加(Element-wise Addition)。
- FPN在每個層級得到的feature map都進行RoI Proposal和RoI Pooling,而TDM只在自上而下傳播後的最大feature map上接入檢測頭部。
TDM的設計相比FPN擁有更多可學習的參數和靈活性,文章的實驗顯示,TDM結構對小物體檢測精度的提升幫助明顯。而且,TDM是對檢測頭部的改進,也有推廣到單階段模型的潛力。
DSSD
Deconvolutional Single Shot Multibox Detector
本文是利用反卷積操作對SSD的改進。
在原版SSD中,檢測頭部不僅從基礎網路提取特徵,還添加了額外的卷積層,而本文則在這些額外卷積層後再添加可學習的反卷積層,並將feature map的尺度擴展為原有尺寸,把兩個方向上具有相同尺度的feature map疊加後再進行檢測,這種設計使檢測頭部同時利用不同尺度上的低級特徵和高級特徵。跟FPN不同的是,反傳的特徵通過反卷積得到而非簡單的最近鄰上採樣。
同時,在反卷積部分添加了額外的卷積層提供"緩衝",以免反卷積分支影響網路整體的收斂性。另外,文章也通過加入跳躍連接改進了檢測頭部,使得頭部結構相比原版SSD更加複雜。
RON
RON: Reverse Connection with Objectness Prior Networksfor Object Detection
文章關注兩個問題: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
FSSD提出了另一種對不同層級特徵進行融合的方式,從基礎網路不同層級得到feature map後,利用採樣操作將它們在spatial方向上規整化,再拼接到一起,並通過BN層以使不同層級特徵的激活值數量級一致。最後,拼接後的feature map經過一系列的卷積操作,產生不同大小的融合feature map傳入檢測頭部的預測網路。
文章指出,特徵融合的初衷還是同時利用高層級feature map提供的語義信息和低層級feature map的位置信息,而像FPN中的逐元素相加操作進行融合的方式要求不同層級的feature map具有完全一致的大小,本文則採用拼接的方式,不受channel數的限制。
RefineDet
Single-Shot Refinement Neural Network for Object Detection
本文是單階段的模型,但思路上卻是兩階段的。文章指出兩階段方法精度有優勢的原因有三點: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
文章指出兩階段檢測器通常在生成Proposal後進行分類的"頭"(head)部分進行密集的計算,如ResNet為基礎網路的Faster-RCNN將整個stage5(或兩個FC)放在RCNN部分, R-FCN要生成一個具有隨類別數線性增長的channel數的Score map,這些密集計算正是兩階段方法在精度上領先而在推斷速度上難以滿足實時要求的原因。
針對這兩種元結構(Faster-RCNN和RFCN),文章提出了"頭"輕量化方法,試圖在保持精度的同時又能減少冗餘的計算量,從而實現精度和速度的Trade-off。
如上圖,虛線框出的部分是三種結構的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吸收了很多工作的優點,達到跟SSD相當的精度和更快的推斷速度。
SSDLite(MobileNets V2)
SSDLite是在介紹MobileNets V2的論文Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation中提出的。
MobileNets是一系列大面積應用深度可分離卷積的網路結構,試圖以較小的參數量來達到跟大型網路相當的精度,以便能夠在移動端部署。在本文中,作者提出了對MobileNets的改進版本,通過移動跳躍連接的位置並去掉某些ReLU層來實現更好的參數利用。可參考這個問題了解更多關於這一改進的解釋。
在檢測方面,SSDLite的改進之處在於將SSD的檢測頭部中的卷積運算替換為深度可分離卷積,降低了頭部計算的參數量。另外,這項工作首次給出了檢測模型在移動設備CPU上單核運行的速度,提供了現在移動終端執行類似任務性能的一個參考。
總結
從基礎網路的不同層級提取習得的feature map並通過一定的連接將它們整合,是近年來檢測模型的重要趨勢。這些針對檢測頭部網路的改進也越來越多地體現著研究者們對檢測任務要求的表述和探索。另一方面,面向實時性的改進則繼續推動這檢測任務在應用領域的發展。
筆者視野有限,對這些工作的介紹中不實和不當之處請讀者指出,有遺漏的重要工作也請評論交流。在下一篇中,我們將對檢測領域的其他思路的工作做一個概覽,並給整個系列文章作結。
以上,就是我們《乾貨 | 目標檢測入門,看這篇就夠了 》的第四篇內容了,最後一篇內容將在本周放出,謝謝大家的持續關注!
最終篇已更:
格靈深瞳DeepGlint:目標檢測入門最終篇:拾遺及總結另外,本周五(3.16)19:00,格靈深瞳將開啟春季線上宣講,感興趣的同學,請關注我們的公眾號,獲取相關資訊。
http://weixin.qq.com/r/u0McBE7EQRM_rQpn9xap (二維碼自動識別)
推薦閱讀:
※【重磅】商湯科技 C 輪戰略融資 6 億美元,估值達45億美元成世界第一AI獨角獸!阿里領投
※利用點雲掃描技術增強FM視覺功能
※讀論文系列:Object Detection NIPS2015 Faster RCNN
※brox近期論文
※計算機視覺方面博客及代碼