mAP提升40%!YOLO3改進版—— Poly-YOLO:更快,更精確的檢測和實例分割

關注上方公號,獲取更多幹貨!

 

精彩內容

YOLOv3改進版來了!與YOLOv3相比,Poly-YOLO的訓練參數只有其60%,但mAP卻提高了40%!並提出更輕量的Poly-YOLO Lite,還擴展到了實例分割上!通讀完這篇文章,結合自己使用YOLOV3的經驗,覺得這篇改進確實良心之作,改在點上,多邊形實例分割也極具創新。

代碼剛剛開源:

https://gitlab.com/irafm-ai/poly-yolo

作者團隊:奧斯特拉發大學

 

1 Introduction 摘要

 

 

本文提出了性能更好的YOLOv3新版本,並擴展了名爲Poly-YOLO的實例分割。Poly-YOLO建立在YOLOv3的原始思想的基礎上,並消除了它的兩個弱點:

大量重寫的標籤 && 無效的anchor分配

Poly-YOLO通過使用stairstep上採樣通過hypercolumn技術聚合輕型SE-Darknet-53骨幹網中的特徵來減少問題,併產生高分辨率的單尺度輸出。與YOLOv3相比:

  • Poly-YOLO的可訓練參數只有60%,但mAP卻提高了40%。

  • 更少參數和更低輸出分辨率的Poly-YOLO  Lite,具有與YOLOv3相同的精度,但體積小三倍,速度快兩倍,更適用於嵌入式設備

  • 最後,Poly-YOLO使用邊界多邊形執行實例分割。訓練網絡以檢測在極座標網格上定義的尺寸無關的多邊形。預測每個多邊形的頂點具有可信度,因此Poly-YOLO生成具有不同數量頂點的多邊形。

 

2 YOLOv3  problem

YOLOv3在設計時,遇到了兩個我們發現的問題,而這兩個問題在原始論文中沒有描述:重寫標籤和在輸出尺度上不平衡的錨點分佈。解決這些問題對於提高YOLO的性能至關重要。

2.1 Label rewriting

由於YOLO系列都是基於圖像cell柵格作爲單元進行檢測,以416*416大小的圖像爲例,在圖像分辨率隨着卷積下降到13*13的特徵圖大小時,這時候特徵圖一個像素點的感受野是32*32大小的圖像patch。而YOLOV3在訓練時候,如果出現相同兩個目標的中心位於同一個cell,那麼前面一個目標就會被後面目標重寫,也就是說兩個目標由於中心距離太近以至於在特徵圖上將採樣成爲同一個像素點的時候,這時候其中有個目標會被重寫而無法進行到訓練當中。如下圖所示,紅色目標爲因爲重寫而沒有加入到訓練中的目標,可以看到,在這樣一個特徵圖上,重寫的目標數量還不少,27個目標裏有10個都被重寫,特別是比較稠密的地方。

作者在不同數據集上對重寫的標籤率進行了統計和比較,可以看出原始YOLOV3的標籤重寫率還是蠻高,而改進後的POLY-YOLO大大降低了該重寫率。

 

2.2 Anchor distribution

YOLOv3 anchor機制

使用9種anchor,每個輸出scale使用3個anchor。一個特定的GroundTruth框與哪個sclae的anchor匹配度最高,就會被指定給哪個scale。

YOLOv3是通過k-means算法進行目標大小統計,最後獲得聚類質心來表示九個anchor的。這些anchor被分成三個一組,與在輸出層中檢測到的小、中、大box相連接。

不幸的是,這種根據三種尺寸來分anchor的原則通常是合理的,但是有個前提就是要滿足下面這個分佈:

但這種情況在不能保證適用於各種情況,例如當,均值u=0.5r,標準差σ^2 = r是一個更現實的情況,這將導致大多數box將被中間輸出層(中等大小)捕獲,而其他兩個層將未得到充分利用。

爲了說明這個問題,假設兩個box:m1和m2;前者與放置在高速公路上的攝像頭的車牌檢測任務相連接,後者與放置在車門前的攝像頭的人檢測任務相連接。對於這樣的任務,我們可以獲得大約M1∼(0.3r,0.2r),因爲這些牌將會覆蓋小的區域,而m2∼(0.7r,0.2r)因爲人類將會覆蓋大的區域。

對於這兩個集合,分別計算anchor。第一種情況導致的問題是,中、大型的輸出規模也將包括小的anchor,因爲數據集不包括大的目標。這裏,標籤重寫的問題將逐步升級,因爲需要在粗網格中檢測小目標。反之亦然。大目標將被檢測在小和中等輸出層。在這裏,檢測將不會是精確的,因爲中小輸出層有有限的感受野。三種常用量表的感受野爲{85×85,181×181,365×365}。這兩種情況的實際影響是相同的:性能退化。

在介紹YOLOv3的文章中,作者說:“YOLOv3具有較高的小目標AP性能。但是,在中、大型目標上的性能相對較差。” 我們認爲YOLOv3出現這些問題的原因就是在此。

 

3 POLY-YOLO 架構

 

3.1 問題總結

label重寫問題:不會在原分辨率大小時候發生,本文的關注點是在尺度scale=1/8,1/16,1/32的尺度上的情況。

anchor分佈問題,有兩種解決辦法:

  • 第一種方法是爲三個輸出尺度定義感受野,並定義兩個閾值來分隔它們。然後,k-means將根據這些閾值計算聚類中心(用作anchor)。缺點是這樣把數據驅動的anchor轉成了問題驅動,只能在固定的一些尺度上檢測對應的目標,而不是全尺度,這樣會浪費網絡。

  • 第二種方法是創建一個具有單個輸出的體系結構,該輸出將聚合來自各種scale的信息。然後一次性處理所有的anchor。與第一種方法相比,anchor大小的估計將還是保持由數據驅動。

本文是採用第二種處理方法進行優化。

3.2 POLY-YOLO架構

 

上圖顯示了原始體系結構和新體系結構之間的比較。Poly-YOLO在特徵提取器部分每層使用較少的卷積濾波器,並通過squeeze-and-excitation模塊擴展它。較重的neck block被使用stairstep進行上採樣、帶有hypercolmn的輕量block所取代。head使用一個而不是三個輸出,具有更高的分辨率。綜上所述,Poly-YOLO的參數比YOLOv3少40%,但可以產生更精確的預測。

 

這裏使用hypercolmn實現對於多個尺度部分的單尺度輸出合成。

設O是一個特徵圖,u(·ω)函數表示以因子ω對輸入圖像進行上採樣,m(·)函數表示一個轉換,把a×b×c·轉爲a×b×c×δ維度的映射,δ是一個常數。此外,認爲g(O1,…,On) 是一個n元的composition/aggregation函數。爲此,使用hypercolmn的輸出特徵圖如下所示:

從公式中可以明顯看出,存在着很高的不平衡——一個O1的單值投影到O的單值中,而On的單值卻直接投影成2^n−1×2^n−1的值中。爲了打破這種不平衡,我們建議使用計算機圖形中已知的staircase方法,參見下圖。staircase插值增加(或降低)圖像分辨率最大10%,直到達到期望的分辨率。與直接上採樣相比,輸出更平滑。這裏使用最低可用的upscale因子2。形式上定義staircase輸出特徵映射O '爲:

如果我們考慮最近鄰上採樣,O=O '保持不變。對於雙線性插值(和其他),O/=O '用於非齊次輸入。關鍵是,無論是直接上採樣還是staircase方法,計算複雜度都是相同的。雖然staircase方法實現了更多的添加,但它們是通過分辨率較低的特徵圖計算的,因此添加的元素數量是相同的。

爲了瞭解實際影響,進行了以下實驗。從Cityscapes數據集中選了Poly-YOLO 200個訓練圖像和100個驗證圖像,用於hypercolmn中直接上採樣和staircase。我們爲兩種方式各進行了五次訓練,並在下圖中繪製了訓練進度圖。從圖中可以看出,差異很小,但是很明顯,在hypercolmn中staircase插值產生的訓練和驗證損失略低,在相同的計算時間下得到了改進。

修改YOLO架構的最後一種方法是在主幹中使用squeeze-and-excitation(SE)塊。像其他許多神經網絡一樣,Darknet-53使用重複塊,其中每個塊由卷積和跳連組成。(SE)塊允許使用空間和通道的信息,這帶來準確性的提高。通過(SE)塊和提高輸出分辨率,降低了計算速度。由於速度是YOLO的主要優勢,爲了平衡我們在特徵提取階段減少了卷積濾波器的數量,即設置爲原始數的75%。

此外,neck和head較輕,共有37.1M的參數,明顯低於YOLOv3(61.5M)。不過,Poly-YOLO比YOLOv3的精度更高。

再者,我們還提出了poly-yolo lite,旨在提高處理速度。在特徵提取器和head中,這個版本只有Poly-YOLO66%的濾波器數量。最後,s1減到1/4。yolo lite的參數個數爲16.5M。

 

4 POLY-YOLO 實例分割

4.1 多邊形邊框原則

在這裏,我們引入一個多邊形表示,它能夠檢測具有不同數量頂點的目標,而不需要使用會降低處理速度的遞歸神經網絡。

在一個公共數據集中,許多對象都被類似的形狀所覆蓋,不同之處在於對象的大小。例如,汽車牌照、手勢、人類或汽車都有幾乎相同的形狀。一般的形狀可以很容易地用極座標來描述,這就是爲什麼我們用極座標系統而不是笛卡爾座標系來描述多邊形的原因。以邊界框的中心用作原點,αi,j代表一個頂點到中心的距離(除以box的對角線長進而歸一化到[0,1]),βij爲頂點到中心的角度。當檢測到多邊形邊界框,可以通過對角線長乘以αi,j來獲得多邊形的box。該原則允許網絡學習與大小無關的一般形狀,而不是具有大小的特定實例。

βij∈[0,360],可以通過線性變換將其更改爲βi,j∈[0,1]。當某個極單元cell具有高置信度時,頂點必位於該單元內部。 通過與極座標單元的原點和位置之間的距離,可以知道其近似位置,並且可以通過極單元內部的角度來精確調整位置。

 

4.2 與Poly-YOLO集成

檢測邊界多邊形的思想是通用的,可以很容易地集成到任意的神經網絡中。通常,必須修改三個部分:數據準備的方式、體系結構和損失函數。從語義分割標籤中提取邊界多邊形見5.1節。所提取的邊界多邊形必須以與邊界框數據相同的方式進行擴充。

在Poly-YOLO,輸出層中卷積濾波器的數量必須更新。當我們只檢測box時,最後一層輸出維度爲n=na(nc+ 5),na=9(anchor個數),nc爲類別數。對基於多邊形的目標檢測進行集成,得到n=na(nc+ 5+ 3nv),nv爲每個多邊形檢測到的頂點數的最大值。

nv對convolutional filter的數量有很大的影響。例如,當有9個錨點、20個類和30個頂點時,輸出層檢測邊界盒和多邊形的過濾器將比只檢測邊界盒時多4.6倍。另一方面,增加只發生在最後一層;所有剩下的YOLO層具有相同數量的參數。從這個角度看,神經網絡參數的總數增加了微不足道的0.83%,而且處理速度沒有受到影響。缺點在於增加的部分在最後一層,這一層處理高分辨率的特徵圖。這導致在訓練網絡時對符號張量的VRAM需求增加,這可能導致在學習階段使用的最大batch-size減少。

POLY-YOLO的損失函數爲:

其中:

所述的集成方案可以同時檢測box和多邊形。由於多邊形頂點總是位於box中,兩者檢測的是同一個目標,因此兩者可以互相支持,如果具有多邊形形狀檢測的YOLO訓練更有效,收斂速度更快的話。這一原理在文獻中被稱爲“輔助任務學習”。

例如一種特殊的情況,當目標是一個垂直的方形目標。在這種情況下,box的輪廓會與邊界多邊形的輪廓重合,並且邊界框和多邊形都會檢測到左上角的頂點。但是,這兩種檢測將是協同的,所以訓練時間應更短。

 

5 POLY-YOLO 實驗效果

 

5.1 三個數據集

5.2 效果展示

 

6 總結

 

6.1 檢測

對於特徵提取,可以使用任意的SOTA主幹,如(SE)ResNeXt或高效網絡,這可能會提高整體精度。這種方法也可以在YOLOv4中看到,YOLOv4作者使用了不同的主幹和其他一些技巧(也可以應用在本文方法中),但是原始YOLOv3的head沒有改變。

我們在Poly-YOLO中描述的問題實際上來自於YOLOv3 head的設計,簡單交換主幹並不能解決這些問題。模型仍然會遭受標籤重寫和不適當anchor分佈。
在本文工作中,關注的是通過概念變化而不是蠻力實現的性能改進。這樣的改進可以廣泛應用,並且可以很容易地集成到主幹。

 

6.2 分割

如果兩個頂點屬於同一個極座標單元,則取與邊界框中心距離較大的頂點。該圖還顯示了這種限制的實際影響。這不是訓練或推理的問題,這是標籤創建的問題;網絡本身是經過正確訓練的,並根據(不精確的)訓練標籤做出預測。在連接單個頂點之後,將第一個頂點與最後一個頂點連接起來,這可能會給強非凸對象帶來問題。不過,這種行爲不會在所有非凸對象上發生。如果兩個頂點位於兩個不同的極單元中,那麼即使是非凸的目標也可以正確地處理,如下圖所示,Poly-YOLO甚至可以很好地處理非凸的星星。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章