目標(biāo)檢測(cè)算法:YOLO v1論文解讀
前言
? 其實(shí)網(wǎng)上已經(jīng)有很多很好的解讀各種論文的文章了,但是我決定自己也寫一寫,當(dāng)然,我的主要目的就是幫助自己梳理、深入理解論文,因?yàn)閷懳恼?,你必須把你所寫的東西表達(dá)清楚而正確,我認(rèn)為這是一種很好的鍛煉,當(dāng)然如果可以幫助到網(wǎng)友,也是很開心的事情。
說明
? 如果有筆誤或者寫錯(cuò)誤的地方請(qǐng)指出(勿噴),如果你有更好的見解也可以提出,我也會(huì)認(rèn)真學(xué)習(xí)。
原始論文地址
? 點(diǎn)擊這里,或者復(fù)制鏈接
https://arxiv.org/abs/1506.02640
目錄結(jié)構(gòu)
1. 文章內(nèi)容概述:
? 作者提出了一種新的目標(biāo)檢測(cè)方法,是一種單階段檢測(cè)方法,稱其為YOLO,全稱為You only look once。這個(gè)方法的主要特點(diǎn)是不再生成區(qū)域建議框,而是全部交給網(wǎng)絡(luò)架構(gòu)來實(shí)現(xiàn),是真正的端到端結(jié)構(gòu)(其實(shí)并不是嚴(yán)格意義上的端到端,因?yàn)檫€需要進(jìn)行后處理操作)。
? 正是因?yàn)闆]有了區(qū)域建議框的生成,其運(yùn)行速度非常快,可以實(shí)現(xiàn)實(shí)時(shí)檢測(cè),但是同樣的,其mAP和最先進(jìn)的檢測(cè)方法Faster-RCNN比還是較低。
2. YOLO流程介紹:
? 如果你看了我之前的關(guān)于RCNN、Fast-RCNN、Faster-RCNN的解讀,你馬上就會(huì)感概,YOLO真的好簡(jiǎn)單。
? 論文原圖如下:
? 對(duì)上圖進(jìn)行簡(jiǎn)單的說明:
- 首先,將輸入圖片改變大?。ㄒ话闶侨〈蟮姆直媛?,文中取得的是448*448)
問題:為什么要取大分辨率圖像?
? 因?yàn)闄z測(cè)問題需要更細(xì)致的信息,因此提高分辨率。
- 然后,將該圖片傳輸給CNN架構(gòu),然后產(chǎn)生輸出(即預(yù)測(cè)框和類別預(yù)測(cè)信息)
3. CNN架構(gòu):
? 這里作者自己設(shè)計(jì)了CNN架構(gòu),當(dāng)然,對(duì)于讀了這么多的CNN架構(gòu)論文來說,小case(如果你是無基礎(chǔ)直接看的話,當(dāng)我沒說,此時(shí)建議你可以先看看基礎(chǔ)的)。
? 論文原圖如下:
? 具體的網(wǎng)絡(luò)架構(gòu)就不談了,只是要注意,其實(shí)網(wǎng)絡(luò)架構(gòu)中用到了激活函數(shù),并且不是我們常規(guī)的ReLu激活函數(shù),而是leaky relu(最后一層還是relu):
? 另外,需要注意它的輸出,**這是最重要的部分。**因?yàn)樗妮敵龊臀覀兤綍r(shí)的輸出不一樣,因?yàn)闊o論是圖像分類的架構(gòu),還是之前的兩階段檢測(cè)算法,輸出就沒有三維結(jié)構(gòu)的。
? 那么,7*7*30是什么意思?下面先分開解釋,再結(jié)合一起解釋。
解釋:7*7含義
? 作者將一張圖像劃分為S*S個(gè)網(wǎng)格,如下圖(S=7):
? 作者認(rèn)為:
- 如果某個(gè)物體對(duì)象中心落在某一網(wǎng)格中,那么該網(wǎng)格就負(fù)責(zé)該對(duì)象的檢測(cè)
- 每個(gè)單元格預(yù)測(cè)B個(gè)邊界框和其對(duì)應(yīng)的置信度分?jǐn)?shù),以及一組類概率(比如總共20個(gè)類別,則產(chǎn)生20個(gè)概率值)
? 其中,置信度公式和概率公式分別如下,其中Pr(object)取{0,1},表示該網(wǎng)格有對(duì)象,則取值為1,否則取值為0。
解釋:30含義
? 30=(4+1)*2+20,其中4和1分別表示4個(gè)坐標(biāo)值(x,y,w,h)和一個(gè)置信度分?jǐn)?shù);2表示每個(gè)單元格預(yù)測(cè)2個(gè)邊界框,那么自然需要乘以2;20是因?yàn)閿?shù)據(jù)集共20個(gè)類別。
解釋:7*7*30怎么才能滿足我們的要求?
? 神經(jīng)網(wǎng)絡(luò)的神奇之處,就是在于我們可以讓它去適應(yīng)任意的任務(wù)。比如這里,我們需要它按照我們的想象輸出7*7*30,并且這里的值必須為我們所想的(比如30里面為坐標(biāo)值、概率值等)。想要讓它輸出和我們想得一樣,就必須讓它在訓(xùn)練的時(shí)候,告訴它,30里面的值我們要用來生成預(yù)測(cè)框和判斷類別。而,這個(gè)控制它的過程,就是定義一個(gè)優(yōu)秀的損失函數(shù),讓7*7*30的值各有所用。
4. 損失函數(shù):
? 原文中,給出的損失函數(shù)公式如下:
? 下面進(jìn)行一一解讀:
1[上標(biāo):obj,下標(biāo):ij] 、 1[上標(biāo):noobj,下標(biāo):ij] 和 1[上標(biāo):obj,下標(biāo):i] 含義:
? 1[上標(biāo):obj,下標(biāo):i],表示如果對(duì)象在單元格i中,則取值為1,否則取值為0。
? 1[上標(biāo):obj,下標(biāo):ij],表示如果對(duì)象在單元格i的第j個(gè)邊界框中,則取值為1,否則取值為0。
? 1[上標(biāo):noobj,下標(biāo):ij],與上面恰好相反,即如果對(duì)象沒有出現(xiàn)在單元格i的第j個(gè)邊界框中,則取值為1,否則取值為0。
S和B 含義:
? S就是一張圖片劃分為多少個(gè)單元格,文中為7*7。
? B就是一個(gè)單元格有B個(gè)邊界框預(yù)測(cè),文中為2。
xi、yi、wi、hi、Ci、pi? 含義:
? xi、yi、wi、hi就是中心點(diǎn)坐標(biāo)值和預(yù)測(cè)框的寬高。
? Ci是預(yù)測(cè)框的置信度分?jǐn)?shù),公式上面已經(jīng)給過了。
? pi? (小寫c)是一個(gè)邊框的一組概率值(向量)。
? 在這些變量上加上*號(hào),表示為真實(shí)值。
λcoord,λnoobj 含義:
? 這兩個(gè)值是超參數(shù),主要是平衡值。因?yàn)?,不包含?duì)象的預(yù)測(cè)框肯定是多數(shù),這會(huì)導(dǎo)致計(jì)算損失時(shí),值失衡。因此一般會(huì)讓?duì)薱oord值取得比較大,比如5,λnoobj取得比較小,比如0.5。
各行表達(dá)式的含義:
? 第一行+第二行 = 預(yù)測(cè)框(有對(duì)象的預(yù)測(cè)框)的回歸損失,可以看出采取的時(shí)類似于MSE的損失,準(zhǔn)確來說,后面所有的損失都采取的類似MSE的損失(這是一個(gè)缺點(diǎn),分類損失還是用交叉熵好一點(diǎn))。
? 第三行+第四行 = 分別為有無對(duì)象的預(yù)測(cè)框的置信度損失值。
? 第五行 = 分類損失值。
5. 注意點(diǎn):
? 在上面寫的時(shí)候,有一句”如果某對(duì)象的中心落在某單元格,則這個(gè)單元格負(fù)責(zé)該對(duì)象的檢測(cè)“。而在后面中,經(jīng)常會(huì)有”如果某對(duì)象落在第i個(gè)單元格中“,這里對(duì)象落在某單元格就是指的是對(duì)象中心落在單元格中。
? 另外,一個(gè)單元格有多個(gè)框,是否所有框都負(fù)責(zé)對(duì)象?不是的,而是IOU最大的負(fù)責(zé)預(yù)測(cè),這樣可以讓不同的框產(chǎn)生不同的作用,有利于提高召回率。
6. 總結(jié):
? YOLO的特殊之處在于損失函數(shù)的構(gòu)建和網(wǎng)絡(luò)輸出的利用。不過YOLO v1仍然有許多的缺點(diǎn),比如預(yù)測(cè)框太少(7*7*2=98個(gè))、損失函數(shù)中分類沒有交叉熵?fù)p失等等。文章來源:http://www.zghlxwxcb.cn/news/detail-472077.html
? 不過,YOLO相比于兩階段檢測(cè)方法,的確很簡(jiǎn)單,這也是它的一大優(yōu)點(diǎn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-472077.html
到了這里,關(guān)于目標(biāo)檢測(cè)算法:YOLO v1論文解讀的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!