經(jīng)典再回顧,本文介紹v1到v3。
如果你需要速度快的目標(biāo)檢測(cè)器,那么 YOLO 系列的神經(jīng)網(wǎng)絡(luò)模型實(shí)際上是當(dāng)今的標(biāo)準(zhǔn)。
解決檢測(cè)問(wèn)題還有很多其他優(yōu)秀的模型,但我們不會(huì)在這篇綜述中涉及它們。
目前,已經(jīng)寫(xiě)了相當(dāng)多的文章來(lái)分析 YOLO 各個(gè)版本的功能。本文的目的是對(duì)整個(gè)家族進(jìn)行比較分析。我們想看看架構(gòu)的演變,這樣我們就可以更好地了解檢測(cè)器是如何發(fā)展,哪些發(fā)展提高了性能,也許還可以想象事情的發(fā)展方向。
在YOLO出現(xiàn)之前,檢測(cè)圖像中目標(biāo)的主要方法是使用各種大小的滑動(dòng)窗口按順序穿過(guò)原始圖像的各個(gè)部分,以便分類器給出圖像的哪個(gè)部分包含哪個(gè)目標(biāo)。這種方法是合乎邏輯的,但非常慢。
一段時(shí)間之后,出現(xiàn)了一個(gè)特殊的部分,它暴露了感興趣的區(qū)域 —— 一些假設(shè),圖像上可能有有趣的東西。但是這些感興趣區(qū)域還是太多,有數(shù)千個(gè)。最快的算法,F(xiàn)aster R-CNN,平均在0.2秒內(nèi)處理一張圖片,每秒5幀??偟膩?lái)說(shuō),在出現(xiàn)一種全新的方法之前,速度不容樂(lè)觀。
有什么新奇之處?
在以前的方法中,原始圖像的每個(gè)像素可以被神經(jīng)網(wǎng)絡(luò)處理數(shù)百甚至數(shù)千次。每次這些像素都通過(guò)相同的神經(jīng)網(wǎng)絡(luò)傳遞,經(jīng)過(guò)相同的計(jì)算。是否可以做一些事情以免重復(fù)相同的計(jì)算?
事實(shí)證明,這是可能的。但為此,我們不得不稍微重新表述問(wèn)題。如果說(shuō)以前它是一個(gè)分類任務(wù),那么現(xiàn)在它變成了一個(gè)回歸任務(wù)。
YOLO aka YOLOv1
讓我們考慮第一個(gè) YOLO 模型,也稱為 YOLOv1。
作者
Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi
主要論文
“You Only Look Once: Unified, Real-Time Object Detection”, publication date 2015/06
性能比較
Pascal VOC 2007上的實(shí)時(shí)系統(tǒng)。YOLO是有記錄以來(lái)最快的Pascal VOC檢測(cè)檢測(cè)器,其準(zhǔn)確性仍然是任何其他實(shí)時(shí)檢測(cè)器的兩倍。
結(jié)構(gòu)
在結(jié)構(gòu)上,YOLO 模型由以下部分組成:
input ― 輸入圖像被饋送到的輸入層
backbone — 輸入圖像以特征形式編碼的部分。
neck — 這是模型的其他部分,用于處理按特征編碼的圖像
head — 生成模型預(yù)測(cè)的一個(gè)或多個(gè)輸出層。
該網(wǎng)絡(luò)的第一個(gè)版本基于GoogLeNet的架構(gòu)。卷積層接MaxPool層級(jí)聯(lián),最后以兩個(gè)全連接層的級(jí)聯(lián)作為結(jié)束。
此外,作者訓(xùn)練了Fast YOLO架構(gòu)的更快版本,包含更少的卷積層(9而不是24)。兩個(gè)模型的輸入分辨率均為 448x448,但網(wǎng)絡(luò)主要部分的預(yù)訓(xùn)練通過(guò)分辨率為 224x224 的分類器訓(xùn)練。
在此結(jié)構(gòu)中,原始圖片被劃分為 S x S 單元格(在原始 7 x 7 中),每個(gè)單元格預(yù)測(cè) B 個(gè)邊界框,這些 bbox 中存在目標(biāo)的置信度,以及 C 類的概率。每條邊的單元格數(shù)是奇數(shù),因此圖像的中心有一個(gè)單元格。這比偶數(shù)具有優(yōu)勢(shì),因?yàn)檎掌闹行耐ǔS幸粋€(gè)主要目標(biāo),在這種情況下,主要的預(yù)測(cè)是在中心單元格中進(jìn)行的。在區(qū)域數(shù)量為偶數(shù)的情況下,中心可能位于四個(gè)中央?yún)^(qū)域中的某個(gè)位置,這降低了網(wǎng)絡(luò)的置信水平。
置信度值表示模型對(duì)給定 bbox 包含某個(gè)目標(biāo)的置信度,以及 bbox 預(yù)測(cè)其位置的準(zhǔn)確度。事實(shí)上,這是IoU存在物體概率的乘積。如果單元格中沒(méi)有目標(biāo),則置信度為零。
每個(gè) bbox 由 5 個(gè)數(shù)字組成:x、y、w、h 和置信度。(x, y)為單元格內(nèi) bbox 中心的坐標(biāo),w 和 h為 bbox相對(duì)于整個(gè)圖片尺寸的歸一化的寬度和高度,即歸一化從 0 到 1 的值。置信度是預(yù)測(cè)的 bbox 和GT框之間的 IoU。每個(gè)單元格還預(yù)測(cè)目標(biāo)類的 C 個(gè)條件概率。每個(gè)單元格僅預(yù)測(cè)一組類別,而不考慮 bbox的數(shù)量。
因此,在一次前向中,預(yù)測(cè)了 S×S×B個(gè)包圍框。他們中的大多數(shù)框的置信度都很低,但是,通過(guò)設(shè)置一定的閾值,我們可以去除其中的很大一部分。但最重要的是,(與競(jìng)爭(zhēng)對(duì)手相比)檢測(cè)率提高了幾個(gè)數(shù)量級(jí)。這是非常合乎邏輯的,因?yàn)樗蓄悇e的所有 bbox 現(xiàn)在只需一次預(yù)測(cè)。對(duì)于不同的實(shí)現(xiàn),原始文章給出了從 45 到 155 的FPS。盡管與以前的算法相比,mAP的準(zhǔn)確性仍然有所下降,但在某些問(wèn)題中,實(shí)時(shí)檢測(cè)更為重要。
得到檢測(cè)框
由于與物體中心相鄰的單元格也可以產(chǎn)生bbox,從而導(dǎo)致框過(guò)多,因此有必要選擇其中最好的。為此,使用NMS技術(shù),其工作原理如下。此類的所有 bbox,置信度低于給定閾值的那些將被丟棄。對(duì)于其余部分,執(zhí)行IoU的成對(duì)比較過(guò)程。如果兩個(gè)框的 IoU > 0.5,則丟棄置信度較低的框。否則,兩個(gè)框都會(huì)保留在列表中。因此,類似的框被抑制了。
損失函數(shù)是組合的,具有以下形式:
第一項(xiàng)是目標(biāo)中心坐標(biāo)的損失,第二項(xiàng)是框尺寸的損失,第三項(xiàng)是目標(biāo)的類損失,如果目標(biāo)不存在,則第四項(xiàng)是類的損失,第五項(xiàng)是在框中找到某個(gè)目標(biāo)的概率。
需要 lambda 系數(shù)來(lái)防止置信度變?yōu)榱?,因?yàn)榇蠖鄶?shù)單元格中沒(méi)有目標(biāo)。1(obj,i)?表示的中心是否出現(xiàn)在單元格 i 中,1(obj,i,j)?表示單元格 i 中的第 j 個(gè) bbox 負(fù)責(zé)此預(yù)測(cè)。
優(yōu)勢(shì)
高速
比當(dāng)時(shí)的競(jìng)爭(zhēng)對(duì)手更好的泛化能力,在另一個(gè)領(lǐng)域進(jìn)行測(cè)試(訓(xùn)練是在ImageNet上進(jìn)行的)顯示出更好的性能。
圖像背景部分的誤報(bào)更少。
局限性
每個(gè)單元格 2 個(gè) bbox 和一個(gè)類目標(biāo)的限制。這意味著一堆小物體的識(shí)別度較低。
原始圖像的幾個(gè)連續(xù)下采樣導(dǎo)致精度不高。
損失的設(shè)計(jì)方式是,它對(duì)大框和小框的錯(cuò)誤具有同樣懲罰。作者試圖通過(guò)取尺寸大小的根來(lái)補(bǔ)償這種影響,但這并沒(méi)有完全消除這種影響。
YOLOv2 / YOLO9000
作者
Joseph Redmon, Ali Farhadi
主要論文
“YOLO9000: Better, Faster, Stronger”, publication date 2016/12
性能比較
Pascal VOC 2007的檢測(cè)框架。YOLOv2 比以前的檢測(cè)方法更快、更準(zhǔn)確。它還可以以不同的分辨率運(yùn)行,以便在速度和準(zhǔn)確性之間輕松權(quán)衡。每個(gè) YOLOv2 條目實(shí)際上是具有相同權(quán)重的相同訓(xùn)練模型,只是以不同的大小進(jìn)行評(píng)估。所有計(jì)時(shí)信息均在 Geforce GTX Titan X 上測(cè)試。
結(jié)構(gòu)特點(diǎn)
作者對(duì)模型的第一個(gè)版本進(jìn)行了一些改進(jìn)。
刪除了 dropout,并在所有卷積層中添加了BN。
預(yù)訓(xùn)練為分辨率為 448x448 的分類器(YOLOv1 分辨率為 224x224),然后將最終網(wǎng)絡(luò)縮小到 416x416 輸入,以產(chǎn)生奇數(shù)個(gè) 13x13 單元。
刪除了全連接層。相反,他們開(kāi)始使用全卷積和錨框來(lái)預(yù)測(cè)bbox(如Faster RCNN)。這樣可以減少空間信息的丟失(就像在 v1 中的全連接層中一樣)。
刪除了一個(gè)最大池化以增加特征的細(xì)節(jié)(分辨率)。在 v1 中,每張圖片只有 98 個(gè) bbox,使用 V2 中的錨點(diǎn),結(jié)果有超過(guò) 1000 個(gè) bbox,而 mAP 略有下降,但召回率顯著增加,這使得提高整體準(zhǔn)確性成為可能。
維度先驗(yàn)。bbox的大小和位置不是像FasterRCNN那樣隨機(jī)手動(dòng)選擇的,而是通過(guò)k-means聚類自動(dòng)選擇的。盡管在小bbox上使用具有歐氏距離的標(biāo)準(zhǔn)k均值,但檢測(cè)誤差更高,因此對(duì)于k均值,選擇了另一個(gè)距離度量,1 - IoU(box,質(zhì)心)。選擇5個(gè)作為分組數(shù)目的折衷方案。測(cè)試表明,對(duì)于以這種方式選擇的 5 個(gè)質(zhì)心,平均 IoU 與 9 個(gè)錨點(diǎn)大致相同。
直接位置預(yù)測(cè)。最初,對(duì)于錨,與確定中心(x,y)坐標(biāo)相關(guān)的網(wǎng)絡(luò)訓(xùn)練存在不穩(wěn)定性:由于網(wǎng)絡(luò)權(quán)重是隨機(jī)初始化的,并且坐標(biāo)預(yù)測(cè)是線性的,大小是沒(méi)有限制的。因此,我們沒(méi)有預(yù)測(cè)相對(duì)于錨中心的偏移量,其中系數(shù)的正確范圍是 [-1,1],而是決定預(yù)測(cè) bbox 相對(duì)于單元格中心的偏移,范圍 [0,1],并使用 sigmoid 來(lái)限制它。網(wǎng)絡(luò)為每個(gè)單元格預(yù)測(cè) 5 個(gè) bbox,每個(gè) bbox 5 個(gè)數(shù)字:tx、ty、tw、th、to。bbox 的預(yù)測(cè)參數(shù)計(jì)算如下:
具有維度先驗(yàn)和位置預(yù)測(cè)的邊界框。我們將框的寬度和高度預(yù)測(cè)為聚類質(zhì)心的偏移量。我們使用 sigmoid 函數(shù)預(yù)測(cè)框相對(duì)于中心坐標(biāo)的偏移。
細(xì)粒度特征。特征映射現(xiàn)在為 13x13。
多尺度訓(xùn)練。由于網(wǎng)絡(luò)是全卷積的,因此只需更改輸入圖像的分辨率即可動(dòng)態(tài)更改其分辨率。為了提高網(wǎng)絡(luò)的魯棒性,其輸入分辨率每 10 批次更改一次。由于網(wǎng)絡(luò)縮小了 32 倍,因此輸入分辨率是從集合 {320, 352, ..., 608} 中選擇的。網(wǎng)絡(luò)的大小從 320x320 調(diào)整為 608x608。
加速。VGG-16作為v1的骨干,太重了,所以在第二個(gè)版本中使用了darknet-19:
訓(xùn)練分類器后,從網(wǎng)絡(luò)中刪除最后一個(gè)卷積層,添加三個(gè)具有 1024 個(gè)濾波器的 3x3 卷積層和一個(gè)具有檢測(cè)所需輸出數(shù)量的最終 1x1的卷積層。在 VOC 的情況下,它是 5 個(gè) bbox,每個(gè) bbox 有 5 個(gè)坐標(biāo),每個(gè) bbox 有 20 個(gè)類,總共有 125 個(gè)濾波器。
分層分類。在 v1 中,這些類屬于同一類目標(biāo)并且是互斥的,而在 v2 中引入了 WordNet 樹(shù)結(jié)構(gòu),這是一個(gè)有向圖。每個(gè)類別中的類都是互斥的,并且有自己的softmax。因此,例如,如果圖片顯示已知品種網(wǎng)絡(luò)的狗,則網(wǎng)絡(luò)將返回狗和特定品種的類。如果是網(wǎng)絡(luò)未知品種的狗,那么它只會(huì)返回狗的類別。因此,訓(xùn)練了 YOLO9000,它是具有 3 個(gè)先驗(yàn)的 v2,而不是 5 個(gè)和 9418 個(gè)目標(biāo)類。
ImageNet vs WordTree上的預(yù)測(cè)。大多數(shù) ImageNet 模型使用一個(gè)大的 softmax 來(lái)預(yù)測(cè)概率分布。使用WordTree,我們對(duì)共同下義詞執(zhí)行多個(gè)softmax操作。
使用 WordTree 層次結(jié)構(gòu)合并數(shù)據(jù)集。使用WordNet概念圖,我們構(gòu)建了一個(gè)視覺(jué)概念的分層樹(shù)。然后,我們可以通過(guò)將數(shù)據(jù)集中的類映射到樹(shù)中的合成集來(lái)將數(shù)據(jù)集合并在一起。這是 WordTree 的簡(jiǎn)化視圖,用于說(shuō)明目的。
優(yōu)勢(shì)
現(xiàn)在它不僅是速度方面的 SOTA,而且在 mAP 方面也是。
現(xiàn)在可以更好地檢測(cè)小物體。
YOLOv3
作者
Joseph Redmon, Ali Farhadi
主要論文
“YOLOv3: An Incremental Improvement”, publication date 2018/04
性能比較
YOLOv3 的運(yùn)行速度明顯快于具有相當(dāng)性能的其他檢測(cè)方法。從M40或Titan X開(kāi)始,它們基本上是相同的GPU。
結(jié)構(gòu)
這是模型的增量更新,即沒(méi)有根本上更改,只有一組改進(jìn)技巧。
每個(gè) bbox 的置信度得分,即給定 bbox 中存在目標(biāo)的概率,現(xiàn)在也使用 sigmoid 計(jì)算。
作者從多類分類切換到多標(biāo)簽,所以我們擺脫了softmax,轉(zhuǎn)而支持二進(jìn)制交叉熵。
在三個(gè)尺度上對(duì) bbox 進(jìn)行預(yù)測(cè),輸出張量大?。篘 * N * (3 * (4 + 1 + num_classes))
作者使用k均值重新計(jì)算先驗(yàn)框,并在三個(gè)尺度上得到了9個(gè)bbox。
新的、更深、更準(zhǔn)確的骨干/特征提取器Darknet-53。
在準(zhǔn)確性方面,它與 ResNet-152 相當(dāng),但由于更有效地使用 GPU,它所需的操作減少了近 1.5 倍,產(chǎn)生的 FPS 提高了 2 倍。
總體結(jié)構(gòu)
不起作用的方法
BBOX 通過(guò)線性激活函數(shù)而不是logistic激活函數(shù)來(lái)協(xié)調(diào)位移預(yù)測(cè)。
focal loss — mAP 下降了 2 點(diǎn)。
用于確定GT的雙 IoU — 在 Faster R-CNN 中,IOU 有兩個(gè)閾值,通過(guò)該閾值確定正樣本或負(fù)樣本(>0.7 正值,0.3-0.7 忽略,<0.3 負(fù)樣本)
優(yōu)勢(shì)
發(fā)布時(shí)的檢測(cè)精度高于競(jìng)爭(zhēng)對(duì)手
發(fā)布時(shí)的檢測(cè)率高于競(jìng)爭(zhēng)對(duì)手
編輯:黃飛
?
評(píng)論
查看更多