Closed zhLawliet closed 3 years ago
Sorry, I haven't managed to project the posed mesh back to 2D image too. I have talked with the author. The pose parameters seem precise enough for training the model. But there are something wrong with the global orientation (pose[:3]), which cause the failure.
ok,thanks
你好,请问下,movi,hm3.6这些数据在训练的时候,是否做了背景增强?如果做了,他们的人像mask是通过某个开源人像分割模型得到的吗
@Arthur151 目前根据论文看到你这边用到的数据集主要是hm3.6,3dpw,mpi-3dhp,movi, mscoco,不知道是否还用到了其他数据集没?
我训练的时候没有用背景增强。我的训练数据集主要是Human3.6M, MPI-INF-3DHP, MSCOCO, MPII, LSP, UP, AI Challenger(keypoint). 增强版模型还用了MuCo-3DHP, Crowdpose, 3DOH50K。
好的,谢谢,那像 MPI-INF-3DHP这种只有2d,3d标签的数据集,你会自己去fitting出SMPL系数作为gt吗?
我是直接用的关节点监督的。fit的感觉形状很怪。
嗯,谢谢,我确认一下,所以2d数据集,就只能用于重投影监督loss,有2d和3d的数据集,就只监督重投影监督loss和3dloss,有SMPL系数的数据集,则都会进行监督;对于只有2d和3d的数据集,不会去特定通过2d和3d去fiting出smpl系数作为标签。 另外再请教一个问题:训练的时候一个batch里面会包含不同数据类型(类型1:只有2d标签,类型2:只有2d和3d标签,类型3:包含2d,3d,smpl系数标签),那么每一种数据类型在一个batch里面的比值有讲究吗?
肯定有啊,需要去调整的。主要还是看数据能贡献出来的训练价值和模型每个阶段的学习状态。
好的,非常感谢了
你好,想确认一下,hm3.6数据集你是怎么使用的,只是使用了他的3d点和基于相机参数投影得到的2d点吗?我看有的工作会fitting出SMPL系数进行监督。
hm3.6数据集可以通过MoSh算法求得SMPL参数,用于训练。
好的,非常感谢
你好,有几个问题请教一下: 问题1:hm3.6这里可以理解有两个3d标签,一个是hm3.6数据集本身提供了3d点,,另外一个是通过其smpl系数导入SMPL得到的3d点,在监督3dloss的时候,这种真实采集的的3d点和这种smpl输出的3d点是等价的吗?因为我使用相同相机参数可视化这两个3d点的时候,存在scale有明显偏差。
问题2:补充问题1:发现smpl输出的3d点需要乘以代码里面的cam参数的s才等价真实的3d点的scale。这里真实3d点认为是米为单位。如果这个成立的话,那你在训练的时候,smpl输出的3d会乘以相机参数里面的s后,再和真实3d点进行loss计算吗?
问题3:在设计centermap 的标签的时候,因为不同数据集在标注2d点的时候存在主观不一致性,这里对center影响大吗?
1.我还没观察过经相机投影矩阵处理过后的h36m的3D关键点数据是否和smpl参数转化的3D点有尺度偏差,如果有图的化我也方便判断是什么问题。 2.监督3D关节点误差的时候不会乘相机参数。相机参数只是用于投影监督2D关节点误差的。 3.正是为了尽量减低不同数据集关节点定义的差异,ROMP的Center定义是专门设计的,跨数据集稳定的。详情可以看论文方法部分,简单来说就是肢体关节点的中心点。
好的,谢谢,关于”相机投影矩阵处理过后的h36m的3D关键点数据是否和smpl参数转化的3D点有尺度偏差“,我后面整理一下图像和数据发出来。
您好,我目前尝试复现你的开源模型效果,在训练的时候, 相关loss设置如下: e_center_loss_weight: 500. e_2d_loss_weight: 400. e_3d_loss_weight: 500. e_pose_loss_weight: 500. e_shape_loss_weight: 50. (w_prior,w_paj3d,L_2D 没有) 训练集采用了Movi,hm3.6,3dpw,mpi-3dhp,mscoco; 见下图:左边是您的模型输出效果,右边是我的模型输出效果,效果还存在距离,尤其是贴合度方面,尝试通过提升2d loss权重,贴合度会改善,但是影响pose的准确性,尤其global pose。 疑问:我目前训练中没有2D pose estimation loss,不知道这个对模型的效果影响多大?您有相关的独立实验对比吗?以及完全按照论文的配置进行训练,是否能够快速复现论文效果?还是说这里存在一些训练技巧需要注意?非常期待你的解答,谢谢
2D pose estimation分支的训练主要是在预训练阶段进行的,对模型最后的性能(尤其是泛化性)影响很大,还是需要使用一些比较有挑战的2D pose数据集来强化模型对2D关键点位置的感知能力,这样估计3D mesh的时候才能对得好。简单来说,当模型对关键点位置的检测能力足够强,再训3D会比较快的训出来,不然基于center表征的这种监督很弱的架构真的要训非常非常久,这个应该不难理解。3DPW目前的评测protocol实际上测试的就是模型的泛化性。训练tricks上是有一些,但我目前没有对所有tricks进行对比实验,没法说具体每个影响有多大。在合适的时候我会把我训出来的pretrain model开源出来,让大家可以快速复现。目前,建议你在我现在放出来的模型基础上fine-tuning,如果精度不降,就说明你的训练代码可以有效训练。
好的,谢谢你的答复
你好,请问下,你谈到训练tricks上是有一些,不知道方便说一下吗?目前我按照你前面谈到的,先训练好2D pose estimation,然后基于它进行fintune训练,效果还是和你的有差距。另外也在放出来的模型基础上fine-tuning,精度没有明显下降。
你目前测试3DPW上是多少啊?训了多久?
我这边计算的MPJPE 和 MPJPE_PA 分别是105.21和77.22。目前用到的总的训练样本数为48.6w(主要是Human3.6M, MPI-INF-3DHP, MSCOCO, MPII, LSP,3dpw),先只训练了2D pose estimation,heatmap_loss为mse,训练了120个epoch,收敛到1.1e-3。然后基于它进行fintune训练,训练了35个 epoch,其中pj2d loss能够收敛到1.4e-3,Lj3d loss收敛到4e-3。
你这还是在3DPW上fine-tunned了的结果啊。。。那这也太离谱了,你确定你的代码fine-tune我开源的模型没掉点么? 这绝对不是什么trick的问题了。。这差的也太多了,在3DPW上fine-tunned了应该PA-MPJPE能到47左右,就算啥也不调估计应该也能到50左右吧。。请问batch size多少?
嗯,有一点忘记说了,我在finetune的时候,将输入改成了128*224了,可视化效果看着差异不大(从pj2d loss的角度上看的话, 0.0009涨到0.0011,在3DPW上的数值分别为100.5,70.1,如果单纯从数值上看,确实增大了,但是可视化的效果感觉差别不是很大,不知道是不是输入分辨率降低的原因,你说的batch size,验证的时候设置为32,训练的时候是96。
这种输入大小我还真没试过。。而且点掉这么多。。感觉可能训练是有点问题的。
好的,谢谢,我再看看,争取先到50
加油。我还在等一个月后的结果,希望可以尽早开源所有代码。
训练代码已开源~
好的,谢谢
想问一下作者h36m标签中kp3d_mono和kp3d有什么区别呀?实际用的是哪个呢?
谢谢您的回复!还请问一下h36m的poses为什么是[3,72]维度的?想得到smpl的24个3d点怎么转换呢?
我们在这里,用的kp3d_mono。kp3d_mono是在每个相机坐标系里的3D关节点的位置,kp3d是在世界坐标系下的位置。
h36m是视频数据,我们每5帧取一下标注,但其实它的gt给的还是挺高频的,还提供了中间帧周围的gt,我就一起保存了,如果只用中间帧,就选1就好了。 建议看一下我代码吧,地址都给你了,别偷懒哦
哈哈 好嘞~
想请问一下作者,hm36以及mupo-3dph数据集的关节点怎么匹配呢?比如我想使用两个数据集进行训练,即便是同一个joint, neck 每个数据集的标注也不是相同的,这个整合的过程,没有看到您的处理。所以有点疑惑。 新年快乐
您说的很对,现在确实有这个问题,所以导致模型的训练也会有点受这个影响,目前,还是直接默认他们是一个关键点。但最近的有篇文章,可能对您有帮助: Learning 3D Human Pose Estimation from Dozens of Datasets using a Geometry-Aware Autoencoder to Bridge Between Skeleton Formats Istva ́n Sa ́ra ́ndi 他们的做法很有意思,而且看起来还很不错,可以了解一下。
多谢您的回复,我参考看一下。另外有三个问题像请教一下, 麻烦您了 1、model based 和sekelton based的选择 我想驱动一个avatar模型,所以需要知道rotation。 目前的方向有两个,一个是3d 关键点估计(skeleton based),另一个是smpl 这种参数化模型(model based) 这两种方式的优缺点都有那些呢?我认为skeleton based 更容易学习(同等效果下,网络可能更小),因为参数化 模型更加抽象 2、 2d转3d 有一个传统的技术是用在电影上的,将2d电影转为3d电影,这个可以用来将2d人转为3d人,这个技术我一直搜不到,您对这了解吗? 2、模型训练的步骤 假如自己有一个idea,像从头训练一个模型,您往往怎么做呢?我的做法如下,您看看有什么不合理或者遗漏的吗?
数据处理部分: 读取数据集(human3.6M) 组织成自己需要的形式,包括网络的input 和 label(是RNN模型还是CNN模型) 根据label解析出来input, 证明自己算法的可行性(也就是说网络训练的好,就能效果好) 数据增强 网络训练部分: 1张图片或者小批量图片训练, 训练集做为验证集,验证效果,效果好,证明整个结构没有问题 开始大量数据集训练
云上月 @.***
------------------ 原始邮件 ------------------ 发件人: "Arthur151/ROMP" @.>; 发送时间: 2023年2月3日(星期五) 上午10:33 @.>; @.**@.>; 主题: Re: [Arthur151/ROMP] 数据处理细节讨论 (#47)
您说的很对,现在确实有这个问题,所以导致模型的训练也会有点受这个影响,目前,还是直接默认他们是一个关键点。但最近的有篇文章,可能对您有帮助: Learning 3D Human Pose Estimation from Dozens of Datasets using a Geometry-Aware Autoencoder to Bridge Between Skeleton Formats Istva ́n Sa ́ra ́ndi 他们的做法很有意思,而且看起来还很不错,可以了解一下。
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>
@littlejiumi 您好,我目前在使用h3.6m数据集,我想提取smpl的姿态参数,请问您解决这个问题了吗?期待您的回复
你好,我看你论文提到使用了Movi数据集,原始的Movi数据集只提供了3d以及AMASS通过fitting得到的关于SMPL-H的mesh参数。SMPL-H关于shape有16个值,pose有52个,我想知道你在使用Movi的数据集时候,是否使用了AMASS提供的pose和beta。我目前将beta的前10个值和pose前22个值导入到我们当前的SMPL里面,然后借助Movi提供的相机内参和外参以及参考Movi提供的教程,始终无法在我们这个程序中可视化成功。求指教。
如果没有使用,是不是因为AMASS提供的beta和pose不适用我们这个SMPL模型,但是看AMASS论文好像是可以的。 MoVi-Toolbox:MoVi-Toolbox https://github.com/saeed1262/MoVi-Toolbox/blob/master/MoCap/utils.py
按照Movi的教程以及将其mesh系数按照beta[0:10] pose[0:22] + 两个手部pose设置为0传入到我们当前的SMPL smpl_model_path = './centerHMR/models/smpl/SMPL_NEUTRAL.pkl' self.smplx = smpl_model.create(smpl_model_path, batch_size=self.batch_size,model_type=self.model_type, gender='neutral', use_face_contour=False, ext='npz', joint_mapper=joint_mapper,flat_hand_mean=True, use_pca=False).cuda()
@Arthur151