Deformable Attention
Deformierbare Attention ermöglicht es jeder Abfrage, einige gelernte Abtastpunkte um eine Referenzposition herum zu berücksichtigen, statt jede Position in einer Merkmalskarte einzubeziehen.
Deformierbare Attention ist ein Aufmerksamkeitsmechanismus für die Computer Vision. Jede Query achtet dabei auf eine kleine, feste Anzahl von Abtastpunkten rund um eine Referenzposition statt auf jede Position einer Feature-Map. Die Query sagt voraus, wo diese Punkte relativ zur Referenz liegen und wie stark jeder gewichtet wird. Daher steigen die Kosten mit der Anzahl der Queries und Abtastpunkte statt mit der Bildauflösung. Xizhou Zhu, Jifeng Dai und ihre Kolleginnen und Kollegen bei SenseTime, der University of Science and Technology of China und der Chinese University of Hong Kong stellten das Verfahren in Deformable DETR vor, einem auf der ICLR 2021 mündlich präsentierten Paper. Es behob die beiden Schwächen des ursprünglichen DETR-Erkennungs-Transformers: Vollständige Attention beschränkte ihn auf Merkmale mit niedriger Auflösung, und das Training dauerte 500 Epochen. Deformable DETR benötigte zehnmal weniger Epochen und erkannte kleine Objekte besser.
So funktioniert deformierbare Attention#
Die Idee erweitert die deformierbare Faltung, die ebenfalls unter Mitwirkung von Dai entwickelt wurde und Offsets für die Elemente eines Faltungskernels lernt. Für jede Query mit einem Referenzpunkt nutzt jeder Attention-Kopf zwei lineare Layer auf den Query-Merkmalen: Einer sagt K Abtast-Offsets voraus, der andere K Attention-Gewichte, die mit Softmax normalisiert werden. Die Value-Merkmale an jedem verschobenen Punkt werden mit bilinearer Interpolation ausgelesen, da die Offsets Bruchteile sein können. Der Kopf gibt ihre gewichtete Summe zurück. Das Paper verwendet 8 Köpfe und K = 4 Punkte. Eine Query liest somit 32 Positionen pro Feature-Map, während standardmäßige Self-Attention jedes Pixel bewerten würde. Eine Variante mit einem Kopf und einer Skala lässt sich in wenigen Zeilen PyTorch implementieren:
import torch
import torch.nn.functional as F
torch.manual_seed(0)
dim, n_points, n_queries = 32, 4, 100
value = torch.randn(1, dim, 64, 64) # a 64x64 feature map: 4,096 positions
query = torch.randn(n_queries, dim)
ref = torch.rand(n_queries, 2) * 2 - 1 # reference points in grid_sample's [-1, 1] coordinates
# Each query predicts where to look (offsets) and how much each sample counts (weights)
to_offsets, to_weights = torch.nn.Linear(dim, n_points * 2), torch.nn.Linear(dim, n_points)
offsets = 0.1 * to_offsets(query).view(n_queries, n_points, 2)
weights = to_weights(query).softmax(dim=-1)
# Bilinearly sample the value map at reference + offset, then take the weighted sum
grid = (ref[:, None] + offsets)[None] # (1, n_queries, n_points, 2)
sampled = F.grid_sample(value, grid, align_corners=False)[0] # (dim, n_queries, n_points)
out = (sampled * weights).sum(dim=-1).T # (n_queries, dim)
print(f"Output {tuple(out.shape)} from {n_queries * n_points} samples, not {n_queries * 64 * 64:,} dense scores")Der Code gibt Output (100, 32) from 400 samples, not 409,600 dense scores aus: Jede der 100 Queries liest 4 der 4.096 Positionen. Beim Training werden die Offset- und Gewichtungs-Layer angepasst, sodass sich die Punkte zu den Bildbereichen bewegen, die für die Aufgabe hilfreich sind.
Mehrskalige deformierbare Attention#
Objekte treten in sehr unterschiedlichen Größen auf. Deshalb tastet Deformable DETR gleichzeitig Punkte auf mehreren Feature-Maps ab. Bei L Ebenen wählt jeder Kopf auf jeder Ebene K Punkte aus und normalisiert die Gewichte gemeinsam über alle L × K Punkte. So werden Merkmale auf feiner und grober Ebene in einem Schritt kombiniert. Im Encoder ersetzte das Verfahren das Feature-Pyramiden-Netzwerk (FPN). Der Encoder wendet es als Self-Attention an, wobei jedes Pixel jeder Ebene als Query dient. Der Decoder verwendet es als Cross-Attention von den Objekt-Queries zu den Bildmerkmalen.
RT-DETR, Baidus Transformer für Echtzeit-Erkennung, der im Ultralytics-Paket verfügbar ist, nutzt mehrskalige deformierbare Attention als Cross-Attention in seinen sechs Decoder-Layern: Jede der 300 Objekt-Queries tastet mit 8 Köpfen je 4 Punkte auf den Feature-Maps mit den Schrittweiten 8, 16 und 32 ab, insgesamt also 96 Positionen. Vollständige Cross-Attention würde auf diesen Feature-Maps eines 640 Pixel großen Bildes 8.400 Positionen bewerten.
Anwendungen#
- Objekterkennung: Die Nachfolger von Deformable DETR, darunter DINO und RT-DETR, behalten deformierbare Cross-Attention in ihren Decodern bei. So können sie hochauflösende Merkmale für kleine Objekte auslesen.
- Autonome Fahrzeuge: BEVFormer überträgt Bilder aus mehreren Autokameras in ein Raster aus der Vogelperspektive. Jede Rasterzelle tastet deformierbare Punkte in den Kamerabildern ab, in denen sie sichtbar ist.
- Panoptische Segmentierung: Mask2Former erstellt seine mehrskaligen Pixelmerkmale mit deformierbarer Attention, bevor es Masken vorhersagt.
Deformierbare Attention und verwandte Begriffe#
- Sliding-Window-Attention: Achtet auf eine feste, durch die Position bestimmte Nachbarschaft, die für jede Eingabe gleich bleibt.
- Sparse Attention: Bewertet eine vorab festgelegte Teilmenge von Token-Paaren.
- Flash-Attention: Berechnet gewöhnliche dichte Attention schneller, indem sie in Kacheln des On-Chip-GPU-Speichers aufgeteilt wird. Das Ergebnis entspricht dem standardmäßiger Attention.
- Attention im Vision Transformer (ViT): Vergleicht jeden Bildausschnitt mit allen anderen Bildausschnitten. Daher steigen die Kosten mit dem Quadrat ihrer Anzahl.










