VitDet 模型

[源代码]

ViTDetBackbone

keras_hub.models.ViTDetBackbone(
    hidden_size,
    num_layers,
    intermediate_dim,
    num_heads,
    global_attention_layer_indices,
    image_shape=(None, None, 3),
    patch_size=16,
    num_output_channels=256,
    use_bias=True,
    use_abs_pos=True,
    use_rel_pos=True,
    window_size=14,
    layer_norm_epsilon=1e-06,
    **kwargs
)

ViT 图像编码器的实现。

ViTDetBackbone 使用窗口化 Transformer 编码器和相对位置编码。代码改编自 Segment Anything 论文Segment Anything GitHubDetectron2

参数

  • hidden_size (int): 每个堆叠的窗口化 Transformer 编码器输出中要投影到的潜在维度。
  • num_layers (int): 在 Vision Transformer 中堆叠的 Transformer 编码器层的数量。
  • intermediate_dim (int): Transformer MLP 头中隐藏 Dense 层的维度。
  • num_heads (int): 每个 Transformer 编码器的 MultiHeadAttentionWithRelativePE 层中使用的头数。
  • global_attention_layer_indices (list): 使用全局注意力的块的索引。
  • image_shape (tuple[int], optional): 输入图像的尺寸,格式为 (H, W, C)。默认为 (None, None, 3)
  • patch_size (int, optional): 提供给 Patching 层的块大小,用于将输入图像转换为扁平化的块序列。默认为 16
  • num_output_channels (int, optional): 输出(图像编码)中的通道(特征)数量。默认为 256
  • use_bias (bool, optional): 是否在注意力层中使用偏置来投影键、查询和值。默认为 True
  • use_abs_pos (bool, optional): 是否将绝对位置嵌入添加到输出块。默认为 True
  • use_rel_pos (bool, optional): 是否在注意力层中使用相对位置编码。默认为 True
  • window_size (int, optional): Transformer 编码器块中窗口化注意力的窗口大小。默认为 14
  • layer_norm_epsilon (int, optional): Transformer 编码器中层归一化块使用的 epsilon。默认为 1e-6

示例

input_data = np.ones((2, 224, 224, 3), dtype="float32")

# Pretrained ViTDetBackbone backbone.
model = keras_hub.models.ViTDetBackbone.from_preset("vit_det")
model(input_data)

# Randomly initialized ViTDetBackbone backbone with a custom config.
model = keras_hub.models.ViTDetBackbone(
        image_shape = (16, 16, 3),
        patch_size = 2,
        hidden_size = 4,
        num_layers = 2,
        global_attention_layer_indices = [2, 5, 8, 11],
        intermediate_dim = 4 * 4,
        num_heads = 2,
        num_output_channels = 2,
        window_size = 2,
)
model(input_data)

[源代码]

from_preset 方法

ViTDetBackbone.from_preset(preset, load_weights=True, **kwargs)

从模型预设实例化一个 keras_hub.models.Backbone

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

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

此构造函数可以通过两种方式调用。可以从基类如 keras_hub.models.Backbone.from_preset() 调用,也可以从模型类如 keras_hub.models.GemmaBackbone.from_preset() 调用。如果从基类调用,返回对象的子类将根据预设目录中的配置推断。

对于任何 Backbone 子类,您可以运行 cls.presets.keys() 来列出该类上所有可用的内置预设。

参数

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

示例

# Load a Gemma backbone with pre-trained weights.
model = keras_hub.models.Backbone.from_preset(
    "gemma_2b_en",
)

# Load a Bert backbone with a pre-trained config and random weights.
model = keras_hub.models.Backbone.from_preset(
    "bert_base_en",
    load_weights=False,
)