本篇文章給大家分享的是有關(guān)CornerNet中keypoint-based如何通過定位角點(diǎn)進(jìn)行目標(biāo)檢測,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
創(chuàng)新互聯(lián)建站主營黎城網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,手機(jī)APP定制開發(fā),黎城h5微信小程序開發(fā)搭建,黎城網(wǎng)站營銷推廣歡迎黎城等地區(qū)企業(yè)咨詢
下面提出了CornerNet,通過檢測角點(diǎn)對的方式進(jìn)行目標(biāo)檢測,與當(dāng)前的SOTA檢測模型有相當(dāng)?shù)男阅?。CornerNet借鑒人體姿態(tài)估計(jì)的方法,開創(chuàng)了目標(biāo)檢測領(lǐng)域的一個(gè)新框架,后面很多論文都基于CorerNet的研究拓展出新的角點(diǎn)目標(biāo)檢測
目標(biāo)檢測算法大都與anchor box脫不開關(guān)系,論文認(rèn)為使用anchor box有兩個(gè)缺點(diǎn):1) 需要在特征圖上平鋪大量的anchor box避免漏檢,但最后只使用很小一部分的anchor box,造成正負(fù)樣本不平衡且拖慢訓(xùn)練。 2) anchor box的引入帶來了額外的超參數(shù)和特別的網(wǎng)絡(luò)設(shè)計(jì),使得模型訓(xùn)練變復(fù)雜。
基于上面的考慮,論文提出了CornerNet,將目標(biāo)檢測定義為左上角點(diǎn)和右下角點(diǎn)的檢測。網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示,通過卷積網(wǎng)絡(luò)預(yù)測出左上角點(diǎn)和右下角點(diǎn)的熱圖,然后將兩組熱圖組合輸出預(yù)測框,徹底去除了anchor box的需要。論文通過實(shí)驗(yàn)也表明CornerNet與當(dāng)前的主流算法有相當(dāng)?shù)男阅埽_創(chuàng)了目標(biāo)檢測的新范式。
CornerNet中通過檢測目標(biāo)的左上角點(diǎn)和右下角點(diǎn)進(jìn)行目標(biāo)檢測,卷積網(wǎng)絡(luò)預(yù)測兩組熱圖(heatmap)來表示不同類別目標(biāo)的角點(diǎn)位置,分別對應(yīng)左上角點(diǎn)和右下角點(diǎn)。為了將左上角點(diǎn)和左下角點(diǎn)進(jìn)行對應(yīng),為每個(gè)角點(diǎn)預(yù)測一個(gè)embedding向量,屬于同一個(gè)目標(biāo)的兩個(gè)角點(diǎn)的距離會非常小。另外還增加了偏移量(offset)的預(yù)測,對角點(diǎn)的位置進(jìn)行小幅度的調(diào)整。
CornerNet的結(jié)構(gòu)如圖4所示,使用hourglass網(wǎng)絡(luò)作為主干網(wǎng)絡(luò),通過獨(dú)立的兩個(gè)預(yù)測模塊輸出兩組結(jié)果,分別對應(yīng)左上角點(diǎn)和右下角點(diǎn),每個(gè)預(yù)測模塊通過corner池化輸出用于最終預(yù)測的熱圖、embedding向量和偏移。
預(yù)測的熱圖的大小為$C\times H\times W$,$C$為類別數(shù)量,不包含背景類。每個(gè)GT的角點(diǎn)僅對應(yīng)一個(gè)正樣本點(diǎn),其它的點(diǎn)均為負(fù)樣本點(diǎn),但在訓(xùn)練時(shí)不會等同地懲罰負(fù)樣本點(diǎn),而是減少正樣本點(diǎn)半徑內(nèi)的負(fù)樣本點(diǎn)的懲罰力度。這樣做的原因主要在于,靠近正樣本點(diǎn)的負(fù)樣本點(diǎn)能夠產(chǎn)生有足夠高IoU的預(yù)測框,如圖5所示。
? 半徑的大小根據(jù)目標(biāo)的大小來設(shè)定,保證產(chǎn)生的預(yù)測框能至少滿足IoU大于$t$。在設(shè)定半徑后,根據(jù)二維高斯核$e^{-\frac{x^2+y^2}{2\sigma^2}}$進(jìn)行懲罰衰減,$x$和$y$為相對正樣本點(diǎn)的距離,$\sigma$為半徑的1/3。定義$p_{cij}$為位置$(i,j)$關(guān)于類別$c$的預(yù)測分?jǐn)?shù),$y_{cij}$為根據(jù)高斯核得出的分?jǐn)?shù),論文設(shè)計(jì)了一個(gè)focal loss的變種:
由于池化層的存在,原圖位置$(x,y)$在特征圖上通常會被映射到$(\lfloor\frac{x}{n}\rfloor, \lfloor\frac{y}{n}\rfloor)$,$n$為下采樣因子。在將熱圖中的點(diǎn)映射回原圖時(shí),由于池化的原因可能會有精度的損失,這會極大地影響小目標(biāo)的IoU計(jì)算。為了解決這個(gè)問題,論文提出了偏移預(yù)測,在將熱圖位置映射到原圖前,小幅調(diào)整角點(diǎn)的位置:
$o_k$為偏移值,$x$和$y$為角點(diǎn)$k$的坐標(biāo)。需要注意的是,網(wǎng)絡(luò)對左上角點(diǎn)和右下角點(diǎn)分別預(yù)測一組偏移值,偏移值在類別間共用。在訓(xùn)練時(shí),對正樣本點(diǎn)添加smooth L1損失來訓(xùn)練角點(diǎn)的偏移值:
當(dāng)圖片中存在多個(gè)目標(biāo)時(shí),需要區(qū)分預(yù)測的左上角點(diǎn)和右下角點(diǎn)的對應(yīng)關(guān)系,然后組成完整的預(yù)測框。這里論文參考了人體姿態(tài)估計(jì)的策略,每個(gè)角點(diǎn)預(yù)測一個(gè)一維的embedding向量,根據(jù)向量間的距離進(jìn)行對應(yīng)關(guān)系的判斷。定義$e_{t_k}$目標(biāo)$k$左上角點(diǎn)的embedding向量,$e_{b_k}$為右下角的embedding向量,使用pull損失和push損失來分別組合以及分離角點(diǎn):
$e_k$為$e_{t_k}$和$e_{b_k}$的平均值,$\Delta=1$,這里的pull損失和push損失跟偏移一樣,僅對正樣本點(diǎn)使用。
角點(diǎn)的位置一般都沒有目標(biāo)信息,為了判斷像素是否為左上角點(diǎn),需要向右水平查找目標(biāo)的最高點(diǎn)以及向下垂直查找目標(biāo)的最左點(diǎn)?;谶@樣的先驗(yàn)知識,論文提出corner pooling來定位角點(diǎn)。 ? 假設(shè)需要確定位置$(i,j)$是否為左上角點(diǎn),首先定義$f_t$和$f_l$為左上corner pooling的輸入特征圖,$f_{t_{i,j}}$和$f_{l_{i,j}}$為輸入特征圖在位置$(i,j)$上的特征向量。特征圖大小為$H\times W$,corner pooling首先對$f_t$中$(i,j)$到$(i,H)$的特征向量進(jìn)行最大池化輸出向量$t_{ij}$,同樣對$f_l$中$(i,j)$到$(W,j)$的特征向量也進(jìn)行最大池化輸出向量$l_{ij}$,最后將$t_{ij}$和$l_{ij}$相加。完整的計(jì)算可表示為:
公式6和公式7采用element-wise最大池化。
在實(shí)現(xiàn)時(shí),公式6和公式7可以如圖6那樣進(jìn)行整張?zhí)卣鲌D的高效計(jì)算,有點(diǎn)類似動(dòng)態(tài)規(guī)劃。對于左上角點(diǎn)的corner pooling,對輸入特征圖分別進(jìn)行從右往左和從下往上的預(yù)先計(jì)算,每個(gè)位置只需要跟上一個(gè)位置的輸出進(jìn)行element-wise最大池化即可,最后直接將兩個(gè)特征圖相加即可。
完整的預(yù)測模塊結(jié)構(gòu)如圖7所示,實(shí)際上是個(gè)改進(jìn)版residual block,將$3\times 3$卷積模塊替換為corner pooling模塊,最后輸出熱圖、embedding向量和偏移。
CornerNet使用hourglass網(wǎng)絡(luò)作為主干網(wǎng)絡(luò),這是用于人體姿態(tài)估計(jì)任務(wù)中的網(wǎng)絡(luò)。Hourglass模塊如圖3所示,先對下采樣特征,然后再上采樣恢復(fù),同時(shí)加入多個(gè)短路連接來保證恢復(fù)特征的細(xì)節(jié)。論文采用的hourglass網(wǎng)絡(luò)包含兩個(gè)hourglass模塊,并做了以下改進(jìn):
替換負(fù)責(zé)下采樣的最大池化層為stride=2的卷積
共下采樣五次并逐步增加維度(256, 384, 384, 384, 512)
上采樣使用兩個(gè)residual模塊+最近鄰上采樣
短路連接包含2個(gè)residual模塊
在網(wǎng)絡(luò)的開頭,使用4個(gè)stride=2、channel=128的$7\times 7$卷積模塊以及1個(gè)stride=2、channel=256維度的residual模塊進(jìn)行處理
原版的hourglass網(wǎng)絡(luò)會對每個(gè)hourglass模塊添加一個(gè)損失函數(shù)進(jìn)行有監(jiān)督學(xué)習(xí),而論文發(fā)現(xiàn)這對性能有影響,沒有采用這種方法
對比corner pooling的效果。
對比負(fù)樣本點(diǎn)懲罰衰減的效果。
對比hourglass網(wǎng)絡(luò)與corner檢測搭配的效果
對比熱圖和偏移預(yù)測的效果。
與其它各種類型的檢測網(wǎng)絡(luò)進(jìn)行對比。
以上就是CornerNet中keypoint-based如何通過定位角點(diǎn)進(jìn)行目標(biāo)檢測,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。