transforms.ColorJitter 数据增强工具

🎨 什么是ColorJitter?

在PyTorch中,transforms.ColorJitter 是一个数据增强工具,它的作用是在训练过程中随机改变图像的颜色属性,包括亮度、对比度、饱和度和色调。

python 复制代码
from torchvision import transforms

# 创建一个ColorJitter增强器
color_jitter = transforms.ColorJitter(
    brightness=0.3,    # 亮度调整范围
    contrast=0.3,       # 对比度调整范围
    saturation=0.3,     # 饱和度调整范围
    hue=0.1             # 色调调整范围
)

📸 一张图片,千种风情

经过 transforms.ColorJitter 处理图片颜色会有所不同(第一张是原图,其余是随机变化图)。

🚀 实践代码

python 复制代码
import random

import cv2
from torchvision import transforms
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import torch

# 设置随机种子,确保结果可重复
torch.manual_seed(22)
np.random.seed(22)
random.seed(22)

img_bgr = cv2.imread('2.jpg')
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
img_pil = Image.fromarray(img_rgb)
color_jitter = transforms.ColorJitter(brightness=0.3, contrast=0.3, saturation=0.3, hue=0.1)
img_pil = color_jitter(img_pil)
plt.imshow(img_pil)
plt.show()

🔍 参数详解:四个维度玩转颜色

1. 亮度(Brightness)

取值范围[max(0, 1-brightness), 1+brightness]

示例brightness=0.3 → 实际调整范围为 [0.7, 1.3]倍原始亮度

效果:数值越大,图像可能变得越亮或越暗

2. 对比度(Contrast)

取值范围[max(0, 1-contrast), 1+contrast]

示例contrast=0.3 → 实际调整范围为 [0.7, 1.3]倍原始对比度

效果:控制图像明暗区域的差异程度

3. 饱和度(Saturation)

取值范围[max(0, 1-saturation), 1+saturation]

示例saturation=0.3 → 实际调整范围为 [0.7, 1.3]倍原始饱和度

效果:数值越低图像越接近灰度图,数值越高色彩越鲜艳

4. 色调(Hue)

取值范围[-hue, hue],且hue必须在 [0, 0.5]之间

示例hue=0.1 → 实际调整范围为 [-0.1, 0.1]

效果:改变图像的整体色彩偏向

💡 为什么ColorJitter如此重要?

1. 增强模型的泛化能力

现实世界的图片千变万化,不同相机、不同光照条件、不同后期处理都会影响图片的颜色。通过在训练时随机改变颜色,模型学会关注物体的形状、纹理等本质特征,而不是过度依赖特定的颜色分布。

2. 数据扩充(Data Augmentation)

一张训练图片,通过ColorJitter可以产生无数种颜色变体:

python 复制代码
# 同样的图片,不同的颜色效果
for i in range(5):
    augmented_image = color_jitter(original_image)
    # 保存增强后的图片

3. 减少过拟合

当训练数据有限时,模型容易"死记硬背"训练集中的颜色特征。ColorJitter为模型提供了更丰富的数据分布,有效减少过拟合。

🚀 实战应用

python 复制代码
from torchvision import transforms

# 定义训练数据增强
train_transforms = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.RandomHorizontalFlip(p=0.5),  # 随机水平翻转
    transforms.ColorJitter(                  # 颜色抖动
        brightness=0.3,
        contrast=0.3,
        saturation=0.3,
        hue=0.1
    ),
    transforms.ToTensor(),
    transforms.Normalize(                     # 标准化
        mean=[0.485, 0.456, 0.406],
        std=[0.229, 0.224, 0.225]
    )
])

# 验证集通常不使用数据增强
val_transforms = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(
        mean=[0.485, 0.456, 0.406],
        std=[0.229, 0.224, 0.225]
    )
])
相关推荐
蒸蒸yyyyzwd11 小时前
AI软件开发面试gpt模拟学习笔记
人工智能·gpt·面试
格林威11 小时前
C#图像分块处理:图像按行或按块(Tile)切分,多个 CPU 核心同时处理不同的区域
开发语言·图像处理·人工智能·机器学习·计算机视觉·c#·工业相机
晓天衡宇•评测社区11 小时前
Qwen-Image-Bench 榜单更新:19 款文生图模型同榜评测,GPT Image 2 与 Qwen Image 3 Pro 领跑前 2
人工智能
Query*11 小时前
Agent 开发之项目 AI Native 化:通过大模型与 RAG 赋予产品智能能力
java·人工智能·ai
智购科技自动贩卖机11 小时前
自动售货机嵌入式系统Go语言开发实践:从资源受限设备到RTOS协程调度的工程化之路
大数据·linux·数据库·人工智能·yolo·架构·golang
Sinclair11 小时前
从神经网络到文件加密:一次关于 SIREN、ARX 与密码安全性的实验探索
人工智能·机器学习
阿里云大数据AI技术11 小时前
从三个月到两周:DataWorks Data Agent 重构信飞科技多国数仓交付链路
人工智能·agent
2601_9494999411 小时前
芯瑞科技 DT‑1414完全兼容HFBR‑1414TZ光模块国产化优选方案深度解析(工程师视角)
运维·网络·人工智能·科技·光模块
BSD_HY11 小时前
薄膜开关矩阵扫描电路设计中的防鬼键措施
人工智能·算法·矩阵·人机交互·薄膜开关·源头工厂·深圳工厂
2601_9556624611 小时前
实测6款AI配音工具:从环境部署到本地运行,零成本搭建配音系统
人工智能