深度学习之DCN
這篇文章介紹了一種可針對空間不變性的卷積方法,不同于常規(guī)的卷積網(wǎng)絡種卷積核和待提取feature map是相同的(假設dilation=1),可變形卷積(Deformable Convolution Networks)的待提取feature map可能是任意變形之后的一個個采樣點。DCN的提出使得網(wǎng)絡不再對經(jīng)過變換之后的輸入敏感,即增加了空間不變性。
Note:
參考目錄:
①深度學習可形變卷積
②源碼
③深度學習之 DCN(Deformable Convolution)-可變形卷積
④卷積神經(jīng)網(wǎng)絡結構變化——可變形卷積網(wǎng)絡deformable convolutional networks
Deformable Convolutional Networks
- 1. Abstract
- 2. DCN
- 2.1. Classical convolution networks
- 2.2. Proposed convolution networks
- 3. Conclusion
1. Abstract
傳統(tǒng)的CNN網(wǎng)絡因為用固定的卷積核大小去提取同樣固定采樣窗口的特征,使得CNN的表現(xiàn)力受限于輸入空間變換帶來的影響。
Note:
2. DCN
這一節(jié)開始正式介紹可變形卷積。
可變形卷積總的來說就是在傳統(tǒng)CNN的基礎上,在輸入feature map(或輸入圖像)上的采樣格點上增加一個位置偏移,如下圖所示:
但是濾波器的大小還是不變(?dilation\forall \;dilation?dilation),然后我們拿著這個卷積核的每一個格點去提取對應每一個新位置的特征點,這種方式對于卷積核來說就相當于無視你的變形,用通俗點的話來講,就算你特征點逃到(變形)到天涯海角(feature map上的新位置),還是可以把你抓回來(卷積核特征提取);這種無視變形的方式就等同于傳統(tǒng)的CNN對未變形圖像提取特征一樣。這一點其實是DCN和STN最大的不同,因為STN無視變形是通過反向采樣的思想實現(xiàn)的!
所以DCN的關鍵就是這個可學習的偏移量Δ\DeltaΔ,這個offset是通過一次卷積得到的,而這個額外的卷積層可以通過最后的Loss經(jīng)過梯度反傳參數(shù)更新來學習出Δ\DeltaΔ。
接下來我們進一步了解2D-DCN是怎么實現(xiàn)的,3D可變形卷積可以直接通過2D遷移延申得到。
2.1. Classical convolution networks
經(jīng)典的CNN包括2個步驟:
Note:
2.2. Proposed convolution networks
在DCN中,就是在上述式(1)中添加了一個位置偏移項Δpn\Delta p_nΔpn?,其中n={1,2,?,N=∣R∣}n=\{1,2, \cdots, N=|\mathcal{R}|\}n={1,2,?,N=∣R∣},具體公式如下:
Y(p0)=∑pn∈RW(pn)?X(p0+pn+Δpn)+b(pn)=∑pn∈RW(pn)?X(p)+b(pn),p=p0+pn+Δpn.(2)Y(p_0) = \sum_{p_n\in\mathcal{R}}W(p_n)\cdot X(p_0 + p_n + {\color{yellowgreen}\Delta p_n}) + b(p_n) = \sum_{p_n\in\mathcal{R}}W(p_n)\cdot X(p) + b(p_n),\\ p=p_0 + p_n + \Delta p_n.\tag{2} Y(p0?)=pn?∈R∑?W(pn?)?X(p0?+pn?+Δpn?)+b(pn?)=pn?∈R∑?W(pn?)?X(p)+b(pn?),p=p0?+pn?+Δpn?.(2)
Note:
其中偏移量Δpn\Delta p_nΔpn?就是通過學習得到,其值通常是個浮點數(shù),這樣會使得最終在輸入feature map上的格點ppp也是個小數(shù),因此接下來和STN中的Differentiable sampling環(huán)節(jié)一模一樣,是個重采樣過程:我們對X(p)X(p)X(p)進行雙線性插值,來獲取這個在輸入feature map上的非整數(shù)坐標位置的像素值:
X(p)=∑qG(q,p)?X(q).(3)X(p) = \sum_q G(q, p)\cdot X(q).\tag{3} X(p)=q∑?G(q,p)?X(q).(3)其中qqq為XXX上的整數(shù)坐標,p為XXX上浮點坐標,G(?,?)G(\cdot,\cdot)G(?,?)為雙線性插值函數(shù)。
本文中的GGG和STN中的雙線性插值函數(shù)是一樣的,使用可導的maxmaxmax函數(shù):
G(q,p)=g(qx,px)?g(qy,py).G(q,p) = g(q_x, p_x)\cdot g(q_y, p_y). G(q,p)=g(qx?,px?)?g(qy?,py?).其中,g(a,b)=max(0,1?∣a?b∣)g(a,b) = max(0, 1-|a-b|)g(a,b)=max(0,1?∣a?b∣),所以公式(3)可以轉(zhuǎn)變成:
X(p)=∑qX(q)?max(0,1?∣qx?px∣)?max(0,1?∣qy?py∣).(4)X(p) = \sum_q X(q) \cdot max(0, 1-|q_x-p_x|) \cdot max(0, 1-|q_y-p_y|).\tag{4} X(p)=q∑?X(q)?max(0,1?∣qx??px?∣)?max(0,1?∣qy??py?∣).(4)這個公式怎么理解呢?其實和我們理解的雙線性插值的思想是一樣的,如下圖所示:
PPP為亞像素,其坐標為浮點坐標,我們遍歷所有整數(shù)坐標QQQ。如果Q、PQ、PQ、P的距離大于1,這樣的整數(shù)坐標QQQ我們就不要,給他賦予0的權重;相反,如果Q、PQ、PQ、P的橫軸和縱軸距離均小于1,如上圖的Q11、Q12、Q21、Q22Q_{11}、Q_{12}、Q_{21}、Q_{22}Q11?、Q12?、Q21?、Q22?所示,那我們就選用他們這4格點,這里maxmaxmax函數(shù)力之所以寫了"1",就是要保持QQQ是離PPP最近的4個格點。更進一步,如下圖所示:
這4個點里面,離PPP最近的點被賦予最大的權重,即Q12Q_{12}Q12?,它的權值就相當于是對角綠色快的面積,Q21Q_{21}Q21?離PPP最遠,所以其權重是其對角的米黃色塊面積,Q11、Q22Q_{11}、Q_{22}Q11?、Q22?也是同理。
到這DCN的流程就走完了,接下來我們看下DCN總體結構和一些細節(jié)的介紹。
如上圖所示就是DCN網(wǎng)絡的總體結構:
整個DCN網(wǎng)絡包括2個卷積過程:①可變形卷積,卷積核為3×33\times 33×3,但是采樣點ppp被偏移量變成了不規(guī)則的形狀,此外卷積核和現(xiàn)在的一般卷積核是一模一樣的。②經(jīng)典的卷積過程,輸入是和可變形卷積一樣的輸入feature map,offset輸出feature map和輸入具有一樣的高和寬。
Offset輸出feature map的深度為2N,N=∣R∣2N,N=|\mathcal{R}|2N,N=∣R∣,這里的“2”指的是每個位置有x、yx、yx、y軸兩個方向;這里的"N"指的是卷積核的所有參數(shù)FH×HWFH\times HWFH×HW。具體解釋如下:論文中Figure 2表達不夠清晰,2N2N2N個offset feature map應該是一張輸入feature map產(chǎn)生,也就是說,對于通道數(shù)為CCC的輸入feature map,產(chǎn)生的所有offset輸出feature map一共有對應的C?2NC*2NC?2N張!接下來我們分析下上圖所示1張輸入feature map情況下,產(chǎn)生的offset輸出feature map上每一個像素點(1,2N,1,1)(1, 2N, 1, 1)(1,2N,1,1)通過Pixel Shuffle之后就產(chǎn)生了222張(N×N)(\sqrt{N}\times \sqrt{N})(N?×N?)大小的偏移量Δpnx、Δpny\Delta p_n^x、\Delta p_n^yΔpnx?、Δpny?,分別表示x、yx、yx、y軸方向的偏移量,接著兩者均與原輸入feature map的位置相加,即與輸入feature map上的采樣位置相結合得到新的采樣位置(上圖藍色小框),然后根據(jù)式(2)就可以獲得Y(p0)Y(p_0)Y(p0?)了。
DCN濾波器WWW的訓練和offset中濾波器www的訓練是同時進行的:?Y(p0)?W(pn)=∑pn∈RX(p0+pn+Δpn)?Y(p0)?w(pn)=?Y(p0)?X(p)??X(p)?p??p?Δpn??Δpn?w(pn)\frac{\partial{Y(p_0)}}{\partial{W(p_n)}} = \sum_{p_n\in\mathcal{R}}X(p_0 + p_n + \Delta p_n)\\ \frac{\partial{Y(p_0)}}{\partial{w(p_n)}}=\frac{\partial{Y(p_0)}}{\partial{X(p)}}\cdot\frac{\partial{X(p)}}{\partial{p}}\cdot\frac{\partial{p}}{\partial{\Delta p_n}}\cdot\frac{\partial{\Delta p_n}}{\partial{w(p_n)}}?W(pn?)?Y(p0?)?=pn?∈R∑?X(p0?+pn?+Δpn?)?w(pn?)?Y(p0?)?=?X(p)?Y(p0?)???p?X(p)???Δpn??p???w(pn?)?Δpn??其中?X(p)?p\frac{\partial{X(p)}}{\partial{p}}?p?X(p)?通過雙線性插值式(4)使用次梯度下降獲得。DCN之所以是可導的,或者說STN為何是可導的,是因為如果沒有雙線性插值的話,我們上述的所有操作不是對feature map操作的,而是對離散的feature position(位置坐標)操作的,這顯然無法通過深度網(wǎng)絡來訓練學習的,而增加了雙線性插值之后,除了解決亞像素值的問題以外,最重要的就是使得整個網(wǎng)絡變得可導了,使得兩個卷積網(wǎng)絡的參數(shù)都可以通過梯度反傳更新學習!
3. Conclusion
總結
- 上一篇: 03—C语言基本语句(下)
- 下一篇: html旋转360度特效,CSS3图片旋