一场办了15年的比赛,为何让一批又一批年轻开发者如此着迷?

原创
2019/12/17 19:30
阅读数 40

同样的青春,每个人有着不同的经历。

 

但在被誉为技术界“奥斯卡”之称的百度之星大赛上,有一群年轻人却有着同样的故事,不管是身在象牙塔,还是已位于科研前线,在开发赛道上表现出的技术实力,让他们闪耀四方。

 

今年百度之星的赛题是打造一款轻量级的目标检测模型。这也是计算机视觉技术中最基本的任务之一,比如在关键点检测、实例分割等方面都会在此基础上进行,应用前景十分广泛。

 

“此次比赛不仅需要考虑mAP,同时考虑了Madds,兼顾精度与速度的要求。”刚刚结束的2019百度之星开发者大赛中获得第一名的Litchll队长张鹏松这样看待本次的赛题。由于兼顾速度与精度,所以模型会非常适合嵌入式设备和手机,在此类设备中达到实时处理。在生活中也有很大的应用前景,比如可以在手机中部署实现图片识别、检测、甚至美颜等;航拍无人机的图像进行自动跟随、障碍物识别等。

张鹏松已经参加过两次飞桨的比赛,飞桨也是越用越顺手。

 

他的团队分工明确:文献查阅与赛题分析、基础模型复现和模型整体架构构建及训练三个部分。在文献查阅与赛题分析方面,主要的目的是分析赛题,根据评测指标去查阅最新的模型,并且统计下来各论文模型的数据,按照赛题的评分标准去计算论文级别的理论成绩,最后从中选取比较好的模型。模型选取之后就要将基础模型复现,这部分需要从选中的模型里,按照论文数据或者开放出来的其它框架的代码,利用飞桨去复现backbone或者整体模型,对于为backbone的在imagenet上进行预训练或者从其它框架里转换预训练模型;模型整体架构的构建和训练是最为费时的一个,因为其需要负责整个代码的框架制定训练策略、数据增广策略以及各种训练调参。

 

“本次比赛主非常考验目标检测相关知识,比如常见的单阶段目标检测方法:SSD、Yolov3、Centernet等,双阶段目标检测方法:Faster RCNN、ThunderNet等。”张鹏松说起比赛仍很激动,他为了提高模型的泛化能力还做一些数据增广,例如旋转、镜像、对比度、亮度等。为了与更多飞桨开发者分享本次百度之星比赛的收获,他将比赛代码进行了开源并上传至AI Studio中。

 

项目地址:

https://aistudio.baidu.com/aistudio/projectDetail/189267

01

简介

Single Shot MultiBox Detector (SSD) 是一种单阶段的目标检测器。与两阶段的检测方法不同,单阶段目标检测并不进行区域推荐,而是直接从特征图回归出目标的边界框和分类概率。SSD 运用了这种单阶段检测的思想,并且对其进行改进:在不同尺度的特征图上检测对应尺度的目标。如下图所示,SSD 在六个尺度的特征图上进行了不同层级的预测。每个层级由两个3x3卷积分别对目标类别和边界框偏移进行回归。因此对于每个类别,SSD 的六个层级一共会产生 38x38x4 + 19x19x6 + 10x10x6 + 5x5x6 + 3x3x4 + 1x1x4 = 8732 个检测结果。

 

SSD 可以方便地插入到任何一种标准卷积网络中,比如 VGG、ResNet 或者 MobileNet,这些网络被称作检测器的基网络。在这个示例中我们使用 shufflenet。

 

在训练时还会对图片进行数据增强,包括随机扰动、扩张、翻转和裁剪:

  • 扰动: 扰动图片亮度、对比度、饱和度和色相。

  • 扩张: 将原始图片放进一张使用像素均值填充(随后会在减均值操作中减掉)的扩张图中,再对此图进行裁剪、缩放和翻转。

  • 翻转: 水平翻转。

  • 裁剪: 根据缩放比例、长宽比例两个参数生成若干候选框,再依据这些候选框和标注框的面积交并比(IoU)挑选出符合要求的裁剪结果。

 

 也可以采用一些其他数据增广方法:

InstaBoost:

 

 论文:https://arxiv.org/abs/1908.07801

 

 代码:https://github.com/GothicAi/InstaBoost

  

RandAugment:

 

https://arxiv.org/pdf/1909.13719.pdf

https://github.com/tensorflow/tpu/blob/master/models/official/efficientnet/autoaugment.py

目录:

| work
   |-- astar2019
      |-- score.py
      |-- ...
   |-- ssd
      |-- train.py
      |-- mobilenet_ssd.py
      |-- ...
   |-- coco
      |-- train2017
      |-- val2017
      |-- test2017
      |-- ...

02

解压数据集

get_ipython().system('unzip -qo -d work/coco/ data/data7122/train2017.zip')
get_ipython().system('unzip -qo -d work/coco/ data/data7122/val2017.zip')
get_ipython().system('unzip -qo -d work/coco/ data/data7122/test2017.zip')
get_ipython().system('unzip -qo -d work/coco/ data/data7122/annotations_trainval2017.zip')
get_ipython().system('unzip -qo -d work/coco/ data/data7122/image_info_test2017.zip')

03

安装相关依赖库

get_ipython().system('pip install pycocotools')
get_ipython().system('pip install ujson')

飞桨已发布了图像分类模型库:

https://github.com/PaddlePaddle/models/tree/develop/PaddleCV/image_classification

用户可以参照work/ssd/中的mobilenet_ssd、shufflenetv2_ssd.py、mobilenetv2_ssd.py等添加自己的backbone。

04

开始训练

训练策略采用了warmup,优化器采用的Momentum,用户也可以自己更改优化器,保存的预测模型会以图片的height_width_xxx来命名:

get_ipython().system('python3 work/ssd/train.py --learning_rate 0.00001 --data_dir work/coco --epoc_num 220 --batch_size 32')

执行score

score模型的名字需要是height_width_xxx,默认300x300,--model_dir 为预测模型地址:

get_ipython().system('python3 work/astar2019/score.py --model_dir model_snet/300_300_inference')

05

量化训练

此部分用的是main_quant.py里的量化方法,也可以用PaddleSlim里的方法,详见work/paddleslim,同时PaddleSlim也可以进行剪枝等操作:

get_ipython().system('python work/ssd/main_quant.py  --init_model model_snet/best_model --model_save_dir model_snet/snet_int8 --mode train')

 执行量化后的评测:

get_ipython().system('python3 work/astar2019/score.py --model_dir model_snet/snet_int8/300_300_int8_inference')

赛以致用,将比赛代码开源,将比赛成果逐步落地,是飞桨参赛者的心愿。

 

杀入决赛的Seigato队长顾竟潇认为,此次的比赛作品可以快速落地并移植到特定嵌入式终端。而且由于计算量小,采用了8比特量化,也可以应用到车辆行车记录仪、安防监控等低功耗产品中。wildkid1024队长刘澍波则更看重数据,此次赛题中需要对小目标进行数据增强,通过调整图片的色调、随机裁剪放缩都是很好的方式。在比赛开始前,他对飞桨框架的上手难度有过怀疑,但是通过比赛他发现,完全是多虑了。飞桨的设计理念有点类似于C++,需要先定义好参数和运算,然后通过编译的方式生成计算图,最后实际运行的时候再把数据提供出来,这种设计会非常方便于部署。

自2005年到现在,百度之星已经走过了15年。一批批的参赛选手,他们或身居校园,憧憬着自身的发展;或已经投身一线,在业务领域有了一番作为。但无论是哪一种,他们是年轻的,就像年轻的飞桨一样,开放、兼容、自主、创新。一场比赛或许不能让世界有所改变,但孜孜不倦、矢志不渝的坚持,一定能够让更多的人能够享受到AI发展的红利,也能让中国的AI技术人才找到自己的舞台。

这样的未来,必然会更加精彩。

彩蛋时间

百度之星开发者大赛看似轻松,却有着不低的参与门槛。因此,由2019百度之星开发者大赛降低难度而来的飞桨轻量级目标检测挑战赛应运而生!本次比赛由百度之星大赛的冠军张鹏松发起,鼓励选手使用飞桨完成轻量级目标检测任务。与百度之星大赛不同的是,本次挑战赛提供了基于单阶段目标检测的SSD baseline,一键fork就能跑出结果。而且,提交模型的计算量也从[160, 1300]扩展到[160, 3000] MOPs范围内,难度再次降低,比赛更加亲民。如果您也想和他们一样崭露头角、一鸣惊人,那么快来参加飞桨轻量级目标检测挑战赛吧!

 

 

点击阅读原文,即可报名参与,和高手竞技,为自己代言,千万不要错过哦!

本文分享 CSDN - 飞桨PaddlePaddle。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部