Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Jerryme-xxm opened this issue Jun 3, 2022 · 2 comments
Open

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

Jerryme-xxm opened this issue Jun 3, 2022 · 2 comments

Comments

@Jerryme-xxm
Copy link

大佬您好,首先感谢您的分享。我运行了一下这份代码,主要跑了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.

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

@pprp
Copy link
Owner

pprp commented Jun 4, 2022

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类还没有支持。

@Jerryme-xxm
Copy link
Author

感谢您的回复。
我按照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的训练速度还是有点反常。

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants