首先可以得出来的结论是:深度可分离卷积=深度卷积+逐点卷积
depthwise separable Convolution=depthwise Conv+pointwise Conv
首先,如下图所示,卷积经过in_channel个的groups进行分组、卷积,得到了in_channel个通道,然后在经过一个卷积核kernel_size为1*1的卷积将前面多个通道进行拼合。
此图来自于(12条消息) 深度可分离卷积 深度卷积 逐点卷积_不佛的博客-CSDN博客
因此
depthwise conv的用法: nn.Conv2d(chs, chs, kernel_size, stride, padding,groups=chs, bias=False),即输入通道=输出通道=groups。
pointwise conv的用法:nn.Conv2d(chs,out,kernel_size=1,stride,padding,groups=1,bias=False),即将卷积核换成1*1的。
但还有一个疑问, nn.Conv2d(chs, out, kernel_size, stride, padding,groups=chs, bias=False)
如果输出通道≠输入通道,但输入通道=groups,这种卷积应该算为什么卷积呢?分组卷积是肯定的,但还有别的名称吗