基于注意力机制的目标检测模型(DETR模型)原理及代码实现

目录

1  DETR模型简介

2  DETR模型结构

2.1 Backbone主干特征提取网络

2.2 encoder编码网络 

2.3  decoder解码网络 

2.4 预测头部构建

3 DETR模型构建

3.1 创建Derection_Transformers类

3.2 初始化模型

3.3位置嵌入

3.4 对象查询

3.5 自注意力机制

3.6 加载DETR模型和预训练权重

4 模型训练 

5 模型评估 

6 模型预测效果

7 结论

7.1 DETR模型的主要特点

7.2 DETR模型的优点


1  DETR模型简介

        DETR(Detection Transformer)是一种端到端的目标检测模型,由Facebook AI Research(FAIR)于2020年提出。DETR采用了Transformer架构,与传统的基于区域的目标检测方法有所不同,它通过全局上下文来预测图像中的目标,而无需使用先前的候选框或区域建议网络。

2  DETR模型结构

        本文基于 Pytorch框架构建了在VOC数据集上检测的 DETR模型(DEtection TRansformers)。它是一种基于Transformer架构的端到端目标检测模型,其结构示意图如图。

        整个DETR可以分为四个部分,分别是:backbone、encoder、decoder以及predictionheads。

        基本思想是,首先用cnn抽取图像特征,拿到每一个patch对应的向量,并加上位置编码。然后用transformer encoder学习全局特征,帮助后面做检测。接着将encoder的输出作为tranformer deoder的输入,同时还输入了一个对象查询。对象查询按我的理解就是,它生成一个查询分量q和前面encoder传进来的k和v做一个交互,生成很多预测框。然后把预测框和真实框做匹配,询问框内是否包含目标,然后在匹配上的这些框里面计算loss,进而向后传播。接着就是预测头的建立,最后生成预测结果。

        所以整个DETR网络的工作就是:特征提取--特征加强--特征查询--预测结果

2.1 Backbone主干特征提取网络

        backbone是DETR的主干特征提取网络,输入的图片首先会在主干网络里面进行特征提取,提取到的特征可以被称作特征层,是输入图片的特征集合。在主干部分,我们获取了一个特征层进行下一步网络的构建,这一个特征层我称它为有效特征层。

2.2 encoder编码网络 

        encoder是Transformer的编码网络-特征加强,在主干部分获得的一个有效特征层会首先在高宽维度进行平铺,成为一个特征序列,然后会在这一部分继续使用Self-Attension进行加强特征提取,获得一个加强后的有效特征层。它属于Transformer的编码网络,编码的下一步是解码。

2.3  decoder解码网络 

        decoder是Transformer的解码网络-特征查询,在encoder部分获得的一个加强后的有效特征层会在这一部分进行解码,解码需要使用到一个非常重要的可学习模块,即上图呈现的object queries。在decoder部分,我们使用一个可学习的查询向量q对加强后的有效特征层进行查询,获得预测结果。

2.4 预测头部构建

        prediction heads是DETR的分类器与回归器,其实就是对decoder获得的预测结果进行全连接,两次全连接分别代表种类和回归参数。因此,整个DETR网络所作的工作就是 特征提取-特征加强-特征查询-预测结果。

3 DETR模型构建

3.1 创建Derection_Transformers类

         首先创建一个Derection_Transformers类,其中包含类变量defaults,存储该类的默认参数和对应默认值。

3.2 初始化模型

         接着初始化DETR模型。获得各个种类和先验框的数量。与Faster R-CNN不同,DETR使用了注意力机制和Transformer架构。


        上面图片提到了位置嵌入和对象查询,那么这两者分别是什么意思,有什么含义?接下来进行逐一介绍。

3.3位置嵌入

        DETR模型中,位置嵌入(位置编码)是一种学习得到的向量,用于表示输入序列中不同位置的信息。

        这一步的目的就是为所有特征添加上位置信息,这样网络才有区分不同区域的能力。

3.4 对象查询

        DETR使用对象查询来预测图像中的目标。对象查询是Transformer中的一种机制,为每个目标生成一个特定的查询向量,用于指定注意力的焦点

        对象查询是通过学习位置嵌入(位置编码)来实现的,这些位置嵌入对应于模型关注图像中的先验框

3.5 自注意力机制

          接着通过应用自注意力机制,使用对象查询来聚焦于输入特征序列中与目标相关的部分。这使得模型能够有效地在输入序列中定位目标。 

自注意力的结构如上图所示。

比如如果我们想要获得input-1的输出,那么我们进行如下几步:

1、利用input-1的查询向量,分别乘上input-1、input-2、input-3的键向量,此时我们获得了三个score。

2、然后对这三个score取softmax,获得了input-1、input-2、input-3各自的重要程度。

3、然后将这个重要程度乘上input-1、input-2、input-3的值向量,求和。

4、此时我们获得了input-1的输出。

3.6 加载DETR模型和预训练权重

接着调用generate方法,用于加载DETR模型和预训练权重。

4 模型训练 

        本项目采用冻结训练。训练分为两个阶段,分别是冻结阶段和解冻阶段

        因为目标检测模型里,主干特征提取部分所提取到的特征是通用的,把 backbone 冻结起来训练可以加快训练效率,也可以防止权值被破坏

        DETR模型超参数设置如下:

5 模型评估 

        本项目的评估方法采用的是mAP(meanAveragePrecision)。用于衡量模型在检测多个目标类别时的准确性。

        以下是DETR模型训练了100轮的各个类别的准确率(AP)以及MAP。由图可见,MAP达到了81.05%

         DETR模型的loss曲线图和MAP曲线图如下

6 模型预测效果

        接下来,将训练得到的最佳权值载入,模型的各个参数值如下:

DETR预测效果如下图所示。可见在这幅图中,对于没有什么遮挡的目标,模型的检测效果优秀,基本都能达到99.0%、100%的识别精度。对于远处的汽车(下图最左边)即使有部分缺失,仍能被识别出来,且精确度达到了96.0%。而上面的Faster-RCNN模型,并没有识别出这个位置的目标。可见DETR模型的识别效果不错。 

        接下来展示其他图像上的预测效果。为了进一步检验模型的性能,以下图片选取了自己的照片进行预测。如下图所示,对于未遮挡的物体,准确率能达到97.0%至100.0%,对于目标不完整的情况,识别精度则较低,但目标仍能够被检测出。

7 结论

7.1 DETR模型的主要特点

         DETR采用了Transformer架构,该架构最初用于自然语言处理任务,但在DETR中成功地应用于目标检测。Transformer通过自注意力机制实现对输入序列的全局上下文建模,这对于目标检测任务中全局信息的捕捉非常重要。

        为了处理图像的空间结构,DETR引入了位置嵌入,将图像的位置信息嵌入到输入序列中。这有助于Transformer模型理解目标在图像中的位置关系。DETR使用一组特殊的对象查询,代表图像中可能存在的目标。这些对象查询用于与编码器输出进行交互,最终生成目标的预测结果。

         DETR的解码器输出目标的类别和位置。通过对Transformer解码器的输出进行非极大值抑制(NMS),可以得到最终的目标检测结果。

        同时使用无监督的方式进行训练,即不需要预定义的候选框或类别标签。模型在训练时通过最小化目标类别和位置的损失来自动学习目标的表示。

7.2 DETR模型的优点

        一是端到端训练。与传统的两阶段目标检测方法相比,DETR实现了端到端的训练,简化了整个目标检测流程。

        二是灵活性。 由于不需要预定义的候选框,DETR对目标的数量和尺寸具有更大的灵活性。DETR在多个标准目标检测数据集上取得了竞赛性能,并为在目标检测任务中使用Transformer架构提供了一个重要的范例。

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值