膨胀邻域注意力Transformer (DINAT)
架构概述
膨胀邻域注意力Transformer (DiNAT) 是一种创新的分层视觉Transformer,旨在提升深度学习模型的性能,尤其是在视觉识别任务中。与传统的Transformer使用可能随着模型规模扩大而计算成本过高的自注意力机制不同,DiNAT 引入了膨胀邻域注意力 (DiNA)。DiNA 通过结合稀疏全局注意力扩展了一种称为邻域注意力 (NA) 的局部注意力机制,而无需额外的计算开销。这种扩展使 DiNA 能够捕获更多全局上下文,呈指数级扩展感受野,并有效地建模长距离的相互依赖关系。
DiNAT 在其架构中结合了 NA 和 DiNA,从而产生了一种能够保持局部性、维持平移等变性和在后续视觉任务中实现显著性能提升的Transformer模型。使用 DiNAT 进行的实验表明,在各种视觉识别任务中,它优于 NAT、Swin 和 ConvNeXt 等强大的基线模型。
DiNAT的核心:邻域注意力
DiNAT 基于邻域注意力 (NA) 架构,这是一种专为计算机视觉任务设计的注意力机制,旨在有效地捕获图像中像素之间的关系。简单来说,想象一下你有一张图像,图像中的每个像素都需要理解并关注其附近的像素,以理解整张图片。让我们来研究 NA 的关键特征。
局部关系:NA 捕获局部关系,使每个像素能够考虑其周围环境的信息。这类似于我们可能首先查看最靠近我们的物体,然后再考虑整个视野来理解场景的方式。
感受野:NA 允许像素在无需太多额外计算的情况下扩展对周围环境的理解。在必要时,它会动态扩展其范围或“注意力范围”,以包含更远的邻居。
从本质上讲,邻域注意力是一种使图像中的像素能够关注其周围环境的技术,帮助它们有效地理解局部关系。这种局部理解有助于构建对整个图像的详细理解,同时有效地管理计算资源。
DiNAT的演变
膨胀邻域注意力Transformer的发展代表了视觉Transformer的重大改进。它解决了现有注意力机制的局限性。最初,引入邻域注意力是为了提供局部性和效率,但它在捕获全局上下文方面存在不足。为了克服这一限制,引入了膨胀邻域注意力 (DiNA) 的概念。DiNA 通过将邻域扩展到更大的稀疏区域来扩展 NA。这允许捕获更多全局上下文,并在不增加计算负担的情况下呈指数级增加感受野。下一个发展是 DiNAT,它将本地化的 NA 与 DiNA 的扩展全局上下文相结合。DiNAT 通过在整个模型中逐渐改变膨胀率、优化感受野和简化特征学习来实现这一点。
使用DiNAT进行图像分类
您可以使用 shi-labs/dinat-mini-in1k-224 模型和 🤗 Transformers 对 ImageNet-1k 中的图像进行分类。您还可以针对自己的用例对其进行微调。
from transformers import AutoImageProcessor, DinatForImageClassification
from PIL import Image
import requests
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
feature_extractor = AutoImageProcessor.from_pretrained("shi-labs/dinat-mini-in1k-224")
model = DinatForImageClassification.from_pretrained("shi-labs/dinat-mini-in1k-224")
inputs = feature_extractor(images=image, return_tensors="pt")
outputs = model(**inputs)
logits = outputs.logits
# model predicts one of the 1000 ImageNet classes
predicted_class_idx = logits.argmax(-1).item()
print("Predicted class:", model.config.id2label[predicted_class_idx])
参考文献
- DiNAT 论文 [1]
- Hugging Face DiNAT Transformer [2]
- 邻域注意力(NA) [3]
- SHI 实验室 [4]
- OneFormer 论文 [5]
- Hugging Face OneFormer [6]