RMNet icon indicating copy to clipboard operation
RMNet copied to clipboard

fuse()函数的conv_b的疑惑

Open linklist2 opened this issue 4 years ago • 6 comments

您好,请问conv_b为何等于这个数值? image 融合卷积层和BN层的新的卷积层的偏置按照第二个式子那样的话,似乎和您这个代码中的差了个负号 image

然后还有 image 这个running_mean相加也不是很理解。

linklist2 avatar Jan 11 '22 05:01 linklist2

这块的思路是:能将原有分支和reserving分支合并的是conv层,但是正常resnet的求和是在bn层后的。因此我训练时用running2测一测求和后的均值方差,部署时将bn的乘法与前面的conv层合并,bn层的加法放到running2处进行。 最后一层bn层的处理比前面bn层要更复杂一点,可以慢慢体会下。

fxmeng avatar Jan 11 '22 13:01 fxmeng

请问在conv_w部分,为什么要在最后要加上[1] * (len(conv_w.shape) - 1)

JinShchen avatar Jan 17 '22 03:01 JinShchen

@ayoggchen image 是为了将bn_w与bn_var_sqrt相乘后的结果reshape成 [-1,1,1,1] 的形状,也就是[输出通道数, 1, 1, 1] 方便下一步与conv_w相乘

linklist2 avatar Jan 17 '22 03:01 linklist2

@ayoggchen image 是为了将bn_w与bn_var_sqrt相乘后的结果reshape成 [-1,1,1,1] 的形状,也就是[输出通道数, 1, 1, 1] 方便下一步与conv_w相乘

明白,另外想确认一下,如果任务不需要bn层,是不是不需要做fuse的操作,直接将卷积赋值成diract和原值组合就可以了?

JinShchen avatar Jan 17 '22 03:01 JinShchen

image 还想问一下,为什么在rmrepse.py中,对up.bias的初始化需要添加一个100的常量呢?

@ayoggchen image 是为了将bn_w与bn_var_sqrt相乘后的结果reshape成 [-1,1,1,1] 的形状,也就是[输出通道数, 1, 1, 1] 方便下一步与conv_w相乘

JinShchen avatar Jan 18 '22 03:01 JinShchen

@ayoggchen image 是为了将bn_w与bn_var_sqrt相乘后的结果reshape成 [-1,1,1,1] 的形状,也就是[输出通道数, 1, 1, 1] 方便下一步与conv_w相乘

明白,另外想确认一下,如果任务不需要bn层,是不是不需要做fuse的操作,直接将卷积赋值成diract和原值组合就可以了?

是的,不用bn层会简单很多,只是在finetune的时候效果就会不好,只用来测试是没问题的。

fxmeng avatar Jan 19 '22 11:01 fxmeng