1. 程式人生 > >CVPR2018 目標檢測(object detection)演算法總覽

CVPR2018 目標檢測(object detection)演算法總覽

CVPR2018上關於目標檢測(object detection)的論文比去年要多很多,而且大部分都有亮點。從其中挑了幾篇非常有意思的文章,特來分享,每篇文章都有詳細的部落格筆記,可以點選連結閱讀

Cascaded RCNN這篇文章的出發點非常有意思,是通過分析輸入proposal和ground truth的IOU與檢測模型採用的用於界定正負樣本的IOU關係得到結論:當一個檢測模型採用某個閾值(假設u=0.6)來界定正負樣本時,那麼當輸入proposal的IOU在這個閾值(u=0.6)附近時,該檢測模型比基於其他閾值訓練的檢測模型的效果要好,參看FIgure1(c)。

Cascaded RCNN通過級聯幾個檢測網路達到不斷優化預測結果的目的,與普通級聯不同的是,cascade R-CNN的幾個檢測網路是基於不同IOU閾值確定的正負樣本上訓練得到的,前一個檢測模型的輸出作為後一個檢測模型的輸入,因此是stage by stage的訓練方式,而且越往後的檢測模型,其界定正負樣本的IOU閾值是不斷上升的。cascade R-CNN的實驗大部分是在COCO資料集做的,而且效果非常出彩。
這裡寫圖片描述

這是在COCO資料集上的結果。
這裡寫圖片描述

這篇文章的出發點在於目前大部分的目標檢測(object detection)演算法都是獨立地檢測影象中的object,但顯然如果模型能學到object之間的關係顯然對於檢測效果提升會有幫助,因此這篇文章希望在檢測過程中可以通過利用影象中object之間的相互關係或者叫影象內容(context)來優化檢測效果,這種關係既包括相對位置關係也包括影象特徵關係

這篇文章提出了object relation module來描述object之間的關係,從而以attention的形式附加到原來的特徵上最後進行迴歸和分類。實驗是針對two stage系列的目標檢測演算法而言,在ROI Pooling後的兩個全連線層和NMS模組引入object relation module,如Figure1所示,因此做到了完整的end-to-end訓練。
這裡寫圖片描述

個人覺得RefineDet是一篇很不錯的文章,該演算法大致上是SSD演算法和RPN網路、FPN演算法的結合,可以在保持SSD高效的前提下提高檢測效果(實驗效果提升挺明顯)。第一眼看到這篇文章就讓我想起了RON,畢竟都是想做one stage和two stage的object detection演算法結合。

RefineDet的主要思想:一方面引入two stage型別的object detection演算法中對box的由粗到細的迴歸思想(由粗到細迴歸其實就是先通過RPN網路得到粗粒度的box資訊,然後再通過常規的迴歸支路進行進一步迴歸從而得到更加精確的框資訊,這也是two stage型別的object detection演算法效果優於one stage型別的一個重要原因)。另一方面引入類似FPN網路的特徵融合操作用於檢測網路,可以有效提高對小目標的檢測效果,檢測網路的框架還是SSD。

網路結構參考Figure1。
這裡寫圖片描述

這篇文章從資料集出發進行了非常詳細的分析和實驗對比,發現在COCO資料集中小目標占比要比ImageNet資料集大,這樣在用ImageNt資料集的預訓練模型時就會產生domain-shift問題,另外COCO資料集中的object尺寸變化範圍非常大,即便採用multi-scale training的方式也很難訓練一個檢測器去cover所有scale的目標。

因此,這篇文章針對前面提到的問題,提出一種新的訓練模型的方式:Scale Normalization for Image Pyramids (SNIP),該演算法主要包含兩個改進點:1、為了減少前面所提到的domain-shift,在梯度回傳時只將和預訓練模型所基於的訓練資料尺寸相對應的ROI的梯度進行回傳。2、借鑑了multi-scale training的思想,引入影象金字塔來處理資料集中不同尺寸的資料。

SNIP網路結構參考Figure6。
這裡寫圖片描述

5、R-FCN-3000
論文:R-FCN-3000 at 30fps: Decoupling Detection and Classification
連結:https://arxiv.org/abs/1712.01802
詳細內容請移步R-FCN-3000演算法筆記

這篇文章主要是成功將R-FCN演算法(關於R-FCN演算法的介紹可以看部落格)應用在檢測類別較多的場景下。首先當初提出R-FCN演算法的主要目的在於引入position-sensitive score map解決原來Faster RCNN中ROI的重複計算問題,有效提升速度。但是如果檢測的類別數非常多(比如這裡的3000類),那麼直接用R-FCN演算法的話速度是很慢的,瓶頸正是生成分類支路的position-sensitive score map時計算量非常大,因此這篇文章通過解耦分類支路的position-sensitive score map生成的過程(將原來的分類支路拆分成兩條支路,而回歸支路還是採用R-FCN的迴歸支路,這篇文章不做修改,這是因為增加檢測類別數增加不影響迴歸支路的計算量),從而在保證速度(30FPS)的情況下將R-FCN的分類類別數延伸至3000類。

Figure2是F-RCN-3000的分類支路過程,該過程包含兩條支路(Figure2上面那條是生成objectness score的過程,Figure2下面那條是生成fine-grained classification score的過程),這兩條支路的結果的乘積才是最終的分類結果。在Figure2中迴歸部分並未畫出,但是需要注意的是迴歸部分和R-FCN的迴歸部分是一樣的。

這裡寫圖片描述

Detection with Enriched Semantics(DES)主要是基於SSD做改進,也是為了解決SSD中對於小目標物體的檢測效果不好的問題,因為SSD演算法對小目標的檢測只是利用了淺層的特徵,並沒有用到高層的語義特徵。因此這篇文章的出發點就是為了增加用於檢測的feature map的語義資訊,主要的措施包括:1、引入segmentation module用於得到attention mask,從而提高low level的feature map的語義資訊。2、引入global activation module用於提高high level的feature map的語義資訊

實驗效果不錯,在VOC2007資料集上,DES512能達到81.7的mAP,而且在Titan X上的速度是31.7FPS(batch設定為8,不過比相同大小輸入和相同特徵提取網路的SSD演算法慢一些)。

網路結構參考Figure1。
這裡寫圖片描述

Scale-Transferrable Detection Network(STDN)演算法主要用於提高object detection演算法對不同scale的object的檢測效果。該演算法採用DenseNet網路作為特徵提取網路(自帶高低層特徵融合),基於多層特徵做預測(類似SSD),並對預測結果做融合得到最終結果。該演算法有兩個特點:1、主網路採用DenseNet,瞭解DenseNet的同學應該知道該網路在一個block中,每一層的輸入feature map是前面幾層的輸出feature map做concate後的結果,因此相當於高低層特徵做了融合。高低層特徵融合其實對object detection演算法而言是比較重要的,FPN演算法是顯式地做了高低層特徵融合,而SSD沒有,這也是為什麼SSD在小目標問題上檢測效果不好的原因之一,因此該演算法雖然看似SSD,但其實和SSD有區別。2、引入scale-transfer layer,實現了在幾乎不增加引數量和計算量的前提下生成大尺寸的feature map(其他常見的演算法基本上都是採用deconvolution或upsample),由於scale-transfer layer是一個轉換操作,因此基本不會引入額外的引數量和計算量。

網路結構參考Figure2。
這裡寫圖片描述