Transformers documentation
ConvNeXt V2
该模型于 2023-01-02 在 HF papers 上发布,并于 2023-03-14 贡献至 Hugging Face Transformers。
ConvNeXt V2
概述
ConvNeXt V2 模型由 Sanghyun Woo、Shoubhik Debnath、Ronghang Hu、Xinlei Chen、Zhuang Liu、In So Kweon 和 Saining Xie 在 ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders 中提出。 ConvNeXt V2 是一个纯卷积模型(ConvNet),其设计灵感来源于 Vision Transformers,是 ConvNeXT 的后续版本。
该论文的摘要如下:
得益于架构的改进和更好的表示学习框架,视觉识别领域在 2020 年代初经历了快速的现代化进程和性能提升。例如,以 ConvNeXt 为代表的现代 ConvNet 在各种场景中均展现出强劲的性能。虽然这些模型最初是为使用 ImageNet 标签的监督学习而设计的,但它们同样有可能从掩码自编码器(MAE)等自监督学习技术中受益。然而,我们发现,简单地将这两种方法结合会导致性能不佳。在本文中,我们提出了一个全卷积掩码自编码器框架,以及一个新的全局响应归一化(GRN)层,该层可以添加到 ConvNeXt 架构中以增强通道间的特征竞争。这种自监督学习技术与架构改进的协同设计催生了一个名为 ConvNeXt V2 的新模型家族,它显著提升了纯 ConvNet 在各种识别基准上的性能,包括 ImageNet 分类、COCO 检测和 ADE20K 分割。我们还提供了各种规模的预训练 ConvNeXt V2 模型,从在 ImageNet 上以 3.7M 参数实现 76.7% top-1 准确率的轻量级 Atto 模型,到仅使用公开训练数据即可达到 88.9% 最先进准确率的 650M Huge 模型。
ConvNeXt V2 architecture. Taken from the original paper. 资源
一份来自 Hugging Face 官方和社区(以 🌎 标识)的资源列表,帮助你快速上手 ConvNeXt V2。
如果您有兴趣提交资源以收录在此处,请随时发起 Pull Request,我们将对其进行审核!理想情况下,该资源应展示一些新内容,而不是重复现有资源。
ConvNextV2Config
class transformers.ConvNextV2Config
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonenum_channels: int = 3patch_size: int | list[int] | tuple[int, int] = 4num_stages: int = 4hidden_sizes: list[int] | tuple[int, ...] | None = (96, 192, 384, 768)depths: list[int] | tuple[int, ...] | None = (3, 3, 9, 3)hidden_act: str = 'gelu'initializer_range: float = 0.02layer_norm_eps: float = 1e-12drop_path_rate: float | int = 0.0image_size: int | list[int] | tuple[int, int] = 224_out_features: list[str] | None = None_out_indices: list[int] | None = None )
参数
- num_channels (
int,可选,默认为3) — 输入通道的数量。 - patch_size (
Union[int, list[int], tuple[int, int]],可选,默认为4) — 每个 patch 的大小(分辨率)。 - num_stages (
int,可选,默认为 4) — 模型中的阶段数。 - hidden_sizes (
Union[list[int], tuple[int, ...]],可选,默认为(96, 192, 384, 768)) — 模型每个阶段的维度(隐藏层大小)。 - depths (
Union[list[int], tuple[int, ...]],可选,默认为(3, 3, 9, 3)) — Transformer 中每一层的深度。 - hidden_act (
str,可选,默认为gelu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、"relu"、"silu"等。 - initializer_range (
float,可选,默认为0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - layer_norm_eps (
float,可选,默认为1e-12) — 层归一化层所使用的 epsilon 值。 - drop_path_rate (
Union[float, int],可选,默认为0.0) — 用于 patch fusion 的 drop path 比率。 - image_size (
Union[int, list[int], tuple[int, int]],可选,默认为224) — 每张图片的尺寸(分辨率)。
这是用于存储 ConvNextV2Model 配置的类。它根据指定的参数实例化 Convnextv2 模型,并定义模型架构。使用默认值实例化配置,将得到与 facebook/convnextv2-tiny-1k-224 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。
示例:
>>> from transformers import ConvNeXTV2Config, ConvNextV2Model
>>> # Initializing a ConvNeXTV2 convnextv2-tiny-1k-224 style configuration
>>> configuration = ConvNeXTV2Config()
>>> # Initializing a model (with random weights) from the convnextv2-tiny-1k-224 style configuration
>>> model = ConvNextV2Model(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configConvNextV2Model
class transformers.ConvNextV2Model
< source >( config: ConvNextV2Config )
参数
- config (ConvNextV2Config) — 模型配置类,包含模型的所有参数。使用配置文件进行初始化不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
未添加任何特定头部的裸 Convnextv2 模型,输出原始隐藏状态。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPoolingAndNoAttention or tuple(torch.Tensor)
参数
- pixel_values (
torch.Tensor,形状为(batch_size, num_channels, image_size, image_size),可选) — 与输入图像对应的张量。可以使用 ConvNextImageProcessor 获取像素值。有关详细信息,请参阅 ConvNextImageProcessor.call()(processor_class使用 ConvNextImageProcessor 处理图像)。
返回值
BaseModelOutputWithPoolingAndNoAttention 或 tuple(torch.Tensor)
BaseModelOutputWithPoolingAndNoAttention 或 torch.Tensor 元组(如果传入 return_dict=False 或 config.return_dict=False),包含根据配置(ConvNextV2Config)和输入而定的各种元素。
ConvNextV2Model 的 forward 方法会重写 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
last_hidden_state(形状为
(batch_size, num_channels, height, width)的torch.Tensor)— 模型最后一层输出的隐藏状态序列。pooler_output(形状为
(batch_size, hidden_size)的torch.Tensor)— 在空间维度上执行池化操作后的最后一层隐藏状态。hidden_states (
tuple(torch.Tensor),可选,当传入output_hidden_states=True或config.output_hidden_states=True时返回) — 一个torch.Tensor元组(如果模型具有嵌入层,则包含嵌入层输出的一个张量,以及每个层输出的一个张量),形状为(batch_size, num_channels, height, width)。模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。
ConvNextV2ForImageClassification
class transformers.ConvNextV2ForImageClassification
< source >( config: ConvNextV2Config )
参数
- config (ConvNextV2Config) — 模型配置类,包含模型的所有参数。使用配置文件进行初始化不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
在顶部带有图像分类头的 ConvNextV2 模型(在池化特征之上添加一个线性层),例如用于 ImageNet。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = None**kwargs ) → ImageClassifierOutputWithNoAttention or tuple(torch.Tensor)
参数
- pixel_values (
torch.Tensor,形状为(batch_size, num_channels, image_size, image_size),可选) — 与输入图像对应的张量。可以使用 ConvNextImageProcessor 获取像素值。有关详细信息,请参阅 ConvNextImageProcessor.call()(processor_class使用 ConvNextImageProcessor 处理图像)。 - labels(形状为
(batch_size,)的torch.LongTensor,可选)— 用于计算图像分类/回归损失的标签。索引应在[0, ..., config.num_labels - 1]范围内。如果config.num_labels == 1,则计算回归损失(均方损失);如果config.num_labels > 1,则计算分类损失(交叉熵)。
返回值
ImageClassifierOutputWithNoAttention 或 tuple(torch.Tensor)
一个 ImageClassifierOutputWithNoAttention 或 torch.Tensor 元组(当传入 return_dict=False 或 config.return_dict=False 时),其包含的元素取决于配置(ConvNextV2Config)和输入。
ConvNextV2ForImageClassification 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
- loss (
torch.Tensor,形状为(1,),可选,当提供labels时返回) — 分类损失(如果 config.num_labels==1,则为回归损失)。 - logits(形状为
(batch_size, config.num_labels)的torch.Tensor)— 分类(或当 config.num_labels==1 时为回归)得分(SoftMax 之前)。 - hidden_states (
tuple(torch.Tensor),可选,在传入output_hidden_states=True或config.output_hidden_states=True时返回) — 一个torch.Tensor元组(如果模型具有嵌入层,则包含嵌入层输出的一个张量,以及每个阶段输出的一个张量),形状为(batch_size, num_channels, height, width)。模型在每个阶段输出处的隐藏状态(也称为特征图)。
示例:
>>> from transformers import AutoImageProcessor, ConvNextV2ForImageClassification
>>> import torch
>>> from datasets import load_dataset
>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]
>>> image_processor = AutoImageProcessor.from_pretrained("facebook/convnextv2-tiny-1k-224")
>>> model = ConvNextV2ForImageClassification.from_pretrained("facebook/convnextv2-tiny-1k-224")
>>> inputs = image_processor(image, return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])
...