ROMP icon indicating copy to clipboard operation
ROMP copied to clipboard

how to get and use the pretrained models and reproduce the results of paper

Open liangwx opened this issue 3 years ago • 12 comments

作者您好,您提供的ROMP_HRNet32_V1.pkl是否是通过v1.yml在pretrain_hrnet.pkl的基础上训练得到的吗?

liangwx avatar Feb 21 '22 11:02 liangwx

不是,ROMP_HRNet32_V1.pkl是从0训出来的。pretrain_hrnet.pkl是我为了让大家可以快速复现,不用像我一样每次训特别久,特别制作的。

Arthur151 avatar Feb 21 '22 11:02 Arthur151

请问pretrain_hrnet.pkl怎么使用呢,它里面的权重是只有backbone部分的参数,没有面向2d pose的head的参数吗?

liangwx avatar Feb 21 '22 12:02 liangwx

这里会自动加载pretrain_hrnet.pkl,用于快速训练。ROMP并没有2d pose的head。

Arthur151 avatar Feb 21 '22 12:02 Arthur151

请问您是怎么得到pretrain_hrnet.pkl的?我用sh scripts/V1_train.sh跑起来了,的确自动加载了pretrain_hrnet.pkl,请问大约多少个epoch可以得到类似ROMP_HRNet32_V1.pkl的效果?

liangwx avatar Feb 21 '22 12:02 liangwx

2-3个epoch左右,如果你的batch size是64/32的话,参见这个issue

Arthur151 avatar Feb 21 '22 13:02 Arthur151

sh scripts/V1_train.sh得到的log如下: V1_hrnet_h36m,mpiinf,coco,mpii,lsp,muco,crowdpose_g2,3.log

最佳Evaluation表现在ln6166 ['Evaluation'] on local_rank 0 +-----------+-------+----------+ | DS/EM | MPJPE | PA_MPJPE | +-----------+-------+----------+ | pw3d_vibe | 90.99 | 52.50 | +-----------+-------+----------+ 而/ROMP_HRNet32_V1.pkl用eval_3dpw_test.yml得到的log如下: eval_3dpw_test.log eval_3dpw_test.yml.log

['Evaluation'] on local_rank 0 +-----------+-------+----------+ | DS/EM | MPJPE | PA_MPJPE | +-----------+-------+----------+ | pw3d_vibe | 87.25 | 53.32 | +-----------+-------+----------+

而paper中的table2中的ROMP (HRNet-32)⋆表现是85.5 53.3 Q1:请问为什么您给的ROMP_HRNet32_V1.pkl得到的数值与paper中会有差异,尤其是MPJPE?您在论文table2中使用的另一个model吗? Q2:是否sh scripts/V1_train.sh需要更多的epoch才能得到一个匹配/ROMP_HRNet32_V1.pkl的表现(尤其是MPJPE)的model?2~3个epoch后在MPJPE上还距离ROMP_HRNet32_V1.pkl和paper table2中的表现有一定距离

liangwx avatar Feb 22 '22 13:02 liangwx

Q3:用默认load_pretrain_params读入的backbone参数(pretrain_hrnet.pkl),与通过model_path读入的backbone参数(pretrain_hrnet.pkl),难道不一样吗?下面是我修改成fine_tune=True,model_path=/path/to/pretrain_hrnet.pkl,之后的log: myv2_train_pretrained_hrnet_h36m,mpiinf,coco,mpii,lsp,muco,crowdpose_g0,1.log 明显看出loss较大,下降较慢,且由于validation初始值较大且下降较慢(仍然大于60),导致目前还没出现evaluation

liangwx avatar Feb 22 '22 13:02 liangwx

Q1 & Q2: 在我实验的P40 GPU上跑是论文中的值,后面我也发现了在1070Ti上测试是你的那个值。MPJPE上的差别主要是和模型的拟合数据集的情况有关系,越贴近测试集的domain,MPJPE会越好,而PMPJPE则可以克服domain的gap,更多反映姿态的准确度。HMR伦文中也有类似的讨论和图证。 Q3:用model_path并没有成功加载pretrain_hrnet.pkl,从log就可以看出,backbone的参数一个都没加载上,因为model_path对应的加载函数有prefex,没有加载成功相当于从0开始训。ROMP的loss收敛是到了一定程度会阶梯性的下降,我训过很久了,但他还在收敛,就挺神奇的。loss收敛慢是因为监督方式的原因。detection用的heatmap的训练是整张图都可以获得监督的,但parameter map每次只是采样少量几个点的值进行监督,kernel的训练密度相对较低,所以需要更长时间的训练,我也试过ttfnet那种dense supervision的形式,但显卡跑不下,就没有继续探索。

我正在整理我自己用的强化版训练代码,并且重构ROMP,会有更多的优化,让模型表现更稳定高效。 欢迎交流讨论~

Arthur151 avatar Feb 22 '22 14:02 Arthur151

感谢您及时热情的解答! Q0:loss阶梯性的下降的原因是否是因为heatmap与param map的互相提高导致的?您是否方便提供一下您的tensorboard的events文件,以便做进一步交流。另外您“kernel的训练密度相对较低”,这个kernel具体指的是什么? Q1:对比我的以上两个log,可以看出,pretrain_hrnet.pkl(1)使得第0个epoch的50step的loss初始值直接降了1092.66(2558.13-1465.47),(2)并且加速了loss下降过程,使得第一个evaluation的出现大约能提前至少37个epoch甚至更多,(3)使得避免了loss长期在200-300之间徘徊不能继续降低。说明了不论是收敛过程还是效果上限,pretrain_hrnet.pkl在ROMP训练中的非常重要,但是pretrain_hrnet.pkl( pretrained on 2D pose estimation)本身需要多少训练的时间成本?是否值得先得到pretrain_hrnet.pkl,再得到一个拟合好的ROMP,这种训练顺序? Q2: pretrain_hrnet.pkl结合从零开始训练的ROMP heads,经过2-3个epoch就能达到较好的PMPJPE数值52.50,是否能说明“backbone能提供正确的特征”比“heads”对ROMP整体在PMPJPE的表现贡献更大? Q3:我看到您这里给的log,同样是从0开始训练,在第0~1个epoch里面就出现了evaluation,在9-10个epoch就得到了比较小的PMPJPE数值52.97。请问您用的是强化版本的训练代码吗?loss初始值和下降速度相比我这个加载backbone参数失败的训练实例都有了明显的改善,请问您重点优化了哪些方面?如果使用您强化版的训练代码,是否就可以摆脱对pretrain_hrnet.pkl的依赖?您的强化版训练代码什么时候可以放出? Q4:我这几天刚意识到您的ROMP训练需要非常长的时间(非强化版训练代码从0开始训练需要多久?强化版训练代码从0开始训练需要多久?),对GPU的数量和质量要求较高,请问您主要是从哪里获取的GPU资源,我这边GPU资源紧缺的话,有没有什么推荐的较低成本的获取途径?感谢您!

liangwx avatar Feb 23 '22 06:02 liangwx

Q0: 你说的有这个有可能。太久远了,并没有特意留tensorboard,不过我在尝试重新从0跑一遍,还需要一段时间才能跑完。 Q1:pretrain_hrnet.pkl本身也需要训很久,只是为了方便大家,加快训练,特制的。 Q2:backbone的参数量占模型的主体部分,它的特征质量相应的影响很大。 Q3:你指的那个log可能也不小心用了pretrain。强化版代码主要是调整了loss的设计和数据增强的方法,让模型可以更好地适应不同尺度的人,重点还是放在模型加速上,我还在整理这部分代码,抱歉还不能给出明确的时间。 Q4:确实从0训练需要2个星期以上的时间,我目前在京东AI研究院实习,使用他们的计算资源。不太清楚怎么搞到计算资源。。

Arthur151 avatar Feb 23 '22 07:02 Arthur151

请问您使用过batch_size=128训练过吗?效果怎么样?

liangwx avatar Mar 08 '22 14:03 liangwx

记得最终指标和64并没有多大差别,所以后面一直64来训的。

Arthur151 avatar Mar 08 '22 14:03 Arthur151