社区计算机视觉课程文档
扩张邻域注意力Transformer (DINAT)
并获得增强的文档体验
开始使用
扩张邻域注意力Transformer (DINAT)
架构概述
扩张邻域注意力Transformer (DiNAT) 是一种创新的分层视觉Transformer,旨在提高深度学习模型的性能,特别是在视觉识别任务中。与传统的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 Labs [4]
- OneFormer论文 [5]
- Hugging Face OneFormer [6]