乾貨 | 目標檢測入門,看這篇就夠了(下)
作者 | 李家丞( 同濟大學數學系本科在讀,現格靈深瞳演算法部實習生)
近年來,深度學習模型逐漸取代傳統機器視覺方法而成為目標檢測領域的主流演算法,本系列文章將回顧早期的經典工作,並對較新的趨勢做一個全景式的介紹,幫助讀者對這一領域建立基本的認識。(營長注:因本文篇幅較長,營長將其分為上(點選檢視)、下兩部分。)
導言:目標檢測的任務表述
如何從影像中解析出可供計算機理解的資訊,是機器視覺的中心問題。深度學習模型由於其強大的表示能力,加之資料量的積累和計算力的進步,成為機器視覺的熱點研究方向。
那麼,如何理解一張圖片?根據後續任務的需要,有三個主要的層次。
一是分類(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發揚併成為標配。即建立淺層資訊與深層資訊的傳遞通道,改變原有的單一線性結構。
以這些正規化為脈絡整理卷積網路的演進歷程,可以歸納出下面的圖景:
需要說明的是,上圖並不能概括完全近年來卷積網路的進步,各分支之間也有很多相互借鑑和共通的特徵,而致力於精簡網路結構的工作如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單元:
等價於:
將channel的group推向極端,即每個channel都由獨立的3×3卷積處理:
這樣就得到了深度可分離卷積。
Xception最終的網路結構如下,簡單講是線性堆疊的Depthwise Separable卷積,並附加了Skip-connection。
在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的每條路徑規範化了,並將規範後的路徑數目作為新的超引數。
上圖中,路徑被擴充套件為多條,而每條路徑的寬度(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。
SENet通過'特徵重標定'(Feature Recalibration)來完成channel層面的注意力機制。具體地,先通過Squeeze操作將特徵的空間性壓縮掉,僅保留channel維度,再通過Excitation操作為每個特徵通道生成一個權重,用於顯式地建模channel之間的相關性,最後通過Reweight操作將權重加權到原來的channel上,即構成不同channel間重標定。
SENet可以作為網路中模組間的額外連線附屬到原有的經典結構上,其Squeeze操作在壓縮資訊的同時也降低了這一附屬連線的開銷。
經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來得到更好表現的網路結構。
在本文中,作者參考本節最初提到的"Repeat"正規化,認為在小資料集上搜尋到的結構單元具有移植性和擴充套件性,將這個結構單元通過堆疊得到的大網路能夠在較大資料集上取得較好的表現。這就構成了文章的基本思路:將網路搜尋侷限在微觀的區域性結構上,以相對原工作較小的開銷(實際開銷仍然巨大)得到可供擴充套件的網路單元,再由這些單元作為基本部件填入人工設計的"元結構"。
微觀層面,作者仍選擇用RNN作為Controller,挑選跳躍連線、最大池化、空洞卷積、深度可分離卷積等等操作構成基本搜尋空間,以逐元素相加(element-wise addition)和拼接(concatenation)作為合併操作,並重復一定的構建次數來搜尋此基本單元。
巨集觀層面,將基本單元分為Normal Cell(不改變feature map大小)和Reduction Cell(使feature map的spatial維度減半,即stride=2),交替堆疊一定數量的Normal Cell和Reduction Cell形成下面的元結構。
NASNet採取了自動搜尋的方式去設計網路的結構,人工的部分遷移到對搜尋空間的構建和評測指標的設立上,是一種"元學習"的策略。應用在檢測領域,NASNet作為基礎框架的Faster R-CNN取得了SO他的表現,也支撐了這一搜尋得到結構的泛化效能。在最近的工作中,作者團隊又設計了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)"的方法來使檢測網路保持全卷積結構的同時又擁有位置感知能力。
位置敏感分數圖的生成有兩個重要操作,一是生成更"厚"的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部分,旁路的新增則賦予取樣塊可活動的特性,更加靈活地匹配不同物體的形狀。
在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上將特徵向下回傳,反向構建特徵金字塔。
從圖片開始,照常進行級聯式的特徵提取,再新增一條回傳路徑:從最高階的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的結構跟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
https://arxiv.org/abs/1701.06659
本文是利用反摺積操作對SSD的改進。
在原版SSD中,檢測頭部不僅從基礎網路提取特徵,還新增了額外的卷積層,而本文則在這些額外卷積層後再新增可學習的反摺積層,並將feature map的尺度擴充套件為原有尺寸,把兩個方向上具有相同尺度的feature map疊加後再進行檢測,這種設計使檢測頭部同時利用不同尺度上的低階特徵和高階特徵。跟FPN不同的是,反傳的特徵通過反摺積得到而非簡單的最近鄰上取樣。
同時,在反摺積部分新增了額外的卷積層提供"緩衝",以免反摺積分支影響網路整體的收斂性。另外,文章也通過加入跳躍連線改進了檢測頭部,使得頭部結構相比原版SSD更加複雜。
RON
RON: Reverse Connection with Objectness Prior Networksfor Object Detection
https://arxiv.org/abs/1707.01691
文章關注兩個問題: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傳入檢測頭部的預測網路。
文章指出,特徵融合的初衷還是同時利用高層級feature map提供的語義資訊和低層級feature map的位置資訊,而像FPN中的逐元素相加操作進行融合的方式要求不同層級的feature map具有完全一致的大小,本文則採用拼接的方式,不受channel數的限制。
RefineDet
Single-Shot Refinement Neural Network for Object Detection
https://arxiv.org/abs/1711.06897
本文是單階段的模型,但思路上卻是兩階段的。文章指出兩階段方法精度有優勢的原因有三點:
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。
如上圖,虛線框出的部分是三種結構的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(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的頭部中分類和位置迴歸兩個並行分支外再加入一個例項分割的並行分支,並將三者的損失聯合訓練。
在分割方面,文章發現對每個類別單獨生成二值掩膜(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的問題是單階段模型精度不如兩階段的關鍵。
於是,文章提出的解決措施即是在不同樣本間製造不平衡,讓簡單樣本的損失在整體的貢獻變小,使模型更新時更關注較難的樣本。具體的做法是根據預測概率給交叉熵的相應項新增懲罰係數,使得預測概率越高(越有把握)的樣本,計算損失時所佔比例越小。
以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進行學習,構成下面的結構:
圖中,上面分支是進行學習的小網路,下面分支的大網路則由較好表現的模型初始化,輸入圖片後,分別得到不同的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的方差,最後將方差下發到每個卡,結合之前下發的均值進行標準化。
更新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從零開始訓練也可以達到更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掉,再傳入後面的頭部網路。
類似的,ASTN(Adversarial Spatial Transformer Network)在旁支上生成旋轉等形變並施加到feature map上。整體上,兩個對抗樣本生成的子網路串聯起來,加入到RoI得到的feature和頭部網路之間。
文中的實驗顯示,在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。計算如下圖:
作者將這樣的模組插入兩階段檢測器的頭部網路,並用改裝後的duplicate removal network替代傳統的NMS後處理操作,形成真正端到端的檢測網路。在Faster R-CNN, FPN, Deformable ConvNets上的實驗顯示,加入Relation Module均能帶來精度提升。
結語
檢測領域在近年來取得的進展只是這場深度模型潮流的一個縮影。理解影像、理解視覺這一機器視覺的中心問題上,仍不斷有新鮮的想法出現。推動整個機器視覺行業躍進的同時,深度模型也越來越來暴露出自身的難收斂、難解釋等等問題,整個領域仍在負重前行。
本系列文章梳理了檢測任務上深度方法的經典工作和較新的趨勢,並總結了常用的測評集和訓練技巧,期望為讀者建立對這一任務的基本認識。在介紹物件的選擇和章節的劃分上,都帶有筆者自己的偏見,本文僅僅可作為一個導讀,更多的細節應參考實現的程式碼,更多的討論應參考文章作者的擴充套件實驗。
事實上,每項工作都反映著作者對這一問題的洞察,而諸多工作間的橫向對比也有助於培養獨立和成熟的視角來評定每項工作的貢獻。另外,不同文獻間的相互引述、所投會議期刊審稿人的意見等,都是比本文更有參考價值的資訊來源。
在工業界還有更多的問題,比如如何做到單模型滿足各種不同場景的需求,如何解決標註中的噪聲和錯誤干擾,如何針對具體業務型別(如人臉)設計特定的網路,如何在廉價的硬體裝置上做更高效能的檢測,如何利用優化的軟體庫、模型壓縮方法進行加速等等,就不在本文討論之列。
插播:格靈深瞳2018春季校招現已啟動!點選檢視格靈深瞳空中宣講會
新一年,AI科技大本營的目標更加明確,有更多的想法需要落地,不過目前對於營長來說是“現實跟不上靈魂的腳步”,因為缺人~~
所以,AI科技大本營要壯大隊伍了,現招聘AI記者和資深編譯,有意者請將簡歷投至:gulei@csdn.net,期待你的加入!
如果你暫時不能加入營長的隊伍,也歡迎與營長分享你的精彩文章,投稿郵箱:suiling@csdn.net
AI科技大本營讀者群(計算機視覺、機器學習、深度學習、NLP、Python、AI硬體、AI+金融、AI+PM方向)正在招募中,關注AI科技大本營微信公眾號,後臺回覆:讀者群,聯絡營長,新增營長請備註姓名,研究方向。
☟☟☟點選 | 閱讀原文 | 檢視更多精彩內容
相關文章
- 乾貨 | 目標檢測入門,看這篇就夠了(上)
- 做目標檢測,這一篇就夠了!2019最全目標檢測指南
- Zookeeper入門看這篇就夠了
- 入門Webpack,看這篇就夠了Web
- 小程式入門看這篇就夠了
- EFCore 6.0入門看這篇就夠了
- 入門Hbase,看這一篇就夠了
- Python3入門,看這篇就夠了Python
- Spring入門看這一篇就夠了Spring
- Mybatis入門看這一篇就夠了MyBatis
- 快應用入門,看這篇就夠了
- Elasticsearch入門,看這一篇就夠了Elasticsearch
- jQuery入門看這一篇就夠了jQuery
- MySQL入門看這一篇就夠了MySql
- 前端乾貨系列—-入門webpack這一篇文章就夠了前端Web
- 前端乾貨系列----入門webpack這一篇文章就夠了前端Web
- webpack的入門實踐,看這篇就夠了Web
- Python快速入門,看這一篇就夠了!Python
- Python 3 入門,看這篇就夠了(超全整理)Python
- mongoDB看這篇就夠了MongoDB
- Sinon 入門,看這篇文章就夠了
- 熱門、常用API介面,看這篇就夠了API
- Git【入門】這一篇就夠了Git
- Spring入門這一篇就夠了Spring
- Hibernate入門這一篇就夠了
- 學Mybatis,入門看這一篇就夠你學的了!MyBatis
- .Net6 微服務之Polly入門看這篇就夠了微服務
- spring boot入門,看這篇文章就夠了Spring Boot
- Android Fragment看這篇就夠了AndroidFragment
- Oracle索引,看這篇就夠了Oracle索引
- Spring 學習,看松哥這一篇萬餘字乾貨就夠了!Spring
- Git讓你從入門到精通,看這一篇就夠了!Git
- MASA Blazor入門這一篇就夠了Blazor
- oracle 歷史檢視檢視,看這一篇就夠了Oracle
- 乾貨|工作中要使用Git,看這篇文章就夠了Git
- OAuth授權|看這篇就夠了OAuth
- 小程式分享,看這篇就夠了
- JavaScript正則,看這篇就夠了JavaScript