[心得] Deformable ConvNets v2

Source: Deep Learning on Medium

[心得] Deformable ConvNets v2

最近朋友提到的 Deformable ConvNets v2, 起初還以為是group conv.

這篇是CVPR 2019 的論文 citations 也相當的多 (截至20191223 75次 citation, arcface同為cvpr 2019 )

聲明: 本文 不會提到 此篇paper的 的 RCNN feature mimic, deformable ROI pooling.

先來看看成效:

比一下 相同backbone下, 不同conv 帶來的成效, 井噴. 但這個table 還有一些額外的training trick (RCNN feature mimic), 我這篇不會提到他.

這篇論文的敘述法也很有趣, 先給你看看他們怎麼visualize 學到惹什麼:

每一個方法視覺化三種數值

  • Effective receptive fields
  • Effective sampling/bin locations
  • Error-bounded saliency regions: 容忍錯誤內可框出的最小區域

前兩個數值 照論文的敘述是由 node 的 gradient 找出有效的 receptive fields/ sampling bin locations, 但是我沒有去找確切的計算方式(看起來是從這篇來的, 有閒再看看), 從圖中他想表達的應是 dconv2更變形, 更精準, 更棒!

再討論V2之前我們先看一下V1是什麼東東

Deformable Convolutional Networks ICCV 2017, 截至20191223 引用 698次

從上圖就可以感覺到 J葛 DCNv1, 在做的事情 其實有點像是attention在 上一層conv layer 的output, 只是是在2d的區域上.

看一下公式

到公式(1), 其實是一個標準的 Conv layer with dilation =1,

到了公式(2) 多了 ∆p_n 這個代表的其實是feature map個每個位置的offset更進一步可以被細緻的調整而不是死板板的dailation的數值.

接著, 他用內插來補 x(p), 我們可以學出一個 function G(q_, p), 他計算了 位置 p 對於 位置q_ 權重, 至於(4) 就是將其限制於 1格內.

這篇原本的實做是在這邊, 但是是cuda 我看不是很懂, 所以找了比較看得懂的實做 (雖然我跟公式對不太起來, w(p_n) 消失了)

x shape: (b, w, h, c)

offsets shape: (b, w, h, c *2), 這個2代表的 ∆p_n 的 (x, y) 不同方向的數值.

經過第一個的conv, 每個 ∆p_n 都被計算出來了 再接著把 x 照上述的內插將數值補完.

好, 讓我們接著看V2

v2 的 formula:

相比v1的 公式(2) 多出一項 ∆m_k 介於 0~1 之間, 也就是說上述的 offsets 那個 會變成 (b, w, h, c*3), 多出來的那維 取 softmax 就是 ∆m_k, 而這個 ∆m_k 是上一層input的函數, 所以意義上也與 w_k 不同, 他像是 由 conv (3×3) 所看到的這9格 來決定 這一個 offset 重不重要的概念.

就是這樣的 簡單粗暴, 真棒!

但由於還有些地方跟沒對起來, 看來只能改天去看官方的實做了.