End-to-End Object Detection with Transformers论文阅读笔记

论文下载地址:  https://arxiv.org/abs/2005.12872

代码下载地址: https://github.com/facebookresearch/detr

摘要:该算法简化了目标检测算法的流程,同时将那些需要手动设计的技巧nms(极大值抑制)和anchor成功的删除掉,实现端到端自动训练和学习。DETR算法使基于集合的全局损失函数,通过二部图匹配和编码解码网络结构来强制进行唯一的预测。 给定一小组固定的经过学习的object queries(后面会讲到什么是object queries),DETR根据对象和全局图像上下文的关系,直接并行输出最终的预测集。 与许多其他检测算法不同,新模型在概念上很简单,不需要专门的库。经过COCO数据集测试,新算法在速度和精度上都比Faster-RCNN高。

网络整体流程:

如上图一所示,是该算法的整体计算流程。首先将图片传到CNN里面来提取特征信息,然后将提取到的特征降维展开传到Transfoemer里面,通过Transformer编码和解码的网络结构输出固定个数的预测结果。最后将得到的检测结果和GroundTruth进行二部图匹配计算loss。

Transformer网络结构:

如图2所示,是Transformer的整体网络结构,主要是由编码器和解码器两部分组成。如图3是编码器和解码器的详细网络结构,编码器由两部分组成自注意力和前馈神经网络层,解码器在编码器的基础上增加了编码-解码注意力层。这个是Transformer的整体结构上的理解,还想了解具体的细节可以去 https://zhuanlan.zhihu.com/p/48508221 大佬讲解的很详细。

 

二部图匹配:

二部图匹配就是将预测结果和Groundtruth进行匹配。本论文中网络输出的结果是固定为100个预测目标,并非这100个都会有预测结果,对于没有目标的预测值会输出为空标记,如图4左边。Groundtruth也会使用空标记来进行补齐,达到100个,如图4右边。然后这两个就会进行二部匹配。

如下图 4所示,左边表示的是网络预测结果,右边表示groundtruth结果。得到结果之后再通过贪心算法来进行二部图匹配得到匹配结果之后计算二部图loss。

网络结构详细介绍:

如下图5所示算法的详细网络结构,首先图片经过CNN提取特征,然后降维操作之后和位置编码信息进行sum操作,传到encoder里面,然后encoder将处理的结果传到decoder里面,同时将object queries也传到deconder里面进行处理,最后将decoder处理的结果通过FFN输出最后的检测结果。

Position encoding:

transformer模型的attention机制并没有包含位置信息,即一句话中词语在不同的位置时在transformer中是没有区别的,这当然是不符合实际的。因此,在transformer中引入位置信息相比CNN, RNN等模型有更加重要的作用。作者添加位置编码的方法是:构造一个跟输入embedding维度一样的矩阵,然后跟输入embedding相加得到multi-head attention 的输入。PE矩阵的计算方法如下图所示:pos表示词语在句子中的位置,d-model表示词向量的维度,i表示词向量的位置。

什么是object queries:

下图6就是表示的object queries。他表示的就是有N各不同的人从N个角度来向模型进行提问,当前位置是否有目标。在网络中的作用就是类似于给网络画重点,让网络着重关注这几个部分。

FFN网络结构:

FFN网络结构有三层FC层加RELU激活函数和线性函数组成。通过FFN网络结构输出目标的中心点的位置,boxes的长和宽通过线性函数输出预测的类别。

网络loss:

下图是二部图的匹配loss

下图表示的是检测框的iou-loss和L1-loss

下公式表示的是网络结构的loss,左边部分是二部图的匹配loss,右边部分表示的是检测框的loss。

检测结果:

从下图可以看出该算法在AP,AP50,APM和APl上取得了和那后的检测结果。但是该算法针对小目标检测效果并不理想,也是后续改进的一个方向。

 

End-to-End Object Detection with Transformers即DETR方法。要复现该论文中的目标检测方法,可按以下步骤进行: ### 1. 了解论文核心要点 DETR一次性预测所有目标,并使用集合损失函数进行端到端训练,该损失函数在预测目标和真实目标之间进行二分匹配。其主要特征是二部匹配损失和非自回归并行解码的transformer的结合,通过去除多个编码先验知识的手工设计组件(如空间锚框或非极大值抑制)来简化检测流程,且不需要任何定制层,可在包含标准CNN和变换器类的任何框架中轻松复现 [^2][^3]。 ### 2. 获取论文和代码 论文链接为:https://arxiv.org/pdf/2005.12872.pdf,代码链接为:https://github.com/facebookresearch/detr [^1]。 ### 3. 环境搭建 通常需要安装Python环境以及深度学习框架(如PyTorch),还有一些依赖库,可根据代码仓库中的`requirements.txt`文件进行安装。示例安装命令如下: ```bash pip install -r requirements.txt ``` ### 4. 数据准备 准备适合目标检测的数据集,如COCO数据集。需要将数据集按照一定的目录结构放置,以便代码能够正确读取。 ### 5. 模型训练 按照代码仓库中的说明,使用准备好的数据集进行模型训练。一般会有训练脚本,例如: ```bash python main.py --coco_path /path/to/coco --batch_size 2 --output_dir output ``` 其中`--coco_path`指定数据集路径,`--batch_size`指定批量大小,`--output_dir`指定输出目录。 ### 6. 模型评估 训练完成后,使用测试集对模型进行评估,以验证模型的性能。评估脚本一般也在代码仓库中,可按照说明执行。 ### 7. 模型推理 使用训练好的模型对新的图像进行目标检测推理,获取检测结果。示例推理代码可能如下: ```python import torch from models import build_model from PIL import Image import torchvision.transforms as T # 加载模型 model, _, _ = build_model(args) checkpoint = torch.load('path/to/checkpoint.pth') model.load_state_dict(checkpoint['model']) model.eval() # 图像预处理 transform = T.Compose([ T.Resize(800), T.ToTensor(), T.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) # 加载图像 image = Image.open('path/to/image.jpg') image = transform(image).unsqueeze(0) # 推理 with torch.no_grad(): outputs = model(image) # 处理输出结果 # ... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值