xiuqhou / Relation-DETR

[ECCV2024 Oral] Official implementation of the paper "Relation DETR: Exploring Explicit Position Relation Prior for Object Detection"
Apache License 2.0
122 stars 11 forks source link

关于带位置关系的自注意力 #23

Open mitu752 opened 1 month ago

mitu752 commented 1 month ago

Question

大佬,您好,我想问下这个位置关系只在验证的时候使用吗

来自models/bricks/relation_transformer.py的 if self.training: hybrid_classes, hybrid_coords = self.decoder( query=hybrid_target, value=memory, key_padding_mask=mask_flatten, reference_points=hybrid_reference_points, spatial_shapes=spatial_shapes, level_start_index=level_start_index, valid_ratios=valid_ratios, skip_relation=True, )

补充信息

No response

mitu752 commented 1 month ago

但是我看dino的DINOTransformerDecoder没有skip_relation这个参数

xiuqhou commented 1 month ago

Hi @mitu752

位置关系是在训练验证的时候都会使用。具体来说,我们的模型是有两个分支:主分支和辅助分支。skip_relation参数用于判断是否使用位置关系,主分支使用位置关系,skip_relation=True;辅助分支不使用,skip_relation=False。且辅助分支只在训练时候使用,用于加快收敛。问题中截出来的这部分是辅助分支。

DINO只有一个主分支,所以不需要skip_relation来区分。

mitu752 commented 3 weeks ago

Hi @mitu752

位置关系是在训练验证的时候都会使用。具体来说,我们的模型是有两个分支:主分支和辅助分支。skip_relation参数用于判断是否使用位置关系,主分支使用位置关系,skip_relation=True;辅助分支不使用,skip_relation=False。且辅助分支只在训练时候使用,用于加快收敛。问题中截出来的这部分是辅助分支。

DINO只有一个主分支,所以不需要skip_relation来区分。

大佬,还有个问题请教下,我看代码在验证过程中没有传入attn_mask, 来自[models/bricks/relation_transformer.py]
if attn_mask is not None: pos_relation.maskedfill(attn_mask, float("-inf")) 请问下大佬验证过程不做这个操作的原因是什么

HaisongDing commented 1 week ago

attn_mask是query之间的self-attention mask; 训练的时候因为有DN在,所以需要使用attn_mask控制dn的query和检测的query彼此看不到对方,所以pos_relation也需要用attn_mask掩掉一下; 验证的时候,没有了dn,所以不需要指定attn_mask了,就不需要用attn_mask掩掉pos_relation中的一些值了。