原文:
huggingface.co/docs/transformers
骨干
原文链接:
huggingface.co/docs/transformers/v4.37.2/en/main_classes/backbones
骨干是用于计算机视觉任务的特征提取模型。可以通过两种方式之一将模型用作骨干:
- 使用预训练模型初始化
AutoBackbone
类, - 初始化支持的骨干配置并将其传递给模型架构。
使用 AutoBackbone
您可以使用AutoBackbone
类初始化一个模型作为骨干,并获取任何阶段的特征图。您可以定义out_indices
来指示您想要从哪些层获取特征图。如果您知道层的名称,也可以使用out_features
。您可以互换使用它们。如果同时使用out_indices
和out_features
,请确保它们是一致的。不传递任何特征图参数将使骨干产生最后一层的特征图。为了可视化各个阶段的外观,让我们以 Swin 模型为例。每个阶段负责特征提取,输出特征图。
第一阶段的特征图如下所示。
让我们通过一个示例来看看。请注意,out_indices=(0,)
会导致产生模型的 stem。Stem 指的是第一个特征提取阶段之前的阶段。在上图中,它指的是 patch 分区。我们希望从 stem、第一阶段和第二阶段获取特征图。
>>> from transformers import AutoImageProcessor, AutoBackbone
>>> import torch
>>> from PIL import Image
>>> import requests
>>> processor = AutoImageProcessor.from_pretrained("microsoft/swin-tiny-patch4-window7-224")
>>> model = AutoBackbone.from_pretrained("microsoft/swin-tiny-patch4-window7-224", out_indices=(0,1,2))
>>> url = "https://img.yuanmabao.com/zijie/pic/2024/06/26/bm0jso3a53a.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> feature_maps = outputs.feature_maps
feature_maps
对象现在有三个特征图,每个都可以像下面这样访问。假设我们想要获取 stem 的特征图。
>>> list(feature_maps[0].shape)
[1, 96, 56, 56]
我们可以像下面这样获取第一阶段和第二阶段的特征图。
代码语言:javascript复制>>> list(feature_maps[1].shape)
[1, 96, 56, 56]
>>> list(feature_maps[2].shape)
[1, 192, 28, 28]
初始化骨干配置
在计算机视觉中,模型由骨干、neck 和头部组成。骨干提取特征,neck 转换骨干的输出,头部用于主要任务(例如目标检测)。您可以通过将模型配置传递给backbone_config
来使用模型骨干初始化 neck 和头部。例如,您可以看到如何使用 ResNet 骨干初始化带有实例分割头部的 MaskFormer 模型。
from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation, ResNetConfig
backbone_config = ResNetConfig.from_pretrained("microsoft/resnet-50")
config = MaskFormerConfig(backbone_config=backbone_config)
model = MaskFormerForInstanceSegmentation(config)
您还可以使用随机权重初始化骨干,以初始化模型的 neck。
代码语言:javascript复制backbone_config = ResNetConfig()
config = MaskFormerConfig(backbone_config=backbone_config)
model = MaskFormerForInstanceSegmentation(config)
通过TimmBackbone
和TimmBackboneConfig
,transformers 还支持timm
模型。
from transformers import TimmBackboneConfig, TimmBackbone
backbone_config = TimmBackboneConfig("resnet50")
model = TimmBackbone(config=backbone_config)
回调函数
原始文本:
huggingface.co/docs/transformers/v4.37.2/en/main_classes/callback
回调函数是可以自定义 PyTorch Trainer 训练循环行为的对象(此功能尚未在 TensorFlow 中实现),可以检查训练循环状态(用于进度报告、在 TensorBoard 或其他 ML 平台上记录…)并做出决策(如提前停止)。
回调函数是“只读”代码片段,除了它们返回的 TrainerControl 对象外,它们不能更改训练循环中的任何内容。对于需要更改训练循环的自定义内容,您应该子类化 Trainer 并覆盖您需要的方法(请参阅 trainer 以获取示例)。
默认情况下,TrainingArguments.report_to
设置为"all"
,因此 Trainer 将使用以下回调函数。
- DefaultFlowCallback 处理日志记录、保存和评估的默认行为。
- 使用 PrinterCallback 或 ProgressCallback 显示进度并打印日志(如果通过 TrainingArguments 停用 tqdm,则使用第一个,否则使用第二个)。
- 如果 tensorboard 可访问(通过 PyTorch >= 1.4 或 tensorboardX),则使用 TensorBoardCallback。
- 如果安装了wandb,则使用 WandbCallback。
- 如果安装了comet_ml,则使用 CometCallback。
- 如果安装了mlflow,则使用 MLflowCallback。
- 如果安装了neptune,则使用 NeptuneCallback。
- 如果安装了azureml-sdk,则使用 AzureMLCallback。
- 如果安装了codecarbon,则使用 CodeCarbonCallback。
- 如果安装了clearml,则使用 ClearMLCallback。
- 如果安装了dagshub,则使用 DagsHubCallback。
- 如果安装了flyte,则使用 FlyteCallback。
- 如果安装了dvclive,则使用 DVCLiveCallback。
如果安装了某个软件包,但您不希望使用相应的集成,可以将TrainingArguments.report_to
更改为您想要使用的集成列表(例如["azure_ml", "wandb"]
)。
实现回调的主要类是 TrainerCallback。它获取用于实例化 Trainer 的 TrainingArguments,可以通过 TrainerState 访问该 Trainer 的内部状态,并可以通过 TrainerControl 对训练循环采取一些操作。
可用的回调
以下是库中可用的 TrainerCallback 列表:
class transformers.integrations.CometCallback
< source >
代码语言:javascript复制( )
一个将日志发送到Comet ML的 TrainerCallback。
setup
< source >
代码语言:javascript复制( args state model )
设置可选的 Comet.ml 集成。
环境:
-
COMET_MODE
(str
, 可选,默认为ONLINE
): 是否创建在线、离线实验或禁用 Comet 日志记录。可以是OFFLINE
、ONLINE
或DISABLED
。 -
COMET_PROJECT_NAME
(str
, 可选): 用于实验的 Comet 项目名称。 -
COMET_OFFLINE_DIRECTORY
(str
, 可选): 在COMET_MODE
为OFFLINE
时用于保存离线实验的文件夹。 -
COMET_LOG_ASSETS
(str
, 可选,默认为TRUE
): 是否将训练资产(tf 事件日志、检查点等)记录到 Comet。可以是TRUE
或FALSE
。
有关环境中可配置项目的详细信息,请参阅此处。
class transformers.DefaultFlowCallback
< source >
代码语言:javascript复制( )
处理训练循环的默认流程,包括日志、评估和检查点的 TrainerCallback。
class transformers.PrinterCallback
< source >
代码语言:javascript复制( )
一个简单的 TrainerCallback,只打印日志。
class transformers.ProgressCallback
< source >
代码语言:javascript复制( )
一个显示训练或评估进度的 TrainerCallback。
class transformers.EarlyStoppingCallback
< source >
代码语言:javascript复制( early_stopping_patience: int = 1 early_stopping_threshold: Optional = 0.0 )
参数
-
early_stopping_patience
(int
) — 与metric_for_best_model
一起使用,当指定的指标在early_stopping_patience
次评估调用中恶化时停止训练。 -
early_stopping_threshold(float,
可选) — 与 TrainingArguments 的metric_for_best_model
和early_stopping_patience
一起使用,表示指定指标必须改善多少才能满足提前停止条件。
一个处理提前停止的 TrainerCallback。
此回调取决于 TrainingArguments 参数load_best_model_at_end功能,以在 TrainerState 中设置 best_metric。请注意,如果 TrainingArguments 参数save_steps与eval_steps不同,则直到下一个保存步骤才会发生早停。
class transformers.integrations.TensorBoardCallback
<来源>
代码语言:javascript复制( tb_writer = None )
参数
tb_writer
(SummaryWriter
,可选)—要使用的写入器。如果未设置,将实例化一个。
一个 TrainerCallback,将日志发送到TensorBoard。
class transformers.integrations.WandbCallback
<来源>
代码语言:javascript复制( )
一个 TrainerCallback,将指标、媒体、模型检查点记录到Weights and Biases。
setup
<来源>
代码语言:javascript复制( args state model **kwargs )
设置可选的 Weights & Biases(wandb)集成。
如果需要,可以子类化并重写此方法以自定义设置。在这里找到更多信息。您还可以重写以下环境变量:
环境:
-
WANDB_LOG_MODEL
(str
,可选,默认为"false"
):是否在训练期间记录模型和检查点。可以是"end"
,"checkpoint"
或"false"
。如果设置为"end"
,模型将在训练结束时上传。如果设置为"checkpoint"
,将在每次args.save_steps
保存时上传检查点。如果设置为"false"
,模型将不会上传。与load_best_model_at_end()
一起使用以上传最佳模型。 在 5.0 中已弃用 在