1、绪论
1.1 图像增强的主流方法
CutMix
CutMix 是一种图像增强技术,它通过从另一幅图像中随机裁剪一个区域并粘贴到当前图像上来创建新的训练样本。同时,标签也会按照两个图像中裁剪区域的比例进行混合。这种方法有助于模型学习如何处理部分遮挡的情况,提高其在未见过的数据上的泛化能力。
MixUp
MixUp 是一种正则化技术,它通过随机选择两个训练样本,并将它们的图像和标签进行线性插值来创建新的训练样本。这种方法鼓励模型在训练样本之间进行线性插值,有助于模型学习平滑的决策边界,并提高其对标签噪声和对抗性样本的鲁棒性。
RandAugment
RandAugment 是一种自动化的图像增强策略,它通过随机选择和应用一系列图像变换(如旋转、缩放、裁剪等)来增强训练数据。这种方法旨在在不引入过多计算开销的情况下,通过随机选择和应用图像变换来最大化模型的性能提升。RandAugment 通常用于自动搜索最优的图像增强策略,帮助模型在未见过的数据上获得更好的性能。
1.2 KerasCV的图像增强技术
KerasCV 使得为图像分类和目标检测任务组装最先进、行业级的数据增强流水线变得轻而易举。KerasCV 提供了一系列预处理层,实现了常见的数据增强技术。
其中,三个最有用的层可能是 keras_cv.layers.CutMix、keras_cv.layers.MixUp 和 keras_cv.layers.RandAugment。这些层几乎被用于所有最先进的图像分类流水线中。
本文将向探讨如何将这些层组合成您自己的图像分类任务的数据增强流水线并引导初学者完成自定义 KerasCV 数据增强流水线的过程。
1.3 KerasCV的图像增强技术的应用场景
KerasCV中的图像增强技术具有广泛的应用范围,主要用于提升深度学习模型(特别是与图像相关的模型)的性能。这些技术通过应用各种变换和增强策略来扩展训练数据集,从而帮助模型学习更多的图像特征和模式。
- 图像分类:在图像分类任务中,图像增强技术用于增加训练样本的多样性和数量,从而帮助模型学习更多的类别特征和区分不同类别的能力。
- 目标检测:对于目标检测任务,图像增强技术可以用于模拟各种复杂场景和光照条件,从而提高模型在不同条件下的检测性能。
- 语义分割:在语义分割任务中,图像增强技术可以应用于增强图像的细节和纹理,从而帮助模型更准确地识别和分割图像中的不同区域。
- 图像生成:图像增强技术也可以用于图像生成任务,例如通过应用不同的变换和增强策略来生成新的图像样本,从而丰富生成模型的训练数据。
- 其他计算机视觉任务:除了上述任务外,KerasCV的图像增强技术还可以应用于其他各种计算机视觉任务中,如图像修复、图像超分辨率重建、视频处理等。
通过应用KerasCV中的图像增强技术,用户可以轻松地创建自定义的数据增强流水线,以满足不同任务和场景的需求。这些技术可以单独使用或组合使用,以最大程度地提高模型的性能和泛化能力。
1.4 使用准备
安装
!pip install -q --upgrade keras-cv
!pip install -q --upgrade keras # Upgrade to Keras 3.
导入方法
import os
os.environ["KERAS_BACKEND"] = "jax" # @param ["tensorflow", "jax", "torch"]
import matplotlib.pyplot as plt
# Import tensorflow for [`tf.data`](https://www.tensorflow.org/api_docs/python/tf/data) and its preprocessing map functions
import tensorflow as tf
import tensorflow_datasets as tfds
import keras
import keras_cv
2、kerasCV使用流程
2.1 数据导入
本文将使用102类花卉数据集(Flower Dataset)作为代码演示的目标数据集。以下是如何加载这个数据集的步骤(这里假设我们使用tensorflow.keras.preprocessing.image_dataset_from_directory来加载数据集,程序员可以指定自己的数据集):
BATCH_SIZE = 32
AUTOTUNE = tf.data.AUTOTUNE
tfds.disable_progress_bar()
data, dataset_info = tfds.load("oxford_flowers102", with_info=True, as_supervised=True)
train_steps_per_epoch = dataset_info.splits["train"].num_examples // BATCH_SIZE
val_steps_per_epoch = dataset_info.splits["test"].num_examples // BATCH_SIZE
接下来,将图像调整为固定大小(224, 224),并对标签进行独热编码。请注意,keras_cv.layers.CutMix
和 keras_cv.layers.MixUp
需要将目标标签进行独热编码。这是因为它们以稀疏标签表示无法实现的方式修改目标值。
MAGE_SIZE = (224, 224)
num_classes = dataset_info.features["label"].num_classes
def to_dict(image, label):
image = tf.image.resize(image, IMAGE_SIZE)
image = tf.cast