日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

[目標(biāo)檢測(cè)]YOLO原理

 學(xué)海無(wú)涯GL 2018-04-13

1 YOLO

創(chuàng)新點(diǎn): 端到端訓(xùn)練及推斷 + 改革區(qū)域建議框式目標(biāo)檢測(cè)框架 + 實(shí)時(shí)目標(biāo)檢測(cè)

1.1 創(chuàng)新點(diǎn)

(1) 改革了區(qū)域建議框式檢測(cè)框架: RCNN系列均需要生成建議框,在建議框上進(jìn)行分類與回歸,但建議框之間有重疊,這會(huì)帶來(lái)很多重復(fù)工作。YOLO將全圖劃分為SXS的格子,每個(gè)格子負(fù)責(zé)中心在該格子的目標(biāo)檢測(cè),采用一次性預(yù)測(cè)所有格子所含目標(biāo)的bbox、定位置信度以及所有類別概率向量來(lái)將問(wèn)題一次性解決(one-shot)。

1.2 Inference過(guò)程

YOLO網(wǎng)絡(luò)結(jié)構(gòu)由24個(gè)卷積層與2個(gè)全連接層構(gòu)成,網(wǎng)絡(luò)入口為448x448(v2為416x416),圖片進(jìn)入網(wǎng)絡(luò)先經(jīng)過(guò)resize,網(wǎng)絡(luò)的輸出結(jié)果為一個(gè)張量,維度為:

S?S?(B?5+C)

其中,S為劃分網(wǎng)格數(shù),B為每個(gè)網(wǎng)格負(fù)責(zé)目標(biāo)個(gè)數(shù),C為類別個(gè)數(shù)。該表達(dá)式含義為:

(1) 每個(gè)小格會(huì)對(duì)應(yīng)B個(gè)邊界框,邊界框的寬高范圍為全圖,表示以該小格為中心尋找物體的邊界框位置。

(2) 每個(gè)邊界框?qū)?yīng)一個(gè)分值,代表該處是否有物體及定位準(zhǔn)確度:

P(object)?IoUpredtruth

(3) 每個(gè)小格會(huì)對(duì)應(yīng)C個(gè)概率值,找出最大概率對(duì)應(yīng)的類別P(Class|object),并認(rèn)為小格中包含該物體或者該物體的一部分。

1.3 分格思想實(shí)現(xiàn)方法

一直困惑的問(wèn)題是:分格思想在代碼實(shí)現(xiàn)中究竟如何體現(xiàn)的呢?
在yolov1的yolo.cfg文件中:

[net]
batch=1
subdivisions=1
height=448
width=448
channels=3
momentum=0.9
decay=0.0005
saturation=1.5
exposure=1.5
hue=.1

conv24 。。。

[local]
size=3
stride=1
pad=1
filters=256
activation=leaky
[dropout]
probability=.5
[connected]
output= 1715
activation=linear

[detection]
classes=20
coords=4
rescore=1
side=7
num=3
softmax=0
sqrt=1
jitter=.2

object_scale=1
noobject_scale=.5
class_scale=1
coord_scale=5

最后一個(gè)全連接層輸出特征個(gè)數(shù)為1715,而detction層將該1715的特征向量整個(gè)為一個(gè),side?side?((coodrds+rescore)?num+classes)的張量。其中,side?side即為原圖中S?S的小格。為什么side位置的輸出會(huì)對(duì)應(yīng)到原圖中小格的位置呢?因?yàn)橛?xùn)練過(guò)程中會(huì)使用對(duì)應(yīng)位置的GT監(jiān)督網(wǎng)絡(luò)收斂,測(cè)試過(guò)程中每個(gè)小格自然對(duì)應(yīng)原圖小格上目標(biāo)的檢測(cè)。

預(yù)測(cè)處理過(guò)程數(shù)據(jù)的歸一化

在訓(xùn)練yolo前需要先準(zhǔn)備數(shù)據(jù),其中有一步為:

python voc_label.py

中有個(gè)convert函數(shù)

def convert(size, box):
    dw = 1./(size[0])
    dh = 1./(size[1])
    x = (box[0] + box[1])/2.0 - 1
    y = (box[2] + box[3])/2.0 - 1
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x*dw
    w = w*dw
    y = y*dh
    h = h*dh
    return (x,y,w,h)

GT邊界框轉(zhuǎn)換為(xc, yc, w, h)的表示方式,wc, yc, w, h被歸一化到0~1之間。
再看損失函數(shù)
參見(jiàn)博文

1.4 YOLO缺點(diǎn)

1) 對(duì)小物體及鄰近特征檢測(cè)效果差:當(dāng)一個(gè)小格中出現(xiàn)多于兩個(gè)小物體或者一個(gè)小格中出現(xiàn)多個(gè)不同物體時(shí)效果欠佳。原因:B表示每個(gè)小格預(yù)測(cè)邊界框數(shù),而YOLO默認(rèn)同格子里所有邊界框?yàn)橥N類物體。

(2) 圖片進(jìn)入網(wǎng)絡(luò)前會(huì)先進(jìn)行resize為448 x 448,降低檢測(cè)速度(it takes about 10ms in 25ms),如果直接訓(xùn)練對(duì)應(yīng)尺寸會(huì)有加速空間。

(3) 基礎(chǔ)網(wǎng)絡(luò)計(jì)算量較大,yolov2使用darknet-19進(jìn)行加速。

1.5 實(shí)驗(yàn)結(jié)論

(1) 速度更快(實(shí)時(shí)):yolo(24 convs) -> 45 fps,fast_yolo(9 convs) -> 150 fps

(2) 全圖為范圍進(jìn)行檢測(cè)(而非在建議框內(nèi)檢測(cè)),帶來(lái)更大的context信息,使得相對(duì)于Fast-RCNN誤檢率更低,但定位精度欠佳。

1.6 YOLO損失函數(shù)

Yolo損失函數(shù)的理解學(xué)習(xí)于潛伏在代碼中
** Loss = λcoord * 坐標(biāo)預(yù)測(cè)誤差(1) + 含object的box confidence預(yù)測(cè)誤差 (2)+ λnoobj* 不含object的box confidence預(yù)測(cè)誤差(3) + 每個(gè)格子中類別預(yù)測(cè)誤差(4) **

=

(1) 整個(gè)損失函數(shù)針對(duì)邊界框損失(圖中1, 2, 3部分)與格子(4部分)主體進(jìn)行討論。

(2) 部分1為邊界框位置與大小的損失函數(shù),式中對(duì)寬高都進(jìn)行開(kāi)根是為了使用大小差別比較大的邊界框差別減小。例如,一個(gè)同樣將一個(gè)100x100的目標(biāo)與一個(gè)10x10的目標(biāo)都預(yù)測(cè)大了10個(gè)像素,預(yù)測(cè)框?yàn)?10 x 110與20 x 20。顯然第一種情況我們還可以失道接受,但第二種情況相當(dāng)于把邊界框預(yù)測(cè)大了一倍,但如果不使用根號(hào)函數(shù),那么損失相同,都為200。但把寬高都增加根號(hào)時(shí):

(sqrt(20)?sqrt(10))2=3.43

(sqrt(110)?sqrt(100))2=0.48

顯然,對(duì)小框預(yù)測(cè)偏差10個(gè)像素帶來(lái)了更高的損失。通過(guò)增加根號(hào),使得預(yù)測(cè)相同偏差與更小的框產(chǎn)生更大的損失。但根據(jù)YOLOv2的實(shí)驗(yàn)證明,還有更好的方法解決這個(gè)問(wèn)題。

(3) 若有物體落入邊界框中,則計(jì)算預(yù)測(cè)邊界框含有物體的置信度Ci和真實(shí)物體與邊界框IoUCi^的損失,我們希望兩差值越小損失越低。

(4) 若沒(méi)有任何物體中心落入邊界框中,則Ci^為0,此時(shí)我們希望預(yù)測(cè)含有物體的置信度Ci越小越好。然而,大部分邊界框都沒(méi)有物體,積少成多,造成loss的第3部分與第4部分的不平衡,因此,作才在loss的三部分增加權(quán)重λnobj=0.5

(5) 對(duì)于每個(gè)格子而言,作者設(shè)計(jì)只能包含同種物體。若格子中包含物體,我們希望希望預(yù)測(cè)正確的類別的概率越接近于1越好,而錯(cuò)誤類別的概率越接近于0越好。loss第4部分中,若pi(c)^中c為正確類別,則值為1,若非正確類別,則值為0。
參考譯文
參考潛伏在代碼中

2 YOLOv2

yolov1基礎(chǔ)上的延續(xù),新的基礎(chǔ)網(wǎng)絡(luò),多尺度訓(xùn)練,全卷積網(wǎng)絡(luò),F(xiàn)aster-RCNN的anchor機(jī)制,更多的訓(xùn)練技巧等等改進(jìn)使得yolov2速度與精度都大幅提升,改進(jìn)效果如下圖:

2.1 BatchNorm

Batchnorm是2015年以后普遍比較流行的訓(xùn)練技巧,在每一層之后加入BN層可以將整個(gè)batch數(shù)據(jù)歸一化到均值為0,方差為1的空間中,即將所有層數(shù)據(jù)規(guī)范化,防止梯度消失與梯度爆炸,如:

0.930=0.04

加入BN層訓(xùn)練之后效果就是網(wǎng)絡(luò)收斂更快,并且效果更好。YOLOv2在加入BN層之后mAP上升2%。
關(guān)于BN作用

2.2 預(yù)訓(xùn)練尺寸

yolov1也在Image-Net預(yù)訓(xùn)練模型上進(jìn)行fine-tune,但是預(yù)訓(xùn)練時(shí)網(wǎng)絡(luò)入口為224 x 224,而fine-tune時(shí)為448 x 448,這會(huì)帶來(lái)預(yù)訓(xùn)練網(wǎng)絡(luò)與實(shí)際訓(xùn)練網(wǎng)絡(luò)識(shí)別圖像尺寸的不兼容。yolov2直接使用448 x 448的網(wǎng)絡(luò)入口進(jìn)行預(yù)訓(xùn)練,然后在檢測(cè)任務(wù)上進(jìn)行訓(xùn)練,效果得到3.7%的提升。

2.3 更細(xì)網(wǎng)絡(luò)劃分

yolov2為了提升小物體檢測(cè)效果,減少網(wǎng)絡(luò)中pooling層數(shù)目,使最終特征圖尺寸更大,如輸入為416 x 416,則輸出為13 x 13 x 125,其中13 x 13為最終特征圖,即原圖分格的個(gè)數(shù),125為每個(gè)格子中的邊界框構(gòu)成(5 x (classes + 5))。需要注意的是,特征圖尺寸取決于原圖尺寸,但特征圖尺寸必須為奇數(shù),以此保存中間有一個(gè)位置能看到原圖中心處的目標(biāo)。

2.4 全卷積網(wǎng)絡(luò)

為了使網(wǎng)絡(luò)能夠接受多種尺寸的輸入圖像,yolov2除去了v1網(wǎng)絡(luò)結(jié)構(gòu)中的全連層,因?yàn)槿B接層必須要求輸入輸出固定長(zhǎng)度特征向量。將整個(gè)網(wǎng)絡(luò)變成一個(gè)全卷積網(wǎng)絡(luò),能夠?qū)Χ喾N尺寸輸入進(jìn)行檢測(cè)。同時(shí),全卷積網(wǎng)絡(luò)相對(duì)于全連接層能夠更好的保留目標(biāo)的空間位置信息。

2.5 新基礎(chǔ)網(wǎng)絡(luò)

下圖為不同基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu)做分類任務(wù)所對(duì)就的計(jì)算量,橫坐標(biāo)為做一次前向分類任務(wù)所需要的操作數(shù)目??梢钥闯鲎髡咚褂玫膁arknet-19作為基礎(chǔ)預(yù)訓(xùn)練網(wǎng)絡(luò)(共19個(gè)卷積層),能在保持高精度的情況下快速運(yùn)算。而SSD使用的VGG-16作為基礎(chǔ)網(wǎng)絡(luò),VGG-16雖然精度與darknet-19相當(dāng),但運(yùn)算速度慢。關(guān)于darknet-19基礎(chǔ)網(wǎng)絡(luò)速度

2.6 anchor機(jī)制

yolov2為了提高精度與召回率,使用Faster-RCNN中的anchor機(jī)制。以下為我對(duì)anchor機(jī)制使用的理解:在每個(gè)網(wǎng)格設(shè)置k個(gè)參考anchor,訓(xùn)練以GT anchor作為基準(zhǔn)計(jì)算分類與回歸損失。測(cè)試時(shí)直接在每個(gè)格子上預(yù)測(cè)k個(gè)anchor box,每個(gè)anchor box為相對(duì)于參考anchor的offset與w,h的refine。這樣把原來(lái)每個(gè)格子中邊界框位置的全圖回歸(yolov1)轉(zhuǎn)換為對(duì)參考anchor位置的精修(yolov2)。
至于每個(gè)格子中設(shè)置多少個(gè)anchor(即k等于幾),作者使用了k-means算法離線對(duì)voc及coco數(shù)據(jù)集中目標(biāo)的形狀及尺度進(jìn)行了計(jì)算。發(fā)現(xiàn)當(dāng)k = 5時(shí)并且選取固定5比例值的時(shí),anchors形狀及尺度最接近voc與coco中目標(biāo)的形狀,并且k也不能太大,否則模型太復(fù)雜,計(jì)算量很大。

2.7 新邊界框預(yù)測(cè)方式

這部分沒(méi)有看太懂,先占個(gè)坑,等以后明白了再來(lái)補(bǔ),感覺(jué)應(yīng)該是在彌補(bǔ)大小邊界框回歸誤差損失的問(wèn)題吧。這里發(fā)現(xiàn)有篇博文對(duì)這部分講得挺仔細(xì)的。

2.8 殘差層融合低級(jí)特征

為了使用網(wǎng)絡(luò)能夠更好檢測(cè)小物體,作者使用了resnet跳級(jí)層結(jié)構(gòu),網(wǎng)絡(luò)末端的高級(jí)特征層與前一層或者前幾層的低級(jí)細(xì)粒度特征結(jié)合起來(lái),增加網(wǎng)絡(luò)對(duì)小物體的檢測(cè)效果,使用該方法能夠?qū)AP提高1%。
同樣,在SSD檢測(cè)器上也可以看出使用細(xì)粒度特征(低級(jí)特征)將進(jìn)行小物體檢測(cè)的思想,但是不同的是SSD直接在多個(gè)低級(jí)特征圖上進(jìn)行目標(biāo)檢測(cè),因此,SSD對(duì)于小目標(biāo)檢測(cè)效果要優(yōu)于YOLOv2,這點(diǎn)可以coco測(cè)試集上看出,因?yàn)閏oco上小物體比較多,但yolov2在coco上要明顯遜色于ssd,但在比較簡(jiǎn)單的檢測(cè)數(shù)據(jù)集voc上優(yōu)于ssd。

2.9 多尺寸訓(xùn)練

yolov2網(wǎng)絡(luò)結(jié)構(gòu)為全卷積網(wǎng)絡(luò)FCN,可以適于不同尺寸圖片作為輸入,但要滿足模型在測(cè)試時(shí)能夠?qū)Χ喑叨容斎雸D像都有很好效果,作者訓(xùn)練過(guò)程中每10個(gè)epoch都會(huì)對(duì)網(wǎng)絡(luò)進(jìn)行新的輸入尺寸的訓(xùn)練。需要注意的是,因?yàn)槿矸e網(wǎng)絡(luò)總共對(duì)輸入圖像進(jìn)行了5次下采樣(步長(zhǎng)為2的卷積或者池化層), 所以最終特征圖為原圖的1/32。所以在訓(xùn)練或者測(cè)試時(shí),網(wǎng)絡(luò)輸入必須為32的位數(shù)。并且最終特征圖尺寸即為原圖劃分網(wǎng)絡(luò)的方式。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多