Object Detection 錨點之爭: Anchor Free大爆發的2019年
Object Detection 錨點之爭: Anchor Free大爆發的2019年
物件識別(Object Detection)一直以來有兩大爭論:第一個是One-stage v.s. Two-stage、第二個就是Anchor-based v.s. Anchor-free。在2019年以前,anchor挾帶著多尺度下節省運算成本的檢測能力,大幅度地帶領著開發與研究的方向。最明顯的實例就是anchor-free的YOLO v1發展到YOLO v2也加入了anchor的設計。不過2019年 FoveaBox、CenterNet、FCOS、 RepPoints等anchor-free的方法依序提出,展現出不輸anchor-based方法的實力。
這篇文章會是討論Deep Learning 實務操作的系列,這個系列主幹不走論文導讀這樣細節一篇一篇帶的風格,會是透過客觀事實(多篇論文文本描述與數據),帶有個人見解的角度關鍵性的討論。
另外,在這篇文章開始之前,我會建議先閱讀任何一篇anchor-based的論文或導讀,如果從沒看過相關文章的人,我推薦Faster R-CNN。
Object Detection是計算機視覺及影像處理中的術語,指的是讓計算機去分析一張圖片或者一段視頻流中的物體,並標記出來。一般來說標記以bounding box表示居多。
Anchor-based 當紅的背景
簡潔明瞭地說,所謂的anchor就是預先定義的方框,通常是一次使用k個。透過網路對每個點預測k個方框的正反結果與修正向量,更白話點就是這個anchor(1) 是不是接近ground truth的bounding box、(2) 與ground truth的bounding box之間的差異(通常是平移+縮放)。
在RepPoints 的論文中,比較正式的界定了anchor這個名詞。依照他們的說法是: 如果把物體用4D(兩組2D座標)來表示,則是anchor-based,如果是把物體用2D來表示,則屬於anchor-free 。這句描述雖然看起來更加難以理解,其實簡單來說,作者想表達的是他認為anchor-free比起一個方框範圍,更著眼於該點的分析。
使用anchor上有三個明顯優勢:(1)透過 不同尺度的anchor,可以減少面對物件scale和aspect ratio變化範圍大的問題。(2) 透過控制anchor數量,可以降低image pyramid 層數並依情況調整運算量。(3) 可以透過調整anchor的尺度與密度,適應不同類型的任務。
雖然挾帶著如此多的優勢,anchor-based的劣勢其實也是很顯著的,最大的問題就是:(1) 設計anchor的hyper parameter不易調整、以及(2) 訓練階段計算anchor的IOU( Intersection Over Union)需要消耗大量的時間與memory。甚至從調適角度出發,先前提到的優點(3)感覺也不再是優點了。
由於主要的劣勢都發生在訓練階段,可以靠研究或工程人員的經驗和升級training machine解決,只要能妥善的訓練好,在deployment時就可以享有anchor帶來的優勢了。
Anchor-free的優雅思路
如果要用一個單字形容Anchor Free的方法:Elegant。
用優雅來形容Anchor Free是恰到好處,這邊的優雅指的是:訓練網路可以是一件優雅的事情。看當初YOLO盛行的時候,到這一兩年依然很多人第一個接觸的物件識別網路是YOLO。雖然YOLO因為不使用anchor的RPN,在結果上產生了mAP的下降與定位偏移,依然是當時最知名、好用的設計之一。
mAP是物件檢測時常用的衡量函數,評估bounding box的預測準度,越高代表越好。細節推薦閱讀這篇貼文 。
Anchor Free的第一個問題就是面對不同尺度的物件辨識困難,這點在過去多半是會透過導入多尺度的image pyramid改善。但越多層的image pyramid等同造成訓練與部屬時都需額外且大量的計算量。2016年FPN(Feature Pyramid Networks) 橫空出世,讓多尺度的問題有了更精簡且更加類神經感的解決方法。
Anchor Free的第二個問題是在訓練時過多的負樣本數會導致網路訓練變得困難,這部分也是以往anchor base方法可以透過計算IoU以平衡樣本數的優勢。2017年一行簡單的數學式Focal Loss(RetinaNet) 讓樣本數不均的one-stage展現快速且不輸two-stage的成果。這部分的想法也在後來被anchor-free的方法陸續採用,也一定程度地解決的anchor-free樣本數不均的問題。
Focal loss的核心觀念在於壓低簡單的樣本的loss weight。以物件偵測來說,落在背景的點是大量且容易分類。Focal Loss的目標即是避免過度關注這些easy example並聚焦Hard example。上圖中,藍線是一般的cross entropy,而其他的線是不同hyper-parameter的focal loss,可以看出整個曲度更加陡峭。 當然,同時期存在其他處理類似問題的方法,如hard negative mining。
這邊必須補充、強調一下,多尺度與樣本數問題是anchor-free方法需要面對的困境,而FPN與focal loss都只是其中一種最廣為推薦的解決方法,並不是唯一,在未來也可能不再是最適用。
回顧一下兩者之間的差異。
- Anchor可以依照任務預先設定,大幅舒緩尺度與比例問題。這部分FPN幫助了anchor free方法。
- Anchor可以藉由計算IoU,舒緩背景導致的正負樣本數不均問題。這部分focal loss幫助了free方法。
CVPR 2020的一篇論文 中也在論文中認定了了FPN與focal loss是anchor free方法崛起的關鍵,並認為如何定義正負樣本才是anchor free與anchor base之間最大的差異。
幾個Anchor-Free的方法
如果要好好講起Anchor-Free方法,大概要從早期的DenseBox跟YOLO開始,到近期的 CornerNet、 ExtremeNet、 FSAF、 FoveaBox、 FCOS、CenterNet、RPDet。不過一一細說可能會模糊焦點,這邊就從最新(2019)的幾篇中,挑選我覺得在實踐anchor-free最有趣的簡介一下方法論。
FCOS 全名是Fully Convolutional One-Stage Object Detection,顧名思義是來自FCN的延伸發展。FCOS的特色是在分類正負樣本時,只要該2D位置落在ground truth邊框中,就視為一個正樣本。再透過預測一個center-ness的子網路,過濾距離目標中心較遠的位置產生的低質量的預測。
在2019年其實有兩篇 CenterNet,分別是Objects as Points 這一篇與Keypoint Triplets for Object Detection 這一篇。數據上後者優於前者,方法也是後者比較複雜。前者則是著重在強調他的center方法簡單且可以拓展到keypoint檢測等其他應用。兩邊都是透過FCN-style的方法生成heatmap,再從heatmap取得極限值點。Objects as Points透過heatmap拉出的center在推出bounding box,而Keypoint Triplets則是直接透過不同heatmap預測center與corner,所以稱為triplets。兩邊方法都可以視為CornerNet的延伸。
附帶一提,Objects as Points的方法不需要 NMS(Non-Maximum Suppression)過濾相同目標的預測框,而Keypoint Triplets有使用Soft-NMS。NMS這邊就不多說,不然會有點偏離主題。
不過如果夠了解Detection的人,一定對不需要NMS的方法很好奇,這邊直接引用論文的內文解釋,方法相當粗暴:We detect all responses whose value is greater or equal to its 8-connected neighbors and keep the top 100 peaks.
RPDet是RepPoints (Point Set Representation)方法下建構的物件偵測器,都是出自MSRA的研究團隊。所謂的RepPoints指的是一群2D點,以往的bounding box是用兩組2D座標分別表示左上與右下兩個點,RPDet作者稱之為4D表示法,作者認為4D表示bounding box缺乏語意資訊,所以他們透過預測RepPoints,再從邊界找出pseudo box作為最後輸出的bounding box。
作者認為找出RepPoints可以更加聚焦於物體本身,這點與DCN( Deformable Convolutional Networks)的觀點相同。而RepPoints的計算實際上來自Deformable Convolution,所以RPDet其實可以看成DCN v3。
再看一看Anchor
雖然整篇文章寫起來好像要大幅推薦anchor-free,但其實並不是要寫死anchor比拚中的其中一方。anchor在思路依舊是非常經典而且實際的一個想法,目前也沒有人敢大聲的說已經可以完全秉棄anchor。畢竟在state-of-the-art的物件辨識器中,據我所知目前最強的辨識器(EfficientDet)還是使用3x3的anchor,不過EfficientDet裡一個極大的貢獻 BiFPN是可以套用在其他detector上,所以相信今年各方還是會繼續推進、交鋒。總而言之,目前anchor依然是一個相當實用的設計,而anchor-free跟anchor-based兩邊研究的進展其實都可以互相交互的改進。
對於在這個時期正在實作物件辨識器的人,如果想要最快有個MVP,我推薦FCOS與CenterNet,因為這兩個方法都是好訓練、有開箱即用的開源實作程式。如果想要在效能與效率上峰頂,可以試試EfficientDet。
這篇文章先討論到這邊。Deep Learning領域每年都會有大量高質量的論文產出,說真的要跟緊不是一件容易的事。所以我的觀點可能也會存在瑕疵,若有發現什麼錯誤或值得討論的地方,歡迎回覆文章或來信一起討論 :)