You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Albumentations进行数据增强时是否会改变数据集的图像数量?

数据增强的两类核心使用场景

你最初对数据增强的理解是正确的,但这只是数据增强的其中一种实现方式,你在Albumentations案例中看到的是另一种更主流的训练时用法,两者的差异如下:

  • 离线数据增强(静态扩容模式)
    就是你最开始了解的逻辑:提前对原始数据集的所有样本跑一遍增强流程,将生成的新样本和原始样本合并,直接扩大数据集的物理总规模。这种模式适合样本量极小的场景,提前处理完成后训练时直接读取即可,不需要额外占用训练时的计算资源。
  • 在线数据增强(动态变换模式)
    就是你在Albumentations案例中看到的用法:不会修改原始数据集,也不会新增存储的样本。它的逻辑是每一轮训练(epoch)读取原始样本时,实时按设置的概率对当前样本做随机变换,变换后的样本仅用于当前批次的训练,不会写入原始数据集。

这种模式的核心价值不是扩容数据集的物理大小,而是让模型每一轮训练看到的样本都存在随机差异,变相提升了训练样本的多样性,有效避免模型过拟合到原始样本的固定属性(比如固定拍摄角度、固定亮度),同时不会增加存储成本,训练时的额外计算开销对当前的GPU设备来说基本可以忽略。

Albumentations本身的设计就是优先适配在线增强的主流场景,所以默认调用后只会返回变换后的单张图像,不会保留原始样本。如果你需要实现离线扩容的效果,自己加一层循环逻辑即可,参考示例代码如下:

import albumentations as A
import cv2

# 定义增强管线
transform_pipeline = A.Compose([
    A.RandomRotate90(p=0.7),
    A.RandomResizedCrop(height=224, width=224, scale=(0.8, 1.0), p=0.6),
    A.HorizontalFlip(p=0.5),
    A.ColorJitter(p=0.3)
])

# 离线增强示例:单张原图生成4张增强样本,加上原图共5张,实现5倍扩容
original_img = cv2.imread("sample.jpg")
original_img = cv2.cvtColor(original_img, cv2.COLOR_BGR2RGB)
# 保存原始图
cv2.imwrite("aug_dataset/original.jpg", cv2.cvtColor(original_img, cv2.COLOR_RGB2BGR))
# 生成增强样本
for idx in range(4):
    aug_result = transform_pipeline(image=original_img)
    aug_img = aug_result["image"]
    cv2.imwrite(f"aug_dataset/aug_{idx}.jpg", cv2.cvtColor(aug_img, cv2.COLOR_RGB2BGR))

两种用法都属于标准的数据增强实现,只是适用场景不同,你之前的认知没有问题,只是接触到的案例用的是现在更常用的在线增强模式而已。

内容的提问来源于stack exchange,提问作者Petr_ov__

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:09:02