Swin2SR
原始文本:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/swin2sr
概述
Swin2SR 模型是由 Marcos V. Conde、Ui-Jin Choi、Maxime Burchi、Radu Timofte 在《Swin2SR:用于压缩图像超分辨率和恢复的 SwinV2 Transformer》中提出的。Swin2R 通过整合SwinIR模型中的 Swin Transformer v2 层来改进模型,从而缓解训练不稳定性、预训练和微调之间的分辨率差距以及数据饥饿等问题。
论文摘要如下:
压缩在通过带限制系统(如流媒体服务、虚拟现实或视频游戏)传输和存储图像和视频中扮演着重要角色。然而,压缩不可避免地会导致伪影和原始信息的丢失,这可能严重降低视觉质量。因此,压缩图像的质量增强已成为一个热门研究课题。虽然大多数最先进的图像恢复方法基于卷积神经网络,但其他基于 Transformer 的方法,如 SwinIR,在这些任务上表现出色。在本文中,我们探索了新颖的 Swin Transformer V2,以改进 SwinIR 用于图像超分辨率,特别是在压缩输入场景下。使用这种方法,我们可以解决训练 Transformer 视觉模型时的主要问题,如训练不稳定性、预训练和微调之间的分辨率差距,以及数据饥饿。我们在三个代表性任务上进行实验:JPEG 压缩伪影去除、图像超分辨率(经典和轻量级)以及压缩图像超分辨率。实验结果表明,我们的方法 Swin2SR 可以改善 SwinIR 的训练收敛性和性能,并且在“AIM 2022 挑战赛:压缩图像和视频的超分辨率”中是前五名解决方案。
Swin2SR 架构。取自原始论文。
资源
Swin2SR 的演示笔记本可以在这里找到。
Swin2SRImageProcessor
class transformers.Swin2SRImageProcessor
( do_rescale: bool = True rescale_factor: Union = 0.00392156862745098 do_pad: bool = True pad_size: int = 8 **kwargs )
参数
do_rescale
(bool
,可选,默认为True
) — 是否按指定比例rescale_factor
对图像进行重新缩放。可以通过preprocess
方法中的do_rescale
参数进行覆盖。rescale_factor
(int
或float
,可选,默认为1/255
) — 如果重新缩放图像,则使用的比例因子。可以通过preprocess
方法中的rescale_factor
参数进行覆盖。
构建一个 Swin2SR 图像处理器。
preprocess
( images: Union do_rescale: Optional = None rescale_factor: Optional = None do_pad: Optional = None pad_size: Optional = None return_tensors: Union = None data_format: Union = <ChannelDimension.FIRST: 'channels_first'> input_data_format: Union = None **kwargs )
参数
images
(ImageInput
) — 要预处理的图像。期望传入像素值范围从 0 到 255 的单个或批量图像。如果传入像素值在 0 到 1 之间的图像,请设置do_rescale=False
。do_rescale
(bool
,可选,默认为self.do_rescale
) — 是否将图像值重新缩放在[0 - 1]之间。rescale_factor
(float
,可选,默认为self.rescale_factor
) — 如果do_rescale
设置为True
,则重新缩放图像的重新缩放因子。do_pad
(bool
, 可选, 默认为True
) — 是否填充图像以使高度和宽度可被window_size
整除。pad_size
(int
, 可选, 默认为 32) — 用于局部注意力的滑动窗口的大小。return_tensors
(str
或TensorType
, 可选) — 要返回的张量类型。可以是以下之一:
- 未设置:返回一个
np.ndarray
列表。 TensorType.TENSORFLOW
或'tf'
:返回一个tf.Tensor
类型的批次,input_data_format=input_data_formate。TensorType.PYTORCH
或'pt'
:返回一个torch.Tensor
类型的批次。TensorType.NUMPY
或'np'
:返回一个np.ndarray
类型的批次。TensorType.JAX
或'jax'
:返回一个jax.numpy.ndarray
类型的批次。
data_format
(ChannelDimension
或str
, 可选, 默认为ChannelDimension.FIRST
) — 输出图像的通道维度格式。可以是以下之一:
"channels_first"
或ChannelDimension.FIRST
:图像以 (通道数, 高度, 宽度) 格式。"channels_last"
或ChannelDimension.LAST
:图像以 (高度, 宽度, 通道数) 格式。- 未设置:使用输入图像的通道维度格式。
input_data_format
(ChannelDimension
或str
, 可选) — 输入图像的通道维度格式。如果未设置,则从输入图像中推断通道维度格式。可以是以下之一:
"channels_first"
或ChannelDimension.FIRST
:图像以 (通道数, 高度, 宽度) 格式。"channels_last"
或ChannelDimension.LAST
:图像以 (高度, 宽度, 通道数) 格式。"none"
或ChannelDimension.NONE
:图像以 (高度, 宽度) 格式。
预处理一张图像或一批图像。
Swin2SRConfig
class transformers.Swin2SRConfig
( image_size = 64 patch_size = 1 num_channels = 3 num_channels_out = None embed_dim = 180 depths = [6, 6, 6, 6, 6, 6] num_heads = [6, 6, 6, 6, 6, 6] window_size = 8 mlp_ratio = 2.0 qkv_bias = True hidden_dropout_prob = 0.0 attention_probs_dropout_prob = 0.0 drop_path_rate = 0.1 hidden_act = 'gelu' use_absolute_embeddings = False initializer_range = 0.02 layer_norm_eps = 1e-05 upscale = 2 img_range = 1.0 resi_connection = '1conv' upsampler = 'pixelshuffle' **kwargs )
参数
image_size
(int
, 可选, 默认为 64) — 每个图像的大小(分辨率)。patch_size
(int
, 可选, 默认为 1) — 每个补丁的大小(分辨率)。num_channels
(int
, 可选, 默认为 3) — 输入通道的数量。num_channels_out
(int
, 可选, 默认为num_channels
) — 输出通道的数量。如果未设置,将设置为num_channels
。embed_dim
(int
, 可选, 默认为 180) — 补丁嵌入的维度。depths
(list(int)
, 可选, 默认为[6, 6, 6, 6, 6, 6]
) — Transformer 编码器中每层的深度。num_heads
(list(int)
, 可选, 默认为[6, 6, 6, 6, 6, 6]
) — Transformer 编码器每层的注意力头数。window_size
(int
, 可选, 默认为 8) — 窗口的大小。mlp_ratio
(float
, 可选, 默认为 2.0) — MLP 隐藏维度与嵌入维度的比率。qkv_bias
(bool
, 可选, 默认为True
) — 是否应该向查询、键和值添加可学习的偏置。hidden_dropout_prob
(float
, 可选, 默认为 0.0) — 嵌入和编码器中所有全连接层的 dropout 概率。attention_probs_dropout_prob
(float
, 可选, 默认为 0.0) — 注意力概率的 dropout 比率。drop_path_rate
(float
, 可选, 默认为 0.1) — 随机深度率。hidden_act
(str
或function
, 可选, 默认为"gelu"
) — 编码器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
、"relu"
、"selu"
和"gelu_new"
。use_absolute_embeddings
(bool
, 可选, 默认为False
) — 是否将绝对位置嵌入添加到补丁嵌入中。initializer_range
(float
, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。layer_norm_eps
(float
, 可选, 默认为 1e-05) — 层归一化层使用的 epsilon。upscale
(int
, optional, 默认为 2) — 图像的放大因子。2/3/4/8 用于图像超分辨率,1 用于去噪和压缩伪影减少img_range
(float
, optional, 默认为 1.0) — 输入图像值的范围。resi_connection
(str
, optional, 默认为"1conv"
) — 在每个阶段的残差连接之前使用的卷积块。upsampler
(str
, optional, 默认为"pixelshuffle"
) — 重建重建模块。可以是’pixelshuffle’/‘pixelshuffledirect’/‘nearest+conv’/None。
这是用于存储 Swin2SRModel 配置的配置类。根据指定的参数实例化 Swin Transformer v2 模型,定义模型架构。使用默认值实例化配置将产生类似于 Swin Transformer v2 caidas/swin2sr-classicalsr-x2-64 架构的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。阅读 PretrainedConfig 的文档以获取更多信息。
示例:
>>> from transformers import Swin2SRConfig, Swin2SRModel >>> # Initializing a Swin2SR caidas/swin2sr-classicalsr-x2-64 style configuration >>> configuration = Swin2SRConfig() >>> # Initializing a model (with random weights) from the caidas/swin2sr-classicalsr-x2-64 style configuration >>> model = Swin2SRModel(configuration) >>> # Accessing the model configuration >>> configuration = model.config
Swin2SRModel
class transformers.Swin2SRModel
( config )
参数
config
(Swin2SRConfig) — 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只加载配置。查看 from_pretrained()方法以加载模型权重。
裸的 Swin2SR 模型变压器输出原始隐藏状态,没有特定的头部。此模型是 PyTorch torch.nn.Module 的子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有信息。
forward
( pixel_values: FloatTensor head_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.BaseModelOutput or tuple(torch.FloatTensor)
参数
pixel_values
(torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 像素值。可以使用 AutoImageProcessor 获取像素值。有关详细信息,请参阅 Swin2SRImageProcessor.call
()。head_mask
(torch.FloatTensor
,形状为(num_heads,)
或(num_layers, num_heads)
,optional) — 用于使自注意力模块中选择的头部失效的掩码。掩码值选在[0, 1]
之间:
- 1 表示头部未被遮罩,
- 0 表示头部被遮罩。
output_attentions
(bool
, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请查看返回的张量下的attentions
。output_hidden_states
(bool
, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请查看返回的张量下的hidden_states
。return_dict
(bool
, optional) — 是否返回 ModelOutput 而不是普通元组。
返回值
transformers.modeling_outputs.BaseModelOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.BaseModelOutput 或一个torch.FloatTensor
元组(如果传递return_dict=False
或config.return_dict=False
时)包含各种元素,取决于配置(Swin2SRConfig)和输入。
last_hidden_state
(形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
)- 模型最后一层的隐藏状态序列。hidden_states
(tuple(torch.FloatTensor)
,可选,当传递output_hidden_states=True
或config.output_hidden_states=True
时返回)- 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(如果模型有嵌入层,则为嵌入的输出+每个层的输出)。
模型每层输出的隐藏状态以及可选的初始嵌入输出。attentions
(tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或config.output_attentions=True
时返回)- 形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组(每个层一个)。
注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
Swin2SRModel 的前向方法,覆盖__call__
特殊方法。
虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用Module
实例,而不是在此处调用,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoImageProcessor, Swin2SRModel >>> import torch >>> from datasets import load_dataset >>> dataset = load_dataset("huggingface/cats-image") >>> image = dataset["test"]["image"][0] >>> image_processor = AutoImageProcessor.from_pretrained("caidas/swin2SR-classical-sr-x2-64") >>> model = Swin2SRModel.from_pretrained("caidas/swin2SR-classical-sr-x2-64") >>> inputs = image_processor(image, return_tensors="pt") >>> with torch.no_grad(): ... outputs = model(**inputs) >>> last_hidden_states = outputs.last_hidden_state >>> list(last_hidden_states.shape) [1, 180, 488, 648]
Swin2SRForImageSuperResolution
class transformers.Swin2SRForImageSuperResolution
( config )
参数
config
(Swin2SRConfig)- 模型的所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只加载配置。查看 from_pretrained()方法以加载模型权重。
Swin2SR 模型变压器,顶部带有上采样器头,用于图像超分辨率和恢复。
此模型是 PyTorch torch.nn.Module子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。
forward
( pixel_values: Optional = None head_mask: Optional = None labels: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.ImageSuperResolutionOutput or tuple(torch.FloatTensor)
参数
pixel_values
(形状为(batch_size, num_channels, height, width)
的torch.FloatTensor
)- 像素值。可以使用 AutoImageProcessor 获取像素值。有关详细信息,请参阅 Swin2SRImageProcessor.call
()。head_mask
(形状为(num_heads,)
或(num_layers, num_heads)
的torch.FloatTensor
,可选)- 用于使自注意力模块中选择的头部失效的掩码。在[0, 1]
中选择的掩码值:
- 1 表示头部未被
masked
, - 0 表示头部是
masked
。
output_attentions
(bool
,可选)- 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
。output_hidden_states
(bool
,可选)- 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
。return_dict
(bool
,可选)— 是否返回一个 ModelOutput 而不是一个普通的元组。
返回
transformers.modeling_outputs.ImageSuperResolutionOutput
或tuple(torch.FloatTensor)
一个transformers.modeling_outputs.ImageSuperResolutionOutput
或一个torch.FloatTensor
元组(如果传递return_dict=False
或config.return_dict=False
)包含根据配置(Swin2SRConfig)和输入的不同元素。
loss
(形状为(1,)
的torch.FloatTensor
,可选,当提供labels
时返回)— 重构损失。reconstruction
(形状为(batch_size, num_channels, height, width)
的torch.FloatTensor
)— 重建的图像,可能是放大的。hidden_states
(tuple(torch.FloatTensor)
,可选,当传递output_hidden_states=True
或config.output_hidden_states=True
时返回)— 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(如果模型有嵌入层,则为嵌入的输出+每个阶段的输出)。模型在每个阶段输出的隐藏状态(也称为特征图)。attentions
(tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或config.output_attentions=True
时返回)— 形状为(batch_size, num_heads, patch_size, sequence_length)
的torch.FloatTensor
元组(每层一个)。
在注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。
Swin2SRForImageSuperResolution 的前向方法,覆盖了__call__
特殊方法。
虽然前向传递的配方需要在这个函数内定义,但应该在此之后调用Module
实例,而不是在此之后调用,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。
示例:
>>> import torch >>> import numpy as np >>> from PIL import Image >>> import requests >>> from transformers import AutoImageProcessor, Swin2SRForImageSuperResolution >>> processor = AutoImageProcessor.from_pretrained("caidas/swin2SR-classical-sr-x2-64") >>> model = Swin2SRForImageSuperResolution.from_pretrained("caidas/swin2SR-classical-sr-x2-64") >>> url = "https://huggingface.co/spaces/jjourney1125/swin2sr/resolve/main/samples/butterfly.jpg" >>> image = Image.open(requests.get(url, stream=True).raw) >>> # prepare image for the model >>> inputs = processor(image, return_tensors="pt") >>> # forward pass >>> with torch.no_grad(): ... outputs = model(**inputs) >>> output = outputs.reconstruction.data.squeeze().float().cpu().clamp_(0, 1).numpy() >>> output = np.moveaxis(output, source=0, destination=-1) >>> output = (output * 255.0).round().astype(np.uint8) # float32 to uint8 >>> # you can visualize `output` with `Image.fromarray`
Table Transformer
原文链接:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/table-transformer
概述
Table Transformer 模型是由 Brandon Smock、Rohith Pesala 和 Robin Abraham 在 PubTables-1M: Towards comprehensive table extraction from unstructured documents 中提出的。作者引入了一个新数据集 PubTables-1M,用于评估从非结构化文档中提取表格、表结构识别和功能分析的进展。作者训练了两个 DETR 模型,一个用于表检测,一个用于表结构识别,被称为 Table Transformers。
论文摘要如下:
最近,在将机器学习应用于从非结构化文档中推断和提取表结构方面取得了重大进展。然而,最大的挑战之一仍然是在规模上创建具有完整、明确的地面真实数据集。为了解决这个问题,我们开发了一个新的更全面的表提取数据集,名为 PubTables-1M。PubTables-1M 包含来自科学文章的近一百万张表,支持多种输入模态,并包含详细的表头和位置信息,对于各种建模方法都很有用。它还通过一种新颖的规范化过程解决了先前数据集中观察到的地面真实不一致的重要来源,称为过分分割。我们展示这些改进导致训练性能显著提高,并在表结构识别的评估中获得更可靠的模型性能估计。此外,我们展示基于 PubTables-1M 训练的基于 transformer 的目标检测模型在检测、结构识别和功能分析的三个任务中产生出色的结果,而无需为这些任务进行任何特殊定制。
表检测和表结构识别的澄清。摘自原始论文。
作者发布了两个模型,一个用于文档中的表检测,一个用于表结构识别(识别表中的各行、列等任务)。
此模型由 nielsr 贡献。原始代码可以在这里找到 链接。
资源
目标检测
TableTransformerConfig
class transformers.TableTransformerConfig
( use_timm_backbone = True backbone_config = None num_channels = 3 num_queries = 100 encoder_layers = 6 encoder_ffn_dim = 2048 encoder_attention_heads = 8 decoder_layers = 6 decoder_ffn_dim = 2048 decoder_attention_heads = 8 encoder_layerdrop = 0.0 decoder_layerdrop = 0.0 is_encoder_decoder = True activation_function = 'relu' d_model = 256 dropout = 0.1 attention_dropout = 0.0 activation_dropout = 0.0 init_std = 0.02 init_xavier_std = 1.0 auxiliary_loss = False position_embedding_type = 'sine' backbone = 'resnet50' use_pretrained_backbone = True dilation = False class_cost = 1 bbox_cost = 5 giou_cost = 2 mask_loss_coefficient = 1 dice_loss_coefficient = 1 bbox_loss_coefficient = 5 giou_loss_coefficient = 2 eos_coefficient = 0.1 **kwargs )
参数
use_timm_backbone
(bool
,可选,默认为True
) — 是否使用timm
库作为骨干。如果设置为False
,将使用AutoBackbone
API。backbone_config
(PretrainedConfig
或dict
,可选) — 骨干模型的配置。仅在设置use_timm_backbone
为False
时使用,此时默认为ResNetConfig()
。num_channels
(int
,可选,默认为 3) — 输入通道数。num_queries
(int
, optional, 默认为 100) — 对象查询的数量,即检测槽位。这是 TableTransformerModel 在单个图像中可以检测到的对象的最大数量。对于 COCO,我们建议使用 100 个查询。d_model
(int
, optional, 默认为 256) — 层的维度。encoder_layers
(int
, optional, 默认为 6) — 编码器层的数量。decoder_layers
(int
, optional, 默认为 6) — 解码器层的数量。encoder_attention_heads
(int
, optional, 默认为 8) — Transformer 编码器中每个注意力层的注意力头数。decoder_attention_heads
(int
, optional, 默认为 8) — Transformer 解码器中每个注意力层的注意力头数。decoder_ffn_dim
(int
, optional, 默认为 2048) — 解码器中“中间”(通常称为前馈)层的维度。encoder_ffn_dim
(int
, optional, 默认为 2048) — 解码器中“中间”(通常称为前馈)层的维度。activation_function
(str
或function
, optional, 默认为"relu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
,"relu"
,"silu"
和"gelu_new"
。dropout
(float
, optional, 默认为 0.1) — 嵌入、编码器和池化器中所有全连接层的丢失概率。attention_dropout
(float
, optional, 默认为 0.0) — 注意力概率的丢失比率。activation_dropout
(float
, optional, 默认为 0.0) — 全连接层内激活的丢失比率。init_std
(float
, optional, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。init_xavier_std
(float
, optional, 默认为 1) — 用于 HM Attention map 模块中的 Xavier 初始化增益的缩放因子。encoder_layerdrop
(float
, optional, 默认为 0.0) — 编码器的 LayerDrop 概率。更多细节请参阅 LayerDrop 论文)。decoder_layerdrop
(float
, optional, 默认为 0.0) — 解码器的 LayerDrop 概率。更多细节请参阅 LayerDrop 论文)。auxiliary_loss
(bool
, optional, 默认为False
) — 是否使用辅助解码损失(每个解码器层的损失)。position_embedding_type
(str
, optional, 默认为"sine"
) — 在图像特征之上使用的位置嵌入的类型。可以是"sine"
或"learned"
中的一个。backbone
(str
, optional, 默认为"resnet50"
) — 在use_timm_backbone
=True
时要使用的卷积主干的名称。支持来自 timm 包的任何卷积主干。有关所有可用模型的列表,请参阅 此页面。use_pretrained_backbone
(bool
, optional, 默认为True
) — 是否使用主干的预训练权重。仅在use_timm_backbone
=True
时支持。dilation
(bool
, optional, 默认为False
) — 是否在最后的卷积块(DC5)中用膨胀替代步幅。仅在use_timm_backbone
=True
时支持。class_cost
(float
, optional, 默认为 1) — 匈牙利匹配成本中分类错误的相对权重。bbox_cost
(float
, optional, 默认为 5) — 匈牙利匹配成本中边界框坐标的 L1 误差的相对权重。giou_cost
(float
, optional, 默认为 2) — 匈牙利匹配成本中边界框广义 IoU 损失的相对权重。mask_loss_coefficient
(float
,可选,默认为 1)—全景分割损失中 Focal 损失的相对权重。dice_loss_coefficient
(float
,可选,默认为 1)—DICE/F-1 损失在全景分割损失中的相对权重。bbox_loss_coefficient
(float
,可选,默认为 5)—目标检测损失中 L1 边界框损失的相对权重。giou_loss_coefficient
(float
,可选,默认为 2)—广义 IoU 损失在目标检测损失中的相对权重。eos_coefficient
(float
,可选,默认为 0.1)—目标检测损失中“无对象”类的相对分类权重。
这是配置类,用于存储 TableTransformerModel 的配置。它用于根据指定的参数实例化一个 Table Transformer 模型,定义模型架构。使用默认值实例化配置将产生类似于 Table Transformer microsoft/table-transformer-detection架构的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。阅读 PretrainedConfig 的文档以获取更多信息。
示例:
>>> from transformers import TableTransformerModel, TableTransformerConfig >>> # Initializing a Table Transformer microsoft/table-transformer-detection style configuration >>> configuration = TableTransformerConfig() >>> # Initializing a model from the microsoft/table-transformer-detection style configuration >>> model = TableTransformerModel(configuration) >>> # Accessing the model configuration >>> configuration = model.config
Transformers 4.37 中文文档(七十二)(2)https://developer.aliyun.com/article/1564165