本文转载自AI公园。

作者:Harpal Sahota

编译:ronghuaiyang

导读

实现了Google Research,Brain Team中的增强策略。

像许多神经网络模型一样,目标检测模型在训练大量数据时效果最好。通常情况下,可用的数据有限,世界各地的许多研究人员正在研究增强策略,以增加可用的数据量。

谷歌大脑团队进行了一项这样的研究,并发表在了一篇论文中,名为Learning Data Augmentation Strategies for Object Detection。在这篇论文中,作者确定了一组增强称为策略,它对目标检测问题表现良好。该策略通过增强搜索获得,提高了通用模型的性能。

作者将增强策略定义为一组子策略。在模型进行训练时,随机选择其中一个子策略用于增强图像。在每个子策略中都有要依次应用于图像的增强。每个转换也有两个超参数:概率和幅度。概率表示该增强将被应用的可能性,而幅度表示该增强的程度。下面的代码显示了本文中使用的策略:

policy = [      [('TranslateX_BBox', 0.6, 4), ('Equalize', 0.8, 10)],        [('TranslateY_Only_BBoxes', 0.2, 2), ('Cutout', 0.8, 8)],     [('Sharpness', 0.0, 8), ('ShearX_BBox', 0.4, 0)],      [('ShearY_BBox', 1.0, 2), ('TranslateY_Only_BBoxes', 0.6, 6)], [('Rotate_BBox', 0.6, 10), ('Color', 1.0, 6)],
]

在这个策略中有5个子策略,如果我们取第一个子策略,它就包含了TranslateX_BBoxEqualize增强。TranslateX_BBox操作在x轴上转换图像的幅度为4。在本例中,大小并不直接转换为像素,而是根据大小缩放为像素值。该增强的概率也为0.6,这意味着如果该增强被选中,则应用该增强的概率为60%。随着每个增强都有一个相关的概率,引入了一个随机的概念,给训练增加了一定程度的随机性。

总的来说,Brain Team已经提出了4个策略: v0, v1, v2和v3。本文中显示了v0策略,其他三个策略包含更多的子策略,这些子策略具有几种不同的转换。总的来说,增加分为三类,作者定义为:

颜色操作: 扭曲颜色通道,不影响边界框的位置。

几何操作:几何扭曲图像,这相应地改变了边界框的位置和大小。

包围框操作:只会扭曲包围框中包含的像素内容。

BBAug

那么BBAug 在这方面有什么贡献呢?BBAug是一个python包,它实现了谷歌Brain Team的所有策略。这个包是一个包装器,可以更容易地使用这些策略。实际的扩展是由优秀的imgaug包完成的。

上面显示的策略应用于一个示例图像,如下所示。每一行是一个不同的子策略,每一列是该子策略的不同运行。

正如你所看到的,在子策略的运行之间有一定程度的变化,因此给训练增加了一定程度的随机性。这只是BBAug实施的4个策略之一。

要查看所有4个策略的完整可视化,请查看包的GitHub页面:https://github.com/harpalsahota/bbaug。

该包还提供了一些有用的功能,比如定制策略的可能性,以及位于图像外部的边界框,如果它们部分位于图像外部,则会被自动删除或剪切。

例如,在下面的图像中,应用了平移增强,将边界框部分推到图像外部。你可以看到新的边界框已经缩小以适应这一点。

也可以创建只影响边界框区域的增强。在下图中,solarisaugmentation只应用于边界框区域:

用随机策略增加单个图像有多容易?就像这样简单:

from bbaug import policies# select policy v0 set
aug_policy = policies.policies_v0()# instantiate the policy container with the selected policy set
policy_container = policies.PolicyContainer(aug_policy)# select a random policy from the policy set
random_policy = policy_container.select_random_policy() # Apply the augmentation. Returns the augmented image and bounding boxes.
# Image is a numpy array of the image
# Bounding boxes is a list of list of bounding boxes in pixels (int).
# e.g. [[x_min, y_min, x_man, y_max], [x_min, y_min, x_man, y_max]]
# Labels are the class labels for the bounding boxes as an iterable of ints e.g. [1,0]
img_aug, bbs_aug = policy_container.apply_augmentation(random_policy, image, bounding_boxes, labels)
# image_aug: numpy array of the augmented image
# bbs_aug: numpy array of augmneted bounding boxes in format: [[label, x_min, y_min, x_man, y_max],...]

总结

该包实现了谷歌Brain Team推导出的增强策略。目前,已经实现了所有4个策略,该包还附带了notebooks,以帮助用户将这些策略集成到他们的PyTorch训练pipeline中。

英文原文:https://towardsdatascience.com/bbaug-a-package-for-bounding-box-augmentation-in-pytorch-e9b9fbf1504b

END

备注:目标检测

目标检测交流群

2D、3D目标检测等最新资讯,若已为CV君其他账号好友请直接私信。

BBAug: 一个用于PyTorch的物体检测包围框数据增强包相关推荐

  1. Py之pyecharts:python包之数据可视化包pyecharts简介、安装、使用方法之详细攻略

    Py之pyecharts:python包之数据可视化包pyecharts简介.安装.使用方法之详细攻略 目录 pyecharts简介 pyecharts的安装 pyecharts的使用方法 1.图形绘 ...

  2. 目标检测中的数据增强

    目标检测中的数据增强 技术标签: 深度学习 人工智能 一.图像遮挡 ①random erase 用随机值或训练集的平均像素替换图像区域. URL: https://arxiv.org/pdf/1708 ...

  3. BBAug: PyTorch的物体检测包

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:AI公园     作者:Harpal Sahota 编译:ronghuaiyang AI博士笔记系列推荐 周志 ...

  4. [pytorch] RCNN物体检测的简化实现(d2l-香蕉数据集)

    论文地址 RCNN物体检测的主要步骤如下: 训练: 监督预训练:利用ILSVRC 2012进行预训练,lr=0.01 在VOC 2012 train上微调:将CNN最后的1000分类初始化为21分类( ...

  5. pytorch模型加载测试_使用Pytorch实现物体检测(Faster R-CNN)

    在本示例中,介绍一种two-stage算法(Faster R-CNN),将目标区域检测和类别识别分为两个任务进行物体检测.本示例采用PyTorch引擎进行模型构建. 如果您已熟练使用Notebook和 ...

  6. PyTorch开源物体检测工具包

    MMDetection是一个基于PyTorch的开源物体检测工具包.该工具包采用模块化设计,支持多种流行的物体检测和实例分割算法,并且可以灵活地进行拓展,在速度和显存消耗上也具有优势.(https:/ ...

  7. 用于单眼3D物体检测的可学习深度引导卷积

    文献:Learning Depth-Guided Convolutions for Monocular 3D Object ​摘要(Abstract) 1 介绍(Introduction) 2 相关工 ...

  8. 一个用于ocr中文本检测的数据集生成工具

    自己开发的分享给大家使用,自己生成数据集有几个好处: 1.保证深度学习数据集的数量. 2.不需要人工标注,而且标注相对准确的多. 3.可以参杂在人工标注的数据里面,做数据扩充. 4.在大量样本,需要人 ...

  9. 手把手教你用深度学习做物体检测(二):数据标注

      "本篇文章将开始我们训练自己的物体检测模型之旅的第一步-- 数据标注."   上篇文章介绍了如何基于训练好的模型检测图片和视频中的物体,若你也想先感受一下物体检测,可以看看上篇 ...

最新文章

  1. mysql的联合索引_mysql联合索引
  2. MySQL--安装及配置
  3. JDBC操作数据库的基本流程
  4. [UWP]理解ControlTemplate中的VisualTransition
  5. Centos下因为双网卡配置不当导致无法访问外网故障解决办法
  6. 互动拍照 — 子弹时间
  7. 【coq】函数语言设计 练习题tatcislogics 总结
  8. RPLIDAR思岚雷达学习记录--1--初识a1并跑通
  9. C语言【程序19】题目:两个乒乓球队进行比赛,各出三人。
  10. 【Python】文件操作(单文件操作)
  11. python 搭建登陆系统,用Python连接操作MySQL数据库,做一个简单的用户登录注册系统...
  12. oracle 关于小数点为小数的格式化
  13. python 修改pom文件_引用pom文件
  14. android获取时间戳接口
  15. NovAtel71x系列,GNSS原始观测量打开指令
  16. 智慧实验室解决方案-最新全套文件
  17. 【计算机视觉】INRIA 行人数据集 (INRIA Person Dataset)
  18. ztree之获取当前节点的所有子节点
  19. json格式的正确写法_JSON书写格式
  20. 节能灯与led灯哪个对眼睛好?分享专业护眼的led灯

热门文章

  1. 解决数据库Can't connect to MySQL server on 'localhost' (10061)的问题
  2. mysql大数据表无主键_oracle转mysql 表没有主键
  3. 批处理作业调度问题 ——回溯法详解
  4. 【入门1】顺序结构 (今天刷洛谷了嘛)
  5. c语言大学期末考试题及答案,大学C语言期末考试题4及答案
  6. java 数据流对比_Java IO流之字符流字节流区别
  7. 中公学python要多久_学完风变编程我才知道:一天的工作,五分钟就能完成!
  8. oracle数据库扩容方案_数据库一体机替代IOE架构,在财税行业的崛起
  9. 如何设置工作流到了某一节点自动执行java方法_2019年JAVA最常见面试题汇总(收藏)...
  10. php ascii art,ASCII art (简体中文)