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究珊。