在pytorch中理解深度卷积与带有组参数的卷积

数据挖掘 神经网络 火炬 深度学习
2022-02-27 22:13:44

所以在mobilenet-v1网络中,使用了 depthwise conv 层。我理解如下。

对于 的输入特征图(C_in, F_in, F_in),我们只取 1 个带有C_in通道的内核,比方说,大小(C_in, K, K)为 ,并将内核的每个通道卷积到输入的每个通道,以生成(C_in, F_out, F_out)特征图。C_out然后使用大小为 的内核进行逐点转换来组合这些特征图(C_in, 1, 1),我们得到 的结果(1, F_out, F_out)与普通 conv 相比,内核参数缩减率是:

(K*K*C_in+C_in*C_out)/(K*K*C_in*C_out) = 1/C_out + 1/(K*K)

而且我还在pytorch中查了一下Conv2d(doc),据说可以实现depthwise convolution设置groups参数等于C_in. 但是当我阅读相关文章时,设置背后的逻辑groups与上面移动网络使用的深度卷积操作看起来不同。假设我们有C_in=6, 和C_out=18,groups=6意味着您将输入和输出通道划分为6组。在每组中,3每个具有通道的内核都用于与输入通道进行转换,因此可以产生1总共输出通道。18

但是对于正常的卷积,18*6总内核通道用于18 kernels, each having 6 channels. 所以缩小比是18/(18*6),所以缩小比是 1/C_in=1/Groups忽略不考虑的逐点转换,这个数字与1/C_out上述结论不同。

谁能解释我哪里错了?是因为我在C_out= factor * C_in(factor > 1) 时错过了什么吗?

0个回答
没有发现任何回复~