翻了翻之前的文件夾,找到這個之前整理的YOLO理解文檔,在此基礎(chǔ)上,做了一些修改,特做更新。
我相信很多同學在理解YOLO的時候是有很多疑惑的,尤其是1個cell,兩個 bounding box,20個類別,簡直頭大。這篇文章帶你來理解,如果有錯誤,不吝賜教。
相比于RCNN系列的算法,YOLO將分類問題轉(zhuǎn)換為回歸問題。關(guān)于RCNN系列,會在后面更新,請不要捉急。
既然是回歸問題,就要用回歸的思維來看待。什么意思呢?比如說,我們預測2019年12月的房價,它是有很多因素共同起作用,每個因素可以看作x,有了歷史數(shù)據(jù),假設(shè)房價是線性變化,那么我們只需要求得系數(shù),就可把12月的x帶進去,就得到了房價。整么來理解YOLO呢?
首先,圖像就是輸入,如果把圖像分成塊的話,每個塊就是x,現(xiàn)在有很多這樣的圖像,那么只需要求得一組系數(shù),對于新來的一幅圖x’,就可以把x’帶進去,就知道這個塊或這幅圖是什么東西。那么這個系數(shù)就可以看作是bounding box(就是把目標框住的那個框框)。雖然每個塊只需要一個bounding box,但是,這個bounding box到底長什么樣,我們不知道。與其這樣,倒不如1個cell里面多高幾個bounding box,那個好就用那個,反正,最后我只用其中一個就行了。開始的時候,我們并不知道bounding box的形狀,只知道有幾個。怎么辦呢,別捉急。讓CNN去學習吧。我們有幾千萬的訓練集,還怕啥。我想這應(yīng)該就是YOLO的核心思想了。我想,稍微分析下,應(yīng)該就看出來,這種方法準確度應(yīng)該是有問題的,而實驗也證明了這一點。這很類似于RCNN中的bounding box regression(請參考我的其他博客)。
好吧,我表示原始論文看起來真他呀費勁。
找了很久,這篇博客寫的也不錯,可以看看。
<u>https://segmentfault.com/a/1190000016692873?utm_source=tag-newest</u>
話不多說,上菜。我感覺還是不要按照原文的思路來,太費勁了。
第一,先說一說IOU,置信度
先上圖。

把圖像分成77的塊,那么對于輸入的圖像就可以構(gòu)建一個77*30的張量,這些標簽都是已知的。

P(object):就是說這個cell中存在物體的概率。怎么定義是否有目標呢?如果目標的中心點在這個cell里面,那么就認為有目標,如果不在,就沒有目標。取值為0和1.
定義置信度:如果cell里面有目標,那么就用IOU來計算預測值(預測的bounding box)和真實值(真實的bounding box)差異。
P(class|objet):就是說這個cell存在物體,而且是某個類的概率。
那么最終,對于某個cell的一個box 預測某個類的概率就表示為:
P(class|objet)P(object)IOU
比如說上面的情況,只有一個類。
我們就可以定義這樣的訓練標簽,如果有錯誤請指出。
【000000000000000000000000000000 // 第一個cell
000000000000000000000000000000
.......
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0.7,0.02,0.14,0.14,0,0,0,0 // 第23個cell
........
000000000000000000000000000000】 // 第49個cell
第二,再說一說網(wǎng)絡(luò)結(jié)構(gòu)
此處是截圖

下面這個圖視乎更直觀一點。原始圖像卷啊卷,就被卷成了7730這樣的張量。這家伙跟cell有什么關(guān)系呢?比如說,cell是77的,卷啊卷,最后原始圖像中的一個塊,就成了77中的一個點。

第三,然后說一說訓練過程
在上面我們可以看到,YOLO就是一個網(wǎng)絡(luò),卷積,池化,全連接,最后輸出一個7730的tensor。此處應(yīng)該有個圖,我想應(yīng)該很直觀了,那就用本文的第一個圖吧。
我覺得我們不能被有些博客給迷惑了。好吧,還是說說這個最終的tensor是個啥樣的。就是這樣的,一條粗粗鏈子。對于整個網(wǎng)絡(luò)來說,你給他一幅圖,它卷啊卷,池啊池,啪,輸出一個7730的張量。假設(shè)這個張量就是OK的,就是我們想要的,那么,我們按照張量的結(jié)果,進行解析,就可以在圖上畫出這個(x,y,w,h)對應(yīng)的區(qū)域。好了,一般情況下第一次肯定不可能就得到好的結(jié)果,那怎么辦呢?我們在輸入訓練圖像的時候,是不是有標簽呢,而且是不是也有對應(yīng)的類別的信息呢。整,把這些信息搞成7730的張量,這樣不就可以用反向傳播去迭代了嘛。一遍一遍的訓練。你會發(fā)現(xiàn),最后輸出的張量,越來越是我們想要的。就是這么神奇。
第四,總結(jié)一下吧
我自己還是挺喜歡YOLO的,簡單有效,思路清奇。YOLO有很多小細節(jié),推薦的博客里面有介紹,我就不說了。后續(xù)會繼續(xù)更新V2和V3版本。本文已同步至公眾號,歡迎訂閱。
