Press "Enter" to skip to content

Swin Transformers | 现代计算机视觉任务

介绍

Swin Transformer 是视觉 Transformer 领域的一项重大创新。Transformer 在各种任务中展示了出色的性能。在这些 Transformer 中,Swin Transformer 作为计算机视觉的骨干,提供了无与伦比的灵活性和可扩展性,以满足现代深度学习模型的需求。现在是时候发掘这个 Transformer 的全部潜力,见证其令人印象深刻的能力。

学习目标

本文旨在介绍 Swin Transformer,这是一类强大的分层视觉 Transformer。通过阅读本文,您应该了解以下内容:

  • Swin Transformer 的关键特性
  • 它们在计算机视觉模型中作为骨干的应用
  • Swin Transformer 在图像分类、物体检测和实例分割等各种计算机视觉任务中的优势。

本文是数据科学博文马拉松的一部分。

理解 Swin Transformer

在题为“Swin Transformer: Hierarchical Vision Transformer using Shifted Windows”的2021年论文中,刘泽、林宇同、曹越、胡瀚和魏一轩介绍了 Swin Transformer。与传统的按块处理图像的 Transformer 不同,Swin Transformer 将图像划分为非重叠的移位窗口,实现了高效且可扩展的计算。

Source: Liu et al. (2021)

移位窗口的使用对于 Swin Transformer 至关重要。它的分层设计有效地解决了传统 Transformer(编码器和解码器)在处理高分辨率图像时遇到的二次复杂性问题。这种设计特点还使得 Swin Transformer 能够轻松适应不同的图像尺寸,使其成为处理小型和大型数据集的理想选择。

Swin Transformer 和 ViT 的区别

首先要注意的是,Swin Transformer 处理图像的方法是按块处理。其次,Swin Transformer 是原始 Vision Transformer(ViT)的一种变体。它将图像分成块,并在网络越深时将它们合并起来。这有助于有效地捕捉局部和全局特征。

详细过程分解

  • 块的创建:与 ViT 中使用固定块大小(例如,18×18 像素)不同,Swin Transformer 在初始层使用较小的块。例如,假设使用 16×16 像素的块。
  • 颜色通道:每个块对应图像的一小部分,每个块都被视为具有三个通道的彩色图像,通常表示为红、绿和蓝通道。
  • 块特征维度:以上述 16×16 为例,单个块具有总共 768 个特征维度,即 16x16x3 = 768。这些维度对应于每个三个颜色通道上的 16×16 块中的像素值。
  • 线性变换:在形成这些块之后,它们被线性变换到一个更高维度的空间。这种变换帮助网络从块中的像素值中学习有意义的表示。
  • 分层划分:随着网络的深入,这些较小的块被合并成较大的块。这种分层划分使模型能够有效地捕捉到局部细节(来自小块)和全局上下文(来自合并的块)。

Swin Transformer 逐渐合并块的方法有助于模型在局部和全局信息之间保持平衡,这对于有效理解图像可能至关重要。Swin Transformer 还引入了多个其他概念和优化技术,如基于窗口的自注意力和移位窗口,以减少计算量,所有这些都有助于提高其在图像任务中的性能。

Swin Transformer 的特性

  • 输入填充:Swin Transformer 支持任何可被 32 整除的输入高度和宽度,这使其具有灵活性。这确保模型能够处理不同尺寸的图像,在预处理步骤中提供更多的灵活性。
  • 输出隐藏状态:当 `output_hidden_states` 参数在训练或推断过程中设置为 True 时,Swin Transformer 允许用户访问 hidden_states 和 reshaped_hidden_states。`hidden_states` 的输出形状为 (batch_size, sequence_length, num_channels),典型的 Transformer 形状。相比之下,`reshaped_hidden_states` 的输出形状为 (batch_size, num_channels, height, width),更适合下游计算机视觉任务。
  • 使用 AutoImageProcessor API:为了为 Swin Transformer 模型准备图像,开发人员和研究人员可以利用 AutoImageProcessor API。该 API 简化了图像预处理步骤,处理任务包括调整大小、数据增强和归一化,确保输入数据可以被 Swin Transformer 模型使用。
  • 视觉骨干:Swin Transformer 结构的多功能性使其成为计算机视觉的强大骨干。作为骨干,Swin Transformer 在物体检测、实例分割和图像分类等任务中表现出色,如下文所述。这种适应性使其成为设计最先进的视觉模型的绝佳选择。

Swin Transformers的应用

1. 图像分类中的Swin

图像分类涉及能够识别图像的类别。Swin Transformers在图像分类任务上表现出色。通过有效地建模长程依赖关系,它们在捕捉图像中复杂的模式和空间关系方面表现出色。这可以看作是在Swin模型transformer顶部添加了图像分类头的模型。

Swin分类演示

让我们看看Swin用于图像分类的应用案例。首先要做的是安装和导入我们的库,并加载图像:

!pip install transformers torch datasets

在GitHub上找到完整的代码。

加载图像

# 导入必要的库
from transformers import AutoImageProcessor, SwinForImageClassification
import torch

# 从网络中访问图像
import urllib.parse as parse
import os
from PIL import Image
import requests

# 验证URL
def check_url(string):
    try:
        result = parse.urlparse(string)
        return all([result.scheme, result.netloc, result.path])
    except:
        return False

# 加载图像
def load_image(image_path):
    if check_url(image_path):
        return Image.open(requests.get(image_path, stream=True).raw)
    elif os.path.exists(image_path):
        return Image.open(image_path)

# 显示图像
url = "https://img.freepik.com/free-photo/male-female-lions-laying-sand-resting_181624-2237.jpg?w=740&t=st=1690535667~exp=1690536267~hmac=0f5fb82df83f987848335b8bc5c36a1ee534f40301d2b7c095a2e5a62ff153fd"
image = load_image(url)

image
来源:Freepik

加载AutoImageProcessor和Swin

# 加载预训练的图像处理器(AutoImageProcessor)
# "microsoft/swin-tiny-patch4-window7-224"是用于处理图像的模型检查点
image_processor = AutoImageProcessor.from_pretrained("microsoft/swin-tiny-patch4-window7-224")

# 加载用于图像分类的预训练Swin Transformer模型
model = SwinForImageClassification.from_pretrained("microsoft/swin-tiny-patch4-window7-224")

# 使用图像处理器准备模型的输入
# 图像经过预处理后转换为PyTorch张量
inputs = image_processor(image, return_tensors="pt")

现在我们进行推理并预测标签

# 使用Swin Transformer模型进行推理
# logits是模型在应用softmax之前的原始输出
with torch.no_grad():
    logits = model(**inputs).logits

# 通过选择具有最高logit值的类别来预测图像的标签
predicted_label = logits.argmax(-1).item()

# 使用模型的id2label映射检索并打印预测的标签
print(model.config.id2label[predicted_label])

预测类别

狮子,百兽之王,Panthera leo

2. 掩码图像建模(MIM)

该过程涉及随机掩码输入图像,然后通过预文本任务重构图像。这是Swin模型在掩码图像建模方面的应用,其中使用解码器。MIM是一种利用预训练方法进行自监督学习的新兴视觉方法。它在许多下游视觉任务中与Vision transformers(ViTs)一起取得了成功。

掩码图像建模演示

我们将重复上面的代码导入。在GitHub上找到完整的代码。现在让我们加载一张新的图像。

# 从给定的URL加载图像
url = "https://img.freepik.com/free-photo/outdoor-shot-active-dark-skinned-man-running-morning-has-regular-trainings-dressed-tracksuit-comfortable-sneakers-concentrated-into-distance-sees-finish-far-away_273609-29401.jpg?w=740&t=st=1690539217~exp=1690539817~hmac=ec8516968123988e70613a3fe17bca8c558b0e588f89deebec0fc9df99120fd4"
image = Image.open(requests.get(url, stream=True).raw)
image
来源:Freepik

加载 AutoImageProcessor 和 Masked Image Model

# 加载预训练的图像处理器(AutoImageProcessor)
# "microsoft/swin-base-simmim-window6-192" 是用于处理图像的模型检查点
image_processor = AutoImageProcessor.from_pretrained("microsoft/swin-base-simmim-window6-192")

# 加载预训练的用于 Masked Image Modeling 的 Swin Transformer 模型
model = SwinForMaskedImageModeling.from_pretrained("microsoft/swin-base-simmim-window6-192")

# 根据图像和分块大小计算分块数量
num_patches = (model.config.image_size // model.config.patch_size) ** 2

# 将图像转换为像素值,并为模型准备输入
pixel_values = image_processor(images=image, return_tensors="pt").pixel_values

# 创建形状为(batch_size,num_patches)的随机布尔掩码
bool_masked_pos = torch.randint(low=0, high=2, size=(1, num_patches)).bool()

# 在 Swin Transformer 模型上执行 Masked Image Modeling
outputs = model(pixel_values, bool_masked_pos=bool_masked_pos)

# 从模型的输出中提取损失和重构的像素值
loss, reconstructed_pixel_values = outputs.loss, outputs.reconstruction

# 打印重构的像素值的形状
print(list(reconstructed_pixel_values.shape))

Swin Transformers | 现代计算机视觉任务 四海 第4张

上面我们看到了重构的像素值。最后,让我们来介绍一些其他的应用。

其他应用可以用于目标检测和实例分割。目标检测的应用可以帮助识别图像中的特定部分,而在实例分割中,Swin Transformers 可以检测和分割图像中的个体对象。

结论

我们已经看到了 Swin Transformers,在计算机视觉领域取得了突破性的进展,为各种视觉识别任务提供了灵活、可扩展和高效的解决方案。通过使用分层设计和处理不同大小的图像,Swin Transformers 继续引领深度学习和计算机视觉应用领域的新突破。随着视觉 transformer 领域的发展,Swin Transformers 很可能会保持在前沿的切实研究和实际应用中。希望本文对您介绍了这个概念有所帮助。

要点

  • Swin Transformers 是用于计算机视觉任务的分层视觉 transformer,能够处理高分辨率图像,具有可扩展性和高效性。
  • Swin Transformers 可以作为各种计算机视觉架构的主干,在图像分类、目标检测和实例分割等任务中表现出色。
  • AutoImageProcessor API 简化了 Swin Transformers 的图像准备过程,处理调整大小、增强和归一化等操作。
  • Swin Transformers 具有捕捉长距离依赖关系的能力,使其成为建模复杂视觉模式的有希望选择。

常见问题

  • Liu, Z., Lin, Y., Cao, Y., Hu, H., Wei, Y., Zhang, Z., Lin, S., & Guo, B. (2021). Swin Transformer: Hierarchical Vision Transformer using Shifted Windows. ArXiv. /abs/2103.14030
  • Xie, Z., Zhang, Z., Cao, Y., Lin, Y., Bao, J., Yao, Z., Dai, Q., & Hu, H. (2021). SimMIM: A Simple Framework for Masked Image Modeling. ArXiv. /abs/2111.09886

本文中显示的媒体不属于 Analytics Vidhya,仅出于作者的判断使用。

Leave a Reply

Your email address will not be published. Required fields are marked *