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)
Original: https://blog.csdn.net/qq_39782006/article/details/120009268
Author: 棉毛裤穿吗
Title: [Deeplearning]dwconv
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/707522/
转载文章受原作者版权保护。转载请注明原作者出处!