論文地址:http://arxiv.org/abs/1811.11168html
做者:pprpgit
時間:2019年5月11日github
DCNv1引入了可變形卷積,能更好的適應目標的幾何變換。可是v1可視化結果顯示其感覺野對應位置超出了目標範圍,致使特徵不受圖像內容影響(理想狀況是全部的對應位置分佈在目標範圍之內)。網絡
爲了解決該問題:提出v2, 主要有性能
結果:性能顯著提高,目標檢測和分割效果領先。學習
Geometric variations due to scale, pose, viewpoint and part deformation present a major challenge in object recognition and detection.測試
目標檢測一個主要挑戰:尺度,姿式,視角和部件變形引發的幾何變化ui
v1 引入兩個模塊:spa
爲了理解可變形卷積,進行了可視化操做:.net
samples for an activation unit tend to cluster around the object on which it lies.
激活單元樣本點彙集在目標附近
可是覆蓋範圍不夠精確,超出the area of interest
由此提出DCNv2, 具備加強建模的能力,可用於學習可變形卷積
with enhanced modeling power for learning deformable convolutions.
添加了兩種互補的模式:
爲了充分利用可變形卷積提取的信息,吸收知識蒸餾的手段,進行培訓。
可視化三個內容:
Faster R-CNN中Conv1-Conv4使用在Head中的,Conv5使用在Classification network上
ResNet-50 Conv5裏邊的3$\times$3的卷積層都使用可變形卷積替換。Aligned RoI pooling 由 Deformable RoI Pooling取代,當offset學習率設置爲0,那麼Deformable RoI Pooling就退化爲Aligned RoI Pooling。 ps: 這是V1中的操做。
從中觀察到:
v2 中進行改進的部分主要有三點
在Conv3, Conv4, Conv5中全部的3$\times$3的卷積層所有被替換掉。對於pascal voc簡單數據集,堆疊三層以上就會飽和。
回顧一下DCNv1:
R 是至關於3$\times$3的kernel, \(p_0\)是當前中心點,\(p_n\)枚舉每個點。
可見,在普通卷積基礎上,offset \(\Delta p_n\)是主要改進點。
那DCNv2主要改了哪些地方?
在v1基礎上,添加了\(\Delta m_k\), 一個控制幅值變化的量。
ROI pooling是如何改進的?
先看Faster R-CNN中的ROI Pooling:
而後先看DCNv1的Deformable RoI Pooling
主要是添加了offset fields \(\Delta p_{ij}\) 來控制偏移部分。
DCNv2的Deformable RoI Pooling也是將幅值引入,以下圖:
相似的也添加了幅值變量,在訓練的過程當中進行學習。
採用了相似知識蒸餾的方法,用一個R-CNN分類網絡做爲teacher network 幫助Faster R-CNN更好收斂到目標區域內。
獲得ROI以後,在原圖中摳出這個ROI,resize到224x224,再送到一個RCNN中進行分類,這個RCNN只分類,不迴歸。而後,主網絡fc2的特徵去模仿RCNN fc2的特徵,實際上就是二者算一個餘弦類似度,1減去類似度做爲loss便可
GitHub幾個源碼
<https://github.com/msracver/Deformable-ConvNets> 官方提供的版本,有DeepLab, Faster R-CNN, FPN, R-FCN等。源碼使用的是mxnet。
https://github.com/open-mmlab/mmdetection 集成了可變形卷積,源碼使用的是pytorch。
https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch/tree/pytorch_1.0.0 Pytorch 1.0 最新的完整的DCNv2
http://www.javashuo.com/article/p-xyoutjdt-dh.html
http://arxiv.org/abs/1811.11168