DAB-DETR深入理解

论文链接:https://arxiv.org/abs/2201.12329

最大的贡献是把DETR的Object Query定义为可学习Anchor

Anchor-based DETR来临了
(还有点争议,说是Anchor-based,这Anchor又不是预定义的,说是Anchor-free,这Anchor也不是由image feature end-to-end预测来的)

首先是一个实验,为啥DETR收敛这么慢?首先排除backbone的原因,因为是预训练好的,那就只能是Decoder的原因。
其中,Decoder包含好几个部分,包括输入,Decoder,输出的匈牙利匹配,本篇是在输入Query上下文章。

输入的可学习的Query,会不会是因为Query学的太慢了呢?于是干脆直接把Query固定为在COCO上预训练好的,看会不会收敛快一点,结果令人比较失望:
在这里插入图片描述
并没有提多少,这说明不是Query学的慢了,而是Decoder学的慢了,给他一样的好的Query,他也得不到好的输出结果,导致每次匈牙利算法匹配的结果都不一样。
因此加速收敛本质上是加速Decoder的学习

要加速Decoder,有几个方面,
一是使用更好的Decoder(如何定义更好,不得而知)
二是喂给它更好的sample与监督
第二个方面就引申出了包括本篇在内的后面几个工作

如何定义“更好”?
首先得搞明白喂进去的输入是个啥?
在这里插入图片描述
(1)左边是Encoder,右边是Decoder,可以看到K是feature embedding + positional embedding ,Q是feature embedding + Queries

(2)其中,Q的“feature embedding”实际上是上一层Decoder的输出,也就是Value(Encoder的Feature embedding)根据注意力取出来的一部分,是不是很像ROI pooling?只是这里取的不是一部分区域,而是这个区域经过全局注意力之后的结果,相当于是多了Context

从(1)的角度看,Query可以类比为Positional Embedding,从(2)的角度看,Query是否就是Proposal?或者说,Proposal的位置信息,也就是Anchor

综上所述,Query实际上就是Positional Embedding形式的Anchor,与Decoder Embedding相加后,相当于是给ROI pooling后的Feature上PE(positional
embedding),用于继续跟总Feature求注意力矩阵,拿ROI。

经过多层堆叠之后,拿到了最精确的ROI,就可以过FFN输出分类和回归结果(DETR的做法)

》》》》》》》》》》》》》》
有什么问题?
(1)凭什么多层堆叠就能拿到更精确的ROI?->这是由最后一层的监督决定的,不过可能也是导致其收敛慢的原因。
要想其收敛更快,显然的方法就是给它更多的监督==>每一个layer都给它一个gt的监督
这里又引出几个问题:
1、layer输出的并不是bbox,如何用gt的bbox去监督?
2、每个layer如何做正样本分配?

对于第一个问题,有几种方式可以解决:
1’ 在每个layer加个FFN检测头,输出分类和回归的结果
2还没想到
DAB-DETR就是采用的1’的做法
在这里插入图片描述
不同的是,只输出回归的结果,也就是 Δ x , Δ y , Δ w , Δ h \Delta{x},\Delta{y},\Delta{w},\Delta{h} Δx,Δy,Δw,Δh,同时,Query就是用sin与cos编码后的anchor
在这里插入图片描述
因此,可以拿编码前的结果与输出的回归系数相加,得到输出的proposal(用gt监督),同时,这个proposal又可以作为下一阶段的Query输入,相当于下一阶段又更精确的Proposal。很妙,也是很自然的想法

现在来解决第二个问题,每个layer输出的N个proposal用哪个gt来监督
很自然的想法就是遵循常规OD,用IoU最大的来监督/
想多了,直接用DETR最后的匈牙利算法来分配样本算了。。

》》》》》》》》》》
插播一篇Conditional-DETR:

### DAB-DETR 源码 GitHub 仓库下载 DAB-DETR 是一种改进 DETR 的目标检测框架,其核心思想是通过动态锚框作为查询替代原始的 Transformer 查询向量[^1]。如果希望获取 DAB-DETR 的源码,可以通过以下方式访问官方或社区维护的相关资源。 #### 官方 GitHub 仓库地址 DAB-DETR 的官方实现通常托管在研究团队所属机构的公共存储库中。以下是可能找到该项目的地方: 1. **GitHub 地址**: 访问 [https://github.com/IDEA-Research/DAB-DETR](https://github.com/IDEA-Research/DAB-DETR),这是 IDEA Research 提供的一个开源项目链接[^2]。此仓库包含了论文中的具体实现细节以及训练脚本。 2. **克隆命令**: 使用以下命令可以将代码克隆到本地环境: ```bash git clone https://github.com/IDEA-Research/DAB-DETR.git ``` 3. **依赖安装**: 在运行代码前,请确保按照 README 文件中的说明完成必要的依赖项安装。一般情况下,这涉及 PyTorch 和其他计算机视觉工具包的配置。 4. **数据准备与模型训练**: 参考文档中的指导准备好 COCO 数据集或其他适用的数据集,并调整超参数以适配特定的任务需求[^3]。 --- ### 补充说明 除了上述提到的内容外,还需要注意一些扩展性的改动。例如,在 Co-DETR 中引入了一种新的标签分配策略——一对多标签分配机制,用于解决一对一匹配带来的局限性问题。这种设计能够显著提升小物体检测性能并增强整体鲁棒性。 对于进一步的研究者来说,理解 `prepare_for_dn` 函数的作用至关重要,因为它负责生成初始的目标位置预测值(即 positive coordinates),从而帮助构建更高质量的学习信号。 --- ### 示例代码片段 下面是一个简单的 Python 脚本来展示如何加载预训练权重文件并与自定义数据配合使用: ```python import torch from models.dab_detr import build_model # 构建模型实例 model, criterion, postprocessors = build_model() # 加载预训练权重 checkpoint = torch.load('path_to_checkpoint.pth', map_location='cpu') model.load_state_dict(checkpoint['model']) # 将模型设置为评估模式 model.eval() ``` 以上代码展示了基本的操作流程,实际应用时需依据具体情况修改路径及相关参数设定。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值