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

原创
2020/03/10 17:45
阅读数 215

 

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

 

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

 

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

 

“此次比赛不仅需要考虑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技术人才找到自己的舞台。

 

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

>> 访问 PaddlePaddle 官网,了解更多相关内容  

下载安装命令

## CPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle

## GPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部