在DINO中正对Deformable DETR中的look forward once做了改进
左图是Deformable DETR,右图是DINO
Look Forward Once对应的代码部分:
怎么理解iterative box refinement 可以阻止梯度反向传播来稳定训练?
python
reference_points = new_reference_points.detach()
-
什么是梯度切断? 切断梯度表示阻止反向传播的梯度从当前层的
reference_points
传播到上一层。也就是说,后续层的梯度不会影响前一层生成的边界框参考点。 -
实现效果: 每一层的
reference_points
是通过当前层的预测生成的,但它不会受到后续层优化路径的影响,从而确保预测的独立性。
代码解析
1. DeformableTransformerDecoder中的self.box_embed不是赋值为None吗?在哪儿改变的值?
解答:
self.bbox_embed
被克隆为多个独立的实例,每个解码器层对应一个独立的bbox_embed
模块。- 然后,
self.bbox_embed
被赋值到self.transformer.decoder.bbox_embed
。 - 这一赋值操作是外部对
DeformableTransformerDecoder.bbox_embed
的修改。