yolo2 要點(diǎn)解析
雖然網(wǎng)絡(luò)上各路大神對(duì)yolo2的主要特性和結(jié)構(gòu)做了詳細(xì)說(shuō)明,但就程序的實(shí)現(xiàn)來(lái)說(shuō),很多未曾點(diǎn)明的細(xì)節(jié)仍然不是很清楚。本章不會(huì)對(duì)yolo2的結(jié)構(gòu)和特性進(jìn)行說(shuō)明,只涉及一些yolo2的關(guān)鍵細(xì)節(jié)和概念,同時(shí)也是對(duì)自己不了解的部分做一個(gè)梳理。
邊界框
邊界框以(x, y, w, h)的方式表示它在圖像中的位置,(x, y)表示邊界框的中心點(diǎn)位于圖像坐上角的相對(duì)位置,(w, h)是相對(duì)于圖像大小的相對(duì)位置。即它們的范圍都是[0, 1]。
先驗(yàn)框(錨框)
Yolo2引入了邊界框先驗(yàn)(bounding box prior)的概念。我們不再期望模型為每張新圖像直接生成唯一的邊界框描述量,而是定義一個(gè)邊界框集合,其中的邊界框有不同的寬高比,這些寬高比嵌入了某些關(guān)于我們預(yù)計(jì)會(huì)檢測(cè)到的目標(biāo)的形狀的先驗(yàn)信息。Redmond 提供了一種用于發(fā)現(xiàn)最佳寬高比的方法,即在你的訓(xùn)練數(shù)據(jù)集中的所有邊界框上執(zhí)行 k-均值聚類(使用一個(gè)自定義的距離度量)。
作用
我們不再直接預(yù)測(cè)邊界框的尺寸,而是重新形式化了我們的任務(wù),從而只需簡(jiǎn)單預(yù)測(cè)與我們的邊界框先驗(yàn)尺寸的偏移量,這樣我們就可以優(yōu)化我們的預(yù)測(cè)邊界框尺寸了。這種處理方式能讓這一預(yù)測(cè)任務(wù)更容易學(xué)習(xí)。
更容易學(xué)習(xí)的意思是,模型最終的輸出均為[0, 1]之間,按照歸一化的思想,使得梯度下降更容易。
先驗(yàn)框與真值框的轉(zhuǎn)換
模型最后輸出的位置特征實(shí)際上是先驗(yàn)框和真值框之間的偏移量的預(yù)測(cè)值,它們之間的轉(zhuǎn)換公式如下:
其中為預(yù)測(cè)的偏移量,
為實(shí)際預(yù)測(cè)的邊界框的位置,
為邊界框的中心所在的格點(diǎn)的位置,
為先驗(yàn)框的寬和高。
將
的值限制在[0, 1]之間,實(shí)際上表達(dá)的是中心點(diǎn)相對(duì)于當(dāng)前格點(diǎn)左上角的位移,再加上
后就變成了相對(duì)于特征圖左上角的位移。
注意:以上的所有坐標(biāo)的范圍(除外)均為[0, conv_width],其中conv_width 為模型最終輸出的特征圖的寬度(設(shè)conv_width=conv_height)
損失函數(shù)
在計(jì)算損失時(shí),需要知道的是模型最后輸出的特征圖的維度為:
(batch, conv_height, conv_width, num_anchors, 5 + num_classes)
最后一維的前5項(xiàng)分別是 tx, ty, th, tw, pc。
后面的num_classes分別是各類別的概率。
模型損失函數(shù)的計(jì)算包括以下幾部分:
- 置信度損失(confidence_loss)
- 坐標(biāo)損失(coordinates_loss)
- 分類損失(classification_loss)
總損失的計(jì)算公式為:
置信度損失
置信度表示了當(dāng)前的錨框中存在物體的概率,因此置信度損失包含了物體實(shí)際存在與不存在時(shí)的條件損失,故此置信度損失的計(jì)算公式如下:
- 當(dāng)物體實(shí)際不存在時(shí),損失為(向量形式):
- 當(dāng)物體實(shí)際存在時(shí),損失為(向量形式):
總損失為條件損失之和
這里x5是為了罰重物體存在時(shí)的置信度損失。
坐標(biāo)損失
模型最后得到的是預(yù)測(cè)的先驗(yàn)框和真值框之間的偏移,因此我們需要預(yù)先將正確的偏移量計(jì)算出來(lái),然后再與預(yù)測(cè)值進(jìn)行比較。
注意:坐標(biāo)損失只針對(duì)物體實(shí)際存在的情況,物體不存在時(shí)損失為0。
預(yù)先求得正確的偏移量
為了計(jì)算正確的偏移量,我們首先需要獲得真值框和與之匹配的先驗(yàn)框。但是一個(gè)圖像中有多個(gè)真值框,并且先驗(yàn)框的數(shù)量同樣有多個(gè),那么我們?cè)鯓哟_定與真值框匹配的先驗(yàn)框呢?答案是,選擇與真值框IOU值最大的那個(gè)先驗(yàn)框。
以一張圖中的所有真值框?yàn)槔襟E如下:
- 取所有的真值框中的下一個(gè)真值框
- 將真值框大小縮放為最終模型生成的特征圖的大小
- 以該真值框的中心為原點(diǎn),并將所有的先驗(yàn)框移至原點(diǎn)
- 計(jì)算出真值框與所有先驗(yàn)框的IOU值
- 選擇IOU值最大的先驗(yàn)框
- 按照轉(zhuǎn)換公式(1) - (4)計(jì)算出實(shí)際的偏移量
- 返回第1步,直到遍歷完所有的真值框
分類損失
分類損失直接使用預(yù)測(cè)的分類概率值與實(shí)際的分類概率值進(jìn)行比較,計(jì)算公式為(向量形式):
注意:分類損失只針對(duì)物體實(shí)際存在的情況,物體不存在時(shí)損失為0。