zimyang / MaskRelation

Code of masked relation learning for deepfake detection
Apache License 2.0
25 stars 2 forks source link

关于训练时验证集性能不佳以及参数设定的问题 #5

Open muchatang opened 6 months ago

muchatang commented 6 months ago

您好,在跑训练代码训练模型时,我遇到了一些问题,希望能得到您的帮助,非常感谢!

在训练过程中,我发现训练集的ACC比较稳定的提升,但是验证集的Acc一直在50左右波动,AUC则是波动剧烈,在57-90之间波动, 部分训练结果如下: epoch16: Acc:52.410 Auc:84.277 Pre:52.157 Rec:100.000 F1:68.557
epoch17:
Acc:52.259 Auc:64.254 Pre:52.259 Rec:100.000 F1:68.645 epoch18: Acc:48.720 Auc:57.736 Pre:48.681 Rec:100.000 F1:65.484 epoch19: Acc:49.699 Auc:79.181 Pre:49.047 Rec:100.000 F1:65.814 epoch20: * Acc:50.452 Auc:83.204 Pre:50.152 Rec:100.000 F1:66.801 考虑到硬件限制,我使用的显卡都是24G内存的。在尝试使用config.py文件中为r3d设定的原始batchsize值(40)时,我遇到了cuda内存超出的问题。 因此,我将batchsize值调整为8,同时学习率也相应地调整为原来的五分之一,即: self.lr = 4e-5 # 原始值是2e-4 self.warmup_lr = 2e-7 # 原始值是1e-6 在训练时,我使用了总共4块显卡,并且其他参数均保持默认设置。预训练模型是从https://download.pytorch.org/models/mc3_18-a90a0ba3.pth下载的,而训练与验证数据集都是完整的faceforensics++训练与验证集。

想请问一下可能导致上述训练时验证集ACC上不去,AUC剧烈波动的原因,非常感谢!

此外,我注意到原始代码中的参数与Masked Relation Learning for DeepFake Detection文章中所提及的参数存在差异。 原始代码中,初始学习速率为2e-4,batchsize为40,epoch为100,采用warm up以及cosine策略。 文章中提到的初始学习速率为1e-4,batchsize为30,epoch为30,每5个epoch学习率变为原来的2分之一。 因此,我还有一个问题:如果我想在faceforensics++数据集上复现文章中的结果,我是否应该将这些参数调整为与文章一致? 同时,文章中的batchsize值是指单GPU的batchsize还是多个GPU的batchsize总和?如果是单GPU的batchsize为30,那么单GPU的内存需求似乎会非常高,接近50G。

期待您的回复,非常感谢!

AdaxKK commented 5 months ago

您好,我在训练过程中也遇到了这种现象(训练时训练集上ACC高,验证集上只有50左右),请问您现在解决了吗,可能是什么原因引起的?谢谢!

muchatang commented 5 months ago

您好,我在训练过程中也遇到了这种现象(训练时训练集上ACC高,验证集上只有50左右),请问您现在解决了吗,可能是什么原因引起的?

我还没有解决,后来给作者发了邮件但是还没有回复,暂时这个部分搁置了

AdaxKK commented 5 months ago

您好,我在训练过程中也遇到了这种现象(训练时训练集上ACC高,验证集上只有50左右),请问您现在解决了吗,可能是什么原因引起的?

我还没有解决,后来给作者发了邮件但是还没有回复,暂时这个部分搁置了

您好,请问您提取视频帧的时候是提取了每个视频的所有视频帧吗?

muchatang commented 5 months ago

您好,我在训练过程中也遇到了这种现象(训练时训练集上ACC高,验证集上只有50左右),请问您现在解决了吗,可能是什么原因引起的?

我还没有解决,后来给作者发了邮件但是还没有回复,暂时这个部分搁置了

您好,请问您提取视频帧的时候是提取了每个视频的所有视频帧吗?

是的,我提取了所有视频帧(针对部分视频检测有错误的情况,一些视频会选择最长正确区间)

zimyang commented 5 months ago

出现CUDA Out of Memory很可能因为没有启用混合精度训练模式,单显卡混合精度训练的指令: python train_ffpp.py --amp --gpu 0

经实验验证,batchsize=30,混合精度训练需要占用24GB显存,您的硬件符合要求,建议您使用混合精度训练模型。

训练参数以论文的Implementation Details(IV.A.2))为准,batchsize为30,每5个epoch学习率变为原来的1/2。代码实际没有使用warm up以及cosine策略,学习率调整策略使用了StepLR方法, scheduler = optim.lr_scheduler.StepLR(opt, step_size=config.scheduler_step, gamma=config.scheduler_gamma)

其他实验参数按照论文所述配置即可。

zimyang commented 5 months ago

您好,我在训练过程中也遇到了这种现象(训练时训练集上ACC高,验证集上只有50左右),请问您现在解决了吗,可能是什么原因引起的?

我还没有解决,后来给作者发了邮件但是还没有回复,暂时这个部分搁置了

您好,请问您提取视频帧的时候是提取了每个视频的所有视频帧吗?

是的,我提取了所有视频帧(针对部分视频检测有错误的情况,一些视频会选择最长正确区间)

Batchsize过小容易影响模型的准确度,建议您按照上述方法使用混合精度amp训练模型。