image_dataset_from_directory 函数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,
pad_to_aspect_ratio=False,
data_format=None,
format="tf",
verbose=True,
)
从目录中的图像文件生成数据集。
如果你的目录结构是
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') 将返回一个数据集,该数据集会生成来自子目录 class_a 和 class_b 的图像批次,以及标签 0 和 1(0 对应 class_a,1 对应 class_b)。
支持的图像格式:.jpeg, .jpg, .png, .bmp, .gif。动画 GIF 会被截断到第一帧。
默认情况下,此函数将返回一个 tf.data.Dataset 对象。您可以设置 format="grain" 以返回一个 grain.IterDataset 对象,从而移除 TensorFlow 依赖。
参数
labels 是 "inferred",它应该包含子目录,每个子目录包含一个类的图像。否则,将忽略目录结构。"inferred"(从目录结构生成标签)、None(无标签),或者是一个与在目录中找到的图像文件数量相同的整数标签列表/元组。标签应根据图像文件路径的字母数字顺序排序(通过 Python 中的 os.walk(directory) 获取)。labels 编码的字符串。选项有:"int":表示标签编码为整数(例如,用于 sparse_categorical_crossentropy 损失)。"categorical" 表示标签被编码为分类向量(例如,用于 categorical_crossentropy 损失)。"binary":表示标签(只能有两个)编码为 float32 标量,值为 0 或 1(例如,用于 binary_crossentropy)。None(无标签)。labels 为 "inferred" 时有效。这是类名的显式列表(必须与子目录名称匹配)。用于控制类的顺序(否则使用字母数字顺序)。"grayscale"、"rgb"、"rgba" 之一。表示图像将被转换为具有 1、3 或 4 个通道。默认为 "rgb"。None,则数据将不进行批处理(数据集将产生单个样本)。(height, width)。由于管道处理的图像批次必须具有相同的大小,因此必须提供此参数。默认为 (256, 256)。True。如果设置为 False,则按字母数字顺序排序数据。"training"、"validation" 或 "both" 之一。仅当设置了 validation_split 时使用。当 subset="both" 时,该实用工具返回一个包含两个数据集的元组(分别为训练和验证数据集)。"bilinear"、"nearest"、"bicubic"、"area"、"lanczos3"、"lanczos5"、"gaussian"、"mitchellcubic"。默认为 "bilinear"。False。True,则在调整图像大小时保持纵横比不变。当原始纵横比与目标纵横比不同时,图像将被裁剪以返回图像中与目标纵横比匹配的最大可能窗口(大小为 image_size)。默认情况下(crop_to_aspect_ratio=False),可能不会保留纵横比。True,则在调整图像大小时保持纵横比不变。当原始纵横比与目标纵横比不同时,图像将被填充以返回图像中与目标纵横比匹配的最大可能窗口(大小为 image_size)。默认情况下(pad_to_aspect_ratio=False),可能不会保留纵横比。"tf"。可用选项为"tf":返回一个 tf.data.Dataset 对象。需要安装 TensorFlow。"grain":返回一个 grain.IterDataset 对象。需要安装 Grain。True。返回
一个 tf.data.Dataset (format="tf") 或 grain.IterDataset (format="grain") 对象。
label_mode 为 None,则产生形状为 (batch_size, image_size[0], image_size[1], num_channels) 的 float32 张量,编码图像(有关 num_channels 的规则,请参见下文)。(images, labels),其中 images 的形状为 (batch_size, image_size[0], image_size[1], num_channels),labels 遵循下面的格式描述。标签格式规则
label_mode 是 "int",则标签是一个形状为 (batch_size,) 的 int32 张量。label_mode 是 "binary",则标签是一个形状为 (batch_size, 1) 的 1 和 0 的 float32 张量。label_mode 是 "categorical",则标签是一个形状为 (batch_size, num_classes) 的 float32 张量,表示类别索引的独热编码。关于生成图像通道数的规则
color_mode 是 "grayscale",则图像张量中有一个通道。color_mode 是 "rgb",则图像张量中有三个通道。color_mode 是 "rgba",则图像张量中有四个通道。load_img 函数keras.utils.load_img(
path,
color_mode="rgb",
target_size=None,
interpolation="nearest",
keep_aspect_ratio=False,
)
将图像加载为 PIL 格式。
示例
image = keras.utils.load_img(image_path)
input_arr = keras.utils.img_to_array(image)
input_arr = np.array([input_arr]) # Convert single image to a batch.
predictions = model.predict(input_arr)
参数
"grayscale"、"rgb"、"rgba" 之一。默认:"rgb"。所需的图像格式。None(默认为原始大小)或由整数组成的元组 (img_height, img_width)。"nearest"、"bilinear" 和 "bicubic"。如果安装了 PIL 版本 1.1.3 或更高版本,也支持 "lanczos"。如果安装了 PIL 版本 3.4.0 或更高版本,也支持 "box" 和 "hamming"。默认使用 "nearest"。返回
一个 PIL Image 实例。
img_to_array 函数keras.utils.img_to_array(img, data_format=None, dtype=None)
将 PIL Image 实例转换为 NumPy 数组。
示例
from PIL import Image
img_data = np.random.random(size=(100, 100, 3))
img = keras.utils.array_to_img(img_data)
array = keras.utils.image.img_to_array(img)
参数
"channels_first" 或 "channels_last"。默认为 None,在这种情况下,将使用全局设置 keras.backend.image_data_format()(除非您已更改它,它默认为 "channels_last")。None 表示将使用全局设置 keras.backend.floatx()(除非您已更改它,它默认为 "float32")。返回
一个 3D NumPy 数组。
save_img 函数keras.utils.save_img(
path, x, data_format=None, file_format=None, scale=True, **kwargs
)
将存储在 NumPy 数组中的图像保存到路径或文件对象。
参数
"channels_first" 或 "channels_last"。[0, 255] 范围内。PIL.Image.save() 的其他关键字参数。array_to_img 函数keras.utils.array_to_img(x, data_format=None, scale=True, dtype=None)
将 3D NumPy 数组转换为 PIL Image 实例。
示例
from PIL import Image
img = np.random.random(size=(100, 100, 3))
pil_img = keras.utils.array_to_img(img)
参数
"channels_first" 或 "channels_last"。默认为 None,在这种情况下,将使用全局设置 keras.backend.image_data_format()(除非您已更改它,它默认为 "channels_last")。True。None 表示将使用全局设置 keras.backend.floatx()(除非您已更改它,它默认为 "float32")。默认为 None。返回
一个 PIL Image 实例。