KerasHub:预训练模型 / API 文档 / 模型架构 / EfficientNet / EfficientNetImageConverter

EfficientNetImageConverter

[源代码]

EfficientNetImageConverter

keras_hub.layers.EfficientNetImageConverter(
    image_size=None,
    scale=None,
    offset=None,
    crop_to_aspect_ratio=True,
    pad_to_aspect_ratio=False,
    interpolation="bilinear",
    antialias=False,
    bounding_box_format="yxyx",
    data_format=None,
    **kwargs
)

将原始图像预处理为适合模型的输入。

该类将原始图像转换为适合模型的输入。此转换按以下步骤进行:

  1. 使用 `image_size` 调整图像大小。如果 `image_size` 为 `None`,则将跳过此步骤。
  2. 通过乘以 `scale` 来重新缩放图像,`scale` 可以是全局值或按通道的值。如果 `scale` 为 `None`,则将跳过此步骤。
  3. 通过加上 `offset` 来偏移图像,`offset` 可以是全局值或按通道的值。如果 `offset` 为 `None`,则将跳过此步骤。

该层将接收一个 channels last 或 channels first 格式的原始图像张量作为输入,并输出一个用于建模的预处理图像输入。该张量可以是批处理的(秩为 4),也可以是非批处理的(秩为 3)。

此层可与 `from_preset()` 构造函数一起使用,加载一个层,该层将为特定的预训练模型重新缩放和调整图像大小。以这种方式使用该层允许编写预处理代码,该代码在模型检查点之间切换时无需更新。

参数

  • image_size:`(int, int)` 元组或 `None`。图像的输出尺寸,不包括通道轴。如果为 `None`,则不会调整输入的大小。
  • scale:浮点数、浮点数元组或 `None`。应用于输入的缩放比例。如果 `scale` 是单个浮点数,则整个输入将乘以 `scale`。如果 `scale` 是元组,则假定它包含按通道的缩放值,乘以输入图像的每个通道。如果 `scale` 为 `None`,则不应用缩放。
  • offset:浮点数、浮点数元组或 `None`。应用于输入的偏移量。如果 `offset` 是单个浮点数,则整个输入将与 `offset` 相加。如果 `offset` 是元组,则假定它包含按通道的偏移值,与输入图像的每个通道相加。如果 `offset` 为 `None`,则不应用偏移。
  • crop_to_aspect_ratio:如果为 `True`,则在不扭曲宽高比的情况下调整图像大小。当原始宽高比与目标宽高比不同时,输出图像将被裁剪,以返回图像中与目标宽高比匹配的最大可能窗口(大小为 `(height, width)`)。默认情况下(`crop_to_aspect_ratio=False`),可能不保留宽高比。
  • interpolation:字符串,插值方法。支持 `"bilinear"`、`"nearest"`、`"bicubic"`、`"lanczos3"`、`"lanczos5"`。默认为 `"bilinear"`。
  • antialias:下采样图像时是否使用抗锯齿滤波器。默认为 `False`。
  • bounding_box_format:一个字符串,指定边界框的格式,可以是 `"xyxy"`、`"rel_xyxy"`、`"xywh"`、`"center_xywh"`、`"yxyx"`、`"rel_yxyx"` 中的一个。指定将随图像一起调整到 `image_size` 的边界框的格式。要将边界框传递到此层,请在调用该层时传递一个包含键 `"images"` 和 `"bounding_boxes"` 的字典。
  • data_format:字符串,可以是 `"channels_last"` 或 `"channels_first"`。输入的维度顺序。`"channels_last"` 对应于形状为 `(batch, height, width, channels)` 的输入,而 `"channels_first"` 对应于形状为 `(batch, channels, height, width)` 的输入。它默认为 Keras 配置文件 `~/.keras/keras.json` 中的 `image_data_format` 值。如果您从未设置它,那么它将是 `"channels_last"`。

示例

# Resize raw images and scale them to [0, 1].
converter = keras_hub.layers.ImageConverter(
    image_size=(128, 128),
    scale=1. / 255,
)
converter(np.random.randint(0, 256, size=(2, 512, 512, 3)))

# Resize images to the specific size needed for a PaliGemma preset.
converter = keras_hub.layers.ImageConverter.from_preset(
    "pali_gemma_3b_224"
)
converter(np.random.randint(0, 256, size=(2, 512, 512, 3)))

[源代码]

from_preset 方法

EfficientNetImageConverter.from_preset(preset, **kwargs)

从模型预设实例化一个 `keras_hub.layers.ImageConverter`

预设是一个包含配置、权重和其他文件资产的目录,用于保存和加载预训练模型。preset 可以作为以下之一传递:

  1. 内置预设标识符,如 `'pali_gemma_3b_224'`
  2. Kaggle Models 句柄,如 `'kaggle://user/paligemma/keras/pali_gemma_3b_224'`
  3. Hugging Face 句柄,如 `'hf://user/pali_gemma_3b_224'`
  4. 本地预设目录的路径,如 `'./pali_gemma_3b_224'`

您可以运行 `cls.presets.keys()` 来列出该类上所有可用的内置预设。

参数

  • preset:字符串。一个内置预设标识符、一个 Kaggle Models 句柄、一个 Hugging Face 句柄或一个本地目录的路径。
  • load_weights:布尔值。如果为 `True`,权重将被加载到模型架构中。如果为 `False`,权重将被随机初始化。

示例

batch = np.random.randint(0, 256, size=(2, 512, 512, 3))

# Resize images for `"pali_gemma_3b_224"`.
converter = keras_hub.layers.ImageConverter.from_preset(
    "pali_gemma_3b_224"
)
converter(batch) # # Output shape (2, 224, 224, 3)

# Resize images for `"pali_gemma_3b_448"` without cropping.
converter = keras_hub.layers.ImageConverter.from_preset(
    "pali_gemma_3b_448",
    crop_to_aspect_ratio=False,
)
converter(batch) # # Output shape (2, 448, 448, 3)
预设 参数 描述
efficientnet_lite0_ra_imagenet 4.65M EfficientNet-Lite 模型在 ImageNet 1k 数据集上使用 RandAugment 策略进行微调。
efficientnet_b0_ra_imagenet 5.29M EfficientNet B0 模型在 ImageNet 1k 数据集上使用 RandAugment 策略进行预训练。
efficientnet_b0_ra4_e3600_r224_imagenet 5.29M EfficientNet B0 模型由 Ross Wightman 在 ImageNet 1k 数据集上预训练。使用 timm 脚本训练,超参数受 MobileNet-V4 small、timm 的通用超参数和“ResNet Strikes Back”的启发。
efficientnet_es_ra_imagenet 5.44M EfficientNet-EdgeTPU Small 模型在 ImageNet 1k 数据集上使用 RandAugment 策略进行训练。
efficientnet_em_ra2_imagenet 6.90M EfficientNet-EdgeTPU Medium 模型在 ImageNet 1k 数据集上使用 RandAugment2 策略进行训练。
efficientnet_b1_ft_imagenet 7.79M EfficientNet B1 模型在 ImageNet 1k 数据集上进行微调。
efficientnet_b1_ra4_e3600_r240_imagenet 7.79M EfficientNet B1 模型由 Ross Wightman 在 ImageNet 1k 数据集上预训练。使用 timm 脚本训练,超参数受 MobileNet-V4 small、timm 的通用超参数和“ResNet Strikes Back”的启发。
efficientnet_b2_ra_imagenet 9.11M EfficientNet B2 模型在 ImageNet 1k 数据集上使用 RandAugment 策略进行预训练。
efficientnet_el_ra_imagenet 10.59M EfficientNet-EdgeTPU Large 模型在 ImageNet 1k 数据集上使用 RandAugment 策略进行训练。
efficientnet_b3_ra2_imagenet 12.23M EfficientNet B3 模型在 ImageNet 1k 数据集上使用 RandAugment2 策略进行预训练。
efficientnet2_rw_t_ra2_imagenet 13.65M EfficientNet-v2 Tiny 模型在 ImageNet 1k 数据集上使用 RandAugment2 策略进行训练。
efficientnet_b4_ra2_imagenet 19.34M EfficientNet B4 模型在 ImageNet 1k 数据集上使用 RandAugment2 策略进行预训练。
efficientnet2_rw_s_ra2_imagenet 23.94M EfficientNet-v2 Small 模型在 ImageNet 1k 数据集上使用 RandAugment2 策略进行训练。
efficientnet_b5_sw_imagenet 30.39M EfficientNet B5 模型由 Ross Wightman 在 ImageNet 12k 数据集上预训练。基于 Swin Transformer 训练/预训练策略,并进行了修改(与 DeiT 和 ConvNeXt 策略相关)。
efficientnet_b5_sw_ft_imagenet 30.39M EfficientNet B5 模型由 Ross Wightman 在 ImageNet 12k 数据集上预训练,并在 ImageNet-1k 上微调。基于 Swin Transformer 训练/预训练策略,并进行了修改(与 DeiT 和 ConvNeXt 策略相关)。
efficientnet2_rw_m_agc_imagenet 53.24M EfficientNet-v2 Medium 模型在 ImageNet 1k 数据集上使用自适应梯度裁剪进行训练。