這篇文章主要介紹了兩個部分內容,一個是Anchor-based方法的缺陷,另外就是Anchor-free中基於Keypoint的方法的介紹
1、Anchor-based的shortcoming
2、Anchor-free方法以及具體思想
RepPoint
&Anchor-based的shortcoming
1) 使用anchor時,需要在每個特征尺度上密集平鋪,而僅有很少一部分是正樣本,即正負樣本的比例差別很大;最終有很多計算都花費在無用樣本,且一般使用時需要進行預處理,挖掘難負例;
2) 需要預定義的anchor size以及aspect ratio。檢測性能會收到這些預定義的參數的影響,如果在每一個位置設定的anchor的數量太多,也會導致計算量成倍增長;
3) 使用axis-align的形式:
- 由於anchor是針對特征圖上的點進行提取的,並不是所有的像素點上都會提取對應的anchor,且在每個點上提取的anchor的數量也不盡相同,如果只使用axis-align形式,最終結果可能對於那個bbox中心不在特征圖上的點不大友好,最終影響整體的精度;當然,目前也有針對該問題做出的調整,如可以通過預測中心點偏移,參照RepDet中的Adaptive Convolution方法;
- 使用box來作為一個目標的回歸結果,仍然會在其中包含大量的背景信息,尤其是在邊角區域,而且對於斜放的細長目標會造成更大的影響。在這個方向上,也存在一些改進方式,如ExtremNet提出的使用八邊形來描述一個目標,(Segmentation is All You Need)論文中也提出將目標的范圍通過橢圓精細化。
&Anchor-free方法以及具體思想
1) YOLOv1
YOLOv1摒棄了anchor,使用grid來負責每一塊區域的目標檢測。主要思想就是將整張圖片划分為S×S(7×7)個grid,每個網格檢測B(2)個bbox。
按照論文講述的結果,先將圖片resize到448×448;然后輸入到CNN中,最終輸出一個7×7×30的矩陣,其中30表示的是20個類別得分,2個回歸框的信息(x, y, w, h, confidence);將最終的結果使用NMS進行處理。
顯而易見,網上有人覺得這也是anchor的一種變種,但是,我認為這已經不再是anchor,反倒觀點更接近於通過點來對bbox回歸的思想。只不過YOLOv1是通過先將整張圖片分成了多個網格,對應的中心落在該網格內的目標則由這個網格來回歸。
Pros:
- 處理速度很快。YOLOv1的運行速度因為預處理部分很簡單,只是簡單地進行resize,之后直接使用CNN網絡進行回歸,在后處理中也只是用到了NMS,且最終得到的bbox回歸框的個數極少。
- 降低背景誤檢。相比於anchor-based方法會提取很多的anchor出來,YOLOv1在運算過程中,會使用到的“anchor”相當少,至多只有7×7×2個。
Cons:
- 模型精度低。因為在運算中使用了很少的box,而且還定義了一個grid至多能識別的目標的數量,對於無目標與多目標存在同一個grid中的情況很不友好。且模型是從數據中學習預測bbox,最終對於新的或者不尋常的aspect ratio或者configuration的目標很難識別,由於使用了多層的卷積層,最終使用到的特征的信息很粗糙。
- 不適用於密集目標檢測。同理。
- 有着很強的空間限制。因為YOLOv1在一個grid中至多只能識別兩個目標,而且只能識別一個類。
- 損失函數等同對待小bbox以及大bbox的誤差。
總而言之,YOLOv1可視為anchor-free論文的第一篇發跡文。之后就迎來了anchor-free方面論文的並發期,之后最基礎的方法就是CenterNet以及CornerNet。
2) CenterNet
CenterNet的主要思想是通過中心點的信息來回歸出其他bbox的屬性,如中心點與四條邊的距離、姿勢、方向等信息。
首先,CenterNet會計算keypoint heatmap,然后通過網絡直接回歸出需要使用的信息。這種方法簡單、快速、高效而且沒有任何的NMS的后處理操作,可以直接端到端地進行訓練。但是,只使用中心點進行回歸,顯然會使得獲取的信息過少,可能不足以支撐回歸出如此有效的信息,最終影響到檢測性能。不過可能是由於其回歸的信息很充分,增強了各種信息的表征能力使得能夠對結果有所提升,【愚見,之后會重溫】
3) CornerNet
相比CenterNet從中心點來回歸出邊界距離獲得bbox來說,CornerNet反其道而行,直接使用兩個角點:top-left,bottom-right,直接定義bbox,以一組角點來確定一個目標。
首先,CornerNet計算出top-left以及bottom-right兩個heatmaps,其中分別表明圖中的top-left以及bottom-right點的信息,然后通過embeded方法計算top-left集合以及bottom-right集合中點的距離,將距離最近的點分為一個組,作為最終的bbox。其中也是用了一些改進方法,如Corner-Pool,使得計算角點更精確。
當然,這種想法也很好,但是卻不可避免地引入了分組的計算算法,增加了計算難度,同時與CenterNet類似,即便此時使用了兩個角點的信息來確定一個bbox,此時的角點由於使用了Corner Pool方法融入了更多邊的信息,不可避免地導致網絡對於邊更加敏感,而且忽略了更多的內部細節。
4) CenterNet-Triplets
這種方法粗略來看就相當於整合了Center以及Corner的信息,相當於在CornerNet的基礎上增加了Center的信息作為其中一個判別標准。Corner的heatmaps的生成仍然像CornerNet中一樣,只不過多增加一個分支為center heatmap,corner分組后需要判斷其中是否包含有center heatmap中的點,沒有就可以直接排除。剩下的與CornerNet相似。
此外,考慮到corners對目標框中的內部信息把握不准,在CornerPool的基礎上進行改進,提出了Cascade Corner Pool,使得corner也能編碼一些內部的信息,增強了點的表征力;與此同時,提出了Center Pool,獲得水平方向以及豎直方向上的最大值,也能夠表示更多的信息。
但是,其一,我覺得使用的Cascade Corner Pool的方法的表義不明,即便在進行第二步的時候確實獲取了一些框內的信息,增強了點的表征力,但是使用到的這個內部信息的表義卻不是很明確,只能說明加入了一些內部信息時確實對結果產生了有利影響;其次使用到的信息仍然不夠,尤其是對回歸框的內部信息的使用,雖然使用到了center heatmap,但是最后只是用來做辨別,相當於沒有完全利用這部分的信息。
因此在這個基礎上是否可以將center的信息也利用進回歸框的信息預測中,不過需要考慮一下怎么使用,而且ExtremeNet使用的方法與之也有相同之處。
5) ExtremNet
ExtremeNet使用到了4條邊的極值點,以及中心點,在CenterNet-Triplets的基礎上將預測的角點分解為邊的極值點,同時分組不再按照embeded計算的距離,而是隨機分組。
首先,網絡計算得到5個heatmaps,分別為top、left、bottom、right以及center heatmap,其中top、left、right以及bottom仍然作為bbox獲取的途徑,每次從其中任取一個點作為一個bbox的四個極值點,然后計算其邏輯中心,如果在center heatmap中存在,則將之視為一個bbox,用作回歸過程。
該方法,從分組的方式上來看,顯然這個計算量是很大的。其余除了比CenterNet-Triplets多了一些邊上的信息外,存在着與之相似的問題,而且網絡對邊緣的敏感更高。
整體來看,這個方法就是對CenterNet-Triplets方法的分解,將Corner的預測轉化為極值點的預測,顯然,這些點所能包含的信息會更多一些,但增加的信息也有限,不過給我們提供了一個優化結果的思路;將任務分解為更細致的任務,獲取到更多信息以及分解任務間的關聯性可能會對網絡產生好的影響。
【注】之后會增加RepDet的內容,同時將使用的密集點檢測的Anchor-free的方法也做進一步的總結。