YOLOv5 数据增强data augmentation (七)

本文介绍了YOLOv5中的数据增强技术,特别是Mosaic方法,用于增加训练集多样性,防止过拟合。Mosaic将四张图片随机拼接成大图,通过像素级和图片级的增强,如MixUp、CutOut和CutMix,提升模型的泛化能力。此外,还讨论了按宽高比排序以优化FLOPS运算和加速数据处理的策略。
摘要由CSDN通过智能技术生成

1.数据增强介绍

当我们训练集中的图片比较少时,容易造成网络的过拟合。为了避免这种情况一般我们要经过图像处理的方法,人为地去增加些图片数据,这样就会增加我们可用图片的数目,减少过拟合的可能性。

  • 可以通过像素级的剪裁(Crop)、旋转(Rotation)、反转(Flip)、色调(Hue)、饱和度(Saturation)、曝光量(Exposure)、宽高比(Aspect)来做数据增强。
  • 另外还可以在图片级数据增强,比如MixUp、CurMix、Mosaic、Blur
    在这里插入图片描述

2.图片级像素增强

在这里插入图片描述

  • Mixup: 如图在一张狗的图片中,叠加一只猫的图片,这样经过两幅图片的加权运算可以看到,可以看到这幅新的图片上既有狗又有猫。
  • Cutout: 如图,将图片中某一块区域,填充为某种颜色,比如图中填充为黑色
  • CutMix: 如图,将图片某一块区域剪裁掉,然后用另外一幅图像来填充剪裁区域
  • Mosaic 数据增强:它是把四副图片拼成一幅大图,在YOLOv5中数据增强就是采用Mosaic方法,该方法由YOLOv5作者提出。如下图所示
    在这里插入图片描述
    在这里插入图片描述
    YOLOv5在训练过程中,将4副小图拼成一幅大图,4副小图在拼接时做了随机的处理,所以4副小图的大小形状是不一样的。
  • 我们可以通过train.py --rect 去省略掉mosaic
  • --rect,通过对整个数据集的宽高比进行排序,然后对相似的宽高比例图片组合在一起。
  • 按宽高比排序的好处是,可以降低FLOPS运算,加速数据处理

3. 代码讲解

3.1 mosaic 代码

代码位置yolov5-3.1 > utils > datasets.py

def load_mosaic(self, index): 
    # loads images in a mosaic

    labels4 = []
    s = self.img_size
    #随机取mosaic中心点
    yc, xc = [int(random.uniform(-x, 2 * s + x)) for x in self.mosaic_border]  # mosaic center x, y
    #随机取其他三张图片的索引
    indices = [index] + [random.randint(0, len(self.labels) - 1) for _ in range(3)]  # 3 additional image
  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用YOLOv5进行数据增强的代码示例: ```python import glob import os from PIL import Image from torchvision.transforms import functional as F from utils.augmentations import RandomApply, RandomAffine, RandomPerspective, RandomMixUp # 定义数据增强函数 def data_augmentation(image_path, label_path): # 读取图像和标签 image = Image.open(image_path) label = open(label_path, 'r').readlines() # 执行数据增强操作 transform = [ RandomApply(RandomAffine(), p=0.5), RandomApply(RandomPerspective(), p=0.5), RandomMixUp(prob=0.5) ] for t in transform: image, label = t(image, label) # 返回增强后的图像和标签 return image, label # 图像和标签路径 image_dir = 'data/images' label_dir = 'data/labels' # 遍历图像和标签文件 image_paths = glob.glob(os.path.join(image_dir, '*.jpg')) label_paths = glob.glob(os.path.join(label_dir, '*.txt')) for image_path, label_path in zip(image_paths, label_paths): # 执行数据增强 augmented_image, augmented_label = data_augmentation(image_path, label_path) # 保存增强后的图像和标签 augmented_image.save('augmented_images/' + os.path.basename(image_path)) with open('augmented_labels/' + os.path.basename(label_path), 'w') as f: f.write(augmented_label) ``` 请注意,上述代码中引用了自定义的数据增强函数和相关的增强操作,这些操作可以根据具体需求进行定义和调整。此外,还需要安装PIL库和YOLOv5代码库,并根据实际情况修改图像和标签的路径。 希望以上代码示例能够帮助您实现YOLOv5数据增强功能。如有任何疑问,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值