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

人工智能 深度学习
在这篇论文中,作者确定了一组增强称为策略,它对目标检测问题表现良好。该策略通过增强搜索获得,提高了通用模型的性能。

 

像许多神经网络模型一样,目标检测模型在训练大量数据时效果最好。通常情况下,可用的数据有限,世界各地的许多研究人员正在研究增强策略,以增加可用的数据量。谷歌的大脑团队进行了一项这样的研究,并发表在了一篇论文中,名为Learning Data Augmentation Strategies for Object Detection。在这篇论文中,作者确定了一组增强称为策略,它对目标检测问题表现良好。该策略通过增强搜索获得,提高了通用模型的性能。

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

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

在这个策略中有5个子策略,如果我们取第一个子策略,它就包含了TranslateX_BBox和Equalize增强。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只应用于边界框区域:

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

  1. from bbaug import policies  
  2. # select policy v0 set  
  3. aug_policy = policies.policies_v0()   
  4. # instantiate the policy container with the selected policy set  
  5. policy_container = policies.PolicyContainer(aug_policy)  
  6. # select a random policy from the policy set  
  7. random_policy = policy_container.select_random_policy()    
  8. # Apply the augmentation. Returns the augmented image and bounding boxes.  
  9. # Image is a numpy array of the image  
  10. # Bounding boxes is a list of list of bounding boxes in pixels (int).  
  11. # e.g. [[x_min, y_min, x_man, y_max], [x_min, y_min, x_man, y_max]]  
  12. # Labels are the class labels for the bounding boxes as an iterable of ints e.g. [1,0]  
  13. img_aug, bbs_aug = policy_container.apply_augmentation(random_policy, image, bounding_boxes, labels)  
  14. # image_aug: numpy array of the augmented image  
  15. # 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中。 

 

责任编辑:庞桂玉 来源: 深度学习这件小事
相关推荐

2024-02-16 08:00:00

机器学习ML-data预训练模型

2024-08-27 10:20:00

2023-10-07 11:36:15

2024-06-24 05:00:00

YOLO模型人工智能

2022-02-14 11:37:59

自动驾驶算法技术

2024-10-05 13:00:00

模型优化训练

2024-01-04 08:00:00

人工智能深度学习

2023-12-31 16:35:31

Pytorch函数深度学习

2021-03-26 15:55:17

Python 开发编程语言

2024-05-28 10:08:52

2022-05-07 13:52:22

Feign 增强包K8s

2017-03-01 19:48:02

Node浏览器JavaScript

2012-07-18 11:31:02

ibmdw

2020-06-04 12:55:44

PyTorch分类器神经网络

2023-10-11 10:22:55

数据集计算机

2009-08-19 15:01:24

百度框计算

2022-02-16 09:54:43

AI模型

2022-09-28 10:35:31

JavaScript代码内存泄漏

2014-06-10 09:16:53

数据包

2012-07-25 16:03:00

JavaScript
点赞
收藏

51CTO技术栈公众号