PaddlePaddle / PaddleClas

A treasure chest for visual classification and recognition powered by PaddlePaddle
Apache License 2.0
5.48k stars 1.17k forks source link

为什么我使用ImageNet1k的train进行训练,在val上只能得到60.1%的ACC,按照论文和所给的预训练模型应该可以到66.8%的 #1535

Open caomao1111 opened 2 years ago

caomao1111 commented 2 years ago

欢迎您使用PaddleClas并反馈相关问题,非常感谢您对PaddleClas的贡献! 提出issue时,辛苦您提供以下信息,方便我们快速定位问题并及时有效地解决您的问题:

  1. PaddleClas版本以及PaddlePaddle版本:请您提供您使用的版本号或分支信息,如PaddleClas release/2.2和PaddlePaddle 2.1.0
  2. 涉及的其他产品使用的版本号:如您在使用PaddleClas的同时还在使用其他产品,如PaddleServing、PaddleInference等,请您提供其版本号
  3. 训练环境信息: a. 具体操作系统,如Linux/Windows/MacOS b. Python版本号,如Python3.6/7/8 c. CUDA/cuDNN版本, 如CUDA10.2/cuDNN 7.6.5等
  4. 完整的代码(相比于repo中代码,有改动的地方)、详细的错误信息及相关log
caomao1111 commented 2 years ago

默认GhostNet_x0_5与GhostNet_x1_0的训练设置是一样的,这个需要改吗

cuicheng01 commented 2 years ago

具体训练的是什么模型,在train集合上的acc有多少呢?

caomao1111 commented 2 years ago

训练的GhostNet_x0_5,在训练集上的acc为57%,再验证集上推理得到的acc为60.%。使用ImageNet数据集,在train的时候没有进行验证,因为要在验证集上推理

weisy11 commented 2 years ago

训练的GhostNet_x0_5,在训练集上的acc为57%,再验证集上推理得到的acc为60.%。使用ImageNet数据集,在train的时候没有进行验证,因为要在验证集上推理

请问你是按照PaddleClas的文档进行训练的吗?还是只是使用了网络结构,用其他的方法训练呢?按照文档训练的话,默认会在log里输出训练集和验证集的acc

caomao1111 commented 2 years ago

是按照文档进行训练的,但我需要在ImageNet的验证集上评价模型(测试集是没有label的),也就是把验证集当做测试集,所以在训练时无法进行验证调整模型,原论文也是这么做的,你们是把训练集分割成训练和测试两个来进行train吗?

weisy11 commented 2 years ago

是按照文档进行训练的,但我需要在ImageNet的验证集上评价模型(测试集是没有label的),也就是把验证集当做测试集,所以在训练时无法进行验证调整模型,原论文也是这么做的,你们是把训练集分割成训练和测试两个来进行train吗?

我们是按照通行的ImageNet的训练流程来做的,没有任何特别的地方。如果你的训练没有特别的地方,遵循文档的流程就可以得到结果。

weisy11 commented 2 years ago

btw,是这篇文档么?https://github.com/PaddlePaddle/PaddleClas/blob/release/2.3/docs/zh_CN/models_training/classification.md 其中关于ImageNet数据集的描述: https://github.com/PaddlePaddle/PaddleClas/blob/release/2.3/docs/zh_CN/models_training/classification.md#11-imagenet-1k 95fb1a83927811163a4a26c6497e77bf

caomao1111 commented 2 years ago

是的,数据集和训练方式是没问题的,那是训练的epoch次数不够吗,我看log中间会有一段时间Loss下降的非常慢,不知道为什么

weisy11 commented 2 years ago

是的,数据集和训练方式是没问题的,那是训练的epoch次数不够吗,我看log中间会有一段时间Loss下降的非常慢,不知道为什么

如果你没有修改训练参数,并且按照正常的方式设定训练集和验证集,可以分享一下你的log,我们看一下

cuicheng01 commented 2 years ago

想确认下你的配置,比如卡数,以及当前的batch-size和学习率分别是多少呢?

caomao1111 commented 2 years ago

我发现唯一不一样的是我训练时漏掉了这句o Arch.pretrained=False,请问默认是使用预训练模型吗,log我通过邮件发给您

caomao1111 commented 2 years ago

想确认下你的配置,比如卡数,以及当前的batch-size和学习率分别是多少呢?

单卡,学习率0.8,batch_size为512,都按文档没变

caomao1111 commented 2 years ago

GhostNet_x0_5的训练log

原始邮件

发件人:"Wei Shengyu"< @.*** >;

发件时间:2021/12/10 15:35

收件人:"PaddlePaddle/PaddleClas"< @.*** >;

抄送人:"草帽"< @. >;"Author"< @. >;

主题:Re: [PaddlePaddle/PaddleClas] 为什么我使用ImageNet1k的train进行训练,在val上只能得到60.1%的ACC,按照论文和所给的预训练模型应该可以到66.8%的 (Issue #1535)

是的,数据集和训练方式是没问题的,那是训练的epoch次数不够吗,我看log中间会有一段时间Loss下降的非常慢,不知道为什么

如果你没有修改训练参数,并且按照正常的方式设定训练集和验证集,可以分享一下你的log,我们看一下

&mdash; You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android.

weisy11 commented 2 years ago

我发现唯一不一样的是我训练时漏掉了这句o Arch.pretrained=False,请问默认是使用预训练模型吗,log我通过邮件发给您

想确认下你的配置,比如卡数,以及当前的batch-size和学习率分别是多少呢?

单卡,学习率0.8,batch_size为512,都按文档没变

应该是卡数的问题,默认训练是4卡的。可能是我们的文档在这块强调的还不够清楚,后续版本会添加一个warning提醒用户。

caomao1111 commented 2 years ago

我发现唯一不一样的是我训练时漏掉了这句o Arch.pretrained=False,请问默认是使用预训练模型吗,log我通过邮件发给您

想确认下你的配置,比如卡数,以及当前的batch-size和学习率分别是多少呢?

单卡,学习率0.8,batch_size为512,都按文档没变

应该是卡数的问题,默认训练是4卡的。可能是我们的文档在这块强调的还不够清楚,后续版本会添加一个warning提醒用户。

我只有一块卡的话是无法训练出和文档一样的效果吗?可以的话应该怎样改训练时的参数

weisy11 commented 2 years ago

我发现唯一不一样的是我训练时漏掉了这句o Arch.pretrained=False,请问默认是使用预训练模型吗,log我通过邮件发给您

想确认下你的配置,比如卡数,以及当前的batch-size和学习率分别是多少呢?

单卡,学习率0.8,batch_size为512,都按文档没变

应该是卡数的问题,默认训练是4卡的。可能是我们的文档在这块强调的还不够清楚,后续版本会添加一个warning提醒用户。

我只有一块卡的话是无法训练出和文档一样的效果吗?可以的话应该怎样改训练时的参数

假如显存足够,可以将bs*4,即设为2048,应该能得到很接近的结果。如果显存不够,可以bs不变,学习率/4,这种配置精度会有损失,但是一般不超过1个点

caomao1111 commented 2 years ago

好的,蟹蟹