PyTorch-CIFAR-Model-Hub icon indicating copy to clipboard operation
PyTorch-CIFAR-Model-Hub copied to clipboard

自己运行的精度比readme里的低

Open Jerryme-xxm opened this issue 2 years ago • 2 comments

大佬您好,首先感谢您的分享。我运行了一下这份代码,主要跑了mobilevit和mobilenet两个网络,目前有一些问题想问您。 1,直接下载原代码,不改网络结构与参数,得到的精度和readme里的表格有差距。 Mobilevit_s,第160个epoch时,train_acc:0.931(表格中是98.83%);valid_acc:0.906(表格中是92.50%),再继续训练发生过拟合,精度下降。 Mobilevit_xs,第160个epoch时,train_acc:0.925(表格中是98.22%);valid_acc:0.895(表格中是91.77%) Mobilenet v1,train_acc:0.891; valid_acc:0.869(表格中是89.18%) 我用的GPU是Nvidia 1080Ti,不知道为什么精度会差这么大,请问您得到这些结果,每个网络用的参数是什么? args.py文件里下载下来时是resnet20。resnet20倒是比表格中的好一点,valid_acc:0.906(表格中是89.72%),可能是因为您刚好跳的这个网络?

2,我尝试自己调试了下,按照mobilevit原项目的参数,把lr改成0.01,weight-decay改成1e-5,依然表现很差 mobilevit_xxs,train_acc:0.984 (表格中是96.4%); valid_acc:0.870(表格中是90.17%);

3,这个问题并不是很重要,就是我跑mobilenet v2的时候,发现训练速度很慢,比mobilevit都慢很多,gpu利用率只比mobilevit高一点点。train_acc:0.989 ,valid_acc:0.899也比表格低

我跑这个项目的目的是为了压缩mobilevit,所以我进行了一些其他实验,只是调调参,还没有使用蒸馏剪枝等操作。如果您有兴趣,可以探讨一下吗? 我试过把mobilevit里的mobilenet v2模块改成了mobilenet v1,试过改patch_size(2,2)到(4,4),试过把残差消掉,试过改heads数量(这里您使用heads=1,dimheads=32,不知道您怎么考虑的,那篇复现mobilevit的博客用的heads=4,dimheads=8)。 总之不管我怎么改,精度都在0.87左右,甚至于我把mobilevit block里的transformer去掉,参数量由1014672变成了339408,精度还是0.863.

很抱歉写这么多打扰您,但是我水平有限,实在搞不懂原因。期待您的回复。

Jerryme-xxm avatar Jun 03 '22 11:06 Jerryme-xxm

Hi, @Jerryme-xxm

这里实验参数应该没有进行修改,几乎所有实验都是用的默认的这一套配置,你可以看到在run.sh中,mobilevit并没有修改参数。 之前实验运行使用的是单卡V100。

精度不同影响因素很多,具体分析可以看:https://zhuanlan.zhihu.com/p/109166845

但是很遗憾,由于时间很久了,当时运行的日志已经丢失。如果想要提高精度,建议可以适当修改学习率,优化器,Vit模型一般很少使用SGD,学习率一般也比较小。可以试试LAMB优化器?

第二点,这个repo并没有完全对齐mobilevit的参数设置。除了学习率,batch, wd以外,还需要注意数据增强方面的完全对齐。

第三点,mobilenet由于使用的是深度可分离卷积,碎片化内存会比较耗时。而mobilevit中由于部分使用了vit架构,可能一定程度上能缓解这个问题。

最后,mobilevit复现实际上模型直接把官方的实现拿过来了,并没有修改。本项目目前还没有提供剪枝和蒸馏的操作,推荐一个库:mmrazor 这里提供的蒸馏操作还是可以的。但是剪枝目前只支持cnn类的,vit类还没有支持。

pprp avatar Jun 04 '22 02:06 pprp

感谢您的回复。 我按照run.sh,把sched由multistep改成cosine后,结果就和表格差不多了,是学习率高的问题。 当我对其原项目的配置时,把lr改成0.01,使用multistep衰减到后面也只是0.0013;而使用consine函数,就算初始0.1,后面也能衰减到0.0001-。

关于mobilenet v2训练时间的问题,我实验中 mobilenet v1: parameters:1224746 ; total_time: 16.07 mobilenet v2: parameters:2296922 ; total_time: 74.47 mobilevit_s: parameters: 5003120 ; total_time: 41.77 正常来讲vit的推理用时比mobilenet v2慢好几倍。我知道参数量和训练时间不一定成正比,训练用时和推理用时也不一定成正比,但是感觉mobilenet v2的训练速度还是有点反常。

再次感谢您的建议,我会在后面的实验一一尝试。

Jerryme-xxm avatar Jun 04 '22 11:06 Jerryme-xxm