google-research / mint

Multi-modal Content Creation Model Training Infrastructure including the FACT model (AI Choreographer) implementation.
Apache License 2.0
508 stars 87 forks source link

loss逐步减小,但FID_k却逐渐增大?(tensorflow & pytorch) #51

Open CuberFan opened 2 years ago

CuberFan commented 2 years ago

本人用Pytorch复刻了一版,也增加了valid过程,结果发现,FID_k最好的是第21个epoch,为101,后面越训练,FID_k的值越大,波动比较大,也不知道什么原因。 loss值降到0.0002左右,基本就不收敛了,FID_k的值能达到7000多, FID_g的值25左右。 使用原作者tensorflow原代码,从头开始训练,loss值降到0.0001后,基本就不收敛了,FID_k的值达到700多,FID_g也就30多,也是完全复现不了原作者放出的训练好的模型。 @liruilong940607

TF: 2.3 cuda: 10.1

pytorch: 1.9.1 cuda: 10.1

阶段进展更新了,pytorch复刻版训练已经收敛,复现了原作者的指标参数,解决方法如下:

1、每一层的初始化方法与TF版保持一致,注意检查每一层的默认初始化方法 2、由于训练集只有952个视频,如果多个GPU同时训练,batch_size设置为32,那么每个epoch只包含几个迭代,建议方法是加载列表后,把列表复制10倍或20倍,这样每个epoch的迭代次数就变为原来的10倍或20倍 3、训练足够多的epoch,如果训练的时候,迭代器中把训练数据列表复制了10倍或20倍,那么loss要收敛到0.00011级别,至少训练800个epoch,0-200 epoch是lr=1e-4,200-500 epoch时lr=1e-5,500-800 是1e-6

另外,我在最后一个CrossTransformer后面,最后一个fc前面,增加了一个2层双向的LSTM,训练下来,loss收敛到0.00011左右,FIDk最小可以达到22.3,比原作者给出的指标还小,但这个指标小,并不代表着生成的舞蹈动作很好,效果如原作者给出的模型类似,只有少数几个效果还行,其他的都不怎么样。

liruilong940607 commented 2 years ago

你好!

我们release的model就是用exactly这个repo train出来的,所以应该是能够复现的。请问你用了几个GPU训了多少个iteration?

BTW, 关于metrics FID,我们的实现在这里,抱歉没有merge到这个repo里面:https://github.com/liruilong940607/mint/blob/main/tools/calculate_fid_scores.py

CuberFan commented 2 years ago

你好!

我们release的model就是用exactly这个repo train出来的,所以应该是能够复现的。请问你用了几个GPU训了多少个iteration?

BTW, 关于metrics FID,我们的实现在这里,抱歉没有merge到这个repo里面:https://github.com/liruilong940607/mint/blob/main/tools/calculate_fid_scores.py

您好,非常感谢您的回复! 我看到您给出的best模型是214501 iter, batch_size是32,请问您是几个GPU训练的?是否有设置tf/np/random的seed ?如果有设置,seed设置为多少?

我用您的这个repo,是单GPU训练,batch_size是32,训练了大概290000 iter,loss降到了0.0001左右,怎么去挑选最好的模型的呢? 挨个模型测试吗? 我用290000 iter最后生成的模型测试,FID_k大概700多,FID_g大概30左右。这个repo的tools文件夹下,也有一份calculate_scores.py代码,不知道和你个人的repo tools下的calculate_fid_scores.py是否有什么不同?

我个人用pytorch复现的算法,因为是以epoch为单位,和您的代码有所不同,batch_size也是32,单gpu训练,每个epoch大概29个iter,一共训练了1W个epoch,loss降到0.0002,然后就不收敛,比您的算法loss稍微高一点点,用最后一个iter的模型测试,FID_k大概7000多,FID_g大概25左右,另外,我np.random.seed、torch.seed和random.seed,我都设置为1,是否会影响初始化和训练,是否和您的相同?

另外,我有个想法,不知道是否成熟,因为训练出来的舞蹈,人体会在水平方向移动,感觉在飘来飘去,似乎smpl_trans没有训练好,然后我就把trans和pose两个部分,分开来计算MSE loss,然后分别加权求和,似乎这样做更合理一些,目前还在训练中。

@liruilong940607

by2101 commented 2 years ago

我直接用提供的checkpoint生成,然后计算fid,也没有计算出和论文中差不多的结果。。。特别是FID_g,特别特别大。。。

CuberFan commented 2 years ago

我直接用提供的checkpoint生成,然后计算fid,也没有计算出和论文中差不多的结果。。。特别是FID_g,特别特别大。。。

FIDk/FIDg,这2个参数,我用作者提供的checkpoint跑出来的结果计算,没什么问题,跟论文上写的差不多,只是转换为FBX可视化的动画效果,有点乱,达不到论文提到的效果,即使是音乐和舞蹈匹配的pair,也不能达到很好效果。

原作者说loss可以降到1e-5 ~ 1e-6,但我用他们的代码训练,只能到1e-4左右

by2101 commented 2 years ago

我直接用提供的checkpoint生成,然后计算fid,也没有计算出和论文中差不多的结果。。。特别是FID_g,特别特别大。。。

FIDk/FIDg,这2个参数,我用作者提供的checkpoint跑出来的结果计算,没什么问题,跟论文上写的差不多,只是转换为FBX可视化的动画效果,有点乱,达不到论文提到的效果,即使是音乐和舞蹈匹配的pair,也不能达到很好效果。

原作者说loss可以降到1e-5 ~ 1e-6,但我用他们的代码训练,只能到1e-4左右

我也没搞清楚怎么回事。另外我没有太搞清楚metric计算的Protocol,为什么计算FID的时候是和整个数据集groundtruth做,不是只和测试集。另外就是为什么extract feature的脚本里面有 * 10把数据重复10次的操作。

CuberFan commented 2 years ago

我直接用提供的checkpoint生成,然后计算fid,也没有计算出和论文中差不多的结果。。。特别是FID_g,特别特别大。。。

FIDk/FIDg,这2个参数,我用作者提供的checkpoint跑出来的结果计算,没什么问题,跟论文上写的差不多,只是转换为FBX可视化的动画效果,有点乱,达不到论文提到的效果,即使是音乐和舞蹈匹配的pair,也不能达到很好效果。 原作者说loss可以降到1e-5 ~ 1e-6,但我用他们的代码训练,只能到1e-4左右

我也没搞清楚怎么回事。另外我没有太搞清楚metric计算的Protocol,为什么计算FID的时候是和整个数据集groundtruth做,不是只和测试集。另外就是为什么extract feature的脚本里面有 * 10把数据重复10次的操作。

我直接用提供的checkpoint生成,然后计算fid,也没有计算出和论文中差不多的结果。。。特别是FID_g,特别特别大。。。

FIDk/FIDg,这2个参数,我用作者提供的checkpoint跑出来的结果计算,没什么问题,跟论文上写的差不多,只是转换为FBX可视化的动画效果,有点乱,达不到论文提到的效果,即使是音乐和舞蹈匹配的pair,也不能达到很好效果。 原作者说loss可以降到1e-5 ~ 1e-6,但我用他们的代码训练,只能到1e-4左右

我也没搞清楚怎么回事。另外我没有太搞清楚metric计算的Protocol,为什么计算FID的时候是和整个数据集groundtruth做,不是只和测试集。另外就是为什么extract feature的脚本里面有 * 10把数据重复10次的操作。

*10 数据重复操作,是把音乐和视频,随机匹配,然后作为测试数据

by2101 commented 2 years ago

我直接用提供的checkpoint生成,然后计算fid,也没有计算出和论文中差不多的结果。。。特别是FID_g,特别特别大。。。

FIDk/FIDg,这2个参数,我用作者提供的checkpoint跑出来的结果计算,没什么问题,跟论文上写的差不多,只是转换为FBX可视化的动画效果,有点乱,达不到论文提到的效果,即使是音乐和舞蹈匹配的pair,也不能达到很好效果。 原作者说loss可以降到1e-5 ~ 1e-6,但我用他们的代码训练,只能到1e-4左右

我也没搞清楚怎么回事。另外我没有太搞清楚metric计算的Protocol,为什么计算FID的时候是和整个数据集groundtruth做,不是只和测试集。另外就是为什么extract feature的脚本里面有 * 10把数据重复10次的操作。

我直接用提供的checkpoint生成,然后计算fid,也没有计算出和论文中差不多的结果。。。特别是FID_g,特别特别大。。。

FIDk/FIDg,这2个参数,我用作者提供的checkpoint跑出来的结果计算,没什么问题,跟论文上写的差不多,只是转换为FBX可视化的动画效果,有点乱,达不到论文提到的效果,即使是音乐和舞蹈匹配的pair,也不能达到很好效果。 原作者说loss可以降到1e-5 ~ 1e-6,但我用他们的代码训练,只能到1e-4左右

我也没搞清楚怎么回事。另外我没有太搞清楚metric计算的Protocol,为什么计算FID的时候是和整个数据集groundtruth做,不是只和测试集。另外就是为什么extract feature的脚本里面有 * 10把数据重复10次的操作。

*10 数据重复操作,是把音乐和视频,随机匹配,然后作为测试数据

没太懂,这是为了把样本数弄多一点好算FID?

CuberFan commented 2 years ago

我直接用提供的checkpoint生成,然后计算fid,也没有计算出和论文中差不多的结果。。。特别是FID_g,特别特别大。。。

FIDk/FIDg,这2个参数,我用作者提供的checkpoint跑出来的结果计算,没什么问题,跟论文上写的差不多,只是转换为FBX可视化的动画效果,有点乱,达不到论文提到的效果,即使是音乐和舞蹈匹配的pair,也不能达到很好效果。 原作者说loss可以降到1e-5 ~ 1e-6,但我用他们的代码训练,只能到1e-4左右

我也没搞清楚怎么回事。另外我没有太搞清楚metric计算的Protocol,为什么计算FID的时候是和整个数据集groundtruth做,不是只和测试集。另外就是为什么extract feature的脚本里面有 * 10把数据重复10次的操作。

我直接用提供的checkpoint生成,然后计算fid,也没有计算出和论文中差不多的结果。。。特别是FID_g,特别特别大。。。

FIDk/FIDg,这2个参数,我用作者提供的checkpoint跑出来的结果计算,没什么问题,跟论文上写的差不多,只是转换为FBX可视化的动画效果,有点乱,达不到论文提到的效果,即使是音乐和舞蹈匹配的pair,也不能达到很好效果。 原作者说loss可以降到1e-5 ~ 1e-6,但我用他们的代码训练,只能到1e-4左右

我也没搞清楚怎么回事。另外我没有太搞清楚metric计算的Protocol,为什么计算FID的时候是和整个数据集groundtruth做,不是只和测试集。另外就是为什么extract feature的脚本里面有 * 10把数据重复10次的操作。

*10 数据重复操作,是把音乐和视频,随机匹配,然后作为测试数据

没太懂,这是为了把样本数弄多一点好算FID?

可以这么理解,数据量太少,同时也测试音乐和舞蹈视频不匹配的情况下生成情况

mingdianliu commented 2 years ago

你好,我也是用pytorch复刻了一遍模型,但结果一般。你的model在test dataset上的loss也能到0.0001吗?我训练了200000 iteration,test dataset的loss一直停留在0.01,training loss到0.002

CuberFan commented 2 years ago

你好,我也是用pytorch复刻了一遍模型,但结果一般。你的model在test dataset上的loss也能到0.0001吗?我训练了200000 iteration,test dataset的loss一直停留在0.01,training loss到0.002

注意:参数的初始化方法非常重要,初始化正确的话,training loss可以达到0.0002的。你这个0.002,太大了,肯定不对。 另外,一个epoch的迭代次数太少了,可以把数据复制10次再进行训练。

mingdianliu commented 2 years ago

我看到原代码只有在cross_output_layer进行了参数初始化,Transformer并没有进行初始化。warm up我还没设置,我设置下试试。

我用的数据集是crossmodal_train.txt中的sequence按照论文的window大小进行split后,把window moving step设置为1后得到的数据集,每个epoch有18000个数据,不知道这样对不对。

CuberFan commented 2 years ago

我看到原代码只有在cross_output_layer进行了参数初始化,Transformer并没有进行初始化。warm up我还没设置,我设置下试试。

我用的数据集是crossmodal_train.txt中的sequence按照论文的window大小进行split后,把window moving step设置为1后得到的数据集,每个epoch有18000个数据,不知道这样对不对。

你检查一下所有全连接层的默认初始化方式,似乎是不同的。 还有PositionEmbedding 和 CrossModalLayer

CuberFan commented 2 years ago

是crossmodal_train.txt中的sequence按照论文的window大小进行split后,把window moving step设置

每个视频的采样,采用随机的初始位置start,你仔细看看TF源代码的迭代器

mingdianliu commented 2 years ago

感谢提醒!我来复现一下

mingdianliu commented 2 years ago

是crossmodal_train.txt中的sequence按照论文的window大小进行split后,把window moving step设置

每个视频的采样,采用随机的初始位置start,你仔细看看TF源代码的迭代器

我直接使用原作者tensorflow的代码,按照readme的步骤train了一遍。40万iteration,loss到0.0004这样。

CuberFan commented 2 years ago

是crossmodal_train.txt中的sequence按照论文的window大小进行split后,把window moving step设置

每个视频的采样,采用随机的初始位置start,你仔细看看TF源代码的迭代器

我直接使用原作者tensorflow的代码,按照readme的步骤train了一遍。40万iteration,loss到0.0004这样。

loss至少要收敛到0.0001才可以

hunting777 commented 2 years ago

是crossmodal_train.txt中的sequence按照论文的window大小进行split后,把window moving step设置

每个视频的采样,采用随机的初始位置start,你仔细看看TF源代码的迭代器

我直接使用原作者tensorflow的代码,按照readme的步骤train了一遍。40万iteration,loss到0.0004这样。 我也是差不多0.0004这样,而且测试demo很有问题,请问你后面有解决么

mingdianliu commented 2 years ago

是crossmodal_train.txt中的sequence按照论文的window大小进行split后,把window moving step设置

每个视频的采样,采用随机的初始位置start,你仔细看看TF源代码的迭代器

我直接使用原作者tensorflow的代码,按照readme的步骤train了一遍。40万iteration,loss到0.0004这样。 我也是差不多0.0004这样,而且测试demo很有问题,请问你后面有解决么

我后续没有解决这个问题

Aourbro commented 1 year ago

本人用Pytorch复刻了一版,也增加了valid过程,结果发现,FID_k最好的是第21个epoch,为101,后面越训练,FID_k的值越大,波动比较大,也不知道什么原因。 loss值降到0.0002左右,基本就不收敛了,FID_k的值能达到7000多, FID_g的值25左右。 使用原作者tensorflow原代码,从头开始训练,loss值降到0.0001后,基本就不收敛了,FID_k的值达到700多,FID_g也就30多,也是完全复现不了原作者放出的训练好的模型。 @liruilong940607

TF: 2.3 cuda: 10.1

pytorch: 1.9.1 cuda: 10.1

阶段进展更新了,pytorch复刻版训练已经收敛,复现了原作者的指标参数,解决方法如下:

1、每一层的初始化方法与TF版保持一致,注意检查每一层的默认初始化方法 2、由于训练集只有952个视频,如果多个GPU同时训练,batch_size设置为32,那么每个epoch只包含几个迭代,建议方法是加载列表后,把列表复制10倍或20倍,这样每个epoch的迭代次数就变为原来的10倍或20倍 3、训练足够多的epoch,如果训练的时候,迭代器中把训练数据列表复制了10倍或20倍,那么loss要收敛到0.00011级别,至少训练800个epoch,0-200 epoch是lr=1e-4,200-500 epoch时lr=1e-5,500-800 是1e-6

另外,我在最后一个CrossTransformer后面,最后一个fc前面,增加了一个2层双向的LSTM,训练下来,loss收敛到0.00011左右,FIDk最小可以达到22.3,比原作者给出的指标还小,但这个指标小,并不代表着生成的舞蹈动作很好,效果如原作者给出的模型类似,只有少数几个效果还行,其他的都不怎么样。

你好,我现在也在尝试使用pytorch复现这个项目,现在遇到了一些问题,请问方便交流一下吗

Sun-Happy-YKX commented 1 year ago

本人用Pytorch复刻了一版,也增加了valid过程,结果发现,FID_k最好的是第21个epoch,为101,后面越训练,FID_k的值越大,波动比较大,也不知道什么原因。 loss值降到0.0002左右,基本就不收敛了,FID_k的值能达到7000多, FID_g的值25左右。 使用原作者tensorflow原代码,从头开始训练,loss值降到0.0001后,基本就不收敛了,FID_k的值达到700多,FID_g也就30多,也是完全复现不了原作者放出的训练好的模型。 @liruilong940607

TF: 2.3 cuda: 10.1

pytorch: 1.9.1 cuda: 10.1

阶段进展更新了,pytorch复刻版训练已经收敛,复现了原作者的指标参数,解决方法如下:

1、每一层的初始化方法与TF版保持一致,注意检查每一层的默认初始化方法 2、由于训练集只有952个视频,如果多个GPU同时训练,batch_size设置为32,那么每个epoch只包含几个迭代,建议方法是加载列表后,把列表复制10倍或20倍,这样每个epoch的迭代次数就变为原来的10倍或20倍 3、训练足够多的epoch,如果训练的时候,迭代器中把训练数据列表复制了10倍或20倍,那么loss要收敛到0.00011级别,至少训练800个epoch,0-200 epoch是lr=1e-4,200-500 epoch时lr=1e-5,500-800 是1e-6

另外,我在最后一个CrossTransformer后面,最后一个fc前面,增加了一个2层双向的LSTM,训练下来,loss收敛到0.00011左右,FIDk最小可以达到22.3,比原作者给出的指标还小,但这个指标小,并不代表着生成的舞蹈动作很好,效果如原作者给出的模型类似,只有少数几个效果还行,其他的都不怎么样。

您好,请问一下您方便分享一下您复现代码的仓库吗