以下内容记录我在阅读DETR和Deformable DETR论文及源码过程中对网络结构、以及自注意力、可变形注意力的理解,可能存在一些错误,欢迎讨论~
代码理解DETR
重绘网络图
理解
encoder:
Q/K/V
的内容信息是一样的,都是输入的图像特征,Q/K
还增加了位置信息;Q/K
增加的位置信息是一样的,都是利用Sin-Cos
生成的固定位置信息;- 各个
encoder layer
的输出值都是施加了自注意力后的、各位置关注了其他所有位置信息后而优化出的、更好的feature representations
;(体现Transformer
的全局依赖建模能力) - 新的
feature representations
作为下一层encoder layer
的输入特征,再结合Sin-Cos
生成的固定位置信息pos_embed
,一起作为下一层encoder layer
的输入; - 各个
encoder layer
的Sin-Cos
固定位置信息pos_embed
都是一样的,只在最初生成一次; - 最后整个
encoder
的输出值(即memory
),就是充分施加了自注意力后的、各位置充分关注了其他所有位置信息后而优化出的、更好的feature representations
; memory
作为输入decoder
的K/V
的内容信息,K
还需要加上Sin-Cos
的固定位置信息pos_embed
,二者一起作为cross-attention
输入
decoder:
query_embed
代表object query
的位置信息,是可学习的;- 初始化时
object query
被初始化为(100, 256)的全零向量; - 在
self-attention
中,Q/K/V
拥有同样的内容信息,K/V
还增加了相同的可学习的位置信息query_embed
; self-attention
的输出值是施加了自注意力后的、各object query
关注了其他所有位置object query
信息后而优化的、更好的object query(内容信息更优质的object query
);- 在
cross-attention
中,Q是self-attetion
输出的object query
再加上可学习的位置信息query_embed
,K/V
包含memory
的内容信息,K还增加了Sin-Cos
的固定位置信息pos_embed
; cross-attention
的输出值代表:根据object query
信息(由Q代表)去图像特征(由memory
得到的K/V代表)查找到最相关的图像特征,这个图像特征会作为下一个decoder layer
的object query
进行输入
代码理解Deformable DETR
重绘网络图
理解
encoder:
Q/K/V
的内容信息是一样的,都是输入的多尺度图像特征,Q/K
还增加了位置信息;Q/K
增加的位置信息是一样的,即level_pos_embed
,它包括利用Sin-Cos
生成的固定位置信息pos_embed_per_level
和可学习的区分不同尺度特征层的位置信息scale_level_embed
;sampling_locations = references_points + sampling_offsets
;其中references_points
代表各特征层的grid center point
位置全部归一化后再汇总,最终得到的全部特征点的坐标(所有特征层的会一起投影到每个特征层),sampling_offsets是网络预测的采样点的偏移位置(个数为num_levels*num_samping_points
),sampling_locations
为最终deformable attention
关注的采样点位置;- 在
Multi Scale Deformable Attention
中,Q通过Linear得到针对sampling points
的注意力权重attention weights
,V通过Linear
得到Value
(代表所有reference points
的value
),要想加权求和,还需要从V中精选出sampling points
位置的value
,所以这里的输入包括3个新增红线; - 各个
encoder layer
的输出值都是施加了可变形注意力后的、各位置关注了其他几个重要位置信息后而优化出的、更好的feature representations
;(体现Deformable Attention
的关注重点能力) - 新的
feature representations
作为下一层encoder layer
的输入特征,再结合位置信息level_pos_embed
,一起作为下一层encoder layer
的输入; - 在一次前向传播过程中,各个
encoder layer
在输入时添加的位置信息level_pos_embed
都是一样的; - 最后整个
encoder
的输出值(即memory
),就是充分施加了可变形注意力后的、各位置充分关注了其他几个重要位置信息后而优化出的、更好的feature representations
memory
作为输入decoder
的V的内容信息,作为cross-attention
的输入
decoder:
query position embeding
代表object query
的位置信息,是可学习的;object query
和query position embeding
都是可学习的,维度都为(300, 256);- 在
self-attention
中,Q/K/V拥有同样的内容信息,K/V
还增加了相同的可学习的位置信息query position embedding
; self-attention
的输出值是施加了自注意力后的、各object query
关注了其他所有位置object query
信息后而优化的、更好的object query
(内容信息更优质的object query
);- 在
cross-attention(Multi Scale Deformable Attention)
中,Q是self-attention
输出的object query
再加上可学习的位置信息query position embedding
,V包含memory的内容信息;为了执行可变形注意力,还需要找到采样点sampling points
,所以还需要输入reference points
、spatial_shapes
和level_start_index
; - 注意这里的
reference points
是可学习的,和encoder
中固定位置的reference points
不同; cross-attention
的输出值代表:根据object query
信息(由Q代表)去图像特征(由memory
得到的V代表)查找到最相关的图像特征,这个图像特征会作为下一个decoder layer
的object query
进行输入;- 在一次前向传播过程中,每一个
decoder layer
层输入的reference points
、level_start_index
、spatial_shapes
都是相同的;其中level_start_index
、spatial_shapes
在encoder
和decoder
中都是相同的
Self-Attention和Deformable Attention
- 正如前面黄色高亮的部分,
Self-Attention
关注序列中一个位置的token
和其他所有位置(包括自身)token
的相互依赖关系,这体现了Transformer
的全局建模能力(relation modeling capability
); - 而
Deformable Attention
关注序列中一个位置的token和其他几个重要位置(即采样点sampling points
)的token
的相互依赖关系,这体现了Deformable Attention
的稀疏空间采样(sparse spatial sampling
)能力