YOLO3升级优化版!Poly-YOLO:支持实例分割!
YOLO3升級優(yōu)化版!Poly-YOLO:支持實(shí)例分割!
POLY-YOLO: HIGHER SPEED, MORE PRECISE DETECTION AND INSTANCE SEGMENTATION FOR YOLOV3
論文:https://arxiv.org/abs/2005.13243
開源代碼:
https://gitlab.com/irafm-ai/poly-yolo
作者團(tuán)隊(duì):奧斯特拉發(fā)大學(xué)
一.摘要
YOLOv3改進(jìn)版來了!與YOLOv3相比,Poly-YOLO的訓(xùn)練參數(shù)只有其60%,但mAP卻提高了40%!并提出更輕量的Poly-YOLO Lite,還擴(kuò)展到了實(shí)例分割上!通讀完這篇文章,結(jié)合自己使用YOLOV3的經(jīng)驗(yàn),覺得這篇改進(jìn)確實(shí)良心之作,改在點(diǎn)上,多邊形實(shí)例分割也極具創(chuàng)新。
提出了一個新版本的YOLO,它具有更好的性能,并通過實(shí)例分割進(jìn)行了擴(kuò)展,稱為Poly YOLO。Poly YOLO建立在YOLOv3的原始思想基礎(chǔ)上,消除了它的兩個缺點(diǎn):大量重寫的標(biāo)簽和錨的低效分布。Poly
YOLO通過使用超柱技術(shù)聚集來自輕量級SE-Darknet-53主干的特征,使用階梯式上采樣來減少問題,并產(chǎn)生具有高分辨率的單尺度輸出。與YOLOv3相比,Poly YOLO只有60%的可訓(xùn)練參數(shù),但將mAP提高了40%。還提出了參數(shù)少,輸出分辨率低的Poly-YOLO。它的精度與YOLOv3相同,但體積小3倍,速度快2倍,因此適合于嵌入式設(shè)備。最后,Poly YOLO使用邊界多邊形執(zhí)行實(shí)例分割。該網(wǎng)絡(luò)被訓(xùn)練來檢測在極坐標(biāo)網(wǎng)格上定義的與大小無關(guān)的多邊形。每個多邊形的頂點(diǎn)都是用它們的置信度來預(yù)測的,因此Poly YOLO生成的多邊形的頂點(diǎn)數(shù)是不同的。
二.引論
本文提出了性能更好的YOLOv3新版本,并擴(kuò)展了名為Poly-YOLO的實(shí)例分割。Poly-YOLO建立在YOLOv3的原始思想的基礎(chǔ)上,并消除了它的兩個弱點(diǎn):
大量重寫的標(biāo)簽 && 無效的anchor分配
Poly-YOLO通過使用stairstep上采樣通過hypercolumn技術(shù)聚合輕型SE-Darknet-53骨干網(wǎng)中的特征來減少問題,并產(chǎn)生高分辨率的單尺度輸出。與YOLOv3相比:
o Poly-YOLO的可訓(xùn)練參數(shù)只有60%,但mAP卻提高了40%。
o 更少參數(shù)和更低輸出分辨率的Poly-YOLO Lite,具有與YOLOv3相同的精度,但體積小三倍,速度快兩倍,更適用于嵌入式設(shè)備。
o 最后,Poly-YOLO使用邊界多邊形執(zhí)行實(shí)例分割。訓(xùn)練網(wǎng)絡(luò)以檢測在極坐標(biāo)網(wǎng)格上定義的尺寸無關(guān)的多邊形。預(yù)測每個多邊形的頂點(diǎn)具有可信度,因此Poly-YOLO生成具有不同數(shù)量頂點(diǎn)的多邊形。
三.YOLOv3 problem
YOLOv3在設(shè)計(jì)時,遇到了兩個發(fā)現(xiàn)的問題,而這兩個問題在原始論文中沒有描述:重寫標(biāo)簽和在輸出尺度上不平衡的錨點(diǎn)分布。解決這些問題對于提高YOLO的性能至關(guān)重要。
- Label rewriting
由于YOLO系列都是基于圖像cell柵格作為單元進(jìn)行檢測,以416416大小的圖像為例,在圖像分辨率隨著卷積下降到1313的特征圖大小時,這時候特征圖一個像素點(diǎn)的感受野是32*32大小的圖像patch。而YOLOV3在訓(xùn)練時候,如果出現(xiàn)相同兩個目標(biāo)的中心位于同一個cell,那么前面一個目標(biāo)就會被后面目標(biāo)重寫,也就是說兩個目標(biāo)由于中心距離太近以至于在特征圖上將采樣成為同一個像素點(diǎn)的時候,這時候其中有個目標(biāo)會被重寫而無法進(jìn)行到訓(xùn)練當(dāng)中。如下圖所示,紅色目標(biāo)為因?yàn)橹貙懚鴽]有加入到訓(xùn)練中的目標(biāo),可以看到,在這樣一個特征圖上,重寫的目標(biāo)數(shù)量還不少,27個目標(biāo)里有10個都被重寫,特別是比較稠密的地方。
作者在不同數(shù)據(jù)集上對重寫的標(biāo)簽率進(jìn)行了統(tǒng)計(jì)和比較,可以看出原始YOLOV3的標(biāo)簽重寫率還是蠻高,而改進(jìn)后的POLY-YOLO大大降低了該重寫率。 - Anchor distribution
YOLOv3 anchor機(jī)制:
使用9種anchor,每個輸出scale使用3個anchor。一個特定的GroundTruth框與哪個sclae的anchor匹配度最高,就會被指定給哪個scale。
YOLOv3是通過k-means算法進(jìn)行目標(biāo)大小統(tǒng)計(jì),最后獲得聚類質(zhì)心來表示九個anchor的。這些anchor被分成三個一組,與在輸出層中檢測到的小、中、大box相連接。
不幸的是,這種根據(jù)三種尺寸來分anchor的原則通常是合理的,但是有個前提就是要滿足下面這個分布:
但這種情況在不能保證適用于各種情況,例如當(dāng),均值u=0.5r,標(biāo)準(zhǔn)差σ^2 = r是一個更現(xiàn)實(shí)的情況,這將導(dǎo)致大多數(shù)box將被中間輸出層(中等大小)捕獲,而其他兩個層將未得到充分利用。
為了說明這個問題,假設(shè)兩個box:m1和m2;前者與放置在高速公路上的攝像頭的車牌檢測任務(wù)相連接,后者與放置在車門前的攝像頭的人檢測任務(wù)相連接。對于這樣的任務(wù),可以獲得大約M1~(0.3r,0.2r),因?yàn)檫@些牌將會覆蓋小的區(qū)域,而m2~(0.7r,0.2r)因?yàn)槿祟悓采w大的區(qū)域。
對于這兩個集合,分別計(jì)算anchor。第一種情況導(dǎo)致的問題是,中、大型的輸出規(guī)模也將包括小的anchor,因?yàn)閿?shù)據(jù)集不包括大的目標(biāo)。這里,標(biāo)簽重寫的問題將逐步升級,因?yàn)樾枰诖志W(wǎng)格中檢測小目標(biāo)。反之亦然。大目標(biāo)將被檢測在小和中等輸出層。在這里,檢測將不會是精確的,因?yàn)橹行≥敵鰧佑杏邢薜母惺芤啊HN常用量表的感受野為{85×85,181×181,365×365}。這兩種情況的實(shí)際影響是相同的:性能退化。
在介紹YOLOv3的文章中,作者說:“YOLOv3具有較高的小目標(biāo)AP性能。但是,在中、大型目標(biāo)上的性能相對較差。”
認(rèn)為YOLOv3出現(xiàn)這些問題的原因就是在此。
四.POLY-YOLO 架構(gòu)
- 問題總結(jié)
label重寫問題:不會在原分辨率大小時候發(fā)生,本文的關(guān)注點(diǎn)是在尺度scale=1/8,1/16,1/32的尺度上的情況。
anchor分布問題,有兩種解決辦法:
第一種方法是為三個輸出尺度定義感受野,并定義兩個閾值來分隔它們。然后,k-means將根據(jù)這些閾值計(jì)算聚類中心(用作anchor)。缺點(diǎn)是這樣把數(shù)據(jù)驅(qū)動的anchor轉(zhuǎn)成了問題驅(qū)動,只能在固定的一些尺度上檢測對應(yīng)的目標(biāo),而不是全尺度,這樣會浪費(fèi)網(wǎng)絡(luò)。
第二種方法是創(chuàng)建一個具有單個輸出的體系結(jié)構(gòu),該輸出將聚合來自各種scale的信息。然后一次性處理所有的anchor。與第一種方法相比,anchor大小的估計(jì)將還是保持由數(shù)據(jù)驅(qū)動。
本文是采用第二種處理方法進(jìn)行優(yōu)化。
- POLY-YOLO架構(gòu)
上圖顯示了原始體系結(jié)構(gòu)和新體系結(jié)構(gòu)之間的比較。Poly-YOLO在特征提取器部分每層使用較少的卷積濾波器,并通過squeeze-and-excitation模塊擴(kuò)展它。較重的neck block被使用stairstep進(jìn)行上采樣、帶有hypercolmn的輕量block所取代。head使用一個而不是三個輸出,具有更高的分辨率。綜上所述,Poly-YOLO的參數(shù)比YOLOv3少40%,但可以產(chǎn)生更精確的預(yù)測。
這里使用hypercolmn實(shí)現(xiàn)對于多個尺度部分的單尺度輸出合成。
設(shè)O是一個特征圖,u(·ω)函數(shù)表示以因子ω對輸入圖像進(jìn)行上采樣,m(·)函數(shù)表示一個轉(zhuǎn)換,把a(bǔ)×b×c·轉(zhuǎn)為a×b×c×δ維度的映射,δ是一個常數(shù)。此外,認(rèn)為g(O1,…,On) 是一個n元的composition/aggregation函數(shù)。為此,使用hypercolmn的輸出特征圖如下所示:
從公式中可以明顯看出,存在著很高的不平衡——一個O1的單值投影到O的單值中,而On的單值卻直接投影成2n?1×2n?1的值中。為了打破這種不平衡,建議使用計(jì)算機(jī)圖形中已知的staircase方法,參見下圖。staircase插值增加(或降低)圖像分辨率最大10%,直到達(dá)到期望的分辨率。與直接上采樣相比,輸出更平滑。這里使用最低可用的upscale因子2。形式上定義staircase輸出特征映射O '為:
如果考慮最近鄰上采樣,保持不變。對于雙線性插值(和其他),用于非齊次輸入。關(guān)鍵是,無論是直接上采樣還是staircase方法,計(jì)算復(fù)雜度都是相同的。雖然staircase方法實(shí)現(xiàn)了更多的添加,但它們是通過分辨率較低的特征圖計(jì)算的,因此添加的元素?cái)?shù)量是相同的。
為了了解實(shí)際影響,進(jìn)行了以下實(shí)驗(yàn)。從Cityscapes數(shù)據(jù)集中選了Poly-YOLO 200個訓(xùn)練圖像和100個驗(yàn)證圖像,用于hypercolmn中直接上采樣和staircase。為兩種方式各進(jìn)行了五次訓(xùn)練,并在下圖中繪制了訓(xùn)練進(jìn)度圖。從圖中可以看出,差異很小,但是很明顯,在hypercolmn中staircase插值產(chǎn)生的訓(xùn)練和驗(yàn)證損失略低,在相同的計(jì)算時間下得到了改進(jìn)。
修改YOLO架構(gòu)的最后一種方法是在主干中使用squeeze-and-excitation(SE)塊。像其他許多神經(jīng)網(wǎng)絡(luò)一樣,Darknet-53使用重復(fù)塊,其中每個塊由卷積和跳連組成。(SE)塊允許使用空間和通道的信息,這帶來準(zhǔn)確性的提高。通過(SE)塊和提高輸出分辨率,降低了計(jì)算速度。由于速度是YOLO的主要優(yōu)勢,為了平衡在特征提取階段減少了卷積濾波器的數(shù)量,即設(shè)置為原始數(shù)的75%。
此外,neck和head較輕,共有37.1M的參數(shù),明顯低于YOLOv3(61.5M)。不過,Poly-YOLO比YOLOv3的精度更高。
再者,還提出了poly-yolo lite,旨在提高處理速度。在特征提取器和head中,這個版本只有Poly-YOLO66%的濾波器數(shù)量。最后,s1減到1/4。yolo lite的參數(shù)個數(shù)為16.5M。
五.POLY-YOLO 實(shí)例分割
- 多邊形邊框原則
在這里,引入一個多邊形表示,它能夠檢測具有不同數(shù)量頂點(diǎn)的目標(biāo),而不需要使用會降低處理速度的遞歸神經(jīng)網(wǎng)絡(luò)。
在一個公共數(shù)據(jù)集中,許多對象都被類似的形狀所覆蓋,不同之處在于對象的大小。例如,汽車牌照、手勢、人類或汽車都有幾乎相同的形狀。一般的形狀可以很容易地用極坐標(biāo)來描述,這就是為什么用極坐標(biāo)系統(tǒng)而不是笛卡爾坐標(biāo)系來描述多邊形的原因。以邊界框的中心用作原點(diǎn),αi,j代表一個頂點(diǎn)到中心的距離(除以box的對角線長進(jìn)而歸一化到[0,1]),βij為頂點(diǎn)到中心的角度。當(dāng)檢測到多邊形邊界框,可以通過對角線長乘以αi,j來獲得多邊形的box。該原則允許網(wǎng)絡(luò)學(xué)習(xí)與大小無關(guān)的一般形狀,而不是具有大小的特定實(shí)例。
βij∈[0,360],可以通過線性變換將其更改為βi,j∈[0,1]。當(dāng)某個極單元cell具有高置信度時,頂點(diǎn)必位于該單元內(nèi)部。 通過與極坐標(biāo)單元的原點(diǎn)和位置之間的距離,可以知道其近似位置,并且可以通過極單元內(nèi)部的角度來精確調(diào)整位置。
2. 與Poly-YOLO集成
檢測邊界多邊形的思想是通用的,可以很容易地集成到任意的神經(jīng)網(wǎng)絡(luò)中。通常,必須修改三個部分:數(shù)據(jù)準(zhǔn)備的方式、體系結(jié)構(gòu)和損失函數(shù)。從語義分割標(biāo)簽中提取邊界多邊形見5.1節(jié)。所提取的邊界多邊形必須以與邊界框數(shù)據(jù)相同的方式進(jìn)行擴(kuò)充。
在Poly-YOLO,輸出層中卷積濾波器的數(shù)量必須更新。當(dāng)只檢測box時,最后一層輸出維度為n=na(nc+5),na=9(anchor個數(shù)),nc為類別數(shù)。對基于多邊形的目標(biāo)檢測進(jìn)行集成,得到n=na(nc+5+ 3nv),nv為每個多邊形檢測到的頂點(diǎn)數(shù)的最大值。nv對convolutional filter的數(shù)量有很大的影響。例如,當(dāng)有9個錨點(diǎn)、20個類和30個頂點(diǎn)時,輸出層檢測邊界盒和多邊形的過濾器將比只檢測邊界盒時多4.6倍。另一方面,增加只發(fā)生在最后一層;所有剩下的YOLO層具有相同數(shù)量的參數(shù)。從這個角度看,神經(jīng)網(wǎng)絡(luò)參數(shù)的總數(shù)增加了微不足道的0.83%,而且處理速度沒有受到影響。缺點(diǎn)在于增加的部分在最后一層,這一層處理高分辨率的特征圖。這導(dǎo)致在訓(xùn)練網(wǎng)絡(luò)時對符號張量的VRAM需求增加,這可能導(dǎo)致在學(xué)習(xí)階段使用的最大batch-size減少。
POLY-YOLO的損失函數(shù)為:
其中:
所述的集成方案可以同時檢測box和多邊形。由于多邊形頂點(diǎn)總是位于box中,兩者檢測的是同一個目標(biāo),因此兩者可以互相支持,如果具有多邊形形狀檢測的YOLO訓(xùn)練更有效,收斂速度更快的話。這一原理在文獻(xiàn)中被稱為“輔助任務(wù)學(xué)習(xí)”。
例如一種特殊的情況,當(dāng)目標(biāo)是一個垂直的方形目標(biāo)。在這種情況下,box的輪廓會與邊界多邊形的輪廓重合,并且邊界框和多邊形都會檢測到左上角的頂點(diǎn)。但是,這兩種檢測將是協(xié)同的,所以訓(xùn)練時間應(yīng)更短。
六.POLY-YOLO 實(shí)驗(yàn)效果
- 三個數(shù)據(jù)集
2. 效果展示
七.總結(jié)
- 檢測
對于特征提取,可以使用任意的SOTA主干,如(SE)ResNeXt或高效網(wǎng)絡(luò),這可能會提高整體精度。這種方法也可以在YOLOv4中看到,YOLOv4作者使用了不同的主干和其他一些技巧(也可以應(yīng)用在本文方法中),但是原始YOLOv3的head沒有改變。
在Poly-YOLO中描述的問題實(shí)際上來自于YOLOv3 head的設(shè)計(jì),簡單交換主干并不能解決這些問題。模型仍然會遭受標(biāo)簽重寫和不適當(dāng)anchor分布。
在本文工作中,關(guān)注的是通過概念變化而不是蠻力實(shí)現(xiàn)的性能改進(jìn)。這樣的改進(jìn)可以廣泛應(yīng)用,并且可以很容易地集成到主干。
- 分割
如果兩個頂點(diǎn)屬于同一個極坐標(biāo)單元,則取與邊界框中心距離較大的頂點(diǎn)。該圖還顯示了這種限制的實(shí)際影響。這不是訓(xùn)練或推理的問題,這是標(biāo)簽創(chuàng)建的問題;網(wǎng)絡(luò)本身是經(jīng)過正確訓(xùn)練的,并根據(jù)(不精確的)訓(xùn)練標(biāo)簽做出預(yù)測。在連接單個頂點(diǎn)之后,將第一個頂點(diǎn)與最后一個頂點(diǎn)連接起來,這可能會給強(qiáng)非凸對象帶來問題。不過,這種行為不會在所有非凸對象上發(fā)生。如果兩個頂點(diǎn)位于兩個不同的極單元中,那么即使是非凸的目標(biāo)也可以正確地處理,如下圖所示,Poly-YOLO甚至可以很好地處理非凸的星星。
總結(jié)
以上是生活随笔為你收集整理的YOLO3升级优化版!Poly-YOLO:支持实例分割!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: YOLOv3和YOLOv4长篇核心综述(
- 下一篇: 鱼眼相机成像技术