yun-liu / FastSaliency

Code for "SAMNet: Stereoscopically Attentive Multi-scale Network for Lightweight Salient Object Detection" and "Lightweight Salient Object Detection via Hierarchical Visual Perception Learning"
Other
52 stars 17 forks source link

你好,我在SAMNET训练过程中,网络出现问题?求解 #4

Open xiaoqiange512 opened 3 years ago

xiaoqiange512 commented 3 years ago

在SAMNet,py中的class VAMM,在其定义中self.fc1 = convbnrelu(channel, channel, 1, 1, 0, bn=True, relu=True)。因为在经过GAP后,尺寸为torch.Size([1, 16, 1, 1])。当fc1 中bn=True, relu=True时,此时 self.fc1 =Sequential( (0): Conv2d(16, 16, kernel_size=(1, 1), stride=(1, 1), bias=False) (1): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (2): ReLU(inplace=True) ) 经历全局平均池化再加BN层,我在测试过程中出现了以下错误 ValueError: Expected more than 1 value per channel when training, got input size torch.Size([1, 16, 1, 1]) 而在我将VAMM中所有的BN设置为False时,程序正常. 请问,这是由什么原因引起的呢? 以上错误仅在训练过程中出现,在测试里没有报错

yun-liu commented 3 years ago

@xiaoqiange512 您好,这是因为您使用了batch size = 1。batchnorm层在计算均值和方差时,sample的数量必须大于1;此时feature map经过GAP变成了1 x 1大小,如果您的batch size还是1,就违反batchnorm层的计算规则了。建议您增大batch size(推荐),或者将我们代码中的bn置为False(不确定会不会影响性能)。

xiaoqiange512 commented 3 years ago

@xiaoqiange512 您好,这是因为您使用了batch size = 1。batchnorm层在计算均值和方差时,sample的数量必须大于1;此时feature map经过GAP变成了1 x 1大小,如果您的batch size还是1,就违反batchnorm层的计算规则了。建议您增大batch size(推荐),或者将我们代码中的bn置为False(不确定会不会影响性能)。 万分感谢!