CV — 目标检测:数据增强

一、相关概念

不同的图像任务中,数据增强的方式也有所不同。 相比于图像分类,目标检测中的数据增强需要同时考虑图像和边界框的变换。
在目标检测中,数据增强又分为两个大类: 针对图像中的像素,针对整幅图像。

  • 解释:
    主要是改变原图像中像素的值,而不改变图像目标的形状和图像的大小。
    经过处理后,图像的饱和度、亮度、明度、颜色通道、颜色空间等会发生发生变化。这类变换不会改变原图中的标注信息,即边界框和类别。
  • 方式:
  • 随机改变图像亮度:RandomBrightness
  • 随机改变对比度、色度、饱和度:PhotometricDistort
    • 对比度:RandomContrast
    • 色度:RandomHue
    • 饱和度:RandomSaturation
  • 随机改变颜色通道:RandomLightingNoise

  • 解释:
    针对图像的像素增强不仅需要改变图像本身,还需要考虑标注信息的改变,这里主要指标注的边界框的改变。

  • 方式:
  • 随机缩放:Expand
  • 随机裁剪:RandomSampleCrop
  • 随机翻转:RandomMirror

二、数据增强方式

数据增强手段主要有:仿射变换、透视变换、色调变换等等

  • 实现手段:
    通过在 hsv 色彩空间中,对 h、s、v三个通道增加扰动,来进行色调增强变换
  • 代码实现:
def augment_hsv(image, hgain=0.5, sgain=0.5, vgain=0.5):
"""
    HSV color-space augmentation
    :param image:       待增强的图片
    :param hgain:       HSV 中的 h 扰动系数,yolov5:0.015
    :param sgain:       HSV 中的 s 扰动系数,yolov5:0.7
    :param vgain:       HSV 中的 v 扰动系数,yolov5:0.4
    :return:
"""
    if hgain or sgain or vgain:

        r = np.random.uniform(-1, 1, 3) * [hgain, sgain, vgain] + 1

        image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

        hue, sat, val = cv2.split(image_hsv)
        dtype = image.dtype

        x = np.arange(0, 256, dtype=r.dtype)
        lut_hue = ((x * r[0]) % 180).astype(dtype)
        lut_sat = np.clip(x * r[1], 0, 255).astype(dtype)
        lut_val = np.clip(x * r[2], 0, 255).astype(dtype)

        hue = cv2.LUT(hue, lut_hue)
        sat = cv2.LUT(sat, lut_sat)
        val = cv2.LUT(val, lut_val)

        image_hsv = cv2.merge((hue, sat, val)).astype(dtype)

        image_dst = cv2.cvtColor(image_hsv, cv2.COLOR_HSV2BGR)
        return image_dst
    else:
        return image

三、常见数据增强方式

1)随机旋转
随机旋转一般情况下是对输入图像随机旋转[0,360)
2)随机裁剪
随机裁剪是对输入图像随机切割掉一部分
3)色彩抖动
色彩抖动指的是在颜色空间如RGB中,每个通道随机抖动一定的程度。在实际的使用中,该方法不常用,在很多场景下反而会使实验结果变差
4)高斯噪声
是指在图像中随机加入少量的噪声。该方法对防止过拟合比较有效,这会让神经网络不能拟合输入图像的所有特征
5)水平翻转
6)竖直翻转

随机裁剪/随机旋转/水平反转/竖直反转都是为了增加图像的多样性。并且在某些算法中,如faster RCNN中,自带了图像的翻转。

三、经典算法

  • 参考资料:https://zhuanlan.zhihu.com/p/313650981
  • https://blog.csdn.net/LK007CX/article/details/106940453
  • https://blog.csdn.net/Q1u1NG/article/details/107362572

  • 参考资料:https://blog.csdn.net/weixin_43593330/article/details/108174095

  • 数据类型和坐标转换:

  • 图片矩阵转化为 浮点型:ConvertFromInts
  • 归一化坐标转为绝对化坐标:ToAbsoluteCoords 为下面的几何变换做准备
  • 像素内容变换(Photometric Distortions):
  • 随机改变图像亮度:RandomBrightness
  • 随机改变对比度、色度、饱和度:PhotometricDistort
    • 对比度:RandomContrast
    • 色度:RandomHue
    • 饱和度:RandomSaturation
  • 随机改变颜色通道:RandomLightingNoise
  • 空间几何变换(Geometric Distortions):
  • 随机缩放:Expand
  • 随机裁剪:RandomSampleCrop
  • 随机翻转:RandomMirror
  • 坐标转换、缩放及减均值:
  • 绝对化坐标转为归一化坐标:ToPercentCoords
  • 缩放:Resize(300*300),因为几何变换后图像尺寸改变了
  • 减均值:SubtractMeans(104, 117, 123)

本文介绍了两类在目标检测中常使用的数据增强的方法,包括 基于像素值 的增强方法和 基于整幅图像 的增强方法。
其中,在基于像素值的增强方法中,要注意对 颜色通道 的转换;在基于整幅图像的增强方法中,要注意对标注 边界框 施以同样的变化。

  • 参考资料:https://blog.csdn.net/mao_hui_fei/article/details/90542891

四、总结

参考文献

Original: https://blog.csdn.net/pentiumCM/article/details/119180346
Author: pentiumCM
Title: CV — 目标检测:数据增强

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/686356/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球