DFineBackbone 类keras_hub.models.DFineBackbone(
backbone,
decoder_in_channels,
encoder_hidden_dim,
num_labels,
num_denoising,
learn_initial_query,
num_queries,
anchor_image_size,
feat_strides,
num_feature_levels,
hidden_dim,
encoder_in_channels,
encode_proj_layers,
num_attention_heads,
encoder_ffn_dim,
num_encoder_layers,
hidden_expansion,
depth_multiplier,
eval_idx,
num_decoder_layers,
decoder_attention_heads,
decoder_ffn_dim,
decoder_n_points,
lqe_hidden_dim,
num_lqe_layers,
decoder_method="default",
label_noise_ratio=0.5,
box_noise_scale=1.0,
labels=None,
seed=None,
image_shape=(None, None, 3),
out_features=None,
data_format=None,
dtype=None,
**kwargs
)
用于目标检测的 D-FINE 主干网络。
此类实现了 D-FINE 核心架构,该架构充当 DFineObjectDetector 的主干。它集成了一个 HGNetV2Backbone 用于初始特征提取,一个 DFineHybridEncoder 用于使用 FPN/PAN 路径进行多尺度特征融合,以及一个 DFineDecoder 用于细化目标查询。
主干网络协调整个前向传播过程,从处理原始像素到生成中间预测。关键步骤包括:1. 使用 HGNetV2 主干提取多尺度特征图。2. 使用混合编码器融合这些特征。3. 生成锚框提议并选择 top-k 来初始化解码器查询和参考点。4. 生成用于对比去噪的噪声查询(如果提供了 labels 参数)。5. 将查询和融合的特征通过 transformer 解码器,以产生边界框和类别 logits 的迭代预测。
参数
keras.Model 实例,用作特征提取器。虽然可以使用任何 keras.Model,但强烈建议使用 keras_hub.models.HGNetV2Backbone 实例,因为此架构针对其输出进行了优化。如果提供了自定义主干,它必须具有 stage_names 属性,或者必须为该模型指定 out_features 参数。此要求有助于防止难以调试的下游维度错误。encoder_hidden_dim 列表。0 可禁用去噪。(height, width)。HGNetV2Backbone)馈送到混合编码器的特征图的通道维度。-1,表示最后一层。"default" 或 "discrete"。默认为 "default"。0.5。1.0。"boxes"(形状为 [N, 4]、坐标归一化的 numpy 数组)和 "labels"(形状为 [N]、类别索引的 numpy 数组)。当 num_denoising > 0 时需要。默认为 None。None。(height, width, channels)。高度和宽度可以是 None,表示可变输入大小。默认为 (None, None, 3)。None,则使用主干网络 stage_names 的最后 len(decoder_in_channels) 个特征。默认为 None。"channels_first" 或 "channels_last"。如果指定为 None,则将使用 Keras 配置文件 ~/.keras/keras.json 中的 image_data_format 值。默认为 None。None 或 str 或 keras.mixed_precision.DTypePolicy。模型计算和权重的 dtype。默认为 None。示例
import keras
import numpy as np
from keras_hub.models import DFineBackbone
from keras_hub.models import HGNetV2Backbone
# Example 1: Basic usage without denoising.
# First, build the `HGNetV2Backbone` instance.
hgnetv2 = HGNetV2Backbone(
stem_channels=[3, 16, 16],
stackwise_stage_filters=[
[16, 16, 64, 1, 3, 3],
[64, 32, 256, 1, 3, 3],
[256, 64, 512, 2, 3, 5],
[512, 128, 1024, 1, 3, 5],
],
apply_downsample=[False, True, True, True],
use_lightweight_conv_block=[False, False, True, True],
depths=[1, 1, 2, 1],
hidden_sizes=[64, 256, 512, 1024],
embedding_size=16,
use_learnable_affine_block=True,
hidden_act="relu",
image_shape=(None, None, 3),
out_features=["stage3", "stage4"],
data_format="channels_last",
)
# Then, pass the backbone instance to `DFineBackbone`.
backbone = DFineBackbone(
backbone=hgnetv2,
decoder_in_channels=[128, 128],
encoder_hidden_dim=128,
num_denoising=0, # Disable denoising
num_labels=80,
hidden_dim=128,
learn_initial_query=False,
num_queries=300,
anchor_image_size=(256, 256),
feat_strides=[16, 32],
num_feature_levels=2,
encoder_in_channels=[512, 1024],
encode_proj_layers=[1],
num_attention_heads=8,
encoder_ffn_dim=512,
num_encoder_layers=1,
hidden_expansion=0.34,
depth_multiplier=0.5,
eval_idx=-1,
num_decoder_layers=3,
decoder_attention_heads=8,
decoder_ffn_dim=512,
decoder_n_points=[6, 6],
lqe_hidden_dim=64,
num_lqe_layers=2,
out_features=["stage3", "stage4"],
image_shape=(None, None, 3),
data_format="channels_last",
seed=0,
)
# Prepare input data.
input_data = keras.random.uniform((2, 256, 256, 3))
# Forward pass.
outputs = backbone(input_data)
# Example 2: With contrastive denoising training.
labels = [
{
"boxes": np.array([[0.5, 0.5, 0.2, 0.2], [0.4, 0.4, 0.1, 0.1]]),
"labels": np.array([1, 10]),
},
{
"boxes": np.array([[0.6, 0.6, 0.3, 0.3]]),
"labels": np.array([20]),
},
]
# Pass the `HGNetV2Backbone` instance to `DFineBackbone`.
backbone_with_denoising = DFineBackbone(
backbone=hgnetv2,
decoder_in_channels=[128, 128],
encoder_hidden_dim=128,
num_denoising=100, # Enable denoising
num_labels=80,
hidden_dim=128,
learn_initial_query=False,
num_queries=300,
anchor_image_size=(256, 256),
feat_strides=[16, 32],
num_feature_levels=2,
encoder_in_channels=[512, 1024],
encode_proj_layers=[1],
num_attention_heads=8,
encoder_ffn_dim=512,
num_encoder_layers=1,
hidden_expansion=0.34,
depth_multiplier=0.5,
eval_idx=-1,
num_decoder_layers=3,
decoder_attention_heads=8,
decoder_ffn_dim=512,
decoder_n_points=[6, 6],
lqe_hidden_dim=64,
num_lqe_layers=2,
out_features=["stage3", "stage4"],
image_shape=(None, None, 3),
seed=0,
labels=labels,
)
# Forward pass with denoising.
outputs_with_denoising = backbone_with_denoising(input_data)
from_preset 方法DFineBackbone.from_preset(preset, load_weights=True, **kwargs)
从模型预设实例化一个 keras_hub.models.Backbone。
预设是一个包含配置、权重和其他文件资源的目录,用于保存和加载预训练模型。preset 可以作为以下之一传递:
'bert_base_en''kaggle://user/bert/keras/bert_base_en''hf://user/bert_base_en''modelscope://user/bert_base_en'。'./bert_base_en'此构造函数可以通过两种方式之一调用。要么从基类调用,如 keras_hub.models.Backbone.from_preset(),要么从模型类调用,如 keras_hub.models.GemmaBackbone.from_preset()。如果从基类调用,则返回对象的子类将根据预设目录中的配置进行推断。
对于任何 Backbone 子类,您可以运行 cls.presets.keys() 来列出该类上所有可用的内置预设。
参数
示例
# 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,
)
| 预设 | 参数 | 描述 |
|---|---|---|
| dfine_nano_coco | 3.79M | D-FINE Nano 模型,该系列中最小的变体,在 COCO 数据集上进行了预训练。非常适合计算资源有限的应用。 |
| dfine_small_coco | 10.33M | D-FINE Small 模型在 COCO 数据集上进行了预训练。在性能和计算效率之间取得了平衡。 |
| dfine_small_obj2coco | 10.33M | D-FINE Small 模型首先在 Objects365 上预训练,然后又在 COCO 上进行了微调,结合了广泛的特征学习和基准特定适应。 |
| dfine_small_obj365 | 10.62M | D-FINE Small 模型在大规模 Objects365 数据集上进行了预训练,增强了其识别各种对象的能力。 |
| dfine_medium_coco | 19.62M | D-FINE Medium 模型在 COCO 数据集上进行了预训练。是通用目标检测的扎实基线,性能强大。 |
| dfine_medium_obj2coco | 19.62M | D-FINE Medium 模型采用两阶段训练过程:在 Objects365 上预训练,然后进行 COCO 微调。 |
| dfine_medium_obj365 | 19.99M | D-FINE Medium 模型在 Objects365 数据集上进行了预训练。受益于更大、更多样化的预训练语料库。 |
| dfine_large_coco | 31.34M | D-FINE Large 模型在 COCO 数据集上进行了预训练。提供高精度,适用于更具挑战性的任务。 |
| dfine_large_obj2coco_e25 | 31.34M | D-FINE Large 模型在 Objects365 上预训练,然后在 COCO 上微调 25 个 epoch。一个高性能模型,具有专门的调优。 |
| dfine_large_obj365 | 31.86M | D-FINE Large 模型在 Objects365 数据集上进行了预训练,以提高泛化能力和在各种对象类别上的性能。 |
| dfine_xlarge_coco | 62.83M | D-FINE X-Large 模型,COCO 预训练系列中最大的变体,旨在在精度是首要任务的情况下实现最先进的性能。 |
| dfine_xlarge_obj2coco | 62.83M | D-FINE X-Large 模型,在 Objects365 上预训练,在 COCO 上微调,代表了该系列中在 COCO 类型任务上最强大的模型。 |
| dfine_xlarge_obj365 | 63.35M | D-FINE X-Large 模型在 Objects365 数据集上进行了预训练,通过利用预训练过程中的大量对象类别来提供最大性能。 |