各位参赛的小伙伴们,你们模型都训好了吗?都用的什么呀?现在都多少分了呀?带着这几天踩坑经历,挥泪记录一下(踩坑过程中多谢另一位参赛者的帮助和交流,帮助我少走了不少弯路,这里暂不透露该参赛者姓名)
1. SSD分支?YoloV3分支?还是PaddleDetection?
我前几天写过一个关于到底用PaddleDetection里面哪个框架的帖子。然而,在真正搞起来之后,我才发现我真的是太naive了...首先PaddleDetection封装的过于复杂,不利于改动,初学者看的话真的是一头雾水;这时SSD和YoloV3的分支显得友好许多,至少很多东西修改起来得心应手,没有那么多封装。由于YoloV3模型较大,所以...最终我还是选择了官方推荐的SSD。而且baseline_model用的也是SSD,大家可以用这个分支验证一下。
2. 竟然全是SSD的预处理?难怪官方推荐SSD
有一定经验的小伙伴一定会很快就发现,测评工具score.py里面的数据预处理默认就是SSD的那一套,300x300,均值127.5。所以,使用其他框架的小伙伴一定要注意,预处理要一致,否则本地验证一时爽,先上测评....我就不多说了。
3. COCO到底有多少类?91 or 81?
如果你使用PaddleDetection,你会发现它和score.py一样,都是81类:80类目标和1类背景。但是如果你用SSD这个分支,会发现,怎么是91类呢?这不对啊。解释如下:COCO除去背景确实有90类,但是这90类分为了两个level,其中80类相当于子类,就是我们经常训练的,另外10类为父类,是包含那80类的。所以在使用SSD分支时,一定要在reader那里将10个父类去掉,否则结果会不正确的。具体修改方法可以参见:https://github.com/PaddlePaddle/models/blob/develop/PaddleCV/PaddleDetection/ppdet/data/source/coco_loader.py
4. 训练好的模型怎么在score中无法加载呢?_model_ 这个文件在哪里?
如果你将train完的model直接丢进score中,一定会报错的,这是因为train保存的是vars,而我们最终要提交的模型是inference,而且也只有在inference中才会有_model_这个文件。所以呢,写个脚本,把模型load进来,再存成inference。
5. 模型能加载了,可视为什么结果不对呀?或者计算score时出错?
这个问题就更有意思了,不论使用PaddleDetection、SSD、还是YOLO,直接存成inference都不行,为什么呢?详见本次比赛提交格式说明:【模型的输出包含bbox、score和background_label】等等等,然后思考一下如何来存inference吧。
6. 想自己搞点新模型怎么办?
很多期待拿好成绩的参赛者都会想要复现一些最近比较好的模型,这是在所难免的,但同时带来的问题就是,预训练模型没有怎么办。这几天我测了两个模型(模型保密,哈哈),预训练是我自己在imagenet上做的,top1在0.65-0.68左右。同样使用两块1070Ti显卡,在coco2017上同样训练30epochs,有预训练的模型map达到了0.15,而没有预训练的只有0.13多点。从这个角度简单看一下,如果真要想自己搞点事情,最好还是在imagenet上训一波,然后再拿过来训练检测网络比较好。
7. 量化训练
关于使用compressor进行量化训练的问题,官方提供了demo【https://aistudio.baidu.com/aistudio/projectdetail/86232】,小伙伴们可以去参考一下。不过在我使用量化脚本训练时,我并没有使用compressor,而是使用了量化的low api,这样做主要是能够更加方便的调试,也可以更加直观的把控训练情况。PS. 有小伙伴说量化训练训着训着就nan的事儿,我确实也遇到过,而且概率还不低,这个情况是谁的锅现在还无法确定。
8. 剪枝训练
相比于量化的巨大收益,剪枝也是不甘示弱的。我这里使用的是compressor进行的剪枝训练,我设定了0.4的剪枝比例,成功地将madds降低了40%,这一点paddle做的还是不错的。不过剪枝训练加保存模型这里有很多的坑,小伙伴们可要注意了。继续说剪枝,我使用剪枝训练了15个epochs,map降低了0.014,madds降低了40%,其实最终计算,整体收益并不是很大。也许再多训一些可能会提升吧,也有可能剪枝对于检测网来说没有backbone那样稳定,who knows。
9. 蒸馏训练
蒸馏训练在这里应该是非常的难了(至少我研究了好久),而且配置起来也相当的复杂,代码改动量也是相当的大,这里先不描述了。。。等我有了效果再来更新。
【踩坑未完,待续......】
赞一个
这还有技术坑
看看都是些啥坑
任重而道远
模型训练也有坑
期待避坑指南
等我踩得差不多了再写一篇
大体上还好,细节上事儿还挺多的
请教一下官方提供的基线只能做测评吗?训练、测试、验证要自己写?
增加了不少经验
官方基线模型是基于SSD的,可以作为预训练模型直接加载进去继续训练。也可以拿来做测评。
在本机训练,还是AI平台呢,感觉都很慢
这个真的需要一步一步的走,错过一部就跟不上了
等大家把坑填好了再认真学习一遍。
我在本机跑的,方便调试,后期考虑到aistudio上同步训练
任重而道远。。。
这个方法也好
求教保存inference的api中,`fluid.io.save_inference_model`里面`feeded_var_names`和`target_vars`这两个参数应该如何设置~
感谢,顶起
请问你解决这个问题了么,我也遇到了同样的问题