目標檢測Anchor-free分支:基於關鍵點的目標檢測(最新網絡全面超越YOLOv3)

目標檢測領域最近有個較新的方向:基於關鍵點進行目標物體檢測。該策略的代表算法爲:CornerNet和CenterNet。由於本人工作特性,對網絡的實時性要求比較高,因此多用YoLov3及其變體。而就在今天下午得知,基於CornerNet改進的CornerNet-Squeeze網絡居然在實時性和精度上都超越了YoLov3,我還是蠻激動的,故趁此機會學習下該類檢測算法的原理。

cornerNer論文鏈接:https://arxiv.org/pdf/1808.01244.pdf
github:https://github.com/umich-vl/CornerNet
CenterNet論文鏈接:https://arxiv.org/abs/1904.08189
github:https://github.com/Duankaiwen/CenterNet
CornerNe-Lite論文鏈接: https://arxiv.org/abs/1904.08900
github: https://github.com/princeton-vl/CornerNet-Lite

所謂基於關鍵點進行目標檢測,其實就是使用one-stage網絡將目標邊界框檢測爲一對關鍵點(即邊界框的左上角和右下角)。通過將目標檢測爲成對關鍵點,就可消除現有的one-stage檢測網絡中對一組anchors的需要,這個最近火熱的anchor-free也是不謀而合。接下來,先簡單介紹下CornetNet和CenterNet這兩個基於特徵點的目標檢測網絡。最後對CornerNet-Squeeze做個簡單介紹!

1.CornerNet 【ECCV2018】

CornerNet網絡的整體思路是,首先通過Hourglass Network網絡進行特徵提取,緊接着將網絡得到的特徵輸入到兩個模塊:Top-left Corner poolingBottom-right Corner pooling提取關鍵點的特徵,對於每個Corner Pooling模塊都會進行目標框的左上角關鍵點和右下角關鍵點的類別分類(Heatmaps),並找到每個目標的一對關鍵點(Embeddings),以及減少基於座標回算目標目標位置時的偏置(offsets)。網絡的整體結構圖如下:

很顯然,CornerNet的核心是四個部分:

  • 兩個Corner Pooling
    下圖展示的是Top-left corner pooling的示意圖,爲了使得關鍵點的特徵能夠表徵左上角和右下角關鍵點所包含的目標區域的特徵,作者提出瞭如下所示的corner pooling的策略,比如下圖所示,爲求左上角關鍵點特徵,需要求當前關鍵點同一行中的左邊區域的最大值,和同一列中的下面區域的最大值,並將兩個最大值相加纔是當前位置的左上角關鍵點特徵。

  • Heatmaps模塊
    通過Heatmaps模塊,網絡會預測每一個關鍵點所屬於的類別,該過程中使用的損失函數如下:

上述公式是針對角點預測(headmaps)的損失函數,整體上是改良版的focal loss。幾個參數的含義:pcij表示預測的heatmaps在第c個通道(類別c)的(i,j)位置的值,ycij表示對應位置的ground truth,N表示目標的數量。ycij=1時候的損失函數容易理解,就是focal loss,α參數用來控制難易分類樣本的損失權重;ycij等於其他值時表示(i,j)點不是類別c的目標角點,照理說此時ycij應該是0(大部分算法都是這樣處理的),但是這裏ycij不是0,而是用基於ground truth角點的高斯分佈計算得到,因此距離ground truth比較近的(i,j)點的ycij值接近1,這部分通過β參數控制權重,這是和focal loss的差別。爲什麼對不同的負樣本點用不同權重的損失函數呢?這是因爲靠近ground truth的誤檢角點組成的預測框仍會和ground truth有較大的重疊面積,如下圖所示所示。

圖中,紅色實線框是ground truth;橘色圓圈是根據ground truth的左上角角點、右下角角點和設定的半徑值畫出來的,半徑是根據圓圈內的角點組成的框和ground truth的IOU值大於0.7而設定的,圓圈內的點的數值是以圓心往外呈二維的高斯分佈;白色虛線是一個預測框,可以看出這個預測框的兩個角點和ground truth並不重合,但是該預測框基本框住了目標,因此是有用的預測框,所以要有一定權重的損失返回,這就是爲什麼要對不同負樣本點的損失函數採取不同權重值的原因。

  • Embeddings模塊
    在Headmaps模塊中對關鍵點類別的預測是沒辦法知道哪兩個關鍵點能夠構成一個目標,因此如何找到一個目標的兩個關鍵點就是模塊embedding做的工作。

embedding這部分的訓練是通過兩個損失函數實現的,etk表示屬於k類目標的左上角角點的embedding vector,ebk表示屬於k類目標的右下角關鍵點的embedding vector,ek表示etk和ebk的均值。公式4用來縮小屬於同一個目標(k類目標)的兩個關鍵點的embedding vector(etk和ebk)距離。公式5用來擴大不屬於同一個目標的兩個角點的embedding vector距離。

  • Offsets模塊
    該模塊主要用於彌補由於網絡降採樣得到的特徵圖,在反算關鍵點原始位置時的精度丟失。如下公式所示,由於向下取整,所以會導致精度丟失,而作者利用L1損失來減少這種精度損失。

最終,如下圖所示,上半支路的網絡結果如下所示,網絡最終是由兩條支路組成的。

2.CenterNet【CVPR092109】

CenterNet網絡主要是基於CornerNet網絡存在的問題,而提出的基於關鍵點目標檢測的網絡。其實現了目前爲止在one-stage系類算法中最高的MAP。CenterNet的作者發現,CornerNet是通過檢測物體的左上角點和右下角點來確定目標,但在此過程中CornetNet使用corner pooling僅僅能夠提取到目標邊緣的特徵,而導致CornetNet會產生很多的誤檢。基於此,CenterNet利用關鍵點三元組中心點、左上角關鍵點和右下角關鍵點三個關鍵點而不是兩個點來確定一個目標,使得網絡能夠獲取到目標內部的特徵。而CornerNet在論文中也說道了,約束其網絡性能最重要的部分是關鍵點的提取,因此CenterNet提出了Center Poolingcascade corner Pooling用來更好的提取本文提出的三個關鍵點。

  • 三元組預測
    如下圖所示,網絡通過 cascade corner pooling得到左上角,右下角的關鍵點類別。並通過center pooling得到中心點的關鍵點類別。隨後通過 offsets 將三個關鍵點位置儘可能精確的映射到輸入圖片的對應位置,最後通過 embedings 判斷三個點是否屬於同一個目標。

    在預測中心點特徵時,對每個預測框定義一箇中心區域,通過判斷每個目標框的中心區域是否含有中心點,若有則保留,並且此時預測框的 confidence 爲中心點,左上角關鍵點和右下角關鍵點的confidence的平均,若無則去除。而很顯然,對於每個預測框的中心區域,我們需要其和預測框的大小進行適應,因爲中心區面積過小會使得小尺度的錯誤預測框無法被去除,而中心區過大會導致大尺度的錯誤預測框無法被去除。因此作者提出如下策略:

    如上圖所示,當預測框的尺寸較大時,我們得到的中心區域面積也會變小,而與之對應的,當預測框的尺寸較小時,中心區域的面積也會變大。

  • Center Pooling

作者基於Corner Pooling的系列思想,提出了Center Pooling的思想,使得網絡提取到的中心點特徵能夠更好的表徵目標物體。

一個物體的中心並不一定含有很強的,易於區分於其他類別的語義信息。例如,一個人的頭部含有很強的,易於區分於其他類別的語義信息,但是其中心往往位於人的中部。我們提出了center pooling 來豐富中心點特徵。上圖爲該方法原理,center pooling提取中心點水平方向和垂直方向的最大值並相加,以此給中心點提供所處位置以外的信息。這一操作使中心點有機會獲得更易於區分於其他類別的語義信息。Center pooling 可通過不同方向上的 corner pooling 的組合實現。一個水平方向上的取最大值操作可由 left pooling 和 right pooling通過串聯實現,同理,一個垂直方向上的取最大值操作可由 top pooling 和 bottom pooling通過串聯實現,如圖6所示。

  • cascade corner Pooling
    作者基於Corner Pooling的系列思想,提出了cascade corner Pooling的思想,使得網絡提取到的中心點特徵能夠更好的表徵目標物體。

一般情況下角點位於物體外部,所處位置並不含有關聯物體的語義信息,這爲角點的檢測帶來了困難。上圖(b) 爲傳統做法,稱爲 corner pooling。它提取物體邊界最大值並相加,該方法只能提供關聯物體邊緣語義信息,對於更加豐富的物體內部語義信息則很難提取到。上圖©爲cascade corner pooling 原理,它首先提取物體邊界最大值,然後在邊界最大值處繼續向內部(圖中沿虛線方向)提取提最大值,並與邊界最大值相加,以此給角點特徵提供更加豐富的關聯物體語義信息。Cascade corner pooling 也可通過不同方向上的 corner pooling 的組合實現,如圖8 所示,圖8展示了cascade left corner pooling 原理。

最終,CenterNet在CornerNet的基礎上增加了中心點的預測,以及修改了關鍵點特徵的提取方式,大大減小了網絡的誤檢,並且實現了one-stage系列算法中的最好效果。

3.CornetNet-Lite

普林斯頓大學在4月19號提出了兩種更高效的基於關鍵點的目標檢測算法,分別爲:CornetNet-SaccadeCornetNet-Squeeze,若將兩種策略結合則稱爲CornerNet-Lite

如上圖所示,CornerNet-Squeeze專注於速度,但其在性能和速度上都超越了YOLOv3,而CornerNet-Saccade專注於精度。


如上圖所示,我們發現CornetNet-SaccadeCornetNet-Squeeze確實很優秀。

以下是Cver對這兩個網絡的介紹,個人感覺寫的很好,我就不造輪子了:


最終我最感興趣的網絡CornerNet-Squeeze和YOLOv3進行對比,達到了如下圖所示的效果。

然而,就在我學習並總結這篇文章的過程中,我發現CornerNet-Squeeze是基於CornerNet改進的,但正如上文中介紹CenterNet的時候提到過的CornerNet所具有的那些弊端,我總覺得CornerNet-Squeeze在誤檢的部分不一定會很優秀,所以接下來就是看源碼階段了,希望CornerNet-Squeeze能夠不負我望哈~

參考文獻:
https://mp.weixin.qq.com/s/lk268kc55Lgz1d_21zg26A
https://blog.csdn.net/u014380165/article/details/83032273
https://mp.weixin.qq.com/s/xy1WWl2rNvGAXnqIJCy-Mg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章