[Deeplearning]dwconv
dwconv是由一个两部分卷积组成的一个网络第一部分是depthwise conv 是分通道的一个卷积 就是每个卷积核对应input的每一个通道 有图好理解很多 如下图源https://blog.csdn.net/tintinetmilou/article/details/81607721因为上面每个层的特征都分开 没有有效的利用相同空间位置上不同层的有效信息,所以有了第二部分第二部分是point
·
dwconv
是由一个两部分卷积组成的一个网络
第一部分是depthwise conv 是分通道的一个卷积 就是每个卷积核对应input的每一个通道 有图好理解很多 如下
图源https://blog.csdn.net/tintinetmilou/article/details/81607721
因为上面每个层的特征都分开 没有有效的利用相同空间位置上不同层的有效信息,所以有了第二部分
第二部分是pointwise conv
它将第一部分各自独立的featuremap进行组合生成了新的
它是一个kernelsize为1,通道数为input通道数的一个卷积,具体如图
图源https://blog.csdn.net/tintinetmilou/article/details/81607721
这个dwconv主要是为了降低卷积运算参数量。
但具体参数量计算请看 https://yinguobing.com/separable-convolution/#fn2
yolo系列里的代码如下
class DWConv(nn.Module):
"""Depthwise Conv + Conv"""
def __init__(self, in_channels, out_channels, ksize, stride=1, act="silu"):
super().__init__()
self.dconv = BaseConv(
in_channels, in_channels, ksize=ksize,
stride=stride, groups=in_channels, act=act
)
self.pconv = BaseConv(
in_channels, out_channels, ksize=1,
stride=1, groups=1, act=act
)
def forward(self, x):
x = self.dconv(x)
return self.pconv(x)
更多推荐
已为社区贡献1条内容
所有评论(0)