Pytorch实现各种2d卷积示例
普通卷积
使用nn.Conv2d(),一般还会接上BN和ReLu
参数量NNCin*Cout+Cout(如果有bias,相对来说表示对参数量影响很小,所以后面不考虑)
classConvBNReLU(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,C_out,kernel_size,stride=stride,padding=padding,bias=False), nn.BatchNorm2d(C_out,eps=1e-3,affine=affine), nn.ReLU(inplace=False) ) defforward(self,x): returnself.op(x)
深度可分离卷积depthwiseseparableconvolution
卷积操作可以分为NN的Depthwise卷积(不改变通道数)和11的Pointwise卷积(改变为输出通道数),同样后接BN,ReLU。参数量明显减少
参数量:
NNCin+Cin11*Cout
classSepConv(nn.Module): def__init__(self,C_in,C_out,kernel_size,stride,padding,affine=True): super(SepConv,self).__init__() self.op=nn.Sequential( nn.ReLU(inplace=False), nn.Conv2d(C_in,C_in,kernel_size=kernel_size,stride=stride,padding=padding,groups=C_in,bias=False), nn.Conv2d(C_in,C_out,kernel_size=1,padding=0,bias=False), nn.BatchNorm2d(C_out,eps=1e-3,affine=affine) ) defforward(self,x): returnself.op(x)
空洞卷积dilatedconvolution
空洞卷积(dilatedconvolution)是针对图像语义分割问题中下采样会降低图像分辨率、丢失信息而提出的一种卷积思路。利用添加空洞扩大感受野。
参数量不变,但感受野增大(可结合深度可分离卷积实现)
classDilConv(nn.Module): def__init__(self,C_in,C_out,kernel_size,stride,padding,dilation,affine=True): super(DilConv,self).__init__() self.op=nn.Sequential( nn.ReLU(inplace=False), nn.Conv2d(C_in,C_in,kernel_size=kernel_size,stride=stride,padding=padding,dilation=dilation,groups=C_in,bias=False), nn.Conv2d(C_in,C_out,kernel_size=1,padding=0,bias=False), nn.BatchNorm2d(C_out,eps=1e-3,affine=affine), ) defforward(self,x): returnself.op(x)
Identity
这个其实不算卷积操作,但是在实现跨层传递捷径
classIdentity(nn.Module): def__init__(self): super(Identity,self).__init__() defforward(self,x): returnx
以上这篇Pytorch实现各种2d卷积示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。