密集物體檢測的焦點損失
l 引言
現在最高精度的目標識別方法是從R-CNN推廣的two-stages的方法。它是在candidate object locations的稀疏集合上面用了分類器。總之,one-stage檢測器被運用於possible object locations的規則的密集樣本,它的訓練速度更快且更簡單,但相比two-stages的精確率差了許多。本文我們調查為什么是這種情況。我們發現在密集探測器訓練期間遇到的極端前景 - 背景類別失衡是主要原因。我們建議通過重塑標准的交叉熵損失來解決這個類別的不平衡問題,從而降低指定給良好分類示例的損失。我們的新的Focal Loss專注訓練在hard example的稀疏集合上,能夠防止大量的easy negatives在訓練中壓倒訓練器。為了評估loss的效率,我們設計了一個簡單的密集檢測器(dense detector),名叫RetinaNet。結果顯示當RetinaNet在focal loss上訓練之后,它能夠匹配之前的one-stage detector的速度,並且優於已有的最佳水平的two-stage detector。
- 簡介
現在的最佳水平的object detector都是基於two-stages,提案驅動的機理的。像R-CNN框架一樣,第一步,生成候選物體定位(candidate object location)的稀疏集合;第二步,利用卷積神經網絡構造分類器將第一步的集合分為前景和背景。通過一系列的進展,這兩階段的框架始終達到最高精度的COCO的benchmark挑戰。
盡管two-stages探測器的成功,一個自然的問題是:一個簡單的one-stage探測器能達到相似的精度嗎?one-stage的檢測器應用於對象位置、尺度和縱橫比的規則的密集樣本集。one-stage探測器,如YOLO和SSD的最新工作,顯示出有希望的結果,產生更快的探測器,與目前最先進的two-stages探測器相比,高出其精度在10%-40%以內。
本文進一步把性能極限提高了:我們提出了一個one-stage object檢測器,它第一次可以匹敵最佳水平的更復雜的two-stages檢測器的state-of-art COCO AP,如Feature Pyramid Network FPN或Mask R-CNN。為了達到這個結果,我們在訓練時把類別不均衡作為主要的障礙,它阻礙了one stage方法達到state-of-the-art的精度,並且我們提出了新的loss function消除這些障礙。
通過兩階段級聯和采樣啟發式技術解決類R-CNN類探測器中的類不平衡問題。提議階段(例如Selective Search ,EdgeBoxes,DeepMask,RPN)將候選對象位置的數量迅速縮小到一個小數目(例如1-2k), 濾除大部分背景樣本。 在第二個分類階段,為了保持前景和背景之間的可管理平衡,執行抽樣啟發式,例如固定的前景背景比(1:3)或在線硬示例挖掘(OHEM)。
相比之下,one-stage檢測器必須處理更大的一組candidate object locations,它在圖像上規則采樣。在訓練中,這常常意味着枚舉100K個位置,密集地覆蓋空間位置、尺度和縱橫比。雖然也可以應用類似的采樣啟發式算法,但由於訓練過程仍然被easily classified background examples所支配,所以它們是低效的。這種低效率是在目標識別的典型問題,通常通過如bootstrapping、hard example mining的技術解決。
在本文中,我們提出了一種新的損失函數,作為處理類不平衡的先前方法的更有效的替代方案。 損失函數是一個動態縮放的交叉熵損失,其中縮放因子隨着對正確類別的置信度增加而衰減到零,見圖1。直觀地,這個縮放因子可以自動減小訓練過程中easy example的貢獻的比例並快速聚焦hard examples的模型。 實驗表明,我們提出的焦點損失使我們能夠訓練一個高精度,one-stage檢測器,它能顯著地勝過用sample heuristic或hard example mining訓練one-stage的方法(之前的state-of-the-art方法)。最后,我們注意到,焦點損失的確切形式並不重要,我們表明其他樣例可以達到類似的結果。
為了證明所提出的焦點損失的有效性,我們設計了一個簡單的one-stage檢測器RetinaNet,以其在輸入圖像中對象位置的密集采樣而命名。
其設計包含高效的in-network feature pyramid和使用anchor boxes。它借鑒了來自[ 22, 6, 28,20 ]的各種最近的想法。ValnANET是高效和准確的,我們基於RESNET-101-FPN主干的最佳模型,在5 fps的運行下,實現了COCO測試DEAP AP 39.1,超過了先前從一個和兩個階段檢測器得到的最佳單模型結果,見圖2。
- 相關工作
經典對象檢測器:滑動窗口范例,其中分類器應用於密集的圖像網格,具有悠久而豐富的歷史。 最早的成功之一是LeCun等人的經典著作《who applied convolutional neural
networks》手寫數字識別。 Viola和Jones 使用增強物體檢測器進行人臉檢測,導致這些模型被廣泛采用。引入HOG [4]和積分通道特征[5]為行人檢測提供了有效的方法。 DPMs 幫助將密集探測器擴展到更一般的對象類別,並在PASCAL上取得了最佳結果多年。 雖然滑動窗口方法是傳統計算機視覺領域的領先檢測范式,但隨着深度學習的復興,接下來描述的兩階段檢測器迅速成為物體檢測的主導。
Two-stages探測器:現代物體探測的主要范例是基於兩階段的方法。作為選擇性搜索工作的開創者,第一階段生成一組稀疏的候選投標,其中應包含所有對象,同時濾除大部分負面位置,第二階段將投標分類為前景類/背景。R-CNN將第二階段分類器升級為卷積網絡,其准確性有了很大提高,並迎來了現代物體探測時代。 多年來,R-CNN在速度方面得到了改善,並且通過使用了學習對象提案。 區域提議網絡(RPN)將提案生成與第二階段分類器集成為一個單一的卷積網絡,形成更快的RCNN框架。 已經提出了許多這個框架的擴展。
One-stage探測器:OverFeat 是第一個基於深度網絡的現代一階段目標探測器。最近SSD和YOLO重新關注一階段方法。 這些探測器已經進行了速度調整,但其准確度落后於兩種方法。 固態硬盤的AP降低了10-20%,而YOLO專注於更加極端的速度/精度平衡。參見圖2.最近的工作表明,通過降低輸入圖像分辨率和數量 的提案,但是即使計算預算較大,單階段方法的准確率也會降低[17]。 相反,這項工作的目的是了解一級探測器是否能夠以相似或更快的速度運行時匹配或超過兩級探測器的准確度。
我們的RetinaNet探測器的設計與以前的密集探測器有許多相似之處,特別是RPN引入的“錨點”概念以及SSD和FPN中使用的金字塔特征。 我們強調,我們的簡單檢測器能夠達到不是基於網絡設計創新的頂級結果,而是由於我們的新型損失。
Class Imbalance:像增強型檢測器和DPMs這樣的經典單級目標檢測方法,以及像SSD這樣的更新方法,在訓練過程中都會面臨很大的類別不平衡。這些檢測器對每個圖像評估104-105個候選位置,但只有少數位置包含對象。這種不平衡會導致兩個問題:(1)由於大多數地點都是容易產生不利於學習信號的負面因素,所以培訓效率低下;(2)整體而言,簡單的負面因素會壓倒訓練並導致退化的模型。一個常見的解決方案是執行某種形式的hard negative mining,在訓練過程中samples hard examples或更復雜的采樣/重新測量方案。 相反,我們表明,我們提出的focal loss自然處理one-stage探測器所面臨的類不平衡,並且使我們能夠在沒有采樣的情況下有效地訓練所有示例,並且不會讓easy negative主導損失和梯度。
Robust Estimation:通過降低具有大錯誤的示例的損失(hard examples),減少異常值的貢獻來設計魯棒損失函數(例如Huber損失),這一點引起了很大興趣。 相比之下,我們的焦點損失不是針對異常值,而是為了解決階層不平衡問題,通過減輕inliers(easy examples)來解決階級失衡問題,即使他們的數量很多,他們對總損失的貢獻也很小。 換句話說,焦點損失執行robust loss的相反作用:它將訓練集中在一組稀疏的hard examples上。
3. Focal Loss
Focal Loss是被設計來針對one-stage object detection方案的,其中在訓練中有在前景和背景類別之間的完全不平衡存在(1:1000)。先從對於binary classification的交叉熵(CE,cross entropy)損失來介紹Focal Loss。
移除y∈{-1,1}是ground truth class,p∈[0,1]是模型對於標簽y=1的估計概率。
為了方便標記,記Pt:
重寫
CE損失可以看作是圖1中的藍色(頂部)曲線。這種損失的一個顯着特性,可以在其圖中很容易看出,即使是很容易分類的例子(pt:5)也會產生損失 不平凡的幅度。當大量的easy examples疊加,這些小的損失值可以主導那些稀少的類。
3.1. Balanced Cross Entropy
針對class imbalance的常用方法是用一個權重參數α∈[0,1]對於類1,1-α對於類-1。實際應用上,α一般被設定為類頻率的逆或者作為超參數,通過交叉驗證設定。為了標記方便,定義αt,相似的定義Pt。α-balanced CE loss:
3.2. Focal Loss Definition
訓練時遇到很大的類別不平衡會主導交叉熵損失。易分負樣本在梯度和損失中占據主導地位。而α平衡了正負樣本的重要性,它不會區別易分樣本和難分樣本。與之不同,作者將損失函數變形降低易分樣本的權重,專注於訓練難分負樣本。
更加形式化地來說,作者加了(1-Pt)^γ到交叉熵上。γ是可以可以調節的專注參數γ>0。這樣,Focal loss定義為:
說一下Focal loss的屬性:(1)當一個樣例被誤分類,那么Pt很小,那么調制因子(1-Pt)接近1,損失不被影響;當Pt→1,因子(1-Pt)接近0,那么分的比較好的(well-classified)樣本的權值就被調低了。(2)專注參數γ平滑地調節了易分樣本調低權值的比例。γ增大能增強調制因子的影響,實驗發現γ取2最好。
直覺上來說,調制因子減少了易分樣本的損失貢獻,拓寬了樣例接收到低損失的范圍。舉例來說,當γ=2時,一個樣本被分類的Pt=0.9的損失比CE小1000多倍。這樣就增加了那些誤分類的重要性(它們損失被縮了4倍多,當Pt<0.5且γ=2)。我們又用了α-balanced的Focal Loss的變體。作者發現它能提升一點點精度。我們注意到損失層的實現將用於計算p的sigmoid操作與損失計算相結合,導致更大的數值穩定性。
雖然在我們的主要實驗結果中我們使用上面的焦點損失定義,但其確切形式並不重要。 在附錄中,我們考慮焦點損失的其他實例,並證明這些可以同樣有效。
3.3.Class Imbalance and Model Initialization
Binary分類模型是默認初始化為對於y=-1和y=1有相同的概率的。在這樣的初始化之下,由於類不平衡,出現頻率高的類會主導總的損失,在訓練早期導致不穩定。為了對抗這個,作者提出“優先”的概念,在訓練初期對於模型對於低頻率的類(背景)估計的p給予“優先”。作者把這個“優先”(prior)記做 π ,設定它,以至於模型對於低頻率類別(rare class)的樣本的估計p很低,比如說0.001。這是模型初始化的改變,而不是損失函數的改變。我們發現這點能改進訓練的穩定性(對於在類極不平衡的情況下的交叉熵和focal loss都有效)。
3.4.Class Imbalance and Two-stage Detectors
Two-stage detectors常用交叉熵損失,而不用 α-balancing 或者我們的方法。它們用兩種途徑解決這個問題:a.two-stage cascade(雙階段級聯)b.biased minibatch sampling(有偏批量采樣)。第一個級聯階段是一個對象建議機制[35,24,28],它將幾乎無限的可能對象位置集合減少到一兩千個。 重要的是,選定的提案不是隨機的,但可能與真實的對象位置相對應,這可以消除絕大多數簡單的否定。 當訓練第二階段時,通常使用偏倚抽樣來構造包含例如1:3比例的正面到負面示例的小型貼片。 這個比例就像一個隱含的“平衡因素”,通過抽樣來實現。 我們提出的焦點損失旨在直接通過損失函數在一個階段的檢測系統中解決這些機制。
4. RetinaNet Detector
RetinaNet是由骨干網和兩個特定任務子網組成的單一統一網絡。 主干負責計算整個輸入圖像上的卷積特征映射,並且是一種現存(已有)的卷積網絡。 第一個子網在骨干的輸出上執行卷積對象分類; 第二個子網執行卷積bounding box regression。 這兩個子網具有一個簡單的設計,我們專門為一階段密集檢測而提出,請參見圖3.雖然這些組件的細節有許多可能的選擇,但大多數設計參數對精確值並不特別敏感,如實驗。 我們接下來描述RetinaNet的每個組件。
Feature Pyramid Network Backbone:我們采用[20]中的特征金字塔網絡(FPN)作為RetinaNet的主干網絡。簡而言之,FPN用自上而下的路徑和橫向連接增強了標准卷積網絡,因此網絡從單個分辨率輸入圖像有效地構建了一個豐富的多尺度特征金字塔,參見圖3(a)-(b)。金字塔的每個級別都可以用於檢測不同比例的對象。FPN改進了完全卷積網絡(FCN)的多尺度預測,如RPN [28]和DeepMask式提案的增益所示,以及兩階段檢測器如Fast R-CNN或Mask R-CNN。
繼[20]之后,我們在ResNet架構之上構建了FPN [16]。我們構造一個金字塔,層次為P3到P7,其中l表示金字塔等級(第l層分辨率是第一層的 1/2l)。正如[20]中的所有金字塔級別都有C = 256個通道。金字塔的細節通常遵循[20],並有一些適度的差異.雖然許多設計選擇並不重要,但我們強調使用FPN骨干網時:使用僅來自最終ResNet層的特征的初步實驗產生低AP。
Anchors:我們使用類似於[20]中RPN變體的translation-invariant anchor boxes。在金字塔等級P3到P7上,錨點的面積分別為322到5122。 如[20]中所述,在每個金字塔等級,我們使用三個長寬比為{1:2; 1:1;2:1}。 對於比[20]更密集的覆蓋范圍,我們在每個級別添加尺寸為{20,21/3,22/3}的原始3個縱橫比錨點集合的錨點。 這在我們的設置中改善了AP。 總共有每個級別和級別的A = 9個錨點,它們覆蓋了與網絡輸入圖像相關的32-813像素的范圍。
每個錨點被分配一個分類目標的長度為K的one-hot向量,其中K是對象類別的數量,以及一個4向量的box regression目標。我們使用RPN中的分配規則,但修改了多類別檢測和調整后的閾值。具體而言,使用0.5的交叉口聯合(IoU)閾值將錨點分配給ground-truth對象框; 如果他們的IoU位於[0,0.4),則為背景。由於每個錨點至多被分配一個對象框,因此我們將其長度K標簽矢量中的相應條目設置為1,並將所有其他條目設置為0。如果未分配錨點,這可能會在[0.4,0.5)中發生重疊,它在訓練中被忽略。Box regression targets被計算為每個錨點與其分配的對象框之間的偏移量,或者如果沒有分配則被忽略。
Classification Subnet:分類子網預測每個錨點(A個)和對象類別(K個)在每個空間位置處的對象存在概率。該子網是每個FPN級別的小型FCN; 該子網的參數在所有金字塔級別共享。它的設計很簡單。從給定金字塔等級的C通道輸入輸入特征映射,子網應用4個3x3個conv層,每個帶有C個濾波器,每個都以ReLU作為激活函數,接着是帶有KA濾波器的3x3 conv層。最后用sigmoid激活來輸出每個空間位置的KA二進制預測,參見圖3(c)。在大多數實驗中我們使用C = 256和A = 9。
與RPN相比,我們的對象分類子網更深入,僅使用3x3卷積,並且不與box regression子網共享參數(下面介紹)。 我們發現這些更高層次的設計決策比超參數的特定值更重要。
Box Regression Subnet:與object classification子網絡平行,作者在金字塔每個層都接到一個小的FCN上,意圖回歸每個anchor box對鄰近ground truth object的偏移量。回歸子網絡的設計和分類相同,不同的是它為每個空間位置輸出4A個線性輸出。對於每個空間位置的A個anchor,4個輸出預測anchor和ground-truth box的相對偏移。與現在大多數工作不同的是,作者用了一個class-agnostic bounding box regressor,這樣能用更少的參數更高效。Object classification和bounding box regression兩個網絡共享一個網絡結構,但是分別用不同的參數。
4.1. Inference and Training
Inference:RetinaNet的inference涉及把圖片簡單地在網絡中前向傳播。為了提升速度,作者只在每個FPN,從1k個top-scoring預測中提取box預測(在置信度閾值0.05處理之后)。多個層來的Top prediction聚在一起然后用NMS(非極大值抑制)以0.5為閾值。
Focal loss:作者在分類子網絡輸出的地方用了focal loss並發現在γ為2的時候效果比較好。同時RetinaNet在γ屬於[0.5,5]有相對的魯棒性。作者重點指出訓練Retina時候,在每個采樣圖片里面,focal loss被加到所有的100K個anchor上面的。這與通常的heuristic sampling(RPN)或者 hard example mining(OHEM,SSD)選擇anchor的一小部分集合(對於每個minibatch大概256)不同。作者用了特定的anchor(不是全部的anchor,因為大部分的anchor是easy negative在focal loss中有微小的作用)來歸一化。最后α是用在設定在出現頻率低的類別,有一個穩定的范圍,它也和γ一起。這樣能把兩者融合,調兩個參數。一般來說,當γ增大,α應該稍微減小(α=0.25和 γ=2效果最好)。
Initialization:作者在ResNet-50-FPN和ResNet-101-FPN的backbone上面做實驗。基礎模型是在ImageNet1K上面預訓練的。除了最后一層,RetinaNet的子網絡都是初始化為bias b=0和權值weight用高斯初始化 σ=0.01。classification子網絡的最后一層的conv層,作者的bias初始化為b=-log((1-π)/π)其中π表示每個anchor在開始訓練的時候應該被標記為背景的置信度 π。作者用 π= .01在所有的實驗中。這樣初始化能夠防止大的數量的背景anchor在第一次迭代的時候產生大的不穩定的損失值。
Optimization:RetinaNet是用SGD訓練的。作者用了同步的SGD在8個GPU上面,每個minibatch16張圖,每個GPU訓練2張圖。所有的模型都是訓練90K迭代的,初始學習率是0.01(會在60k被除以10,以及在80K除以10)。作者只用圖像的橫向翻轉作為唯一的數據增廣方式。權值衰減0.0001以及動量0.9。訓練的損失是focal loss和標准的smooth L1 loss作為box回歸。
5. Experiments
我們在具有挑戰性的COCO基准[21]的邊界框檢測軌道上提出實驗結果。對於訓練,我們遵循常規練習[1,20]並使用COCO trainval35k split(來自火車的80k圖像和來自40k圖像val分裂的隨機35k圖像子集的聯合)。我們報告病變和敏感性研究,通過評估minival split(val的其余5k圖像)。對於我們的主要結果,我們在test-dev split上報告COCO AP,它沒有公共標簽,並且需要使用評估服務器。
5.1. Training Dense Detection
我們運行大量實驗來分析密集檢測的損失函數的行為以及各種優化策略。 對於所有實驗,我們使用深度為50或101的ResNets [16],並在頂部構建特征金字塔網絡(FPN)[20]。 對於所有消融研究,我們使用600像素的圖像比例進行訓練和測試。
網絡初始化:我們第一次嘗試訓練RetinaNet時使用了標准的交叉熵(CE)損失,而沒有對初始化或學習策略進行任何修改。這很快就失敗了,在訓練期間網絡發散。但是,簡單地初始化我們模型的最后一層,使得檢測對象的先驗概率是π=:01(見x4.1)可以進行有效的學習。 用ResNet-50訓練RetinaNet,這個初始化已經在COCO上產生了一個可觀的AP 30.2。 結果對於π的確切值是不敏感的。所以我們使用π=:01進行所有實驗。
5.2. Model Architecture Design
Anchor Density: one-stage檢測系統中最重要的設計因素之一是其密度要覆蓋可能圖像框的空間。 Two-stages探測器可以使用區域合並操作將盒子分類到任意位置,比例和縱橫比[10]。 相比之下,由於一階段檢測器使用固定的采樣網格,所以在這些方法中實現高覆蓋率盒子的流行方法是在每個空間位置使用多個“錨點”[28]以覆蓋各種尺度和縱橫比的盒子。
我們掃過FPN中每個空間位置和每個金字塔等級使用的尺度和縱橫比錨點的數量。我們考慮從每個位置處的單個方形錨點到12個錨點的情況,每個位置跨越4個亞倍頻程尺度(2k = 4, 對於k≥3)和3個縱橫比[0.5,1,2]。 使用ResNet-50的結果顯示在表1c中。 僅使用一個方形錨就能達到驚人的AP(30.3)。 但是,如果每個位置使用3個刻度和3個縱橫比,則AP可以提高近4個點(至34.0)。 我們在這項工作中使用了此設置進行所有其他實驗。
最后,我們注意到增加超過6-9個錨點並沒有顯示進一步的收益。 因此,盡管two-stages系統可以對圖像中的任意方框進行分類,但性能的飽和度會下降。密度意味着two-stages系統的較高潛在密度可能不具有優勢。
Speed versus Accuracy(速度與准確度):較大的骨干網絡可以提供更高的准確度,但也會降低推理速度。同樣適用於輸入圖像比例(由較短的圖像側定義)。我們在表1e中顯示這兩個因素的影響。在圖2中,我們繪制了RetinaNet的速度/精度折衷曲線,並將其與使用COCO test-dev上的公開數字的最近方法進行比較。該圖顯示RetinaNet由我們的焦點損失啟動,形成了對所有現有方法的上限,從而打破了低精度的制度。具有ResNet-101-FPN和600像素圖像比例(為簡單起見,我們用RetinaNet-101-600表示)的RetinaNet與最近發布的ResNet-101-FPN更快的R-CNN [20]的精度相匹配,同時運行在122每個圖像的ms數量為172 ms(均在Nvidia M40 GPU上測量)。使用更大的比例可以讓RetinaNet超越所有兩階段方法的准確性,同時速度更快。為了實現更快的運行時間,只有一個工作點(500像素輸入),使用ResNet-50-FPN比ResNet-101-FPN有所改進。解決高幀率制度可能需要特殊的網絡設計,如[27],並超出了這項工作的范圍。我們注意到,在公布后,現在可以通過[12]中更快的R-CNN變體獲得更快和更准確的結果。
5.3. Comparison to State of the Art
我們在具有挑戰性的COCO數據集上評估RetinaNet,並將測試開發結果與近期最先進的方法(包括一階段模型和兩階段模型)進行比較。 表2列出了我們使用刻度抖動訓練的RetinaNet-101-800模型的結果,並且比表1e中的模型長1.5倍(帶來1.3 AP增益)。 與現有的一階段方法相比,我們的方法與最接近的競爭對手DSSD [9]相比,實現了5.9點AP健康差距(39.1 vs. 33.2),同時也更快,見圖2.與最近的兩階段方法相比, 基於Inception-ResNet-v2-TDM [32],RetinaNet比性能最高的Raster CN-R更快達到2.3點。 插入RetNeNet-32x8d-101-FPN [38]作為RetinaNet骨干,可進一步提高1.7個AP的性能,在COCO上超過40個AP。
6. Conclusion
作者將類別不平衡作為阻礙one-stage方法超過top-performing的two-stage方法的主要原因。為了解決這個問題,作者提出了focal loss,在交叉熵里面用一個調整項,為了將學習專注於hard examples上面,並且降低大量的easy negatives的權值。作者的方法簡單高效。並且設計了一個全卷積的one-stage的方法來驗證它的高效性。在具有挑戰性的COCO數據集上面也達到了state-of-the-art的精度和運行時間。