image_dataset_from_directory
functionkeras.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,
verbose=True,
)
从目录中的图像文件生成一个 tf.data.Dataset
.
如果你的目录结构是:
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')
将返回一个 tf.data.Dataset
,该数据集生成来自子目录 class_a
和 class_b
的图像批次,以及标签 0 和 1(0 对应 class_a
,1 对应 class_b
).
支持的图像格式:.jpeg
、.jpg
、.png
、.bmp
、.gif
.
动画 gif 被截断为第一帧.
参数:
directory: 数据所在的目录.
如果 labels
是 "inferred"
,它应该包含
子目录,每个子目录包含一个类的图像.
否则,目录结构将被忽略.
labels: 要么是 "inferred"
(标签从目录结构生成),
None
(无标签),
或一个整数标签的列表/元组,其大小与目录中找到的图像文件数量相同.标签应根据图像文件路径的字母数字顺序排序
(通过 Python 中的 os.walk(directory)
获得).
label_mode: 描述 labels
编码的字符串.选项有:
- "int"
:表示标签编码为整数
(例如用于 sparse_categorical_crossentropy
损失).
- "categorical"
表示标签编码为分类向量
(例如用于 categorical_crossentropy
损失).
- "binary"
表示标签(只能有 2 个)
编码为 float32
标量,值为 0 或 1
(例如用于 binary_crossentropy
).
- None
(无标签).
class_names: 仅在 labels
为 "inferred"
时有效.
这是类名的显式列表
(必须与子目录名称匹配).用于控制类的顺序(否则使用字母数字顺序).
color_mode: 其中一个 "grayscale"
、"rgb"
、"rgba"
.
图像将被转换为
具有 1、3 或 4 个通道.默认为 "rgb"
.
batch_size: 数据的批次大小.默认为 32.
如果 None
,数据将不会被分批
(数据集将生成单个样本).
image_size: 从磁盘读取图像后调整大小的大小,
指定为 (height, width)
.
由于管道处理必须具有相同大小的图像批次,因此必须提供此参数.默认为 (256, 256)
.
shuffle: 是否打乱数据.默认为 True
.
如果设置为 False
,则按字母数字顺序排序数据.
seed: 用于打乱和变换的可选随机种子.
validation_split: 可选的浮点数,介于 0 和 1 之间,
为验证保留的数据比例.
subset: 要返回的数据子集.
其中一个 "training"
、"validation"
或 "both"
.
仅在设置 validation_split
时使用.
当 subset="both"
时,实用程序返回两个数据集的元组
(分别对应训练和验证数据集).
interpolation: 字符串,调整图像大小时使用的插值方法.
支持 "bilinear"
、"nearest"
、"bicubic"
、"area"
、
"lanczos3"
、"lanczos5"
、"gaussian"
、"mitchellcubic"
.
默认为 "bilinear"
.
follow_links: 是否访问由符号链接指向的子目录.
默认为 False
.
crop_to_aspect_ratio: 如果为 True
,调整图像大小而不失真.当原始宽高比与目标宽高比不同时,输出图像将被裁剪,以返回图像中最大的可能窗口
(大小为 image_size
),匹配目标宽高比.默认情况下(crop_to_aspect_ratio=False
),宽高比可能不会被保留.
pad_to_aspect_ratio: 如果为 True
,调整图像大小而不失真.当原始宽高比与目标宽高比不同时,输出图像将被填充,以返回图像中最大的可能窗口
(大小为 image_size
),匹配目标宽高比.默认情况下(pad_to_aspect_ratio=False
),宽高比可能不会被保留.
data_format: 如果为 None,使用 keras.config.image_data_format()
否则为 'channel_last' 或 'channel_first'.
verbose: 是否显示类和找到的文件数量的信息.默认为 True
.
返回:
一个 tf.data.Dataset
对象.
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)
的 float32
张量,值为 1 和 0.label_mode
为 "categorical"
,标签是形状为
(batch_size, num_classes)
的 float32
张量,表示类索引的独热编码.关于生成图像中通道数量的规则:
color_mode
为 "grayscale"
,
图像张量中有 1 个通道.color_mode
为 "rgb"
,
图像张量中有 3 个通道.color_mode
为 "rgba"
,
图像张量中有 4 个通道.load_img
functionkeras.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]) # 将单张图像转换为批次.
predictions = model.predict(input_arr)
参数:
path: 图像文件的路径.
color_mode: 可以是 "grayscale"
, "rgb"
, "rgba"
之一.默认: "rgb"
.
所需的图像格式.
target_size: 可以是 None
(默认使用原始大小)或整数元组 (img_height, img_width)
.
interpolation: 如果目标大小与加载的图像大小不同,用于重新采样图像的插值方法.
支持的方法有 "nearest"
, "bilinear"
, 和 "bicubic"
.
如果安装了PIL版本1.1.3或更新版本,还支持 "lanczos"
.
如果安装了PIL版本3.4.0或更新版本,还支持 "box"
和 "hamming"
.
默认使用 "nearest"
.
keep_aspect_ratio: 布尔值,是否在不失真的情况下将图像调整为目标大小.
图像在调整大小之前以目标宽高比在中心进行裁剪.
返回: 一个PIL Image实例.
img_to_array
functionkeras.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)
参数:
img: 输入的 PIL Image 实例.
data_format: 图像数据格式,可以是 "channels_first"
或 "channels_last"
.默认为 None
,在这种情况下,使用全局设置 keras.backend.image_data_format()
(除非你更改了它,默认值为 "channels_last"
).
dtype: 要使用的数据类型.None
意味着使用全局设置 keras.backend.floatx()
(除非你更改了它,默认值为 "float32"
).
返回: 一个 3D NumPy 数组.
save_img
functionkeras.utils.save_img(
path, x, data_format=None, file_format=None, scale=True, **kwargs
)
保存以NumPy数组形式存储的图像到路径或文件对象.
参数:
path: 路径或文件对象.
x: NumPy数组.
data_format: 图像数据格式,可以是"channels_first"
或"channels_last"
.
file_format: 可选的文件格式覆盖.如果省略,使用的格式将根据文件扩展名确定.如果使用了文件对象而不是文件名,则应始终使用此参数.
scale: 是否将图像值重新缩放到[0, 255]
范围内.
**kwargs: 传递给PIL.Image.save()
的额外关键字参数.
array_to_img
functionkeras.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)
参数:
x: 输入数据,可以是任何可以转换为NumPy数组的形式.
data_format: 图像数据格式,可以是"channels_first"
或"channels_last"
.默认为None
,在这种情况下,使用全局设置keras.backend.image_data_format()
(除非你更改了它,默认值为"channels_last"
).
scale: 是否重新缩放图像,使得最小值和最大值分别为0和255.默认为True
.
dtype: 要使用的数据类型.None
意味着使用全局设置keras.backend.floatx()
(除非你更改了它,默认值为"float32"
).默认为None
.
返回: 一个PIL Image实例.