社群計算機視覺課程文件
擴張鄰域注意力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]