参考资料 ultralytics/models/sam/modules/transformer.py
备注
该文件可在https://github.com/ultralytics/ultralytics/blob/main/ultralytics/models/ sam/modules/transformer .py 下找到。如果您发现问题,请通过提交 Pull Request🛠️ 帮助修复。谢谢🙏!
ultralytics.models.sam.modules.transformer.TwoWayTransformer
垒球 Module
双向变换器模块,可同时关注图像点和查询点。该类 是一个专门的变换器解码器,可通过查询输入图像的位置嵌入 的位置嵌入来处理输入图像。这对物体检测、图像分割和点云处理等任务特别有用。 处理等任务特别有用。
属性
名称 | 类型 | 说明 |
---|---|---|
depth |
int
|
变压器的层数。 |
embedding_dim |
int
|
输入嵌入的通道维度。 |
num_heads |
int
|
多头注意力的头数。 |
mlp_dim |
int
|
MLP 模块的内部通道尺寸。 |
layers |
ModuleList
|
组成变换器的 TwoWayAttentionBlock 图层列表。 |
final_attn_token_to_image |
Attention
|
从查询到图像的最终关注层。 |
norm_final_attn |
LayerNorm
|
应用于最终查询的层规范化。 |
源代码 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)
一种转换解码器,利用提供的位置嵌入查询来处理输入图像。
参数
名称 | 类型 | 说明 | 默认值 |
---|---|---|---|
depth |
int
|
变压器层数 |
所需 |
embedding_dim |
int
|
输入嵌入的通道维度 |
所需 |
num_heads |
int
|
多头注意力的头数。必须 除以 embedding_dim |
所需 |
mlp_dim |
int
|
MLP 模块内部的通道维度 |
所需 |
activation |
Module
|
在 MLP 模块中使用的激活值 |
ReLU
|
源代码 ultralytics/models/sam/modules/transformer.py
forward(image_embedding, image_pe, point_embedding)
参数
名称 | 类型 | 说明 | 默认值 |
---|---|---|---|
image_embedding |
Tensor
|
要关注的图像。对于任意的 h 和 w,应该是形状 B x embedding_dim x h x w。 |
所需 |
image_pe |
Tensor
|
要添加到图像中的位置编码。其形状必须与 image_embedding 相同。 |
所需 |
point_embedding |
Tensor
|
要添加到查询点的嵌入。 对于任意 N 个点,必须具有 B x N_points x embedding_dim 的形状。 |
所需 |
返回:
类型 | 说明 |
---|---|
Tensor
|
经过处理的点嵌入 |
Tensor
|
处理后的图像嵌入 |
源代码 ultralytics/models/sam/modules/transformer.py
ultralytics.models.sam.modules.transformer.TwoWayAttentionBlock
垒球 Module
注意模块可在两个方向上执行自我注意和交叉注意:查询到按键和按键到查询。 键到查询。该块由四个主要层组成:(1)稀疏输入的自注意,(2)稀疏输入与密集输入的交叉注意,(3)稀疏输入的 MLP 块,以及(4)稀疏输入与密集输入的交叉注意。 稀疏输入到密集输入的交叉注意;(3) 稀疏输入的 MLP 模块;(4) 密集输入到稀疏输入的交叉注意。 稀疏输入的交叉注意。
属性
名称 | 类型 | 说明 |
---|---|---|
self_attn |
Attention
|
查询的自我关注层。 |
norm1 |
LayerNorm
|
第一注意力区块后的层正常化。 |
cross_attn_token_to_image |
Attention
|
从查询到密钥的交叉关注层。 |
norm2 |
LayerNorm
|
第二注意力区块后的层正常化。 |
mlp |
MLPBlock
|
MLP 模块,用于转换查询嵌入。 |
norm3 |
LayerNorm
|
MLP 模块之后的层规范化。 |
norm4 |
LayerNorm
|
第三注意力区块后的层正常化。 |
cross_attn_image_to_token |
Attention
|
从按键到查询的交叉关注层。 |
skip_first_layer_pe |
bool
|
是否跳过第一层的位置编码。 |
源代码 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)
变压器模块有四层:(1) 稀疏输入的自我注意,(2) 稀疏输入与密集输入的交叉注意,(3) 稀疏输入的 mlp 模块,以及 (4) 密集输入与稀疏输入的交叉注意。 (3)稀疏输入上的 mlp 块,以及 (4) 密集输入对稀疏输入的交叉注意。 输入的交叉注意。
参数
名称 | 类型 | 说明 | 默认值 |
---|---|---|---|
embedding_dim |
int
|
嵌入的通道维度 |
所需 |
num_heads |
int
|
注意层的头数 |
所需 |
mlp_dim |
int
|
多语言区块的隐藏维度 |
2048
|
activation |
Module
|
启动地中海行动计划区块 |
ReLU
|
skip_first_layer_pe |
bool
|
跳过第一层的 PE |
False
|
源代码 ultralytics/models/sam/modules/transformer.py
forward(queries, keys, query_pe, key_pe)
对查询和键应用自关注和交叉关注,并返回处理后的嵌入。
源代码 ultralytics/models/sam/modules/transformer.py
ultralytics.models.sam.modules.transformer.Attention
垒球 Module
注意层,可在对查询、键和值进行投影后缩减嵌入的大小。 值。
源代码 ultralytics/models/sam/modules/transformer.py
__init__(embedding_dim, num_heads, downsample_rate=1)
用给定的尺寸和设置初始化注意力模型。
参数
名称 | 类型 | 说明 | 默认值 |
---|---|---|---|
embedding_dim |
int
|
输入嵌入的维度。 |
所需 |
num_heads |
int
|
注意头的数量。 |
所需 |
downsample_rate |
int
|
内部维度下采样的系数。默认为 1。 |
1
|
加薪:
类型 | 说明 |
---|---|
AssertionError
|
如果 "num_heads "没有平均分配内部尺寸(embedding_dim / downsample_rate)。 |
源代码 ultralytics/models/sam/modules/transformer.py
forward(q, k, v)
根据输入的查询、键和值张量计算注意力输出。