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

cornerNer論文連結:

https://

arxiv。org/pdf/1808。0124

4。pdf

github:

https://

github。com/umich-vl/Cor

nerNet

CenterNet論文連結:

https://

arxiv。org/abs/1904。0818

9

github:

https://

github。com/Duankaiwen/C

enterNet

CornerNe-Lite論文連結:

https://

arxiv。org/abs/1904。0890

0

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 pooling

Bottom-right Corner pooling

提取關鍵點的特徵,對於每個Corner Pooling模組都會進行目標框的左上角關鍵點和右下角關鍵點的類別分類(

Heatmaps

),並找到每個目標的一對關鍵點(

Embeddings

),以及減少基於座標回算目標目標位置時的偏置(

offsets

)。網路的整體結構圖如下:

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

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

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

Heatmaps模組 透過Heatmaps模組,網路會預測每一個關鍵點所屬於的類別,該過程中使用的損失函式如下:

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

上述公式是針對角點預測(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有較大的重疊面積,如下圖所示所示。

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

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

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

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

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

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

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

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

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

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

2。CenterNet【CVPR092109】

CenterNet網路主要是基於CornerNet網路存在的問題,而提出的基於關鍵點目標檢測的網路。其實現了目前為止在one-stage系類演算法中最高的MAP。CenterNet的作者發現,CornerNet是透過檢測物體的左上角點和右下角點來確定目標,但在此過程中CornetNet使用corner pooling僅僅能夠提取到目標邊緣的特徵,而導致CornetNet會產生很多的誤檢。基於此,CenterNet利用關鍵點

三元組

中心點、左上角關鍵點和右下角關鍵點

三個關鍵點而不是兩個點來確定一個目標,使得網路能夠獲取到目標內部的特徵。而CornerNet在論文中也說道了,約束其網路效能最重要的部分是關鍵點的提取,因此CenterNet提出了

Center Pooling

cascade corner Pooling

用來更好的提取本文提出的三個關鍵點。

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

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

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

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

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

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

Center Pooling

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

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

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

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

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

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

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

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

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

3。CornetNet-Lite

普林斯頓大學在4月19號提出了兩種更高效的基於關鍵點的目標檢測演算法,分別為:

CornetNet-Saccade

CornetNet-Squeeze

,若將兩種策略結合則稱為

CornerNet-Lite

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

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

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

如上圖所示,我們發現

CornetNet-Saccade

CornetNet-Squeeze

確實很優秀。

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

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

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

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

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

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

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

參考文獻:

https://

mp。weixin。qq。com/s/lk26

8kc55Lgz1d_21zg26A

https://

blog。csdn。net/u01438016

5/article/details/83032273

https://

mp。weixin。qq。com/s/xy1W

Wl2rNvGAXnqIJCy-Mg