zhenhuat / STCFormer

(CVPR2023)3D Human Pose Estimation with Spatio-Temporal Criss-cross Attention
85 stars 5 forks source link

Input tensor shape: torch.Size([1, 9072, 17, 16]). Additional info: {'h': 8, 't': 27}. Expected 3 dimensions, got 4 #9

Open Cheng122 opened 7 months ago

Cheng122 commented 7 months ago

作者您好,非常感谢您的工作。我在基于Human3.6M数据集进行训练时,运行命令:

python run_stc.py -f 27 -b 128  --train 1 --layers 6 -s 3

出现如下报错: 截图 2024-03-12 20-51-28

该如何修改解决呢?感谢您的回复。

zhenhuat commented 7 months ago

作者您好,非常感谢您的工作。我在基于Human3.6M数据集进行训练时,运行命令:

python run_stc.py -f 27 -b 128  --train 1 --layers 6 -s 3

出现如下报错: 截图 2024-03-12 20-51-28

该如何修改解决呢?感谢您的回复。

哈喽,看上去是你的输入数据的尺寸和我的代码不匹配,正确的应该是[b,t,n,2]->变成[b,t,n,c];然后在这一步应该是[9072,17,16]的尺寸变成[42,8,27,17,c],报错是因为当前你的尺寸是[1,9072,17,16],所以rearrange函数无法对第一维进行释放(它1);你可以这样修改,把x_s的第一维压缩掉,就是 x_s = rearrange(x_s.squeeze(0), ‘(b h t)s c-> b h t s c’,h=self.head,t=t). 但是你最好确认一下,从模型最开始就让input_2D的尺寸变成[b,t,n,2]而不是[1,b,t,n,2]。

Cheng122 commented 7 months ago

作者您好,非常感谢您的工作。我在基于Human3.6M数据集进行训练时,运行命令:

python run_stc.py -f 27 -b 128  --train 1 --layers 6 -s 3

出现如下报错: 截图 2024-03-12 20-51-28 该如何修改解决呢?感谢您的回复。

哈喽,看上去是你的输入数据的尺寸和我的代码不匹配,正确的应该是[b,t,n,2]->变成[b,t,n,c];然后在这一步应该是[9072,17,16]的尺寸变成[42,8,27,17,c],报错是因为当前你的尺寸是[1,9072,17,16],所以rearrange函数无法对第一维进行释放(它1);你可以这样修改,把x_s的第一维压缩掉,就是 x_s = rearrange(x_s.squeeze(0), ‘(b h t)s c-> b h t s c’,h=self.head,t=t). 但是你最好确认一下,从模型最开始就让input_2D的尺寸变成[b,t,n,2]而不是[1,b,t,n,2]。

感谢作者的建议,检查input2D尺寸后发现没有问题,我逐行debug发现,是droppath出现了问题:(可能是timm的版本原因导致?)

        x_s = att_s @ v_s + sep2_s + 0.0001 * self.drop(sep_s)[0]  # drop(sep_s)会使sep_s原来的维度[1,s,c//2//h]变为[1,1,s,c//2//h],添加[0]后rearrange不会出现问题   
        x_s = rearrange(x_s, '(b h t) s c -> b h t s c ', h=self.head, t=t)  # b*h*t,s,c//h//2 -> b,h,t,s,c//h//2