pytorch實現depthwise convolution


深度分離卷積是Xception這個模型中提出來的(不太確定,但肯定是它讓這個概念為大眾周知),具體來說分為兩步,depthwise conv和pointwise conv,前者對輸入特征圖的每個通道進行卷積,然后將輸出串聯,后者就是大家都知道的1X1卷積,二者結合,使得參數量和計算量大幅減少,關鍵是效果還挺好,不服不行。因為自己想在網絡中加入這一結構,於是谷歌pytorch是怎么實現的,發現結果不多,不過還是看到了想要的答案,在這個項目里https://github.com/tstandley/Xception-PyTorch/blob/master/xception.py,這是一個xception的pytorch實現,里面有關於depthwise卷積的實現,然后我發現pytorch已經支持了,至少在0.4中可以。

我就記錄下這個函數吧。准確地說是類。

class torch.nn.Conv2d(in_channelsout_channelskernel_sizestride=1padding=0dilation=1groups=1,bias=True)

其中,輸入輸出,核的size,步長,補零都不用說了,dilation是關於卷積核的,不講了,groups就是實現depthwise conv的關鍵,默認為1,意思是將輸入分為一組,此時是常規卷積,當將其設為in_channels時,意思是將輸入的每一個通道作為一組,然后分別對其卷積,輸出通道數為k,最后再將每組的輸出串聯,最后通道數為in_channels*K。

最后總結下,要實現depthwise conv,就將groups設為in_channels,同時out_channels也設為與in_channels相同。

然后再加上1X1卷積,這樣就符合xception的結構了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM