Boosting-Crowd-Counting-via-Multifaceted-Attention icon indicating copy to clipboard operation
Boosting-Crowd-Counting-via-Multifaceted-Attention copied to clipboard

BS不能修改呀

Open yangtle opened this issue 3 years ago • 6 comments

batch size只能设置1,多了的话mask和feature相乘就会有错误

yangtle avatar Aug 30 '22 07:08 yangtle

batch size为什么是1呢,有同样的问题。

JinanZou avatar Feb 25 '23 06:02 JinanZou

问题主要在transfomer_cosine.TransformerEncoderLayer.forward_post和forward_pre这两个方法中。 def forward_post(self,src, shape,... def forward_pre(self,src, shape,.. 其中默认了参数src的第二维为1(使用的是torch.squeeze(src, dim=1),将为1的维度压缩了),导致后面的consistent_feature计算时,consistent_feature = torch.matmul(mask, feature),mask形状为(256, 256),而feature的形状在batch>1时为(256, batch, 512),两者进行叉乘则会出现错误。 虽然可以将suqeeze函数改成flatten,feature计算编程feature = torch.flatten(src, 1),这样就可以处理batch>1的输入了,但是不太清楚这样处理是否符合作者原本的设计,这个操作我还不是很熟悉。

H-Hui2277 avatar Mar 03 '23 08:03 H-Hui2277

问题主要在transfomer_cosine.TransformerEncoderLayer.forward_post和forward_pre这两个方法中。 def forward_post(self,src, shape,... def forward_pre(self,src, shape,.. 其中默认了参数src的第二维为1(使用的是torch.squeeze(src, dim=1),将为1的维度压缩了),导致后面的consistent_feature计算时,consistent_feature = torch.matmul(mask, feature),mask形状为(256, 256),而feature的形状在batch>1时为(256, batch, 512),两者进行叉乘则会出现错误。 虽然可以将suqeeze函数改成flatten,feature计算编程feature = torch.flatten(src, 1),这样就可以处理batch>1的输入了,但是不太清楚这样处理是否符合作者原本的设计,这个操作我还不是很熟悉。

您好 这么修改会导致精度下降吗

ZZZ429 avatar May 29 '23 01:05 ZZZ429

我也遇到这个问题,batch size 不能改,很难受。

wbshu avatar Aug 25 '23 09:08 wbshu

问题主要在transfomer_cosine.TransformerEncoderLayer.forward_post和forward_pre这两个方法中。 def forward_post(self,src, shape,... def forward_pre(self,src, shape,.. 其中默认了参数src的第二维为1(使用的是torch.squeeze(src, dim=1),将为1的维度压缩了),导致后面的consistent_feature计算时,consistent_feature = torch.matmul(mask, feature),mask形状为(256, 256),而feature的形状在batch>1时为(256, batch, 512),两者进行叉乘则会出现错误。 虽然可以将suqeeze函数改成flatten,feature计算编程feature = torch.flatten(src, 1),这样就可以处理batch>1的输入了,但是不太清楚这样处理是否符合作者原本的设计,这个操作我还不是很熟悉。

您好 这么修改会导致精度下降吗

我个人觉得这样不符合原论文的目标。直接flatten展平的操作,虽然可以使得运算正常,但是含义却发生了变化。原因在于作者在计算mask的时候,consistent_mask = torch.sum(local_att_mask, dim=0),在注意力头的维度上进行了累加,得到多头的注意力mask,然鹅这个mask是基于1个bs的,这样累加才与后边的feature = torch.squeeze(src, dim=1)做矩阵乘,含义是一张图片上的可学习注意力区域应该相近。如果直接简单粗暴地feature=torch.flatten(src,1),虽然可以相乘,但是含义却变为了整个bs的图片的可学习注意力特征应该相近,这与原文应该是不一致的。

UntrainedButLoveCode avatar Oct 26 '24 14:10 UntrainedButLoveCode

The multi batch version is uploaded to utils/regression_trainer_cosine_multibatch.py, which can be referenced in train.py. But the performance has not been tested.

LoraLinH avatar Nov 07 '24 08:11 LoraLinH