Transformers 4.37 中文文档(十四)

2024-06-26 15:08:09 浏览数 (2)

原文:huggingface.co/docs/transformers

骨干

原文链接:huggingface.co/docs/transformers/v4.37.2/en/main_classes/backbones

骨干是用于计算机视觉任务的特征提取模型。可以通过两种方式之一将模型用作骨干:

  • 使用预训练模型初始化AutoBackbone类,
  • 初始化支持的骨干配置并将其传递给模型架构。

使用 AutoBackbone

您可以使用AutoBackbone类初始化一个模型作为骨干,并获取任何阶段的特征图。您可以定义out_indices来指示您想要从哪些层获取特征图。如果您知道层的名称,也可以使用out_features。您可以互换使用它们。如果同时使用out_indicesout_features,请确保它们是一致的。不传递任何特征图参数将使骨干产生最后一层的特征图。为了可视化各个阶段的外观,让我们以 Swin 模型为例。每个阶段负责特征提取,输出特征图。

第一阶段的特征图如下所示。

让我们通过一个示例来看看。请注意,out_indices=(0,)会导致产生模型的 stem。Stem 指的是第一个特征提取阶段之前的阶段。在上图中,它指的是 patch 分区。我们希望从 stem、第一阶段和第二阶段获取特征图。

代码语言:javascript复制
>>> 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 的特征图。

代码语言:javascript复制
>>> 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 模型。

代码语言:javascript复制
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)

通过TimmBackboneTimmBackboneConfig,transformers 还支持timm模型。

代码语言:javascript复制
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 日志记录。可以是OFFLINEONLINEDISABLED
  • COMET_PROJECT_NAME (str, 可选): 用于实验的 Comet 项目名称。
  • COMET_OFFLINE_DIRECTORY (str, 可选): 在COMET_MODEOFFLINE时用于保存离线实验的文件夹。
  • COMET_LOG_ASSETS (str, 可选,默认为TRUE): 是否将训练资产(tf 事件日志、检查点等)记录到 Comet。可以是TRUEFALSE

有关环境中可配置项目的详细信息,请参阅此处。

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_modelearly_stopping_patience一起使用,表示指定指标必须改善多少才能满足提前停止条件。

一个处理提前停止的 TrainerCallback。

此回调取决于 TrainingArguments 参数load_best_model_at_end功能,以在 TrainerState 中设置 best_metric。请注意,如果 TrainingArguments 参数save_stepseval_steps不同,则直到下一个保存步骤才会发生早停。

class transformers.integrations.TensorBoardCallback

<来源>

代码语言:javascript复制
( tb_writer = None )

参数

  • tb_writerSummaryWriter可选)—要使用的写入器。如果未设置,将实例化一个。

一个 TrainerCallback,将日志发送到TensorBoard。

class transformers.integrations.WandbCallback

<来源>

代码语言:javascript复制
( )

一个 TrainerCallback,将指标、媒体、模型检查点记录到Weights and Biases。

setup

<来源>

代码语言:javascript复制
( args state model **kwargs )

设置可选的 Weights & Biases(wandb)集成。

如果需要,可以子类化并重写此方法以自定义设置。在这里找到更多信息。您还可以重写以下环境变量:

环境:

  • WANDB_LOG_MODELstr可选,默认为"false"):是否在训练期间记录模型和检查点。可以是"end""checkpoint""false"。如果设置为"end",模型将在训练结束时上传。如果设置为"checkpoint",将在每次args.save_steps保存时上传检查点。如果设置为"false",模型将不会上传。与load_best_model_at_end()一起使用以上传最佳模型。 在 5.0 中已弃用 在

    0 人点赞