AugLy 数据增强库入坑笔记

27次阅读
没有评论

共计 3964 个字符,预计需要花费 10 分钟才能阅读完成。

什么是 AugLy?

AugLy 是 Meta(Facebook)开源的多模态数据增强库【Data Augmentation Library】,支持 音频、图像、文本、视频 四类数据,内置 100+ 增强操作,很多操作来自社交媒体的真实改动(如加表情 / 文字、做 meme、截图再转发的样式等),既可用于 训练时的数据扩增 ,也可用于 模型鲁棒性评估 对抗性 / 真实世界扰动 测试。(github.com)


安装

  • 仅图像 / 文本
  pip install augly

图像增强基于 PIL,文本增强基于 nlpaug。(augly.readthedocs.io)

  • 含音频 / 视频(推荐):
  pip install "augly[av]"

同时安装较重的音 / 视频依赖;视频模块需要 ffmpeg(conda/apt 安装或通过环境变量 AUGLY_FFMPEG_PATH / AUGLY_FFPROBE_PATH 指定)。(augly.readthedocs.io)


设计要点(为什么用 AugLy)

  • 统一 API:每个模态都有函数式与类式(Transform)两套接口,并支持 Compose/OneOf 组合与按概率应用。(augly.readthedocs.io)
  • 真实世界增强:如 OverlayOntoScreenshot / OverlayEmoji / RandomIGFilter 等,更贴近社媒平台上的常见改动。(augly.readthedocs.io)
  • 元数据与强度(intensity):大多数操作可返回 / 累积 metadata(包含源 / 目标尺寸、参数等),并提供 intensity 函数量化一次增强的“强度”,便于实验记录与鲁棒性分析。(augly.readthedocs.io)
  • 标注保真 :图像支持 边界框(pascal_voc / coco / yolo / *_norm) 传入并随增强同步变换。(augly.readthedocs.io)

快速上手(四大模态)

下列示例均为最小可运行片段,可直接粘贴到你的项目里。

1) 图像(PIL 后端)

函数式与组合式

import augly.image as imaugs
from PIL import Image

img = Image.open("in.png")

# 函数式:叠加表情 + 填充成正方形 + 伪造“截图转发”样式
img = imaugs.overlay_emoji(img, opacity=1.0, emoji_size=0.15)
img = imaugs.pad_square(img)
img = imaugs.overlay_onto_screenshot(img, output_path="out.png")  # 也会保存
# 组合式(可与 torchvision 混用)import torchvision.transforms as T
AUGS = [
    imaugs.Blur(),
    imaugs.ColorJitter(brightness_factor=1.2, contrast_factor=1.2, saturation_factor=1.4),
    imaugs.OneOf([imaugs.OverlayOntoScreenshot(), imaugs.OverlayEmoji(), imaugs.OverlayText()]),
]
TRANSFORMS = imaugs.Compose(AUGS)
out_img = TRANSFORMS(Image.open("in.png"))

以上接口、组合方式与示例参数均来自官方文档。(augly.readthedocs.io)

带标注的结构化增强

meta = []
out = imaugs.crop(
    "in.png",
    bboxes=[(0.25, 0.5, 0.75, 0.8)],
    bbox_format="pascal_voc_norm",
    metadata=meta,
)

支持多种 bbox 格式并记录坐标变换元数据。(augly.readthedocs.io)


2) 音频(librosa/torchaudio/NumPy 后端)

import augly.audio as audaugs
import librosa

# 支持传入路径或 ndarray;传 ndarray 时需提供 sample_rate
y, sr = librosa.load("a.wav", sr=None, mono=False)

# 改音量 -> 低通滤波 -> 归一化(可保存到文件)y, sr = audaugs.change_volume(y, sample_rate=sr, volume_db=10.0)
y, sr = audaugs.low_pass_filter(y, sample_rate=sr, cutoff_hz=500)
y, sr = audaugs.normalize(y, sample_rate=sr, output_path="a_out.wav")

也可使用类式 Compose/OneOf 串联 Clip/ChangeVolume/Speed/TimeStretch 等。(augly.readthedocs.io)


3) 文本(nlpaug 背骨)

import augly.text as txtaugs

texts = ["hello world", "bye planet"]
# 示例:按节奏插入标点,模拟用户噪声
aug_texts = txtaugs.insert_punctuation_chars(texts, granularity="all", cadence=5.0, vary_chars=True)

# 类式(按概率)transform = txtaugs.InsertPunctuationChars(granularity="all", p=0.5)
aug_texts2 = transform(texts)

文本模块的接口与示例用法见官方文档。(augly.readthedocs.io)


4) 视频(ffmpeg/OpenCV 后端)

import augly.video as vidaugs

video_path, out_path = "in.mp4", "out.mp4"

# 函数式:叠狗鼻贴纸 → 旋转(若不显式指定,可能覆盖原文件)vidaugs.add_dog_filter(video_path, out_path)
vidaugs.rotate(out_path, degrees=30)

# 组合式:色彩抖动 + 水平翻转 + 随机(Emoji/IG 滤镜 / 平移)
AUGS = [
    vidaugs.ColorJitter(brightness_factor=0.15, contrast_factor=1.3, saturation_factor=2.0),
    vidaugs.HorizontalFlip(),
    vidaugs.OneOf([vidaugs.RandomEmojiOverlay(), vidaugs.RandomIGFilter(), vidaugs.Shift(x_factor=0.25, y_factor=0.25)]),
]
vidaugs.Compose(AUGS)(video_path, out_path)

视频模块安装与 ffmpeg 依赖、示例写法均见官方文档。(augly.readthedocs.io)


工程实践与最佳做法

  1. 记录元数据与强度
  • 通过 metadata 收集每步增强的函数名、输入 / 输出尺寸、参数等;
  • 使用 augly.*.intensity 量化增强强度(浮点值),便于可重复实验与鲁棒性分析 / 对比。(augly.readthedocs.io)
  1. 与 PyTorch 无缝衔接
  • 直接把 AugLy 的 Transform 放进 torchvision.transforms.Compose
  • 或者先 AugLy 再 ToTensor()。(augly.readthedocs.io)
  1. 检测 / 分割任务的标注对齐
  1. 鲁棒性评测 / 对抗测试
  • AugLy 的设计初衷之一就是用真实世界扰动来 评估模型鲁棒性缺口(比如对 meme/ 截图转发 / 滤镜等改动的稳定性),配合论文中的做法能系统化比较不同模型。(arxiv.org)
  1. 依赖与性能
  • 音视频请用 augly[av] 并安装 ffmpeg;
  • 增强链较长时,可对 I/O 做缓存 / 并行;论文与仓库也讨论了与其它库的基准和实现注意点。(augly.readthedocs.io)

典型应用场景与参考配方

  • 版权 / 相似内容检索 :对图片执行 OverlayOntoScreenshot / Crop / Blur / OverlayText 等,训练拷贝检测或感知哈希 / 特征模型,提高对“截屏转发 / 滤镜 / 裁剪”的稳定性。( 腾讯云)
  • 社媒多样性训练:对视频加入 RandomIGFilter / Emoji / Shift / ColorJitter 等,贴近用户真实编辑习惯。(augly.readthedocs.io)
  • ASR/ 音频鲁棒性:用 ChangeVolume / LowPassFilter / Speed / TimeStretch / Clip 等覆盖远近音量、设备与带宽差异。(augly.readthedocs.io)
  • NLP 噪声训练InsertPunctuationChars / simulate_typos / change_case 等,提升文本模型在用户拼写 / 标点噪声下的表现。(augly.readthedocs.io)

进一步阅读

  • 官方文档(涵盖四模态、API、示例):AugLy docs 与“Get Started”。(augly.readthedocs.io)
  • GitHub 仓库与发布记录:支持 100+ 增强、函数式 / 类式接口、强度 / 元数据机制等。(github.com)
  • 研究论文AugLy: Data Augmentations for Robustness(arXiv)。(arxiv.org)

正文完
 0
一诺
版权声明:本站原创文章,由 一诺 于2025-10-01发表,共计3964字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码