关于卷积的问题(CNN)



我突然想到了一个关于卷积的问题,只是想弄清楚我是否遗漏了什么。问题是以下两个操作是否相同。

案例1(假设我们有一个特征图C^2 x H x W。并且,我们有一个KxKxC^2 Conv权重和步幅S。(需要明确的是,C^2是通道尺寸,但只是想把它做成一个平方数,K是内核大小(。

案例2(假设我们有一个特征图1 x CH x CW。并且,我们有一个CK x CK x 1 Conv重量和步幅CS


因此,基本上,Case2是case1的像素上混洗版本(包括特征图和Conv权重。(由于卷积只是元素乘法,两种运算对我来说似乎完全相同。

# given a feature map and a conv_weight, namely f_map, conv_weight
#case1)
convLayer = Conv(conv_weight)
result = convLayer(f_map, stride=1)
#case2)
f_map = pixelshuffle(f_map, scale=C)
conv_weight = pixelshuffle(f_map, scale=C)
result = convLayer(f_map, stride=C)


但这意味着,(例如(给定256xHxW特征图3x3 Conv(就像在许多深度学习模型中一样(,执行卷积只是将48x48 Conv转换为1 x 16*H x 16*W特征图。

但这并不符合我对细胞神经网络的基本直觉,即用最小的3x3 Conv堆叠多层,导致有点大的感受野,每个通道都有不同的(可能是冗余的(信息。

从某种意义上说,你可以想到"折叠";空间信息转换为通道维度。这就是ResNet在空间分辨率和特征维度之间进行权衡的基本原理。在ResNet的情况下,每当他们在空间中采样x2时,他们增加特征空间x2。然而,由于你有两个空间维度,并且你在这两个维度中都采样了x2,所以你有效地减少了"x";"体积";特征图的x0.5。

最新更新