TensorFlow弃用ImageDataGenerator后的图像数据增强方法

136 阅读3分钟

TensorFlow弃用ImageDataGenerator后的图像数据增强方法

由于 ImageDataGenerator 类已被弃用,一些教程中使用的这种传统方法在TensorFlow 2.17及以上的版本中不再可使用。

出于此,这里列举两种现在仍然可用的方法来增强图像:

  1. 使用 tf.keras.layers 模块。
  2. 使用 tf.image 模块。

为了编写更简洁的代码,使用层可以让我们的代码更加集成化。 我们可以将图像处理层封装成一个模块,然后将其插入到模型中以解决实际问题。 所以,我首先整理使用层增强图像的一些方法,有时间再整理使用 tf.image 模块增强图像的一些方法。

tf.keras.Layers

这里列出的所有类都位于 tf.keras.layers 之下,我简要介绍一下具体的参数使用(在介绍第一个时会详细一点,因为其它的层都比较类似):

  • RandomBrightness(factor, value_range=(0, 255), seed=None):随机调整图像亮度。
  • value_range:图像的像素值范围。对于RGB或者灰度图这种uint8图像而言,未处理的像素值范围是[0,255][0, 255]。 但是,在训练模型时,我们通常将图像像素值归一化到[0,1][0, 1]之间。 所以如果你先对图像进行归一化,那么需要将value_range设置为(0.0, 1.0)
    • factor:调整范围,实际的调整因子delta会从这个范围内随机产生。factor可以是一个标量或者二元组,用以表示[1,1][-1, 1]的范围。
      • 如果是一个标量,那么调整因子会从[factor,factor][-factor, factor]中随机选择。
      • 如果是一个二元组,那么就是从手动确定范围的上下界[minval,maxval][minval, maxval]中随机选择。
    • seed:随机数种子,用于复现随机性,方便调试。
    • 调整公式:out=in×(1+delta)out = in\times (1 + delta)
  • RandomContrast(factor, seed=None):随机调整图像对比度。
  • RandomCrop(height, width, seed=None):随机裁剪图像。
    • height:裁剪后的图像高度。
    • width:裁剪后的图像宽度。
  • RandomFlip(mode, seed=None):随机翻转图像。
    • mode:翻转模式。可选值有:
      • "horizontal":水平翻转。
      • "vertical":垂直翻转。
      • "horizontal_and_vertical":水平和垂直翻转。
  • RandomHeight(height_range, interpolation="bilinear", seed=None):随机调整图像高度。
    • height_range:高度调整范围。
    • interpolation:插值方法。可选值有:
      • "nearest":最近邻插值。速度最快,直接复制最近像素值,可能导致锯齿状边缘,适合低计算资源场景。
      • "bilinear":双线性插值。默认方法,计算速度快,适用于大多数场景,但可能会略微模糊图像边缘。
      • "bicubic":双三次插值。计算复杂度较高,生成更平滑的图像,适合高质量需求。
      • "lanczos3":Lanczos-3 插值。使用 Lanczos 核(a=3)插值,保留细节较好,适用于高分辨率图像调整。
      • "lanczos5":Lanczos-5 兰索斯插值。使用 Lanczos 核(a=5)插值,计算成本更高,但细节保留更优。
      • "gaussian":高斯插值。基于高斯分布的插值,平滑效果较强,可能模糊高频细节。
      • "mitchellcubic": Mitchellcubic 插值。使用 Mitchell-Netravali 滤波器,平衡平滑和锐化,常用于图像放大。
  • RandomWidth(width_range, interpolation="bilinear", seed=None):随机调整图像宽度。
  • RandomRotation(factor, fill_mode="nearest", interpolation="bilinear", seed=None, fill_value=0.0, value_range=(0, 255)):随机旋转图像。
    • fill_mode:填充模式。可选值有:
      • "constant":填充常数。
      • "reflect":镜像填充。
      • "wrap":环绕填充。
      • "nearest":最近邻填充。
    • interpolation:插值方法。可选值有:
      • "nearest":最近邻插值。
      • "bilinear":双线性插值。
    • fill_value:填充值。当fill_mode"constant"时,使用此值填充。
  • RandomZoom(height_factor, width_factor, fill_mode="nearest", interpolation="bilinear", seed=None):随机缩放图像。

tf.image

@TODO 待补充。