google網(wǎng)站建設(shè)騰訊新聞最新消息
背景
首先是借鑒Corner Net 表述了一下基于Anchor方法的不足:
- anchor的大小/比例需要人工來(lái)確認(rèn)
- anchor并沒(méi)有完全和gt的bbox對(duì)齊,不利于分類任務(wù)。
但是CornerNet也有自己的缺點(diǎn)
- CornerNet 只預(yù)測(cè)了top-left和bottom-right 兩個(gè)點(diǎn),并沒(méi)有關(guān)注整體的信息,因此缺少一些全局的信息
- 上述的點(diǎn)導(dǎo)致它對(duì)邊界過(guò)于敏感,經(jīng)常會(huì)預(yù)測(cè)一些錯(cuò)誤的bbox。
為了解決該問(wèn)題,作者提出了Triplet的關(guān)鍵點(diǎn)預(yù)測(cè)。他follow了top-left和bottom-right的預(yù)測(cè),此外增加了中心點(diǎn)的預(yù)測(cè)。
具體來(lái)說(shuō),為了使得中心點(diǎn)的預(yù)測(cè)更加準(zhǔn)確,作者提出了Center Pooling的層用來(lái)在水平和垂直兩個(gè)維度進(jìn)行特征的聚合。使得每個(gè)位置的點(diǎn)都可以盡可能的感知到全局的信息。
此外,作者還提出了cascade corner pooling layer來(lái)取代原有的corner pooling layer。
作者也從指標(biāo)的角度量化了上面提到的CornerNet比較容易出現(xiàn)False Positive的情況,如下圖所示。作者展示了在不同IoU閾值下 False Discovery Rate。注意這里為什么沒(méi)有用mAP,mAP是否有缺點(diǎn)?
- 框的增加,在recall不變的情況下,precision的下降不會(huì)導(dǎo)致mAP的下降。=>因此需要關(guān)注PR曲線的分?jǐn)?shù)
- mAP是分類別計(jì)算的,每個(gè)類別都是按照分?jǐn)?shù)排序來(lái)計(jì)算的,說(shuō)明每個(gè)類別的分?jǐn)?shù)閾值可能會(huì)不同,不能用同一個(gè)閾值在適應(yīng)不同的類別。
方法
CenterNet的網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示
整個(gè)網(wǎng)絡(luò)的推理流程如下所示:
- 選擇top-k個(gè)中心點(diǎn)根據(jù)他們的分?jǐn)?shù)
- 根據(jù)對(duì)應(yīng)的offset將其還原到對(duì)應(yīng)的輸入圖像中
- 根據(jù)tl-br構(gòu)成的bbox,判斷每個(gè)bbox內(nèi)部的中心區(qū)域是否包括上述的中心點(diǎn)。
3.1 N個(gè)tl的點(diǎn)和N個(gè)br 的點(diǎn),組合形成N*N個(gè)bbox
3.2 如果tl和br的embedding相似度小于閾值,則將對(duì)應(yīng)的bbox剔除,否則保留。 - 如果中心點(diǎn)在bbox中,則用三者分?jǐn)?shù)(tl、br和center)的平均來(lái)表示bbox的置信度。
那么這里涉及到一個(gè)問(wèn)題,那就是如何計(jì)算每個(gè)bbox的中心區(qū)域。作者這里認(rèn)為大的bbox應(yīng)該使用小的中心區(qū)域,避免precision過(guò)低。小的bbox應(yīng)該使用大的中心區(qū)域,避免recall過(guò)低。因此這里作者提出了scale-aware的中心區(qū)域計(jì)算方法,詳情如下所示,其中針對(duì)大物體,n選擇5,針對(duì)小物體,n選擇3。
上述介紹了推理的整體流程,那么我們?cè)趶膬?nèi)部逐步解析一下關(guān)鍵的結(jié)構(gòu),我們分別從center pooling、cascade corner pooling和loss來(lái)進(jìn)行介紹。
center pooling
center pooling的示意圖如下圖所示。具體來(lái)說(shuō)就是針對(duì)每個(gè)位置,我們計(jì)算其水平和垂直方向的max response,然后想加得到該位置的表征,我們認(rèn)為這樣的表征是包括了全局信息。簡(jiǎn)化版本的計(jì)算如下所示,其中 f , f 3 ∈ R H × W × C f,f_3 \in R^{H \times W \times C} f,f3?∈RH×W×C
f1 = np.max(f, axis=0)
f2 = np.max(f, axis=1)
f3 = f1[None, :, :] + f2[:, None, :]
cascaded corner pooling
示意圖如下所示
loss
損失函數(shù)的定義如下所示。整體上分為三大部分。
-
L d e t c o 、 L d e t c e L_{det}^{co}、L_{det}^{ce} Ldetco?、Ldetce?表示的corner 和 center兩個(gè)heatmap組成的loss,這里采用的是focal loss。
-
L p u l l c o 、 L p u s h c o L_{pull}^{co}、L_{push}^{co} Lpullco?、Lpushco?是讓屬于同一個(gè)物體的corner embedding盡可能相似,屬于不同物體的embedding盡可能遠(yuǎn)離。
-
L o f f c o 、 L o f f c e L_{off}^{co}、L_{off}^{ce} Loffco?、Loffce? 表示預(yù)測(cè)corner 和 center在原圖上的offset,這里采用的是l1-loss。
-
QA1:GT是如何計(jì)算的?