Referenz für ultralytics/models/sam/modules/transformer.py
Hinweis
Diese Datei ist verfügbar unter https://github.com/ultralytics/ ultralytics/blob/main/ ultralytics/models/ sam/modules/transformer .py. Wenn du ein Problem entdeckst, hilf bitte mit, es zu beheben, indem du einen Pull Request 🛠️ einreichst. Vielen Dank 🙏!
ultralytics.models.sam.modules.transformer.TwoWayTransformer
Basen: Module
Ein Zwei-Wege-Transformator-Modul, das die gleichzeitige Beachtung von Bild- und Abfragepunkten ermöglicht. Diese Klasse dient als spezialisierter Transformator-Decoder, der ein Eingangsbild mit Hilfe von Abfragen bearbeitet, deren Positionseinbettung geliefert wird. Dies ist besonders nützlich für Aufgaben wie Objekterkennung, Bildsegmentierung und Punktwolken verarbeitung.
Attribute:
Name | Typ | Beschreibung |
---|---|---|
depth |
int
|
Die Anzahl der Schichten im Transformator. |
embedding_dim |
int
|
Die Kanaldimension für die Eingangseinbettungen. |
num_heads |
int
|
Die Anzahl der Köpfe für Multihead Attention. |
mlp_dim |
int
|
Das interne Kanalmaß für den MLP-Block. |
layers |
ModuleList
|
Die Liste der TwoWayAttentionBlock-Ebenen, aus denen der Transformator besteht. |
final_attn_token_to_image |
Attention
|
Die letzte Aufmerksamkeitsebene, die von den Abfragen auf das Bild angewendet wird. |
norm_final_attn |
LayerNorm
|
Die Ebenen-Normalisierung, die auf die endgültigen Abfragen angewendet wird. |
Quellcode in ultralytics/models/sam/modules/transformer.py
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
|
__init__(depth, embedding_dim, num_heads, mlp_dim, activation=nn.ReLU, attention_downsample_rate=2)
Ein Transformationsdecoder, der ein Eingangsbild mit Hilfe von Abfragen bearbeitet, deren Positionseinbettung geliefert wird.
Parameter:
Name | Typ | Beschreibung | Standard |
---|---|---|---|
depth |
int
|
Anzahl der Schichten im Transformator |
erforderlich |
embedding_dim |
int
|
die Kanaldimension für die Eingangseinbettungen |
erforderlich |
num_heads |
int
|
die Anzahl der Köpfe für Multi-Head Attention. Muss dividieren embedding_dim |
erforderlich |
mlp_dim |
int
|
die Kanalabmessung innerhalb des MLP-Blocks |
erforderlich |
activation |
Module
|
die Aktivierung, die im MLP-Block verwendet werden soll |
ReLU
|
Quellcode in ultralytics/models/sam/modules/transformer.py
forward(image_embedding, image_pe, point_embedding)
Parameter:
Name | Typ | Beschreibung | Standard |
---|---|---|---|
image_embedding |
Tensor
|
Bild, das zu beachten ist. Sollte die Form B x embedding_dim x h x w für jedes h und w sein. |
erforderlich |
image_pe |
Tensor
|
die Positionskodierung, die dem Bild hinzugefügt werden soll. Muss die gleiche Form wie image_embedding haben. |
erforderlich |
point_embedding |
Tensor
|
die Einbettung, die zu den Abfragepunkten hinzugefügt wird. Muss die Form B x N_Punkte x embedding_dim für beliebige N_Punkte haben. |
erforderlich |
Retouren:
Typ | Beschreibung |
---|---|
Tensor
|
das verarbeitete point_embedding |
Tensor
|
das verarbeitete image_embedding |
Quellcode in ultralytics/models/sam/modules/transformer.py
ultralytics.models.sam.modules.transformer.TwoWayAttentionBlock
Basen: Module
Ein Aufmerksamkeitsblock, der sowohl Self-Attention als auch Cross-Attention in zwei Richtungen durchführt: Abfragen an Schlüssel und Schlüssel zu Abfragen. Dieser Block besteht aus vier Hauptschichten: (1) Self-Attention auf spärliche Eingaben, (2) Cross-Attention von spärlichen Eingaben zu dichten Eingaben, (3) ein MLP-Block auf spärlichen Eingaben und (4) Cross-Attention von dichten Eingaben zu spärlichen Eingaben.
Attribute:
Name | Typ | Beschreibung |
---|---|---|
self_attn |
Attention
|
Die Selbstbeobachtungsebene für die Abfragen. |
norm1 |
LayerNorm
|
Schichtnormalisierung nach dem ersten Aufmerksamkeitsblock. |
cross_attn_token_to_image |
Attention
|
Cross-Attention-Layer von Abfragen zu Schlüsseln. |
norm2 |
LayerNorm
|
Schichtnormalisierung nach dem zweiten Aufmerksamkeitsblock. |
mlp |
MLPBlock
|
MLP-Block, der die Einbettung der Abfrage transformiert. |
norm3 |
LayerNorm
|
Normalisierung der Schichten nach dem MLP-Block. |
norm4 |
LayerNorm
|
Schichtnormalisierung nach dem dritten Aufmerksamkeitsblock. |
cross_attn_image_to_token |
Attention
|
Cross-Attention-Layer von Schlüsseln zu Abfragen. |
skip_first_layer_pe |
bool
|
Ob die Positionskodierung in der ersten Schicht übersprungen werden soll. |
Quellcode in ultralytics/models/sam/modules/transformer.py
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
|
__init__(embedding_dim, num_heads, mlp_dim=2048, activation=nn.ReLU, attention_downsample_rate=2, skip_first_layer_pe=False)
Ein Transformatorblock mit vier Schichten: (1) Selbstaufmerksamkeit von spärlichen Eingaben, (2) Kreuzaufmerksamkeit von spärlichen Eingänge auf dichte Eingänge, (3) mlp-Block auf spärliche Eingänge und (4) Kreuzaufmerksamkeit von dichten Eingängen auf spärliche Eingaben.
Parameter:
Name | Typ | Beschreibung | Standard |
---|---|---|---|
embedding_dim |
int
|
die Kanaldimension der Einbettungen |
erforderlich |
num_heads |
int
|
die Anzahl der Köpfe in den Aufmerksamkeitsebenen |
erforderlich |
mlp_dim |
int
|
die versteckte Dimension des mlp-Blocks |
2048
|
activation |
Module
|
die aktivierung des mlp-blocks |
ReLU
|
skip_first_layer_pe |
bool
|
Überspringe das PE in der ersten Schicht |
False
|
Quellcode in ultralytics/models/sam/modules/transformer.py
forward(queries, keys, query_pe, key_pe)
Wende Self-Attention und Cross-Attention auf Abfragen und Schlüssel an und gib die verarbeiteten Einbettungen zurück.
Quellcode in ultralytics/models/sam/modules/transformer.py
ultralytics.models.sam.modules.transformer.Attention
Basen: Module
Eine Aufmerksamkeitsschicht, die es ermöglicht, die Größe der Einbettung nach der Projektion auf Abfragen, Schlüssel und Werte zu verkleinern. Werte.
Quellcode in ultralytics/models/sam/modules/transformer.py
__init__(embedding_dim, num_heads, downsample_rate=1)
Initialisiert das Aufmerksamkeitsmodell mit den angegebenen Dimensionen und Einstellungen.
Parameter:
Name | Typ | Beschreibung | Standard |
---|---|---|---|
embedding_dim |
int
|
Die Dimensionalität der eingegebenen Einbettungen. |
erforderlich |
num_heads |
int
|
Die Anzahl der Aufmerksamkeitsköpfe. |
erforderlich |
downsample_rate |
int
|
Der Faktor, um den die internen Dimensionen verkleinert werden. Der Standardwert ist 1. |
1
|
Erhöht:
Typ | Beschreibung |
---|---|
AssertionError
|
Wenn "num_heads" das interne Dim nicht gleichmäßig teilt (embedding_dim / downsample_rate). |
Quellcode in ultralytics/models/sam/modules/transformer.py
forward(q, k, v)
Berechne die Aufmerksamkeitsleistung für die Eingabe von Abfrage, Schlüssel und Wertetensor.
Quellcode in ultralytics/models/sam/modules/transformer.py
Erstellt am 2023-11-12, Aktualisiert am 2024-05-18
Autoren: glenn-jocher (4), Burhan-Q (1), Laughing-q (1)