数据增强——tensorflow

声明:


本节我们在猫狗训练的基础上去做一些数据增强的操作

1.什么是数据增强

数据增强(Data Augmentation)是指在不改变数据标签的前提下,对原始数据进行各种变换,生成更多样化的训练样本的技术。

简单说:把一张图片"变着花样"复制出多张------旋转一下、翻转一下、调亮一点......这些都叫数据增强。

2.为什么要做数据增强

目的 说明
扩充数据集 当数据量不足时,用增强生成更多样本
防止过拟合 模型没见过的情况越多,泛化能力越强
提升鲁棒性 让模型对旋转、光照变化等不敏感
模拟真实场景 训练数据永远无法覆盖所有真实情况,增强可以弥补

3.常用的调用数据增强的方法

方法一:使用 tf.keras.layers

复制代码
model = tf.keras.Sequential([
  data_augmentation,
  网络结构
])

data_augmentation = tf.keras.Sequential([
    选择你要的方式
])

通过定义data_augment层选择你想要的增强模式,然后嵌入到网络结构的第一层中,训练时自动应用,测试时自动关闭

方法二:使用 tf.data.Dataset.map()

复制代码
# 定义增强函数
def augment(image, label):
    image = tf.image.random_flip_left_right(image)  # 随机翻转
    image = tf.image.random_brightness(image, 0.2)  # 随机亮度
    return image, label

# 应用到数据集
train_ds = train_ds.map(augment, num_parallel_calls=tf.data.AUTOTUNE)

采用函数的方式定义一个图像处理函数,然后用map操作去image和label对应完成,要是有别的图像处理就方便一点,例如顺道调用vgg16官方数据处理方式(reshape之类的)

两种方法的对比

特性 Layers 方式 map 方式
与模型集成 ✅ 自动,训练/测试自动切换 需手动控制
GPU 加速 ✅ 在 GPU 上执行 ⚠️ 需配置
灵活性 中等 ✅ 极高
代码简洁 ✅ 简洁 中等

4.常用的数据增强方法(以下皆用的layers方式)

原图

4.1 tf.keras.layers.RandomFlip(随机反转)

分为上下和左右反转

复制代码
data_augmentation = tf.keras.Sequential([
  tf.keras.layers.experimental.preprocessing.RandomFlip("horizontal_and_vertical"),
    #horizontal水平;vertical垂直
])

4.2 tf.keras.layers.RandomBrightness(随机亮度)

复制代码
tf.keras.layers.RandomBrightness(
    #-1到1,0-255
    factor, value_range=(0, 255), seed=None, **kwargs
)

注意!如果图像经历过大小变化,也要将默认的value_range=(0, 255)改为value_range=(0, 1)

4.3 tf.keras.layers.RandomContrast(随机对比度)

复制代码
tf.keras.layers.RandomContrast(
    factor, seed=None, **kwargs
)

4.4 tf.keras.layers.RandomCrop(随机裁剪)

复制代码
tf.keras.layers.RandomCrop(
    height, width, seed=None, data_format=None, name=None, **kwargs
)

4.5 tf.keras.layers.RandomHeight(高度(非裁切))

复制代码
tf.keras.layers.RandomHeight(
    factor, interpolation='bilinear', seed=None, **kwargs
)

4.6 tf.keras.layers.RandomWidth(随机宽度)

复制代码
tf.keras.layers.RandomWidth(
    factor, interpolation='bilinear', seed=None, **kwargs
)

4.7 tf.keras.layers.RandomRotation(随机角度旋转)

复制代码
tf.keras.layers.RandomRotation(
    factor,#旋转圈数
    fill_mode='reflect',#边缘填充模式
    interpolation='bilinear',#旋转时像素重采样的插值方式
    seed=None,
    fill_value=0.0,#选了别的填充模式后的填充值
    value_range=(0, 255),#像素范围
    data_format=None,#输入张量的通道维度位置
    **kwargs
)
模式 说明 效果
'reflect'(默认) 镜像反射边缘像素 最平滑,无突变
'constant' 用固定值填充 会看到纯色边框
'wrap' 环绕填充(像素从对面补过来) 周期性效果
'nearest' 用最近边缘像素填充 拉伸边缘

4.8 tf.keras.layers.RandomTranslation(随机平移)

复制代码
tf.keras.layers.RandomTranslation(
    height_factor,
    width_factor,
    fill_mode='reflect',
    interpolation='bilinear',
    seed=None,
    fill_value=0.0,
    data_format=None,
    **kwargs
)
参数 默认值 说明
fill_mode 'reflect' 空白填充方式
interpolation 'bilinear' 插值方式
seed None 随机种子
fill_value 0.0 fill_mode='constant' 时的填充值
value_range (0, 255) 输入像素范围
data_format 'channels_last' 数据格式

4.9 tf.keras.layers.RandomZoom(随机焦段)

和裁切不同的就是他会注意主题(焦点中心)

复制代码
tf.keras.layers.RandomZoom(
    height_factor,
    width_factor=None,
    fill_mode='reflect',
    interpolation='bilinear',
    seed=None,
    fill_value=0.0,
    data_format=None,
    **kwargs
)

训练结果

相关推荐
Lugas Luo3 分钟前
如何利用AI Agent自动分析Linux BSP(Board Support Package)驱动和内核日志
linux·人工智能·嵌入式硬件
互联网推荐官8 分钟前
物联网应用开发实战:从协议选型到平台落地的工程路径解析
人工智能
呆呆敲代码的小Y10 分钟前
【Unity实战篇】| YooAsset + UOS CDN 云服务资源部署,实现正式热更流程
人工智能·游戏·unity·游戏引擎·免费游戏
ai产品老杨11 分钟前
深度解析:基于异构计算的工业级AI视频中台架构,支持GB28181/RTSP接入与X86/ARM/NPU全场景部署
人工智能·架构·音视频
N串14 分钟前
数字化-利益,是最硬的墙
人工智能·经验分享·产品经理
Cxiaomu15 分钟前
从零搭建可落地的 RAG 基座:概念、架构设计、工程实现与实践复盘
人工智能·rag
郝学胜-神的一滴16 分钟前
系统设计:新鲜事系统扩展与优化
java·python·职场和发展·php·软件工程·软件构建
思绪无限16 分钟前
YOLOv5至YOLOv12升级:零售柜商品检测软件的设计与实现(完整代码+界面+数据集项目)
人工智能·python·深度学习·目标检测·计算机视觉·零售柜商品检测·yolov12
zl_dfq17 分钟前
Python学习6 之 【Lambda表达式、列表与元组、推导式】
python
IT_陈寒17 分钟前
Python中的这个可变默认参数陷阱我居然又踩了
前端·人工智能·后端