2019百度之星检测框架如何选择(技术分析)
收藏
快速回复
香港置地2022年置慧杯:商业综合体能耗预测 文章学习资料开源方案其他 3149 8
2019百度之星检测框架如何选择(技术分析)
收藏
快速回复
香港置地2022年置慧杯:商业综合体能耗预测 文章学习资料开源方案其他 3149 8

       开赛在即,想必很多小伙伴已经开始使用PaddlePaddle开始训练了。相比于常规的COCO大赛,本次比赛不仅看Map,还要看模型的计算量,这是一大亮点。为了降低参赛门槛,PaddleDetection是可以直接拿来训练的,但是PaddleDetection里面提供了很多的框架和模型,很多刚上手的小伙伴们一时间可能不知道如何选择,这里我根据个人经验和理解,对框架和Backbone选择做一些分析,希望能够跟各位参赛选手进行更多交流。

       首先我们来看一下本次比赛评估方法:

       map大家并不陌生,而且大多数论文和Benchmark里面都经常提到,那么我们在关注精度的同时,就要看一下MOPs的影响了。以【160,1300】两个上下限为例,如果是160,那么计算出来的bias为-3.203,也就是说,当你的模型复杂度很低时,Madd是可以提升分数;如果是1300,那么bias为1.4596,二者差值为4.663。反映到map中,就是0.04663的差值。

       根据上述计算,举个例子,如果A选择了某二阶段检测器,map为0.4,MOPs为1300,那么他的实际得分为38.5405;B选择了某单阶段检测器,map为0.36,MOPs为160,那么B的实际得分为39.203,所以尽管B的准确率低,但是由于模型计算量小,他的综合得分更高。说了这么多,很多刚上手的童鞋仍然对MOPs没有概念,那么我们来看下面两张图。

        第一张图告诉大家当前比较主流的Backbone的MAdds是多少,尽管本次比赛可以使用剪枝、蒸馏、量化等方式来加速,但是仍然需要结合最原始的模型结构来适度进行。所以我们看到,像Resnet-152和NasNet-Large这种的,就不要考虑了,基本上怎么搞都是超限制的,而且最终模型要小于30M,这一类基本上是没戏了。所以基本上MobileNet V1、MobileNet V2和ShuffleNet无疑是首选,NasNet-mobile在Paddle里面没有,不建议自己搞,训练也很麻烦。Inception在限制边缘,但是考虑到精度高,性价比好,如果一系列加速方法能够降低复杂度,我觉得Inception也是可以的。至于Resnet,34和50应该能够满足需要,101和152八成是不行了。所以我建议从以下模型中进行选择(MobileNet系列、ShuffleNet系列、Resnet34、Resnet50、Inception系列)

       第二张图是PaddleDetection当前支持的结构,我们可以看到,所有的二阶段检测器都不支持MobileNet,只支持Resnet一类的(SENet基本就不要考虑了,精度很高,模型很大...);那么就剩下了RetinaNet、YoloV3和SSD:RetinaNet是SSD的升级版,精度优于SSD,但是由于其中加入了FPN,submodels等,另外Pyramid Feature也比SSD更多更复杂,所以并不能说哪个模型能够取得更优的分数。

       Yolov3和SSD均支持MobileNet这一类小模型,并且官方文档里说Yolov3经过优化比原始论文中更好,所以就我个人而言,我更倾向于先用Yolov3,因为本身Yolov3效果就优于SSD,二者计算量也是相当,比较直观的感受就是,Yolov3应该比SSD能好。然而在比赛介绍页面,官方建议使用SSD,也许官方已经验证过了SSD效果最好?还是上手最简单呢?我们不得而知。但是通过上面的分析,我个人建议先使用单阶段的Yolov3和SSD,有一定基础的童鞋也可以尝试魔改RCNN系列,如果二阶段拿了最高分,是不是可以发一篇高水平的论文了呢?哈哈,期待每一位参赛选手都能取得好成绩!

      上述分析仅是我个人浅见,如有纰漏,希望各方大佬指正。

4
收藏
回复
全部评论(8)
时间顺序
Litchll
#2 回复于2019-07

如果用mobilenet v3 但是没有预训练模型,直接在coco上训练,效果是不是会不尽人意呀

0
回复
叔夏33
#3 回复于2019-07

很棒的技术指导帖!报名百度之星开发者大赛的同学看过来~还没有报名的同学,一键传送门:https://aistudio.baidu.com/aistudio/competition/detail/7

0
回复
Seigato
#4 回复于2019-07
Litchll #2
如果用mobilenet v3 但是没有预训练模型,直接在coco上训练,效果是不是会不尽人意呀

建议自己改模型的话还是要预训练的,一个比较简单的办法是从ImageNet中抽取一部分与coco相似的类别进行预训练,这样会比较稳,训练检测网络也能快速收敛

0
回复
Litchll
#5 回复于2019-07
Seigato #4
建议自己改模型的话还是要预训练的,一个比较简单的办法是从ImageNet中抽取一部分与coco相似的类别进行预训练,这样会比较稳,训练检测网络也能快速收敛

好嘞,谢谢大佬,我去试试

0
回复
才能我浪费99
#6 回复于2019-07

这两天准备试一试

0
回复
w
wangwei8638
#7 回复于2019-07

官方基线用的是什么模型

0
回复
l
luckyToMe2
#8 回复于2020-01

看看

0
回复
w
wangwei8638
#12 回复于2020-12

学习

0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户