ZhouYuxuanYX / BlockGCN

This is the official implementation of our CVPR 2024 paper "BlockGCN: Redefine Topology Awareness for Skeleton-Based Action Recognition"
Apache License 2.0
58 stars 8 forks source link

复现代码结果问题 #7

Closed zhaokaipan closed 3 months ago

zhaokaipan commented 3 months ago

您好,我按照您的readme复现了您的工作,在ntu60数据集上面我跑了一下xview视角的结果,识别结果如下图所示,top1分数为91%大概,跟您论文里的94.9,稍有差距,我想知道这是什么原因引起的? ![Uploading ecd60ec2798c0f65c9cd70d752f660a.png…]()

您给出的代码并不能直接用来执行,在blockgcn文件里,model部分关于测试部分和模型部分均少了一个joint参数,我加上之后才可以运行程序,除此之外,我在训练时的批次为8,这是由于我的显卡内存限制,其他均保持不变。 期待您的回复! 谢谢!

ZhouYuxuanYX commented 3 months ago

您好,

首先batch size对神经网络的优化影响较大,如果内存不够建议你采用gradient accumulation或者graident checkpointing来解决。更重要的一点是,这个领域的分数最常见的是融合4个模态的结果,即joint, bone, joint motion和bone motion。还有很多文章甚至采用6个模态或者用其他模态替换掉了比较弱的motion模态。所以我们所采用的四模态融合结果是绝对公正可靠的。

其实这些在我们的文章以及相关文献里都有详细表述,请你仔细阅读一下文章。另外我们提供了ensemble.sh用来得到融合结果。希望大家在提问之前能自己多花点时间研究清楚。 这个joint我看了一下,好像并没有少呢,请问能够具体指出哪一行的code吗,谢谢。

zhaokaipan commented 3 months ago

您好! 十分感谢您的回复,十分不好意思,是我的描述不够清楚,我上述的复现工作只跑了关于joint部分的内容,ntu60最好是90.97,您论文里是94.9,ntu120是81.58,论文部分是87.7,可能跟我的训练批次有关系,4模态融合的工作我后续会继续做,感谢您的指导! 但是我确实在跑您的代码的时候出现了少参数的现象,导致程序在对joint部分单独训练的时候出现了问题,具体是在main函数的580和588行部分,就是关于训练过程中测试的部分,580行程序提示期望的参数不只有三个,具体更改由 for batch_idx, (data, label, index) in enumerate(process):改为 for batch_idx, (joint,data, label,index) in enumerate(process) 588行由 output, y = self.model(data, F.one_hot(label, num_classes=self.model.module.num_class))改为 output, y = self.model(data, F.one_hot(label, num_classes=self.model.module.num_class),joint),这部分的修改是我看了您的程序后修改的,修改之后可以正常训练,不知道这样的修改是否正确,希望得到您的指点!谢谢! 祝您工作顺利,生活愉快!

ZhouYuxuanYX commented 3 months ago

我现在看到了,test函数的确少了joint参数,更新的时候给漏掉了。代码已修改,感谢提醒。