YOLOv1學(xué)習(xí)筆記

YOLO 全稱You Only Look Once,屬于目標(biāo)檢測(cè)算法的One-Stage算法,One-Stage和Two-Stage算法的區(qū)別在于算法的過程中有沒有進(jìn)行Region Proposal的操作。R-CNN家族都有Region Proposal的過程,YOLO是直接對(duì)建議區(qū)進(jìn)行預(yù)測(cè),并且YOLO還將分類與邊框回歸融為一體。

\color{red}{ 1、模型結(jié)構(gòu)與輸入輸出解析}

YOLO Architecture

先來看看YOLO論文中的網(wǎng)絡(luò)結(jié)構(gòu),由24個(gè)卷積層后面接著兩個(gè)全連接層組成,除了最后一個(gè)全連接層用的是線性激活函數(shù)其他都是用的ReLU Leaky,最后輸出的是一個(gè)7x7x30的張量,那么這個(gè)張量是個(gè)什么意思嘞?

圖片來源YOLO論文
輸入輸出映射關(guān)系圖

YOLOv1是沒有Region Proposal的因此只能夠通過預(yù)測(cè)Bounding Box然后根據(jù)Ground Truth進(jìn)行回歸使得模型能夠?qū)W會(huì)去預(yù)測(cè)框的大小和位置。YOLO的設(shè)計(jì)思想是首先將輸入圖片劃分成7X7的grid cell那么圖片中的物體中心點(diǎn)一定落在某個(gè)grid cell之內(nèi),中心點(diǎn)落在哪個(gè)grid cell之內(nèi)就由其預(yù)測(cè)該物體。輸出層張量為7x7x30的張量,這個(gè)7X7X30對(duì)應(yīng)的就是原始圖片分割之后的每個(gè)網(wǎng)格,值不過是由一個(gè)小塊通過卷積和池化變成了一個(gè)30維度的向量。因?yàn)槊總€(gè)grid cell負(fù)責(zé)預(yù)測(cè)兩個(gè)bounding box,每個(gè)bounding box有4個(gè)參數(shù)(x,y,w,h)前面兩個(gè)是中心點(diǎn)相對(duì)于圖片左上角的坐標(biāo),后兩個(gè)是bbox的寬和高因此這8個(gè)參數(shù)就占據(jù)了8個(gè)維度,每個(gè)bbox還有一個(gè)置信度(confidence),置信度是用來衡量bbox中有物體且框相對(duì)于GT準(zhǔn)確程度的量。剩下的20個(gè)維度是物體分類的概率??偟膩碚f如果將輸入圖片劃分成SxS個(gè)網(wǎng)格則其輸出張量的公式為SxSx((4+1)*B+C)其中4+1為邊框參數(shù)數(shù)量加上置信度B為預(yù)測(cè)的bbox數(shù)量,C為分類物體物體總數(shù)。

image.png

\color{red}{2、模型標(biāo)簽}

看到論文中網(wǎng)絡(luò)模型輸出為7x7x30的張量之后可能你我本能的都會(huì)想到模型的標(biāo)簽如何設(shè)定,7x7網(wǎng)格每一個(gè)負(fù)責(zé)預(yù)測(cè)一類對(duì)象,但30維張量中卻飽含了兩個(gè)bbox(注意YOLO中兩個(gè)bbox只負(fù)責(zé)預(yù)測(cè)一類對(duì)象)兩個(gè)置信度而對(duì)每一個(gè)grid cell而言我們的Ground Truth卻只有一個(gè)。不像R-CNN家族有Region Proposal操作、Faster-RCNN有anchor機(jī)制,在YOLOv1中兩個(gè)bbox都是通過網(wǎng)絡(luò)前向傳播預(yù)測(cè)出來的。因此對(duì)于訓(xùn)練階段而言到底主要選擇哪一個(gè) bbox更新權(quán)重還需要商榷,YOLO原始論文中對(duì)有對(duì)象grid cell而言是根據(jù)兩個(gè)bbox的置信度哪個(gè)大則將對(duì)應(yīng)標(biāo)簽對(duì)應(yīng)上去的。

Confidence =\operatorname{Pr}(\text { Object }) * I O U_{\text {pred }}^{\text {truth }}
置信度由模型存在對(duì)象的概率乘上交并比,對(duì)有對(duì)象grid cell中的兩個(gè)bbox而言選著IOU大的那個(gè)令\operatorname{Pr}(\text { Object }) =1另一個(gè)則為零。
假設(shè)網(wǎng)絡(luò)輸出某grid cell(落在其中的對(duì)象為自行車)的向量形式如下:

grid cell input

則其對(duì)應(yīng)的label如下:
counterpart label

上面的label形式是對(duì)應(yīng)原圖中的物體中心落在某grid cell中的情形,顯然當(dāng)圖中物體不是很多的時(shí)候grid cell是稀疏的很多grid cell都是背景(負(fù)樣本),這時(shí)候的label直接設(shè)置為全部都是零即可。

\color{red}{3、損失函數(shù)解析}

Loss

在損失函數(shù)中第一行為有對(duì)象存在的grid cell中負(fù)責(zé)預(yù)測(cè)對(duì)象的bounding box的中心坐標(biāo)與GT的均方誤差即中心點(diǎn)回歸:

第二行為有對(duì)象的grid cell負(fù)責(zé)預(yù)測(cè)對(duì)象的 bbox的邊框回歸,注意其中的開根號(hào)是為了提高損失函數(shù)對(duì)小邊框的敏感性:

第三行為有對(duì)象的置信度誤差:

第四行為沒有對(duì)象的置信度誤差:

第五行為對(duì)象預(yù)測(cè)概率誤差:

其中是權(quán)重用來設(shè)置各損失項(xiàng)的更新權(quán)重的重要性。

\color{red}{4、模型訓(xùn)練}

因?yàn)槲覀兪褂玫臋z測(cè)數(shù)據(jù)集數(shù)據(jù)量有限且成本很大對(duì)分類任務(wù)來說很艱難因此需要預(yù)訓(xùn)練之后進(jìn)行模型的遷移。論文中模型預(yù)訓(xùn)練使用的是DarkNet網(wǎng)絡(luò)框架(DarkNet網(wǎng)絡(luò)框架比VGG16計(jì)算量更小但是準(zhǔn)確度更大)上前20層卷積層是通過添加平均池化層和全連接層在ImageNet1000類的數(shù)據(jù)集上進(jìn)行的訓(xùn)練,之后去掉平均池化層和全連接層保留前20層卷積層然后通過添加4個(gè)卷積層和2個(gè)全連接層將模型變成檢測(cè)模型。
又因?yàn)槲覀兊臋z測(cè)模型往往需要檢測(cè)細(xì)粒度(fine-grained)的物體信息,而我們預(yù)訓(xùn)練卷積層是輸出圖像的分辨率(resolution)是224x224因此我們修改網(wǎng)絡(luò)輸入層的分辨率為448x448(VOC數(shù)據(jù)集)。
在網(wǎng)絡(luò)訓(xùn)練之前將圖片的大小和沒個(gè)bbox的寬高、偏移都進(jìn)行了歸一化處理。

\color{red}{5、模型推理(Inference)階段}

模型輸出每個(gè)grid cell有2個(gè)bbox總共有98個(gè)bbox我們不可能將每個(gè)bbox都輸出因此在計(jì)算得分之后采用非極大值抑制(Non-Maximun Suppresion)進(jìn)行邊框減除。
假設(shè)某grid cell輸出如下

image.png

計(jì)算最后得分指標(biāo)為boundingbox的置信度乘上每一類的預(yù)測(cè)概率:
這個(gè)等式實(shí)際上是一個(gè)條件概率,表示預(yù)測(cè)某類和定位的正確程度
然后將每一個(gè) bbox都計(jì)算得分將得分排列如下圖:
image.png

每一個(gè)grid cell中有2個(gè)boundingbox每個(gè)box預(yù)測(cè)20類對(duì)象則每個(gè)grid cell有40個(gè)得分,49個(gè)cell一共1960個(gè)得分,之后我們對(duì)其進(jìn)行非極大值抑制:
(1) 通過設(shè)置一個(gè)閾值直接將低于該閾值的得分設(shè)置為零.
(2) 遍歷每一個(gè)對(duì)象.
(2.1) 選出對(duì)象98個(gè)得分中最大得分的boundingbox.
(2.1.1) 設(shè)置IOU值計(jì)算最大得分的box與其他 box的IOU值
當(dāng)大于設(shè)定的IOU值時(shí)將得分設(shè)置為零.
(2.1.2) 如果98個(gè)得分中除了最大的得分中還有未歸零的得
分則除去除最大得分選擇次大得分進(jìn)行(2.1)操作.
(2.1.2.1) 直到對(duì)象得分不能在設(shè)置為零(continue)
(3)輸出所有bbox

論文泛化結(jié)果

\color{red}{6、總結(jié)}

YOLOv1算法比Tow-stage算法在速度上提升了很多,但是在mAP和召回率上都有待改善,尤其在對(duì)小物體進(jìn)行目標(biāo)檢測(cè)時(shí)候,每一個(gè)gridcell中有多個(gè)對(duì)像而由于每一個(gè)gridcell都只預(yù)測(cè)一類對(duì)象因此準(zhǔn)確率比較低。

\color{blue}{references}

YOLO論文:https://arxiv.org/pdf/1506.02640.pdf
https://zhuanlan.zhihu.com/p/46691043
https://blog.csdn.net/qq_43602882/article/details/105910176

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容