CornerNet: 將目標(biāo)檢測(cè)問(wèn)題視作關(guān)鍵點(diǎn)檢測(cè)與配對(duì)
摘要:CornerNet于2019年3月份提出,CW近期回顧了下這個(gè)在當(dāng)時(shí)引起不少關(guān)注的目標(biāo)檢測(cè)模型,它的亮點(diǎn)在于提出了一套新的方法論——將目標(biāo)檢測(cè)轉(zhuǎn)化為對(duì)物體成對(duì)關(guān)鍵點(diǎn)(角點(diǎn))的檢測(cè)。通過(guò)將目標(biāo)物體視作成對(duì)的關(guān)鍵點(diǎn),其不需要在圖像上鋪設(shè)先驗(yàn)錨框(anchor),可謂實(shí)實(shí)在在的anchor-free,這也減少了整體框架中人工設(shè)計(jì)(handcraft)的成分。

前言
CornerNet于2019年3月份提出,CW近期回顧了下這個(gè)在當(dāng)時(shí)引起不少關(guān)注的目標(biāo)檢測(cè)模型,它的亮點(diǎn)在于提出了一套新的方法論——將目標(biāo)檢測(cè)轉(zhuǎn)化為對(duì)物體成對(duì)關(guān)鍵點(diǎn)(角點(diǎn))的檢測(cè)。通過(guò)將目標(biāo)物體視作成對(duì)的關(guān)鍵點(diǎn),其不需要在圖像上鋪設(shè)先驗(yàn)錨框(anchor),可謂實(shí)實(shí)在在的anchor-free,這也減少了整體框架中人工設(shè)計(jì)(handcraft)的成分。
為了讓自己的梳理工作更好地反饋到自身以實(shí)現(xiàn)內(nèi)化,CW決定在此記錄下自己對(duì)CornerNet的理解,同時(shí)也和大家進(jìn)行分享,如果有幸能夠幫助到你們,那我就更是happy了!
本文內(nèi)容有些長(zhǎng),但是如果你打算認(rèn)真回顧和思考有關(guān)CornerNet技術(shù)原理的細(xì)節(jié),不妨耐心地看下去。CW也將本文的目錄列出來(lái)了,大家也可根據(jù)自身需求節(jié)選部分內(nèi)容來(lái)看。
附:paper:?https://arxiv.org/abs/1808.01244?&?code:https://github.com/umich-vl/CornerNet
目錄
研究動(dòng)機(jī)及背景
概述
整體框架
角點(diǎn)檢測(cè)
角點(diǎn)配對(duì)
Corner Pooling
訓(xùn)練
測(cè)試
實(shí)驗(yàn)分析
思考
研究動(dòng)機(jī)及背景
作者發(fā)現(xiàn),目標(biāo)檢測(cè)中anchor-based方法存在以下問(wèn)題:
為了給gt提供正樣本,需要密集鋪設(shè)多尺度的anchors,但這同時(shí)會(huì)造成正負(fù)樣本不均衡;
anchor的存在就勢(shì)必引入眾多handcraft成分,如anchor數(shù)量、尺度、長(zhǎng)寬比等,模型的訓(xùn)練效果極大地受到這些因素的影響,另外還會(huì)影響模型推斷速度
那么如何改進(jìn)呢..不知怎地,作者靈光一閃,想到在解決人體姿態(tài)估計(jì)問(wèn)題的方法中,有一類bottom-up框架,其方法是先對(duì)人體關(guān)鍵點(diǎn)部位進(jìn)行檢測(cè),再將檢測(cè)到的關(guān)鍵點(diǎn)部位拼接成人的姿態(tài)。
于是,作者腦回路:“咦,要不我也這么干好了!我也來(lái)檢測(cè)關(guān)鍵點(diǎn)。目標(biāo)檢測(cè)最終不是要定位物體對(duì)應(yīng)的預(yù)測(cè)框嗎,那我就檢測(cè)出框的左上和右下兩個(gè)角點(diǎn),這樣我也能定位出整個(gè)框了,萬(wàn)歲!”。于是,CornerNet就這樣機(jī)緣巧合地“出生”了。
概述
概括地說(shuō),CornerNet使用單個(gè)卷積網(wǎng)絡(luò)來(lái)檢測(cè)物體的左上角和右下角:
通過(guò)預(yù)測(cè)得到的熱圖(heatmaps)來(lái)判別各位置是否屬于角點(diǎn);
基于預(yù)測(cè)的角點(diǎn)嵌入向量(embeddings)來(lái)對(duì)角點(diǎn)進(jìn)行配對(duì)(屬于同一物體的一對(duì)角點(diǎn)的embeddings之間的距離會(huì)比較小,屬于不同物體的則比較大),從而判斷哪些左上角點(diǎn)和右下角點(diǎn)是屬于同一物體的;
使用預(yù)測(cè)的偏移量(offsets)對(duì)角點(diǎn)位置進(jìn)行調(diào)整
另外,為了更好地檢測(cè)角點(diǎn),提出了新型的池化層——Corner Pooling。
整體框架

首先將輸入圖像通過(guò)預(yù)處理模塊:1個(gè)7×7的卷積模塊(conv+bn+relu)+1個(gè)殘差模塊,分別下采樣2倍,這會(huì)將輸入圖像尺寸縮小為原來(lái)的1/4(論文中使用的輸入圖像大小是511×511,于是下采樣后得到128×128大小的輸出特征圖)。
然后將預(yù)處理模塊輸出的特征圖輸入到backbone提取特征,backbone采用的是沙漏網(wǎng)絡(luò)(Hourglass Network)結(jié)構(gòu),這里串聯(lián)(堆疊)了兩個(gè)相同結(jié)構(gòu)的Hourglass Network,其中每個(gè)在經(jīng)過(guò)下采樣操作后會(huì)上采樣恢復(fù)到之前的大小,因此backbone輸出特征圖的大小與其輸入一致。
Hourglass Network后連接著兩個(gè)預(yù)測(cè)模塊,分別用于預(yù)測(cè)左上角和右下角。每個(gè)模塊包含其獨(dú)立的角池化(Corner Pooling)模塊。
接著,將Hourglass Network的輸出特征輸入到Corner Pooling模塊得到池化特征。
最后,將池化特征分別輸入到3個(gè)不同的卷積模塊來(lái)預(yù)測(cè)heatmaps、embeddings以及offsets。
角點(diǎn)檢測(cè)
檢測(cè)包括分類+定位,這里主要是分類,即判斷特征圖上的各個(gè)(特征點(diǎn))位置是否屬于角點(diǎn),不需要顯式回歸角點(diǎn)的位置,角點(diǎn)的位置基本由特征點(diǎn)的位置決定,然后通過(guò)預(yù)測(cè)的offsets進(jìn)行調(diào)整。
Heatmaps
Penalty Reduction
分類基于兩組heatmaps,分別用于左上角和右下角的判斷。每組heatmap的shape是,
是物體類別數(shù)(不含背景),
是特征圖的尺寸。這樣,每個(gè)通道就對(duì)應(yīng)特定類別物體的角點(diǎn)判斷。理想狀態(tài)下,它是一個(gè)二值mask,值為1就代表該位置屬于角點(diǎn),而通常模型預(yù)測(cè)出來(lái)每個(gè)位置上的值是0~1,代表該位置屬于角點(diǎn)的置信度。
由此可知,對(duì)于每個(gè)角點(diǎn),只有1個(gè)正樣本位置。那么訓(xùn)練時(shí),1個(gè)gt在heatmap上的標(biāo)簽就只有在其對(duì)應(yīng)的位置上值為1,其余均為0。不知你有沒(méi)feel到,這樣的話,很容易由于正樣本過(guò)少而導(dǎo)致低召回率。在實(shí)際情況中,即使我們選擇一對(duì)與gt角點(diǎn)有一定程度偏離的角點(diǎn)來(lái)形成預(yù)測(cè)框,那么它也有可能與gt box有較高的重疊度(IoU),這樣的預(yù)測(cè)框作為檢測(cè)結(jié)果也是不錯(cuò)的選擇(如下圖,紅框是gt bboxes,綠框是距離gt角點(diǎn)較近的角點(diǎn)對(duì)形成的bboxes)。

于是,對(duì)于那些距離gt角點(diǎn)位置較近的負(fù)樣本位置,我們可以“在心里暗暗地將它們也作為候選的正樣本”,轉(zhuǎn)化到數(shù)學(xué)形式上,就是在計(jì)算loss時(shí)減低對(duì)它們的懲罰度,懲罰度與它們距離gt角點(diǎn)的遠(yuǎn)近相關(guān)(gt角點(diǎn) to 負(fù)樣本:你離我越近,我對(duì)你越溫柔~)。
具體來(lái)說(shuō),距離gt角點(diǎn)在半徑為的圓內(nèi)的那些負(fù)樣本,我們重新計(jì)算其標(biāo)簽值為0~1之間的值(而非原來(lái)的0),離gt角點(diǎn)越近越接近1,否則越接近0:

以上代表負(fù)樣本位置與gt角點(diǎn)位置的橫、縱坐標(biāo)之差,
是特征點(diǎn)的位置,
起到控制懲罰度嚴(yán)厲程度(變化快慢)的作用,值越大,懲罰越輕(可聯(lián)想到高斯曲線越扁平)。你看看,這就是CornerNet對(duì)這批“候選正樣本”的愛(ài)~
OK,已經(jīng)感受到愛(ài)了,那么怎么用到loss計(jì)算上呢?作者設(shè)計(jì)了一種focal loss的變體:

Radius Computation
代表模型預(yù)測(cè)的heatmap中位置
屬于類別
物體角點(diǎn)的置信度,
。由上式可知,紅色框部分就可以達(dá)到降低距離gt角點(diǎn)較近的那些負(fù)樣本懲罰度的效果。而對(duì)于那些遠(yuǎn)離gt角點(diǎn)的負(fù)樣本,它們對(duì)應(yīng)的標(biāo)簽值依然是0,因此不受影響。
CornerNet告訴我們,許多事情不是非正即負(fù)、非0即1,世界本就是混沌。做人也一樣,不能太死板,對(duì)待他人要理解與包容,適當(dāng)?shù)膶捜菽軌蛟谏钪蝎@取小確幸(說(shuō)不定還有大確幸呢)。
以上只談到對(duì)于距離gt角點(diǎn)在半徑為的圓內(nèi)的那些負(fù)樣本“給予適當(dāng)?shù)膶捜荨?,但并未說(shuō)明半徑如何計(jì)算,不急,因?yàn)橐夥匠淌?,可以先喝杯咖啡,休息下?/p>
在作者制定的規(guī)則下,半徑是基于這樣一個(gè)條件計(jì)算出來(lái)的:在圓內(nèi)的角點(diǎn)對(duì)形成的bbox(以下記為pred bbox)與gt box的IoU不小于(作者在實(shí)驗(yàn)中設(shè)置為0.3)。根據(jù)這個(gè)條件,可以分3種情況來(lái)考慮:
1. pred bbox包圍著gt box,同時(shí)兩邊與圓相切

這時(shí),
移項(xiàng),整理得二元一次方程式:

還記得根的判別式因子嗎?其各項(xiàng)依次為:

易知判別式(因?yàn)?img type="latex" class="latex" src="http://api.bilibili.com/x/web-frontend/mathjax/tex?formula=IoU%3C1" alt="IoU%3C1">所以
),于是有解:

但是,我們需要的半徑應(yīng)該是正根,于是最終:

2.?gt box包圍著pred bbox,同時(shí)兩邊與圓相切

這時(shí),
移項(xiàng)整理得:

此時(shí),根的判別式因子:

判別式:

于是,方程有解,并且此時(shí)兩個(gè)根都是正根。為了兼容其它情況,我們需要取小的根,即?
3.?pred bbox與gt box部分重疊,兩者分別有兩邊與圓相切

此時(shí),
移項(xiàng)整理得:

根的判別式因子:

易證判別式(請(qǐng)讓CW偷下懶..),最終取較小的根:
以上3種情況都是根據(jù)求根公式計(jì)算出對(duì)應(yīng)的半徑值,在實(shí)現(xiàn)時(shí),將
代入計(jì)算。為了兼容各種情況,最終r的取值需要是三個(gè)解中的最小值:
location offsets
offsets用于調(diào)整預(yù)測(cè)的角點(diǎn)位置,使得定位更精確。注意,其和anchor-based框架中回歸的偏移量不同,在這里,offsets的實(shí)質(zhì)是量化誤差。
由于在卷積神經(jīng)網(wǎng)絡(luò)中存在著下采樣層,于是將特征圖中的位置重新映射到輸入圖像中的空間時(shí),勢(shì)必會(huì)存在量化誤差,這極大地影響了小目標(biāo)邊界框的定位。
為了緩解這一現(xiàn)象,在訓(xùn)練時(shí),計(jì)算gt角點(diǎn)位置映射到特征圖位置時(shí)的量化誤差,將其作為offsets的訓(xùn)練標(biāo)簽:

其中是下采樣率,
是角點(diǎn)
在原圖的位置。
訓(xùn)練模型讓其學(xué)會(huì)預(yù)測(cè)這個(gè)誤差值,以便在最終檢測(cè)時(shí)重新調(diào)整預(yù)測(cè)的角點(diǎn)位置。使用smooth-l1 loss對(duì)這部分進(jìn)行學(xué)習(xí):

訓(xùn)練完畢后,在測(cè)試時(shí),就可以這樣調(diào)整預(yù)測(cè)的角點(diǎn)位置(實(shí)際實(shí)現(xiàn)時(shí)并非這樣,這里僅僅打個(gè)簡(jiǎn)單的比方):
假設(shè)在heatmap上位置被預(yù)測(cè)為角點(diǎn),其對(duì)應(yīng)預(yù)測(cè)的offsets為

,那么其映射到原圖上的位置就是:

其中[]表示向下取整。
角點(diǎn)配對(duì)
在特征圖的每個(gè)位置上,模型還會(huì)預(yù)測(cè)角點(diǎn)對(duì)應(yīng)的嵌入向量(embeddings),用于將左上角點(diǎn)和右下角點(diǎn)進(jìn)行配對(duì)。能否匹配成一對(duì)主要是由embeddings之間的距離來(lái)決定的(當(dāng)然,其實(shí)還有其它條件,如預(yù)測(cè)的角點(diǎn)必須屬于相同類別、右下角點(diǎn)的坐標(biāo)必須大于左上角點(diǎn)的坐標(biāo))。理想狀態(tài)下,同一物體的一對(duì)角點(diǎn)對(duì)應(yīng)的embeddings之間的距離較小,而不同物體的則較大。那么,如何實(shí)現(xiàn)這一目標(biāo)呢?
在訓(xùn)練時(shí),CornerNet使用'pull loss'來(lái)拉近屬于同一物體的角點(diǎn)的embeddings,同時(shí)使用'push loss'來(lái)遠(yuǎn)離屬于不同物體的角點(diǎn)的embeddings:

其中分別為目標(biāo)物體
的左上角和右下角對(duì)應(yīng)的embeddings,
則是兩者的均值,delta=1,代表不同物體的角點(diǎn)對(duì)應(yīng)的embeddings之間的margin下限(
to
:我們不熟,別靠太近,保持1米以外的文明距離)。
是目標(biāo)物體的數(shù)量,也就是說(shuō),僅對(duì)gt角點(diǎn)位置對(duì)應(yīng)的預(yù)測(cè)embeddings計(jì)算這些損失。
Corner Pooling
由于實(shí)際生活中許多物體并沒(méi)有角狀,比如圓形的餐盤、條形的繩子等,因此并沒(méi)有直觀明顯的視覺(jué)特征來(lái)表征角點(diǎn)。這也就是說(shuō),通過(guò)現(xiàn)有的視覺(jué)濾波器(卷積層、池化層等)去捕捉圖像的局部特征來(lái)檢測(cè)角點(diǎn),效果并不會(huì)太好。比如以下這些情況,物體的左上角和右下角點(diǎn)處并不存在物體本身的部分,即這些角點(diǎn)的位置本身并不存在物體的特征。

于是,為了在角點(diǎn)處獲取到物體特征,我們需要將物體的特征匯集到角點(diǎn)處。比如對(duì)于左上角,可以將其水平向右以及豎直向下的特征都“收集”過(guò)來(lái);而對(duì)于右下角點(diǎn),則將其水平向左以及豎直向上的特征“收集”過(guò)來(lái)。
基于這種思想,作者提出了Corner Pooling,分別對(duì)用于收集左上角點(diǎn)特征和右下角點(diǎn)特征。對(duì)于左上角點(diǎn),其處理如下:

其中分別表示池化層的輸入特征圖,它們的目標(biāo)是分別將豎直方向和水平方向的特征不斷匯集到上方和左方。這樣,在
中的左上角點(diǎn)就分別擁有了豎直方向和水平方向的極大值特征,
分別代表
中位置
的特征值。

最終,將進(jìn)行element-wise add得到輸出特征圖,于是,在其中的左上角點(diǎn)處就擁有了豎直加水平方向的極大值特征。

對(duì)于右下角點(diǎn)的處理也是同樣道理,經(jīng)Corner Pooling處理后,會(huì)在輸出特征圖的右下角點(diǎn)處匯聚到豎直和水平方向的極大值特征。
訓(xùn)練
網(wǎng)絡(luò)模型在基于Pytorch的默認(rèn)方式下進(jìn)行隨機(jī)初始化,并且沒(méi)有在額外的數(shù)據(jù)集上預(yù)訓(xùn)練。
輸入圖像的分辨率設(shè)置為511×511,4倍下采樣后輸出特征的分辨率為128×128。為了減少過(guò)擬合,采用了不少數(shù)據(jù)增強(qiáng)技術(shù),包括:隨機(jī)水平翻轉(zhuǎn)、隨機(jī)縮放、隨機(jī)裁剪以及隨機(jī)色彩抖動(dòng)(調(diào)整圖像的亮度、飽和度和對(duì)比度)。 最后,還將PCA應(yīng)用于輸入圖像。
batch size設(shè)置為49,使用10個(gè)(Titan X PASCAL)GPUs來(lái)訓(xùn)練,其中每個(gè)batch在master GPU上分配4張圖,其余GPUs各分配5張。
訓(xùn)練損失最終的形式為:

其中
使用Adam優(yōu)化器進(jìn)行優(yōu)化,初始學(xué)習(xí)率設(shè)置為。初始先訓(xùn)練250k次迭代,在實(shí)驗(yàn)中與其它檢測(cè)器進(jìn)行比較時(shí),額外再訓(xùn)練250k次迭代,并且在最后的50k次迭代中將學(xué)習(xí)率減低至
。
Intermediate Supervision
作者在訓(xùn)練時(shí)還添加了中間監(jiān)督。前文提到過(guò),backbone是兩個(gè)相同結(jié)構(gòu)的Hourglass Networks串聯(lián)而成,中間監(jiān)督的意思就是對(duì)第一個(gè)Hourglass Network的輸出預(yù)測(cè)也實(shí)行監(jiān)督。具體來(lái)說(shuō),就是將第一個(gè)Hourglass Network的輸出特征圖也輸入到后面的預(yù)測(cè)模塊:先經(jīng)過(guò)corner pooling池化,然后分別輸入到不同的卷積模塊分別預(yù)測(cè)heatmaps、embeddings和offsets,對(duì)這部分的預(yù)測(cè)結(jié)果也計(jì)算損失進(jìn)行訓(xùn)練。
那么可能有帥哥/靚女會(huì)疑問(wèn):那第二個(gè)Hourglass Network的輸入是什么呢?
OK,CW也大方地補(bǔ)充說(shuō)明下:其實(shí)在兩個(gè)Hourglass Networks之間還有些中間處理模塊,它們的實(shí)質(zhì)都是conv+bn+relu和殘差模塊,將第一個(gè)Hourglass Network的輸入、輸出特征圖經(jīng)過(guò)這些中間模塊處理后就是第二個(gè)Hourglass Network的輸入。
測(cè)試

模型整體框架的pipeline就不細(xì)說(shuō)了,前文已經(jīng)詳細(xì)解析過(guò),概括來(lái)說(shuō)就是:Preprocess (7x7Conv+Bn+Relu & Residual Module)->Hourglass Networks->Corner Pooling->Prediction Head(output Heatmaps, Embeddings & Offsets)。
這里主要說(shuō)明下測(cè)試時(shí)對(duì)圖像的處理和對(duì)模型輸出的后處理。
測(cè)試圖像處理
測(cè)試時(shí)對(duì)圖像的處理方式還蠻有“個(gè)性”,作者在paper中一筆帶過(guò):
Instead of resizing an image to a fixed size, we?maintain the original resolution?of the image and?pad it with zeros?before feeding it to CornerNet.
意思是,不改變圖像分辨率,但使用0填充。但是,具體怎么做的,填充多少部分卻沒(méi)有詳細(xì)說(shuō)明(能不能坦誠(chéng)相對(duì)..)。CW對(duì)這實(shí)在不能忍,看了源碼后,發(fā)現(xiàn)是這樣做的:
代碼中 ' | 127 '?這種方式會(huì)將new height和new width的低7位全部置1,猜測(cè)作者這樣做的意思應(yīng)該是想使得輸入圖像的尺寸至少為128x128吧(聯(lián)想到CornerNet訓(xùn)練時(shí)輸入分辨率是511x511,輸出特征圖分辨率正好是128x128)。
最后,將原圖裁剪下來(lái)放置在填充的全0圖像中,保持中心對(duì)齊,同時(shí)會(huì)記錄原圖在這個(gè)填充圖像中的區(qū)域邊界:,以便后續(xù)將檢測(cè)結(jié)果還原到原圖坐標(biāo)空間。也就是說(shuō),在網(wǎng)絡(luò)輸入圖像中,區(qū)域邊界以外的部分都是0。
另外,對(duì)于每張圖片,還會(huì)將其水平鏡像圖片也一并輸入到網(wǎng)絡(luò)中(組成一個(gè)batch)進(jìn)行測(cè)試,最終的檢測(cè)結(jié)果是綜合原圖和鏡像圖片的結(jié)果。
后處理
OK,再來(lái)說(shuō)說(shuō)后處理過(guò)程,看是如何得到最終檢測(cè)結(jié)果的。
1. 首先,對(duì)heatmaps使用kernel大小為3×3的最大池化層(pad=1),輸出分辨率維持不變。將池化后的heatmaps與原h(huán)eatmaps作比較,于是可以知道,值改變了的位置就是非極大值位置,將這些位置的值(即置信度)置0,那么這些位置在后續(xù)就不可能作為可能的角點(diǎn)位置了,這樣起到了抑制非極大值的作用(paper中稱為NMS,但其實(shí)和目標(biāo)檢測(cè)常用的NMS有所區(qū)別,這里特別說(shuō)明下);
2.然后,從heatmaps中根據(jù)置信度選擇top100個(gè)左上角和右下角位置(在所有分類下進(jìn)行,不區(qū)分類別),并且根據(jù)對(duì)應(yīng)位置預(yù)測(cè)的offsets來(lái)調(diào)整角點(diǎn)位置;
3.接著,計(jì)算左上角和右下角(每個(gè)左上角都和其余99個(gè)右下角)位置對(duì)應(yīng)預(yù)測(cè)的embeddings之間的距離,距離大于0.5的、屬于不同類別的、坐標(biāo)關(guān)系不滿足(右下角坐標(biāo)需大于左上角)的角點(diǎn)對(duì)就不能匹配成一對(duì);
4.緊接著,角點(diǎn)已經(jīng)完成配對(duì),再次根據(jù)每對(duì)角點(diǎn)的平均置信度(得分)選出top100對(duì),同時(shí)它們的平均得分作為各目標(biāo)的檢測(cè)分?jǐn)?shù);
5.最后,結(jié)合原圖和鏡像圖的以上結(jié)果,在各類別下對(duì)角點(diǎn)對(duì)形成的bbox實(shí)施soft-nms(也就是說(shuō),soft-nms是對(duì)原圖和鏡像圖的預(yù)測(cè)bbox一并做的,但是分類別進(jìn)行),如果之后每張圖片保留下來(lái)的bbox大于100個(gè),那么去掉多余的,僅保留得分top100的檢測(cè)結(jié)果
實(shí)驗(yàn)分析
性能瓶頸
CornerNet同時(shí)輸出熱圖、嵌入和偏移,所有這些結(jié)果都會(huì)影響檢測(cè)性能。 比如:熱圖中漏檢了任何一個(gè)角點(diǎn)就會(huì)丟失一個(gè)目標(biāo)、不正確的嵌入將導(dǎo)致許多錯(cuò)誤的邊界框、預(yù)測(cè)的偏移不正確則嚴(yán)重影響邊界框的定位。
為了理解每個(gè)部件對(duì)最終的誤差有多大程度的影響,作者通過(guò)將預(yù)測(cè)的熱圖和偏移替換為gt,并在驗(yàn)證集上評(píng)估性能,以此來(lái)進(jìn)行誤差分析:
由實(shí)驗(yàn)結(jié)果可知,單獨(dú)使用gt熱圖就可以將AP從38.5%提高到74.0%,這表明CornerNet的主要瓶頸在于角點(diǎn)的識(shí)別。

對(duì)負(fù)樣本位置的懲罰度降低
CornerNet在訓(xùn)練過(guò)程中減少了在gt角點(diǎn)位置一定半徑的圓內(nèi)的負(fù)樣本位置的懲罰。為了理解這對(duì)檢測(cè)性能的影響,作者在實(shí)驗(yàn)中額外訓(xùn)練了一個(gè)沒(méi)有降低懲罰度的網(wǎng)絡(luò)和另一個(gè)有懲罰度降低但半徑值是固定的網(wǎng)絡(luò),然后在驗(yàn)證集上將它們與CornerNet進(jìn)行比較:

實(shí)驗(yàn)結(jié)果顯示,即使使用固定的半徑值,只要有懲罰度降低就可以將基線的AP提升2.7%,而使用基于物體大小計(jì)算出來(lái)的半徑則可以進(jìn)一步將AP提高2.9%。此外,我們看到減少懲罰度特別有利于大中型目標(biāo)。
思考
最后,CW談?wù)勚档盟伎嫉膸讉€(gè)點(diǎn):
1.為何減少對(duì)部分負(fù)樣本的懲罰有利于大中型目標(biāo)的檢測(cè),卻對(duì)小目標(biāo)的不友好呢?
可以feel到,大中型目標(biāo)的尺度相對(duì)較大,那么即使角點(diǎn)和gt有些許偏移,也是由較高的可能性生成與gt box充分重疊的bbox的。因此,降低懲罰度的背后實(shí)際是提供了更多潛在的正樣本,于是提高了召回率。
相反,小目標(biāo)尺度較小,對(duì)角點(diǎn)位置檢測(cè)的要求也因此較為苛刻,對(duì)于大中型目標(biāo)來(lái)說(shuō)降低懲罰度提供了更多潛在的正樣本,但對(duì)小目標(biāo)來(lái)說(shuō)可能它們就是實(shí)實(shí)在在的負(fù)樣本了。另外,通過(guò)實(shí)驗(yàn)結(jié)果可知,降低懲罰度對(duì)于小目標(biāo)來(lái)說(shuō)其AP比基線也沒(méi)有下降太多,可以(寬容地)認(rèn)為沒(méi)有太大影響。
2.后處理時(shí)使用max pooling進(jìn)行非極大值抑制是否不妥?
想象下,如果兩個(gè)物體的角點(diǎn)靠得非常近,那么其中一個(gè)物體的檢測(cè)就很有可能被“誤殺”掉,可憐不..
不知道為何不基于一個(gè)置信度閥值去卡掉不好的檢測(cè)結(jié)果,作者也沒(méi)有相關(guān)的實(shí)驗(yàn)說(shuō)明。
3.測(cè)試時(shí)為何要連鏡像圖也一并輸入進(jìn)行檢測(cè)?
關(guān)于這點(diǎn),作者也沒(méi)有給出理由,也沒(méi)有給出實(shí)驗(yàn)結(jié)果對(duì)比如果單獨(dú)使用原圖檢測(cè)效果如何。CW猜測(cè),使用鏡像圖,可能是為了更充分地檢測(cè)角點(diǎn):
在水平鏡像圖中,右上角和左下角會(huì)分別變成左上角和右下角。于是,使用鏡像圖的話,就可以對(duì)原圖中相反方向的角點(diǎn)對(duì)進(jìn)行檢測(cè),從而彌補(bǔ)在原圖中檢測(cè)角點(diǎn)對(duì)不夠充分的問(wèn)題(由前面的實(shí)驗(yàn)分析可知,CornerNet的主要瓶頸就在于角點(diǎn)的識(shí)別)。
4.為何不適用多尺度特征來(lái)進(jìn)行預(yù)測(cè)?
作者在paper中強(qiáng)調(diào)過(guò),僅使用最后一層特征來(lái)進(jìn)行預(yù)測(cè):
Unlike many other state-of-the-art detectors, we only use the features from the last layer of the whole network to make predictions.
怎么好像有點(diǎn)驕傲味道?
對(duì)于這點(diǎn),在paper中其實(shí)有“半虛半實(shí)”地說(shuō)到過(guò)。作者說(shuō),特征圖相比于輸入圖像只下采樣了4倍(因此對(duì)于小目標(biāo)影響應(yīng)該不會(huì)太嚴(yán)重),而backbone使用的是Hourglass Networks:在一系列下采樣后又上采樣至相同的分辨率,同時(shí)其中還添加了skip connection,因此最終的輸出特征能夠同時(shí)擁有淺層的全局信息(利于定位)與高層的局部信息(利于識(shí)別)。
另外,作者也通過(guò)實(shí)驗(yàn)將backbone替換成ResNet with FPN,結(jié)果顯示backbone還是使用Hourglass Networks比較好。但是!在實(shí)驗(yàn)中,作者僅使用FPN的最后一層進(jìn)行預(yù)測(cè),要是使用FPN多層的特征進(jìn)行預(yù)測(cè)的話,性能誰(shuí)搞誰(shuí)低還真說(shuō)不準(zhǔn)..
5.為何基于角點(diǎn)能夠比基于錨框的檢測(cè)效果好?
作者在paper中展示了CornerNet與其它anchor-based的檢測(cè)器的性能比較,結(jié)果顯示CornerNet能夠取得更優(yōu)的性能。對(duì)于這個(gè)情況,作者認(rèn)為:
a). anchor boxes的中心點(diǎn)需要依賴于四條邊,而角點(diǎn)卻只依賴于兩條邊,因此角點(diǎn)更易定位(CW覺(jué)得應(yīng)該叫可確定性更加高比較合適,是否真的更易定位難說(shuō)..)。同時(shí)加上使用了corner pooling(這個(gè)專門為角點(diǎn)檢測(cè)而服務(wù)的大殺器),于是效果會(huì)比anchor-based更佳;
b). 本質(zhì)上采用了更高效的檢測(cè)機(jī)制:僅使用個(gè)corners就能替代了
個(gè)可能的anchor boxes
對(duì)于以上b,解釋下:
假設(shè)大小的圖像,角點(diǎn)由于僅用位置信息就可代表其可能性,因此有
種;而anchor box的可能性除了與中心點(diǎn)位置有關(guān),還與其長(zhǎng)、寬相關(guān)。中心點(diǎn)位置可能性有
種,而一個(gè)anchor box在固定中心點(diǎn)又有
種長(zhǎng)寬的可能,于是anchor boxes的可能性就是
了。