tensorflow-图片预处理API示例

tensorflow-图片预处理API示例,第1张

1.keras.preprocessing.image
def preprocess_image(img):
    img = image.load_img(img, target_size=(299, 299))
    img = image.img_to_array(img)
    img = img / 255.0
    return img
2.tf.io.read_file
def preprocess_image(image):
    image = tf.io.read_file(image)
    image = tf.image.decode_jpeg(image, channels=3)
    image = tf.image.resize_with_pad(image, 227, 227)
    image = image / 255.0
    return image
3.tf.keras.utils.image_dataset_from_directory
tf.keras.utils.image_dataset_from_directory(
    directory,
    labels='inferred',
    label_mode='int',
    class_names=None,
    color_mode='rgb',
    batch_size=32,
    image_size=(256, 256),
    shuffle=True,
    seed=None,
    validation_split=None,
    subset=None,
    interpolation='bilinear',
    follow_links=False,
    crop_to_aspect_ratio=False,
    **kwargs
)

如果你的目录结构是:

main_directory/
...class_a/
......a_image_1.jpg
......a_image_2.jpg
...class_b/
......b_image_1.jpg
......b_image_2.jpg

 

然后调用image_dataset_from_directory(main_directory, labels='inferred') 将返回 a ,它会tf.data.Dataset从子目录class_a和中生成批量图像class_b,以及标签 0 和 1(0 对应于class_a1,1 对应于class_b)。

支持的图像格式:jpeg、png、bmp、gif。动画 gif 被截断到第一帧。

directory数据所在的目录。如果labels是“推断”,它应该包含子目录,每个子目录都包含一个类的图像。否则,目录结构将被忽略。
labels“推断”(从目录结构生成标签)、无(无标签)或与目录中找到的图像文件数量相同大小的整数标签的列表/元组。标签应根据图像文件路径的字母数字顺序排序(通过Python 获得)。 os.walk(directory)
label_mode

- 'int': means that the labels are encoded as integers
(e.g. for `sparse_categorical_crossentropy` loss).
  • “分类”意味着标签被编码为分类向量(例如,用于categorical_crossentropy损失)。
  • “二进制”表示标签(只能有 2 个)被编码为float32值为 0 或 1 的标量(例如 for binary_crossentropy)。
  • 无(无标签)。
class_names仅当“标签”是“推断”时才有效。这是类名的显式列表(必须与子目录的名称匹配)。用于控制类的顺序(否则使用字母数字顺序)。
color_mode“灰度”、“rgb”、“rgba”之一。默认值:“RGB”。图像是否将转换为具有 1、3 或 4 个通道。
batch_size数据批次的大小。默认值:32。如果None,则不会对数据进行批处理(数据集将产生单个样本)。
image_size从磁盘读取图像后调整图像大小的大小。默认为. 由于管道处理必须具有相同大小的批量图像,因此必须提供这一点。 (256, 256)
shuffle是否打乱数据。默认值:真。如果设置为 False,则按字母数字顺序对数据进行排序。
seed用于洗牌和转换的可选随机种子。
validation_split0 到 1 之间的可选浮点数,保留用于验证的数据的一部分。
subset“培训”或“验证”之一。仅在设置时使用。 validation_split
interpolation字符串,调整图像大小时使用的插值方法。默认为bilinear. 支持bilinearnearestbicubicarealanczos3lanczos5gaussianmitchellcubic.
follow_links是否访问符号链接指向的子目录。默认为假。
crop_to_aspect_ratio如果为 True,则调整图像大小而不会出现纵横比失真。当原始纵横比与目标纵横比不同时,将裁剪输出图像,以返回与目标纵横比匹配的图像中(大小为 )的最大可能窗口。默认情况下 ( ),可能不会保留纵横比。 image_sizecrop_to_aspect_ratio=False
**kwargs旧版关键字参数。

Returns

一种tf.data.Dataset对象。

  • 如果label_mode为无,则产生float32形状张量 (batch_size, image_size[0], image_size[1], num_channels),对图像进行编码(有关 的规则,请参见下文num_channels)。
  • 否则,它会产生一个 tuple (images, labels),其中images 有 shape (batch_size, image_size[0], image_size[1], num_channels),并labels遵循下面描述的格式。

关于标签格式的规则:

  • 如果label_modeint,则标签是int32形状张量 (batch_size,)
  • 如果label_modebinary,标签是float32形状为 1 和 0 的张量(batch_size, 1)
  • 如果label_modecategorial,标签是一个float32形状张量(batch_size, num_classes),表示类索引的 one-hot 编码。

关于生成图像中通道数的规则:

  • 如果color_modegrayscale,则图像张量中有 1 个通道。
  • 如果color_modergb,则图像张量中有 3 个通道。
  • 如果color_modergba,则图像张量中有 4 个通道。

 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/918429.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-16
下一篇2022-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存