代码阅读-deformable detr(七)

这一篇我们主要总结一下deformable detr中值得注意的几个地方。

  1. DeformableTransformer 中在不使用two_stage的条件下提供的reference_points是由nn.Embedding经过线性变化得到的,值得注意的是这个·reference_points·直接参与了loss的计算,也就是说这个分支上对self.reference_points层进行了训练。
  2. DeformableTransformer中使用two_stage的条件下在每个位置上都生成了proposal,然后选择topk个proposal作为query的reference_point,但是可以发现这里的topk 进行了detach,并不会传递从decoder传来的梯度误差。
  3. DeformableTransformer中使用two_stage的条件会在encoder的输出层的每个位置提供一个anchor,对于多尺度而言,提供了不同尺度的anchor。这里有个注意的是此时的query数量非常大,这会导致两个问题:第一,正负样本会很不均衡;第二,使用matcher分配gt给proposal会导致分配较慢,且密集proposal上进行一一配对会导致训练不稳定,较难收敛。
  4. 正如@若空虚無
    指出,DeformableTransformerDecoder在 不用return_intermediate时的输出需要进行unsqueeze,否则在detector中调用时会有维度问题。
  5. deformable_detrDeformableDETR的定义中, 在使用refine技术时,class_embed、bbox_embed是不共享参数的, 而不使用refine技术时,每层的class_embed, bbox_embed是参数共享的,使用nn.ModuleList主要是为了forward中推理代码的统一。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容