Pytorch實現各種2d卷積示例
阿新 • • 發佈:2020-01-09
普通卷積
使用nn.Conv2d(),一般還會接上BN和ReLu
引數量NNCin*Cout+Cout(如果有bias,相對來說表示對引數量影響很小,所以後面不考慮)
class ConvBNReLU(nn.Module): def __init__(self,C_in,C_out,kernel_size,stride,padding,affine=True): super(ConvBNReLU,self).__init__() self.op = nn.Sequential( nn.Conv2d(C_in,stride=stride,padding=padding,bias=False),nn.BatchNorm2d(C_out,eps=1e-3,affine=affine),nn.ReLU(inplace=False) ) def forward(self,x): return self.op(x)
深度可分離卷積depthwise separable convolution
卷積操作可以分為NN 的Depthwise卷積(不改變通道數)和11的Pointwise卷積(改變為輸出通道數),同樣後接BN,ReLU。引數量明顯減少
引數量:
NNCin+Cin11*Cout
class SepConv(nn.Module): def __init__(self,affine=True): super(SepConv,self).__init__() self.op = nn.Sequential( nn.ReLU(inplace=False),nn.Conv2d(C_in,kernel_size=kernel_size,groups=C_in,kernel_size=1,padding=0,affine=affine) ) def forward(self,x): return self.op(x)
空洞卷積dilated convolution
空洞卷積(dilated convolution)是針對影象語義分割問題中下采樣會降低影象解析度、丟失資訊而提出的一種卷積思路。利用新增空洞擴大感受野。
引數量不變,但感受野增大(可結合深度可分離卷積實現)
class DilConv(nn.Module): def __init__(self,dilation,affine=True): super(DilConv,dilation=dilation,) def forward(self,x): return self.op(x)
Identity
這個其實不算卷積操作,但是在實現跨層傳遞捷徑
class Identity(nn.Module): def __init__(self): super(Identity,self).__init__() def forward(self,x): return x
以上這篇Pytorch實現各種2d卷積示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。