DETR与Deformable DETR小结

DETR与deformable DETR小结

DETR

论文地址https://arxiv.org/abs/2005.12872
论文解读
DETR将检测视为集合预测问题,简化了目标检测的整体流程。它没有现在主流的目标检测器中的anchor、label assign、nms等操作,做到了真正的end-to-end。它主要采用了Transformer的编解码结构,它在序列预测任务上大获成功。Transformer中的自注意力机制显示地界定了序列中元素间的相互作用,因此可以用于约束集合的预测结果。

在这里插入图片描述

如上图是DETR的检测流程,它一次性预测多个目标,并通过损失函数唯一地匹配预测结果和标注信息。DETR不需要添加其他的特殊层,整个结构仅由Transformer和ResNet组成。同时,在最后的二分匹配过程我们可以看到,产生的预测结果中不包含感兴趣目标类别时,它与空匹配。
与其他的集合预测问题相比,DETR的一大优势是将解码器同二分匹配(匈牙利算法)损失函数结合,从而可以并行处理。该损失函数将预测结果唯一地与标注信息匹配,因而可以实现并行预测。
DETR的两个关键是:利用损失函数完成预测内容和标注信息的唯一匹配以及预测一组目标及其之间的关系。如下图:
在这里插入图片描述
DETR transformer架构:
在这里插入图片描述

Pytorch代码:
在这里插入图片描述

很容易扩展,可以扩展为全景分割模型,通过添加一个mask分支,在box模型的基础上训练25轮,就可以达到SOTA的结果。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

论文贡献:
(一)提出将Transformer引用于目标检测的方法,并且得到了预期的结果,相当于为以后的目标检测提供一种新的方法论;
(二)论文使用的模型结构非常简洁,不添加任何额外的Tricks就能获得与Faster-RCNN相当的结果;
在这里插入图片描述

(三)主要为我们提供了一种思路,提出一种将深度学习两大领域(NLP和CV)进行结合的有效方法。

Deformable DETR

论文地址:DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION
论文翻译

DETR将检测视为集合预测问题,简化了目标检测的整体流程。它没有现在主流的目标检测器中的anchor、label assign、nms等操作,做到了真正的end-to-end。
尽管DETR有着有趣的设计和好的表现,但是DETR也有着他自己的问题:

  1. 相比于现存的检测器,他需要更长的训练时间来收敛,在coco数据集上,他需要500轮来收敛,是faster r-cnn的10到20倍;
  2. DETR在小物体检测上性能较差,现存的检测器通常带有多尺度的特征,小物体目标通常在高分辨率特征图上检测,而DETR没有采用多尺度特征来检测,主要是高分辨率的特征图会对DETR增加不可接受的计算复杂度。

以上缺点也主要来自于transformer处理特征图时的缺陷;
在初始化的时候,attention模块在特征图上每一个像素的attention权重都几乎一样,所以需要更多的训练轮次来让注意力集中在稀疏的有意义的位置;
另一方面,在transformer编码器中,注意权值计算是基于像素数的二次计算,因此,处理高分辨率特征图的计算和内存复杂度非常高;

在图像领域,可变形卷积是一种处理稀疏空间位置的强大而高效的机制。它很自然的避免了上述提到的问题,而它缺少元素关系建模机制,这是DETR成功的关键。
论文提出的deformable DETR,结合了deformable的稀疏空间采样的优点和transformer的关系建模能力。它考虑到在所有特征图像素一个小的采样位置集作为一个预先过滤器突出关键元素;
该模块可以自然地扩展到聚合多尺度特征,而无需FPN的帮助;
在deformable DETR中,使用(多尺度)可变形注意模块替换处理特征图的transformer注意模块,如下图所示:

在这里插入图片描述

Deformable DETR由于其快速收敛、计算和内存效率,为我们开发端到端对象检测器的变体提供了可能性
论文中探索了一种简单有效的迭代边界框细化机制来提高检测性能,也尝试了two-stage Deformable DETR

two-stage Deformable DETR:通过Deformable DETR生成region proposals,再送入decoder进行迭代边界框细化;

与DETR相比,Deformable DETR可以在少10个训练周期的情况下取得更好的性能(特别是在小物体上)。提出的two-stage Deformable DETR的改进可以进一步提高性能。

在这里插入图片描述

在这里插入图片描述

### RT-DETR中的可变形注意力机制 在RT-DETR中,为了增强模型对于不同尺度特征的感受野并提高其灵活性,采用了基于Deformable DETR的改进版本——即引入了可变形注意力机制。这种机制允许每个查询位置自适应地聚焦于输入图像的不同空间区域,从而更好地捕捉目标物体的关键部分。 具体来说,在标准的多头自注意层基础上加入了偏移量参数来调整采样点的位置。这些偏移量通过额外的学习过程获得,并且可以根据具体的任务需求动态变化。这使得即使是在复杂场景下也能更精准地定位和识别对象[^2]。 #### 实现细节 以下是关于如何在RT-DETR框架内集成deformable attention的具体步骤: 1. **定义偏移量生成模块**:创建一个新的子网络用于计算每个多头关注下的相对位移向量; 2. **修改原有的Attention Layer**:将传统固定网格替换为由上述子网输出指导的新坐标系; 3. **训练过程中更新权重**:确保整个系统的梯度能够回传至负责产生offsets的部分,以便优化它们的表现效果。 #### 示例代码 下面给出一段简化版Python伪代码片段展示怎样构建这样一个含有deformable attention组件的Transformer解码器单元: ```python import torch.nn as nn from torchvision.ops import DeformConv2d class DeformableAttnLayer(nn.Module): def __init__(self, d_model=256, nhead=8): super().__init__() self.offset_net = nn.Sequential( nn.Linear(d_model, 49 * 2), # 假设有7x7个采样点,则需预测两个方向上的偏移 nn.Tanh() ) self.deform_attn = MultiHeadedDeformableAttention(nhead=nhead) def forward(self, query, key, value): offsets = self.offset_net(query).view(-1, 49, 2) output = self.deform_attn(query=query, key=key, value=value, offset=offsets) return output def build_transformer_decoder_with_deformable_attention(): decoder_layer = TransformerDecoderLayerWithDeformableAttention(...) transformer_decoder = TransformerDecoder(decoder_layer, num_layers=...) return transformer_decoder ``` 此段代码展示了如何在一个简单的例子中加入deformable attention到现有的transformer架构里去。实际应用时还需要考虑更多因素如性能调优等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值