Poly-YOLO:更快,更精确的检测(主要解决Yolov3两大问题,附源代码)
點擊上方“計算機視覺工坊”,選擇“星標(biāo)”
干貨第一時間送達
作者丨Edison_G
來源丨計算機視覺研究院?
論文地址:https://arxiv.org/pdf/2005.13243.pdf
源代碼:https://gitlab.com/irafm-ai/poly-yolo
YOLOv3改進版來了!與YOLOv3相比,Poly-YOLO的訓(xùn)練參數(shù)只有其60%,但mAP卻提高了40%!并提出更輕量的Poly-YOLO Lite。
一、背景
目標(biāo)檢測是一個過程,其中包含感興趣對象的所有重要區(qū)域都被限制而忽略背景。通常,目標(biāo)以一個框為邊界,框用其左上角的空間坐標(biāo)及其寬度和高度表示。這種方法的缺點是對于形狀復(fù)雜的物體,邊界框還包括背景,由于邊界框沒有緊緊包裹物體,背景會占據(jù)很大一部分區(qū)域。這種行為會降低應(yīng)用在邊界框上的分類器的性能,或者可能無法滿足精確檢測的要求。為了避免這個問題,Faster R-CNN或RetinaNet等經(jīng)典檢測器被修改為Mask R-CNN或RetinaMask的版本。這些方法還可以推斷實例分割,即邊界框中的每個像素都被分類為對象/背景類。這些方法的局限性在于它們的計算速度,它們無法在非高層硬件上達到實時性能。
我們關(guān)注的問題是創(chuàng)建一個具有實例分割和中層顯卡實時處理能力的精確檢測器。
二、前言
Poly-Yolo實例分割案例
目標(biāo)檢測模型可以分為兩組,兩級和一級檢測器。兩級檢測器將過程拆分如下。在第一階段,提出感興趣的區(qū)域(RoI),在隨后的階段,在這些候選的區(qū)域內(nèi)進行邊界框回歸和分類。一級檢測器一次預(yù)測邊界框及其類別。兩級檢測器在定位和分類精度方面通常更精確,但在處理方面比一級檢測器慢。這兩種類型都包含用于特征提取的主干網(wǎng)絡(luò)和用于分類和回歸的頭部網(wǎng)絡(luò)。通常,主干是一些SOTA網(wǎng)絡(luò),例如ResNet或ResNext,在ImageNet或OpenImages上進行了預(yù)訓(xùn)練。盡管如此,一些方法 也從頭開始嘗試訓(xùn)練。
今天分享的框架提出了性能更好的YOLOv3新版本,并擴展了名為Poly-YOLO。Poly-YOLO建立在YOLOv3的原始思想的基礎(chǔ)上,并消除了它的兩個弱點:標(biāo)簽重寫和anchor分配不平衡。
Poly-YOLO使用stairstep上采樣通過hypercolumn技術(shù)聚合輕型SE-Darknet-53主干網(wǎng)中的特征來減少問題,并產(chǎn)生高分辨率的單尺度輸出。與YOLOv3相比:Poly-YOLO的可訓(xùn)練參數(shù)只有60%,但mAP卻提高了40%。更少參數(shù)和更低輸出分辨率的Poly-YOLO ?Lite,具有與YOLOv3相同的精度,但體積小三倍,速度快兩倍,更適用于嵌入式設(shè)備。
今天主要就是說怎么解決Yolov3兩大問題。
左圖說明了輸入圖像上的 YOLO 網(wǎng)格,黃點表示檢測到的對象的中心。右圖說明了檢測結(jié)果。
第一個問題:標(biāo)簽重寫
標(biāo)簽重寫是指由于yolo特有的網(wǎng)格負(fù)責(zé)預(yù)測bbox的特點,可能會出現(xiàn)兩個物體分配給了同一個anchor,導(dǎo)致僅僅有一個物體被保留負(fù)責(zé)預(yù)測,另一個物體被當(dāng)做背景忽略了。當(dāng)輸入分辨率越小,物體越密集,物體的wh大小非常接近時候,標(biāo)簽重寫現(xiàn)象比較嚴(yán)重。如上圖所示,紅色表示被重寫的bbox,可以看出27個物體有10個被重寫了。
具體來說,以416 *416大小的圖像為例,在圖像分辨率隨著卷積下降到13 * 13的特征圖大小時,這時候特征圖一個像素點的對應(yīng)是32*32大小的圖像patch。而YOLOV3在訓(xùn)練時候,如果出現(xiàn)相同兩個目標(biāo)的中心位于同一個cell,且分配給同一個anchor,那么前面一個目標(biāo)就會被后面目標(biāo)重寫,也就是說兩個目標(biāo)由于中心距離太近以至于在特征圖上將采樣成為同一個像素點的時候,這時候其中有個目標(biāo)會被重寫而無法進行到訓(xùn)練當(dāng)中。
這種現(xiàn)象在coco數(shù)據(jù)上不明顯的原因是bbox分布比較均勻,不同大小物體會分配到不同預(yù)測層,標(biāo)簽重寫概率比較低。但是在很多實際應(yīng)用中,比如工業(yè)界的特定元件檢測時候,物體排布非常緊密,且大小幾乎一致,此時就可能會出現(xiàn)標(biāo)簽重寫問題了,作者論文指出在Cityscapes數(shù)據(jù)上該現(xiàn)象也比較明顯。
第二個問題:Anchor分配不均衡
yolo系列采用kmean算法聚類得到特定要求的9個anchor,并且以每三個為一組,用于大輸出圖(檢測小物體),中等輸出圖和小輸出圖層(檢測大物體)的默認(rèn)anchor。可以看出不同大小的物體會被這三組anchor分配到不同預(yù)測層進行預(yù)測。
但是這種kmean算法得出的結(jié)果是有問題的,在實際項目中也發(fā)現(xiàn)了。前面說過大部分特定場景的目標(biāo)檢測數(shù)據(jù)集,并不是和coco自然場景一樣,啥尺度都有,實際項目中大部分物體都是差不多大的,或者說僅僅有特定的幾種尺度,此時采用kmean這一套流程就會出現(xiàn):幾乎一樣大的物體被強制分到不同層去預(yù)測,這個訓(xùn)練方式對網(wǎng)絡(luò)來說非常奇怪,因為物體和物體之間wh可能就差了一點點,居然強制分層預(yù)測,這明顯不合理。本文作者生成的仿真數(shù)據(jù)其實也是這個特點。
作者指出,kmean這種設(shè)置,僅僅在:M ~ U(0, r)情況下采用合理的。其中r是輸入圖片分辨率,例如416。該式子的意思是物體的大小分布是滿足邊界為0到r的均勻分布,也就是說在416x416圖片上,各種大小尺度的bbox都會存在的情況下,kmean做法是合理的。但是可能大部分場景都是:M ~ N (0.5r, r),即均值為0.5r,標(biāo)準(zhǔn)差為r的物體分布,如果按照默認(rèn)的kmean算法對anchor的計算策略,那么由于大部分物體都是中等尺寸物體,會出現(xiàn)其余兩個分支沒有得到很好訓(xùn)練,或者說根本就沒有訓(xùn)練,浪費網(wǎng)絡(luò)。
三、新框架及解決方法
對于標(biāo)簽重寫問題,只能通過要么增加輸入圖片分辨率大小;要么增加輸出特征圖大小實現(xiàn)。本文的做法是增加輸出特征圖大小。
原始的yolov3,輸入大小是輸出特征圖的8/16和32倍,通過上述數(shù)據(jù)可以發(fā)現(xiàn)標(biāo)簽重寫比例蠻高的。而通過增加輸出特征圖大小后可以顯著降低重寫比例。
對于kmean聚類帶來的問題,有兩種解決辦法:
kmean聚類流程不變,但是要避免出現(xiàn)小物體被分配到小輸出特征圖上面訓(xùn)練和大物體被分配到大輸出特征圖上面訓(xùn)練問題,具體就是首先基于網(wǎng)絡(luò)輸出層感受野,定義三個大概范圍尺度,然后設(shè)置兩道閾值,強行將三個尺度離散化分開;然后對bbox進行單獨三次聚類,每次聚類都是在前面指定的范圍內(nèi)選擇特定的bbox進行,而不是作用于整個數(shù)據(jù)集。主要是保證kmean僅僅作用于特定bbox大小訪問內(nèi)即可,就可以避免上面問題了。但是缺點也非常明顯,如果物體大小都差不多,那么幾乎僅僅有一個輸出層有物體分配預(yù)測,其余兩個尺度在那里空跑,浪費資源。
就只有一個輸出層,所有物體都是在這個層預(yù)測即可。可以避免kmean聚類問題,但是為了防止標(biāo)簽重寫,故把輸出分辨率調(diào)高,此時就完美了。作者實際上采用的是1/4尺度輸出,屬于高分辨率輸出,重寫概率很低。
根據(jù)上圖可以發(fā)現(xiàn):
(1) 網(wǎng)絡(luò)方面,為了減少參數(shù)量,首先減少了通道數(shù)目,同時為了提高性能,引入了SE單元來加強特征
(2) 和yolov3的最大區(qū)別是輸出層是一個,但是也采用了多尺度融合方式
(3) neck部分提出了hypercolumn+stairstep上采樣操作
左邊是標(biāo)準(zhǔn)的hypercolumn操作,右邊是作者提出的。實驗表明右邊的方式更好,因為loss更低。
通過上述參數(shù)設(shè)置,作者設(shè)計的neck和head較輕,共有37.1M的參數(shù),顯著低于YOLOv3的61.5M,Poly-YOLO比YOLOv3的精度更高,在可訓(xùn)練參數(shù)減少40%的情況下,mAP精度大概也提高了40%。同時為了進一步提速,作者還設(shè)計了lite版本,參數(shù)僅僅16.5M,精度和yolov3接近。
四、實驗及可視化
左:矩形網(wǎng)格,取自YOLOv3。目標(biāo)邊界框以其中心為中心的單元格預(yù)測其邊界框坐標(biāo)。 右圖:Poly-YOLO中用于檢測多邊形頂點的基于圓形扇區(qū)的網(wǎng)格。 網(wǎng)格的中心與目標(biāo)邊界框的中心重合。 然后每個圓形扇區(qū)負(fù)責(zé)檢測特定頂點的極坐標(biāo)。 不存在頂點的扇區(qū)應(yīng)產(chǎn)生等于零的置信度。
矩形檢測和多邊形檢測對比
本文僅做學(xué)術(shù)分享,如有侵權(quán),請聯(lián)系刪文。
干貨下載與學(xué)習(xí)
后臺回復(fù):巴塞羅那自治大學(xué)課件,即可下載國外大學(xué)沉淀數(shù)年3D Vison精品課件
后臺回復(fù):計算機視覺書籍,即可下載3D視覺領(lǐng)域經(jīng)典書籍pdf
后臺回復(fù):3D視覺課程,即可學(xué)習(xí)3D視覺領(lǐng)域精品課程
計算機視覺工坊精品課程官網(wǎng):3dcver.com
1.面向自動駕駛領(lǐng)域的多傳感器數(shù)據(jù)融合技術(shù)
2.面向自動駕駛領(lǐng)域的3D點云目標(biāo)檢測全棧學(xué)習(xí)路線!(單模態(tài)+多模態(tài)/數(shù)據(jù)+代碼)
3.徹底搞透視覺三維重建:原理剖析、代碼講解、及優(yōu)化改進
4.國內(nèi)首個面向工業(yè)級實戰(zhàn)的點云處理課程
5.激光-視覺-IMU-GPS融合SLAM算法梳理和代碼講解
6.徹底搞懂視覺-慣性SLAM:基于VINS-Fusion正式開課啦
7.徹底搞懂基于LOAM框架的3D激光SLAM: 源碼剖析到算法優(yōu)化
8.徹底剖析室內(nèi)、室外激光SLAM關(guān)鍵算法原理、代碼和實戰(zhàn)(cartographer+LOAM +LIO-SAM)
9.從零搭建一套結(jié)構(gòu)光3D重建系統(tǒng)[理論+源碼+實踐]
10.單目深度估計方法:算法梳理與代碼實現(xiàn)
11.自動駕駛中的深度學(xué)習(xí)模型部署實戰(zhàn)
12.相機模型與標(biāo)定(單目+雙目+魚眼)
13.重磅!四旋翼飛行器:算法與實戰(zhàn)
14.ROS2從入門到精通:理論與實戰(zhàn)
15.國內(nèi)首個3D缺陷檢測教程:理論、源碼與實戰(zhàn)
重磅!計算機視覺工坊-學(xué)習(xí)交流群已成立
掃碼添加小助手微信,可申請加入3D視覺工坊-學(xué)術(shù)論文寫作與投稿?微信交流群,旨在交流頂會、頂刊、SCI、EI等寫作與投稿事宜。
同時也可申請加入我們的細(xì)分方向交流群,目前主要有ORB-SLAM系列源碼學(xué)習(xí)、3D視覺、CV&深度學(xué)習(xí)、SLAM、三維重建、點云后處理、自動駕駛、CV入門、三維測量、VR/AR、3D人臉識別、醫(yī)療影像、缺陷檢測、行人重識別、目標(biāo)跟蹤、視覺產(chǎn)品落地、視覺競賽、車牌識別、硬件選型、深度估計、學(xué)術(shù)交流、求職交流等微信群,請掃描下面微信號加群,備注:”研究方向+學(xué)校/公司+昵稱“,例如:”3D視覺?+ 上海交大 + 靜靜“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進去相關(guān)微信群。原創(chuàng)投稿也請聯(lián)系。
▲長按加微信群或投稿
▲長按關(guān)注公眾號
3D視覺從入門到精通知識星球:針對3D視覺領(lǐng)域的視頻課程(三維重建系列、三維點云系列、結(jié)構(gòu)光系列、手眼標(biāo)定、相機標(biāo)定、激光/視覺SLAM、自動駕駛等)、知識點匯總、入門進階學(xué)習(xí)路線、最新paper分享、疑問解答五個方面進行深耕,更有各類大廠的算法工程人員進行技術(shù)指導(dǎo)。與此同時,星球?qū)⒙?lián)合知名企業(yè)發(fā)布3D視覺相關(guān)算法開發(fā)崗位以及項目對接信息,打造成集技術(shù)與就業(yè)為一體的鐵桿粉絲聚集區(qū),近4000星球成員為創(chuàng)造更好的AI世界共同進步,知識星球入口:
學(xué)習(xí)3D視覺核心技術(shù),掃描查看介紹,3天內(nèi)無條件退款
?圈里有高質(zhì)量教程資料、答疑解惑、助你高效解決問題
覺得有用,麻煩給個贊和在看~??
總結(jié)
以上是生活随笔為你收集整理的Poly-YOLO:更快,更精确的检测(主要解决Yolov3两大问题,附源代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。