前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >目标检测任务中的训练宝典 |实用技巧

目标检测任务中的训练宝典 |实用技巧

作者头像
磐创AI
发布2019-07-10 12:24:19
1.1K0
发布2019-07-10 12:24:19
举报

特约作者 : Slumbers

最近正好在做检测项目,相对于分类任务而言,检测任务的优化策略少之又少,最近阅读了 @李沐老师 团队新出的论文Bag of Freebies for Training Object Detection Neural Networks中,提到了一些在不牺牲模型性能的前提下提升目标检测模型的tricks。

这篇论文我读完之后觉得CNN训练分类任务中可以执行的优化策略有不少重叠的地方,包括学习率热身、Label smoothing、 Cosine learning rate decay等都是可以在目标检测中使用的tricks,实验证明这些在分类上的tricks在目标检测领域也非常有效。

两篇论文都提到的一些可以使用的技术: mix up , label smoothing, cosine learning rate, warm up。除此之外,这篇论文还提到了一些单独增对检测任务的tricks如数据增量策略,跨卡BN和random shapes traning等。

Mix up

Mix up最早是用于解决对抗扰动的方法。是数据增量(data augmentation)的一种方法,每次随机取两个样本点

, 然后按照如下的混合方式生成一个新的样本点:

, 是从

分布中随机生成的。在mixup training中,只使用新的样本

进行训练。

Label Smoothing

Label Smoothing可以看作是一种正则化方法,对于ground truth(也就是标注数据)的分布进行混合。原始的ground truth 分布记为

,经过label Smoothing处理后的分布为:

其中

是一个小常量,而

是分类类别。这样处理可以减少模型对于标签的过度信赖,对于标签不够精确的情况有较好的效果。

Cosine learning rate decay

Step lr decay在每次切换学习率的时候容易引起震荡,cosine lr decay会更加平滑。具体做法是,假设batch的总迭代次数是T(忽略学习率热身阶段),初始学习率为

,那么在每次 t, 将学习率设为:

这个lr decay tensorflow和pytorch都是有现成的可用~一行可以搞定(下面列举的是pytorch版本):

代码语言:javascript
复制
    scheduler = CosineAnnealingLR(optimizer, T_max=epoch_num)

Warm Up

训练初期由于离目标较远,一般需要选择大的学习率,但是使用过大的学习率容易导致不稳定性。所以可以做一个学习率热身阶段,在开始的时候先使用一个较小的学习率,然后当训练过程稳定的时候再把学习率调回去。比如说在热身阶段,将学习率从0调到初始学习率。举个例子,如果我们准备用m个batches来热身,准备的初始学习率是

,然后在每个batch

,将每次的学习率设为

最近在跑pytorch版本的mask rcnn,warm up虽然在官方pytorch版本中没有实现,但是在mask rcnn中已经提供实现啦,可以参见:https://github.com/facebookresearch/maskrcnn-benchmark/blob/master/maskrcnn_benchmark/solver/lr_scheduler.py

下面是单独对检测任务可以考虑的一些点:

数据增量策略

主流的数据增量方法包括几何变化(剪切翻转等)和色彩抖动(色彩对比度等)。对于目标检测来说,基于faster rcnn这种基于ROI的检测方法,因为本身检测的第一阶段已经生成了许多重复的候选区域,所以在数据增量时并不需要再去做几何变换。(本文末最后的实验表格也显示,data augmentation对于YOLO等单阶段检测很重要,对于Faster-RCNN影响不大)

Synchronized Batch Normalization

现有的标准BN是基于单GPU的,也就是说每个GPU上的样本进行了归一化,实际上的bathc-size变小了。对于分类任务而言,影响不大,但对于检测任务而言会对表现造成一定影响。使用Synchroinzed Batch Normalization(也就是垮卡BN)可以解决这个问题。这一点李沐老师在跨卡同步 Batch Normalization 中解释的很详细了。

Random Shapes Training

对于像YOLO这样的单阶段检测器来说,为了减小内存占用,一般会使用固定shape的图片进行训练。为了减小过拟合,可以使用Random shapes training。比如说,以YOLO例在训练过程中每隔多少个epoch就随机的{320, 352, 384, 416, 448, 480, 512, 544, 576, 608}中选择一个新的图片分辨率。这个技术在YOLO v3中就用过了。

最后论文中附上了上述tricks的效果~:

文章知乎地址 : https://zhuanlan.zhihu.com/p/56792817

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 磐创AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mix up
  • Label Smoothing
  • Cosine learning rate decay
  • Warm Up
  • 数据增量策略
  • Synchronized Batch Normalization
  • Random Shapes Training
相关产品与服务
图像识别
腾讯云图像识别基于深度学习等人工智能技术,提供车辆,物体及场景等检测和识别服务, 已上线产品子功能包含车辆识别,商品识别,宠物识别,文件封识别等,更多功能接口敬请期待。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档