Closed coptersack closed 3 months ago
现在好像能训练的,但是多进程训练会报错,只能把NUM_WORKERS改成0
现在好像能训练的,但是多进程训练会报错,只能把NUM_WORKERS改成0
你是在 Windows 上吗?
现在好像能训练的,但是多进程训练会报错,只能把NUM_WORKERS改成0
你是在 Windows 上吗?
是的
在报错中是不是有一段:
AttributeError: Can't pickle local object 'MOTDataset.get_dataset_infos.<locals>.<lambda>'
在报错中是不是有一段:
AttributeError: Can't pickle local object 'MOTDataset.get_dataset_infos.<locals>.<lambda>'
是的
这个问题在 Linux 系统下没有,我没有办法复现。但是根据之前和其他朋友的交流经验,这个问题应该是出在 defaultdict 中的 lambda 表达式,例如: https://github.com/MCG-NJU/MOTIP/blob/1b092827ec244dfe03d61506b78cfd7556138a17/data/mot_dataset.py#L56 这是为了实现嵌套的 defaultdict 用于更好的初始化数据集。可以尝试一下绕开,我搜到的方法可能有:https://blog.csdn.net/lly1122334/article/details/114886444
这个问题在 Linux 系统下没有,我没有办法复现。但是根据之前和其他朋友的交流经验,这个问题应该是出在 defaultdict 中的 lambda 表达式,例如:
这是为了实现嵌套的 defaultdict 用于更好的初始化数据集。可以尝试一下绕开,我搜到的方法可能有:https://blog.csdn.net/lly1122334/article/details/114886444
好像windows的dataloader就是有NUM_WORKERS的问题,感谢大佬,我再自己调试一下,抱歉占用您时间了
也有可能,这个我不太确定,因为我没有 windows 的开发环境,所以没办法感同身受可能哈哈。
没事儿,有问题随时交流。
用partial嵌套确实可以解决问题,感谢大佬
不用谢~ 🎉
用partial嵌套确实可以解决问题,感谢大佬
大佬,具体是用partial嵌套改了哪?我也有这个问题
用partial嵌套确实可以解决问题,感谢大佬
大佬,具体是用partial嵌套改了哪?我也有这个问题
主要就是mot_dataset.py的两处 line 56 :
self.dataset_weights = defaultdict(partial(defaultdict, list))
line 149:
infos = defaultdict(partial(defaultdict, partial(defaultdict, partial(defaultdict, dict))))
用partial嵌套确实可以解决问题,感谢大佬
大佬,具体是用partial嵌套改了哪?我也有这个问题
主要就是mot_dataset.py的两处 line 56 : # self.dataset_weights = defaultdict(lambda: defaultdict(float)) self.dataset_weights = defaultdict(partial(defaultdict, list)) line 149: # infos = defaultdict(lambda: defaultdict(lambda: defaultdict(lambda: defaultdict(dict)))) infos = defaultdict(partial(defaultdict, partial(defaultdict, partial(defaultdict, dict))))
谢谢大佬
我这几天用自己的数据训练之后发现一个严重的问题,检测的效果良好,但是ID的分配几乎没有一个是对的,应该继承上一帧的ID全被舍弃,几乎所有的ID都是新分配的,这是什么原因呢,是因为我的数据量太小了吗,加起来一共182帧,我只有一张3090,所有数据加起来一起训练耗时太久了。
182 帧是只有一个视频吗?
182 帧是只有一个视频吗?
两个
log.txt 文件方便给一个吗?看看 loss 的收敛情况。
log.txt 我自己给summary全写了0,主要是看id_loss吗,好像确实是没有变化
有关于训练参数,有两个关键点:
ACCUMULATE_STEPS
你设定为多少了?ACCUMULATE_STEPS
来看需要设定到多少。但是整体来说,你应该进行更长的训练我认为,才会开始收敛,收敛之后的 ID loss 会显著 << 1.0。ACCUMULATE_STEPS我没有改动,还是2,明白了,就是要调整ACCUMULATE_STEPS和训练轮数再看效果,那ACCUMULATE_STEPS和Epochs如何配合设置,向大佬请教了,此外项目里evaluate部分是不是还没有?
因为我不太了解你们具体的应用场景,我只能给出一些我的理解:
ACCUMULATE_STEPS
需要满足 ACCUMULATE_STEPS * GLOBAL_BATCH_SIZE = 16
。EPOCHS
可能需要设置的有点夸张,你先尝试一下比较长的吧,这个用我这边的算式估计出来的话 epochs 数量会上到 1K 以上,但是因为我之前没有进行过这么小数据集的训练,所以这个算法可能是不对的。你可以先继续训练到 200 epochs 左右看看结果是否收敛。LR_WARMUP_EPOCHS
也稍微提升到 10 左右。另外,你可以尝试一下增加一个训练步骤,在短序列上对 ID embeddings 进行一个初步训练,例如:
SAMPLE_STEPS: [0, 40]
SAMPLE_LENGTHS: [4, 40]
SAMPLE_MODES: [random_interval, random_interval]
SAMPLE_INTERVALS: [4, 4]
如上这样修改可以在前 40 个 epochs 只以 clip_length=4 的形式进行训练,从而减少一定的开销。 PS:也可以更短,例如 clip_length=2/3 应该也是可以的。
你可以参考一下我在 Results 中给出的 DanceTrack 的 log.txt 文件,了解一下模型大概的收敛曲线。
好滴,十分感谢,太麻烦您了!
不用谢~
感谢大佬的工作,我现在想用您的模型在自己的数据集上训练,有训练指令吗。