MCG-NJU / MOTIP

Multiple Object Tracking as ID Prediction
https://arxiv.org/abs/2403.16848
Apache License 2.0
90 stars 8 forks source link

相同配置下训练结果差异较大,请求帮助 #26

Closed 258863 closed 1 month ago

258863 commented 1 month ago

您好,

我在使用 MOTIP 项目的时候遇到了一个问题。我发现您给出的示例使用相同的配置文件进行训练时,模型的输出结果差异较大,例如:

使用配置文件A时,输出结果为: Sports: 71.9, 83.4, 62.0, 92.9, 75.0 使用配置文件A时,输出结果为: Sports: 75.2, 86.5, 65.4, 96.1, 78.2 image

这两个实验的配置文件是完全相同的,但结果却有显著差异。我想知道这是否可能与训练数据量的不同有关,还是有其他可能的原因。

能否请您帮忙解释一下为什么会出现这样的情况。非常感谢!

期待您的回复。

HELLORPG commented 1 month ago

您的猜想是正确的,是因为这两个实验所用的数据集有所不同。详情可以点开 NOTE 进行查看,简要来说:

  1. Sports* 比 Sports 多使用了 SportsMOT 的 val set 用于训练,这一点主要是用于对齐一些近期工作以及该 benchmark 提出时的评估策略。
  2. 目前我们还没有上传使用 Sports 数据集训练的配置文件,这两个目前是同一个配置文件主要是方便大家可以推理使用 Sports 训练得到的 checkpoint。

如果还有其他疑问,欢迎回复讨论。

258863 commented 1 month ago

您好,非常感谢您的解答,这边还有一些问题,我正在使用单卡 NVIDIA GeForce RTX 3090 训练一个与 SpotMOTS 类似但又有所不同的训练集(数据量差距应该不大)。在训练过程中遇到了一些问题,希望能够得到一些指导。 训练时间问题:与您的训练时间相比,我的训练速度显著较慢,远超过8 倍,单个 epoch 的训练时间甚至达到了 16 小时。这远远超过了我的预期。请问您是否有优化建议,可以帮助我缩短训练时间? 预训练模型的使用:我注意到在使用与您相同的预训练模型时,您的模型在训练的初期能够将 loss 降低到 1 左右,而在与您进行对比时,我的模型经过 6 个 epoch 后,loss 仍然高达 3.0。您能否提供一些建议,帮助我缩小这个差距?或者有什么方法可以更有效地利用预训练模型? image

非常感谢您的时间和帮助,期待您的建议!

258863 commented 1 month ago

已经在您的配置中找到预训练脚本了,预训练后应该会在初期就达到比较低的detr_loss

HELLORPG commented 1 month ago

不好意思,最近比较忙,没能及时回复。

已经在您的配置中找到预训练脚本了,预训练后应该会在初期就达到比较低的detr_loss

确实,优先预训练之后可以快速收敛,预训练到收敛即可,不一定需要达到最优检测性能(只是给模型一个初始化状态)。

我的训练速度显著较慢,远超过8 倍,单个 epoch 的训练时间甚至达到了 16 小时

我查看了一下你的训练速度和我在 3090 上的速度,差距应该是在 0.5s/iter 左右,大概有 30% 左右的速度差距。有可能是如下的原因:

  1. CPU 核心数可能不足,建议 NUM_WORKERS * 1.5 < CPU 核心数,这只是一个针对这个工作的经验设置(在此标准下,超过 8 之后效果就不是非常明显了在我的实验中)。
  2. 数据集是否放到固态硬盘。由于我们的方法需要进行长序列训练,因此固态硬盘和机械硬盘的数据读取速度差距还是比较明显的。 按理来说,同样的 3090 显卡,由于你是单卡训练,其速度应该优于采用 DDP 的多卡训练(每一个 iter 所耗时间)。

请问您是否有优化建议,可以帮助我缩短训练时间

这部分的话,由于我们一直都是八卡进行训练的,受限于资源,还没有来得及尝试更多的设置。不过之前有和其他开发者在这里 #24 的最后讨论过,总结了几条可能可以减少训练开销并且更加适配单卡训练的一些想法。如果有需要的话,可以参考一下;如果之后你尝试出更好的配置或者验证了我所提出的配置的有效性,或是遇到了什么问题,欢迎与我交流或者提出一个新的 issue。

HELLORPG commented 1 month ago

我查看了一下你的训练速度和我在 3090 上的速度,差距应该是在 0.5s/iter 左右,大概有 30% 左右的速度差距。

这里我应该是看错了,我的 log 是在 4090 上的速度。我稍微重新跑了一下,你这个速度在 3090 上应该是比较正常的,我在 3090 上多卡的速度是 > 2.5s/iter,供参考。

258863 commented 1 month ago

我查看了一下你的训练速度和我在 3090 上的速度,差距应该是在 0.5s/iter 左右,大概有 30% 左右的速度差距。

这里我应该是看错了,我的 log 是在 4090 上的速度。我稍微重新跑了一下,你这个速度在 3090 上应该是比较正常的,我在 3090 上多卡的速度是 > 2.5s/iter,供参考。

好的,我明白了,感谢您的解答