Riferimento per ultralytics/models/sam/modules/transformer.py
Nota
Questo file è disponibile su https://github.com/ultralytics/ ultralytics/blob/main/ ultralytics/models/ sam/modules/transformer .py. Se riscontri un problema, contribuisci a risolverlo inviando una Pull Request 🛠️. Grazie 🙏!
ultralytics.models.sam.modules.transformer.TwoWayTransformer
Basi: Module
Un modulo trasformatore a due vie che consente di prestare attenzione simultaneamente sia all'immagine che ai punti di interrogazione. Questa classe serve come decodificatore trasformatore specializzato che si occupa di un'immagine in ingresso utilizzando query di cui viene fornito l'incorporamento posizionale. viene fornito. È particolarmente utile per compiti come il rilevamento di oggetti, la segmentazione di immagini e l'elaborazione di nuvole di punti. e l'elaborazione di nuvole di punti.
Attributi:
Nome | Tipo | Descrizione |
---|---|---|
depth |
int
|
Il numero di strati del trasformatore. |
embedding_dim |
int
|
La dimensione del canale per le incorporazioni in ingresso. |
num_heads |
int
|
Il numero di teste per l'attenzione multitesta. |
mlp_dim |
int
|
La dimensione del canale interno del blocco MLP. |
layers |
ModuleList
|
L'elenco dei livelli TwoWayAttentionBlock che compongono il trasformatore. |
final_attn_token_to_image |
Attention
|
Il livello di attenzione finale applicato dalle query all'immagine. |
norm_final_attn |
LayerNorm
|
La normalizzazione dei livelli applicata alle query finali. |
Codice sorgente 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)
Un decodificatore trasformatore che si occupa di un'immagine in ingresso utilizzando query di cui viene fornito l'incorporamento posizionale.
Parametri:
Nome | Tipo | Descrizione | Predefinito |
---|---|---|---|
depth |
int
|
numero di strati del trasformatore |
richiesto |
embedding_dim |
int
|
la dimensione del canale per le incorporazioni in ingresso |
richiesto |
num_heads |
int
|
il numero di testine per l'attenzione multitesta. Deve dividere embedding_dim |
richiesto |
mlp_dim |
int
|
la dimensione del canale interno al blocco MLP |
richiesto |
activation |
Module
|
l'attivazione da utilizzare nel blocco MLP |
ReLU
|
Codice sorgente in ultralytics/models/sam/modules/transformer.py
forward(image_embedding, image_pe, point_embedding)
Parametri:
Nome | Tipo | Descrizione | Predefinito |
---|---|---|---|
image_embedding |
Tensor
|
immagine di cui occuparsi. Dovrebbe essere la forma B x embedding_dim x h x w per qualsiasi h e w. |
richiesto |
image_pe |
Tensor
|
la codifica posizionale da aggiungere all'immagine. Deve avere la stessa forma di image_embedding. |
richiesto |
point_embedding |
Tensor
|
l'incorporamento da aggiungere ai punti della query. Deve avere forma B x N_punti x embedding_dim per qualsiasi N_punti. |
richiesto |
Restituzione:
Tipo | Descrizione |
---|---|
Tensor
|
il punto_embedding elaborato |
Tensor
|
l'immagine elaborata_embedding |
Codice sorgente in ultralytics/models/sam/modules/transformer.py
ultralytics.models.sam.modules.transformer.TwoWayAttentionBlock
Basi: Module
Un blocco di attenzione che esegue sia l'auto-attenzione che l'attenzione incrociata in due direzioni: dalle interrogazioni alle chiavi e dalle chiavi alle interrogazioni. chiavi verso le query. Questo blocco è composto da quattro livelli principali: (1) auto-attenzione su ingressi radi, (2) attenzione incrociata degli ingressi radi agli ingressi densi, (3) un blocco MLP sugli ingressi radi e (4) l'attenzione incrociata degli ingressi densi agli ingressi radi. ingressi radi.
Attributi:
Nome | Tipo | Descrizione |
---|---|---|
self_attn |
Attention
|
Il livello di auto-attenzione per le query. |
norm1 |
LayerNorm
|
Normalizzazione del livello dopo il primo blocco di attenzione. |
cross_attn_token_to_image |
Attention
|
Livello di attenzione trasversale dalle query alle chiavi. |
norm2 |
LayerNorm
|
Normalizzazione del livello dopo il secondo blocco di attenzione. |
mlp |
MLPBlock
|
Blocco MLP che trasforma le incorporazioni della query. |
norm3 |
LayerNorm
|
Normalizzazione dei livelli dopo il blocco MLP. |
norm4 |
LayerNorm
|
Normalizzazione del livello dopo il terzo blocco di attenzione. |
cross_attn_image_to_token |
Attention
|
Livello di attenzione incrociata dalle chiavi alle query. |
skip_first_layer_pe |
bool
|
Se saltare la codifica posizionale nel primo livello. |
Codice sorgente 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)
Un blocco trasformatore con quattro strati: (1) auto-attenzione degli ingressi radi, (2) attenzione incrociata degli ingressi radi verso gli ingressi densi, (3) blocco mlp sugli ingressi radi e (4) attenzione incrociata degli ingressi densi verso gli ingressi radi. degli ingressi densi, (3) blocco mlp sugli ingressi radi e (4) attenzione incrociata degli ingressi densi sugli ingressi radi. ingressi.
Parametri:
Nome | Tipo | Descrizione | Predefinito |
---|---|---|---|
embedding_dim |
int
|
la dimensione del canale delle incorporazioni |
richiesto |
num_heads |
int
|
il numero di teste negli strati di attenzione |
richiesto |
mlp_dim |
int
|
la dimensione nascosta del blocco mlp |
2048
|
activation |
Module
|
l'attivazione del blocco mlp |
ReLU
|
skip_first_layer_pe |
bool
|
salta il PE sul primo strato |
False
|
Codice sorgente in ultralytics/models/sam/modules/transformer.py
forward(queries, keys, query_pe, key_pe)
Applica l'auto-attenzione e l'attenzione incrociata alle query e alle chiavi e restituisce le incorporazioni elaborate.
Codice sorgente in ultralytics/models/sam/modules/transformer.py
ultralytics.models.sam.modules.transformer.Attention
Basi: Module
Un livello di attenzione che consente di ridimensionare le dimensioni dell'incorporazione dopo la proiezione su query, chiavi e valori. valori.
Codice sorgente in ultralytics/models/sam/modules/transformer.py
__init__(embedding_dim, num_heads, downsample_rate=1)
Inizializza il modello di attenzione con le dimensioni e le impostazioni indicate.
Parametri:
Nome | Tipo | Descrizione | Predefinito |
---|---|---|---|
embedding_dim |
int
|
La dimensionalità delle incorporazioni in ingresso. |
richiesto |
num_heads |
int
|
Il numero di teste di attenzione. |
richiesto |
downsample_rate |
int
|
Il fattore per cui le dimensioni interne vengono sottocampionate. Il valore predefinito è 1. |
1
|
Aumenta:
Tipo | Descrizione |
---|---|
AssertionError
|
Se 'num_heads' non divide equamente la dimensione interna (embedding_dim / downsample_rate). |
Codice sorgente in ultralytics/models/sam/modules/transformer.py
forward(q, k, v)
Calcolare l'output dell'attenzione con i tensori di input query, chiave e valore.