【计算机视觉】数据增强

一、数据增强的意义

在深度学习中,数据集往往有限,而模型需要大量的样本来学习特征。数据增强技术通过对图像进行如下变换:

  • 扩充样本数量:利用已有数据生成新的样本。
  • 提高模型鲁棒性:使模型适应不同的图像变换,如旋转、缩放等,从而提升对真实世界中图像变化的容忍度。
  • 缓解过拟合:通过数据的多样性,让模型学习到更泛化的特征,而非记住训练数据中的噪声。

二、常见的数据增强技术

  1. 几何变换

    • 翻转(Flip):包括水平翻转和垂直翻转,常用于物体对称的场景。
    • 旋转(Rotation):随机角度旋转图像,增加视角变化。
    • 缩放和裁剪(Scaling and Cropping):对图像进行缩放后裁剪成固定尺寸,模拟不同的拍摄距离或焦距。
    • 平移(Translation):沿x轴或y轴平移图像,模拟目标在图像中的位置变化。
  2. 颜色和光照变换

    • 亮度调整(Brightness):增加或降低图像的亮度。
    • 对比度调整(Contrast):改变图像的对比度,使得细节更加明显或模糊。
    • 饱和度调整(Saturation):调整颜色的浓淡,模拟不同光照下的效果。
    • 色调变化(Hue):对图像整体色调进行微调。
  3. 噪声和遮挡

    • 高斯噪声(Gaussian Noise):加入随机噪声,模拟真实环境中的干扰。
    • 随机擦除(Random Erasing):随机选择图像中的一块区域进行遮挡,提升模型对局部信息缺失的鲁棒性。
  4. 混合增强

    • Mixup:将两张图像按一定比例混合,同时也混合对应的标签,增强模型对样本间过渡的理解。
    • CutMix:将一张图像的一部分替换成另一张图像的相应区域,并调整标签。

三、代码示例

原图所示:

数据增强后:

示例1:使用 PyTorch 的 torchvision.transforms

下面的代码示例展示了如何使用 torchvision.transforms 实现数据增强。代码中使用了随机翻转、旋转、裁剪、颜色抖动等技术。

python 复制代码
import torch
from torchvision import transforms
from PIL import Image
import matplotlib.pyplot as plt

# 定义数据增强变换
transform = transforms.Compose([
    transforms.RandomHorizontalFlip(p=0.5),           # 随机水平翻转
    transforms.RandomVerticalFlip(p=0.2),             # 随机垂直翻转
    transforms.RandomRotation(degrees=30),            # 随机旋转(-30到30度之间)
    transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5),  # 调整亮度、对比度、饱和度
    transforms.RandomResizedCrop(size=224, scale=(0.8, 1.0)),  # 随机裁剪并缩放到指定尺寸
    transforms.ToTensor(),                            # 转换为Tensor
])

# 载入一张示例图像
img = Image.open('example.jpg')  # 请确保文件存在

# 应用数据增强
augmented_img = transform(img)

# 将Tensor转换回PIL Image用于显示
augmented_img_pil = transforms.ToPILImage()(augmented_img)

plt.figure(figsize=(6, 6))
plt.imshow(augmented_img_pil)
plt.title("Augmented Image")
plt.axis("off")
plt.show()

示例2:使用 Albumentations 库

Albumentations 是一个功能更强大的图像增强库,它支持更多高级的数据增强技术。下面的示例代码展示了如何使用 Albumentations 对图像进行增强。

python 复制代码
import cv2
import albumentations as A
from matplotlib import pyplot as plt

# 定义数据增强流水线
transform = A.Compose([
    A.HorizontalFlip(p=0.5),                # 水平翻转
    A.VerticalFlip(p=0.2),                  # 垂直翻转
    A.Rotate(limit=30, p=0.7),              # 旋转(限制角度30度)
    A.RandomBrightnessContrast(p=0.5),      # 随机调整亮度和对比度
    A.RandomResizedCrop(height=224, width=224, scale=(0.8, 1.0), p=0.7),  # 随机裁剪和缩放
    A.GaussNoise(var_limit=(10.0, 50.0), p=0.3),   # 加入高斯噪声
])

# 载入一张示例图像(BGR格式)
img = cv2.imread('example.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 应用数据增强
augmented = transform(image=img)
augmented_img = augmented['image']

# 显示结果
plt.figure(figsize=(6, 6))
plt.imshow(augmented_img)
plt.title("Albumentations Augmented Image")
plt.axis("off")
plt.show()

四、小结

数据增强技术在计算机视觉中具有非常重要的作用,通过多样化的数据变换,可以显著提升模型的泛化能力。在实际应用中,可以根据具体任务选择合适的增强方式和参数,同时也可以组合使用多种增强方法,构建一个丰富的数据增强流水线。上面的代码示例分别使用了 torchvision.transformsAlbumentations 两种方式,这两种方式各有优缺点,可根据项目需求进行选择。

相关推荐
mit6.82418 分钟前
[Upscayl图像增强] Electron主进程命令 | 进程间通信IPC
人工智能
THMAIL22 分钟前
机器学习从入门到精通 - 循环神经网络(RNN)与LSTM:时序数据预测圣经
人工智能·python·rnn·算法·机器学习·逻辑回归·lstm
AIbase202440 分钟前
AI时代企业获取精准流量与实现增长的GEO新引擎
人工智能·搜索引擎·百度
陈敬雷-充电了么-CEO兼CTO42 分钟前
具身智能模拟器:解决机器人实机训练场景局限与成本问题的创新方案
大数据·人工智能·机器学习·chatgpt·机器人·具身智能
东临碣石821 小时前
【AI论文】Robix:一种面向机器人交互、推理与规划的统一模型
人工智能
Hello Mr.Z1 小时前
使用pytorch创建/训练/推理OCR模型
人工智能·pytorch·python
wan5555cn1 小时前
文字生视频的“精准”代码设定的核心原则本质是最小化文本语义与视频内容的KL散度
人工智能·笔记·深度学习·音视频
AndrewHZ1 小时前
【图像处理基石】图像预处理方面有哪些经典的算法?
图像处理·python·opencv·算法·计算机视觉·cv·图像预处理
IT_陈寒2 小时前
Python异步编程的7个致命误区:90%开发者踩过的坑及高效解决方案
前端·人工智能·后端
老猿讲编程2 小时前
存算一体:重构AI计算的革命性技术(1)
人工智能·重构