Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Transformer在目标检测领域的开山之作DETR模型

Transformer在目标检测领域的开山之作DETR模型

作者头像
CV君
发布于 2021-11-10 02:33:24
发布于 2021-11-10 02:33:24
2.1K01
代码可运行
举报
运行总次数:1
代码可运行

目标检测算法,pipeline太复杂?不同任务人工设计不同的非极大值抑制(NMS)阈值、生成新的锚点(Anchor)?是不是直接戳中了各位开发者的痛点!莫慌,今天小编就为万千开发者破局~这个破局点就是:基于transform的目标检测算法DETR,简洁的pipeline,去除NMS、Anchor设计,且在COCO数据集上的指标与Faster RCNN相当。

本项目将为大家详细介绍DETR算法。同时,将带领大家使用飞桨2.1版本在COCO数据集上实现基于DETR模型的目标检测,以及使用训练好的模型进行评估和预测。DETR检测效果如图1所示:

图1 DETR检测效果

看可以看出DETR将上图中的目标(人、包、椅子等)基本都可以正确检测出来,效果还是不错的~

是不是已经有小伙伴按耐不住想直接上手试试了?

小编识趣地赶紧送上开源代码的传送门 ⬇️ 大家一定要Fork收藏以免走失,也给开源社区一些认可和鼓励。

点击阅读原文可前往AI Studio社区查看源代码与原理讲解,使用免费GPU一键运行

  • 项目链接:https://aistudio.baidu.com/aistudio/projectdetail/2290729

而这个DETR到底是如何设计,从而有这么好的性能的呢?下面小编就带大家来领略一下:

01

COCO数据集

COCO的全称是Common Objects in Context,是一个用于object detection(目标检测)、segmentation(分割)和captioning(看图说话)的大规模数据集。COCO通过在Flickr上搜索80个对象类别和各种场景类型来收集图像。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%cd work/code/
首先解压数据集,执行如下代码即可,解压执行一次就可以。
!mkdir /home/aistudio/dataset
!unzip -q -o /home/aistudio/data/data105593/train2017.zip -d /home/aistudio/dataset
!unzip -q -o /home/aistudio/data/data105593/val2017.zip -d /home/aistudio/dataset
!unzip -q -o /home/aistudio/data/data105593/annotations_trainval2017.zip -d /home/aistudio/dataset
print('完整数据集解压完毕!')

解压之后,完整COCO数据存储结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- coco
        |-- annotations:标注文件
                |-- person_keypoints_train2017.json:关键点检测
                |-- person_keypoints_val2017.json
                |-- captions_train2017.json:看图说话
                |-- captions_val2017.json
                |-- instances_train2017.json:目标实例
                |-- instances_val2017.json
        |-- images:图片
                |-- train2017
                |-- val2017

然后安装pycocotools,用于加载、解析和可视化COCO数据集,代码实现如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
!pip install pycocotools

02

DETR模型介绍

2.1 整体结构

DETR即Detection Transformer,是Facebook AI 的研究者提出的 Transformer 的视觉版本,可以用于目标检测,也可以用于全景分割。这是第一个将 Transformer成功整合为检测pipeline中心构建块的目标检测框架。与之前的目标检测方法相比,DETR有效地消除了对许多手工设计的组件的需求,例如非最大抑制(Non-Maximum Suppression,,NMS)程序、锚点(Anchor)生成等。

这篇文章提出了一个非常简单的端到端的框架,DETR 的网络结构很简单,分为三个部分,第一部分是一个传统 CNN ,用于提取图片高纬特征;第二部分是一个Transformer 结构,Encoder 和 Decoder 来提取 Bounding Box;最后使用 Bipartite matching loss 来训练网络。

图2 DETR网络结构

2.2 DETR模型介绍

详细介绍DETR的流程,首先把一张3通道图片输入backbone为CNN的网络中,提取图片特征,然后结合位置信息,输入到transformer模型的编码器和解码器中,得到transformer的检测结果,每个结果就是一个box,其中每个box表示一个元组,包含物体的类别和检测框位置。

图3 DETR详细网络结构

2.2.1 ResNet

使用ResNet作为backbone提取图片特征,同时会使用一个1*1的卷积进行降维。因为transformer的编码器模块只处理序列输入,所以后续还需要把CNN特征展开为一个序列。

图4 bockbone

2.2.2 DETR Transformer

接下来我们一步一步讲解DETR,首先是位置编码部分,将ResNet提取的特征图转成特征序列后,图像就失去了像素的空间分布信息,所以Transformer就引入位置编码。把特征序列和位置编码序列拼接起来,作为编码起的输入:

图5 位置编码

DETR论文提出了两种编码方式:

  • spatial positional encoding
  • object queries

1)第一种spatial positional encoding,从图5可以看到既会输入到encoder也会输入到decoder中。spatial positional encoding也包含两种计算方式:

  • learned

emmbeding向量,从网络中学习;

  • sine

PE为二维矩阵,大小跟输入embedding的维度一样,行表示词语,列表示词向量;pos 表示词语在句子中的位置;dmodeld_{model}dmodel表示词向量的维度;i表示词向量的位置。因此,上述公式表示在每个词语的词向量的偶数位置添加sin变量,奇数位置添加cos变量,从而来填满整个PE矩阵,然后concatenate送到编码器中。

2)第二种object queries,一开始object queries是N个随机向量,将这些随机向量编码,然后将其与该图像特征结合起来,因此可以认为这些随机输入经过解码器,相当于去图像信息中去查询,图像特征通过注意力机制的转换,得到检测框和类别预测。相当于可学习的anchor,从而解决手工设计anchor的问题。论文中可视化20个object queries,不同的点表示不同大小的box:

图6 object queries可视化

  • 蓝色:竖直、框较大的box
  • 红色:水平、框较大的box
  • 绿色:较小的box

接着一起看下DETR的Encoder和Decoder结构,包含多头自注意力、残差结构、归一化、前馈神经网络:

图7 DETR的Encoder和Decoder

2.2.3 HungarianMatcher

HungarianMatcher实现了bipartite matching loss,使用的是匈牙利算法,最终匹配方案是选取“loss总和”最小的分配方式。计算公式如下:

该算法实现预测值与真值之间最优的匹配,并且是一一对应,不会多个预测值匹配到同一个ground truth上,这样就无需NMS后处理了。假设预测结果是N个,那么标注信息也要是N个,如下图假设N=6,但真实标签2个,剩下的4个(标注如果小于N就用无物体信息去填充)标注信息都是用无类别来填充:

图8 HungarianMatcher例子

2.2.4 DETRLoss

DETR损失包含两部分:

  • 分类损失:交叉熵损失函数
  • 检测框位置损失:L1损失和IOU损失的加权和,且Iou的计算采用了GIou算法,解决真实框和检测框没重叠时,Iou始终为0的问题。

2.2.5 DETRHead

transformer输出序列直接送到FFN分类器,得到预测类别和检测框坐标:

图9 DETRHead结构图

03

模型训练

了解了DETR原理,接下来通过飞桨框架实现模型模型,训练脚本启动命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python main.py --mode='train' --dataset_dir='dataset/' 
--image_dir='train2017' 
--anno_path='annotations/instances_train2017.json'
  • mode:设置不同的模型,'train'表示训练
  • dataset_dir:COCO数据集路径
  • image_dir:训练图片路径
  • anno_path:训练标注文件路径

04

模型评估

使用训练好的模型在COCO验证集上的进行评估,评估脚本启动命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python main.py --mode='eval' --dataset_dir='dataset/' --image_dir='val2017' --anno_path='annotations/instances_val2017.json' --pretrained_model='pretrained_model/detr'

我们也可以下载DETR预训练模型,放在pretrained_model/目录下,使用预训练模型在COCO验证集上进行验证,结果如下:

  • 模型链接:https://aistudio.baidu.com/aistudio/projectdetail/2290729

图10 预训练模型评估指标

05

模型训练

使用保存好的模型,对数据集中的某一张图片进行模型推理,观察模型效果,具体代码实现如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python main.py --mode='test' 
--infer_img='test_imgs/000000014439.jpg'  
--anno_path='dataset/annotations/instances_val2017.json' 
--pretrained_model='pretrained_model/detr'
  • Infer_img:待测试图片
  • anno_path:用于获取标签类别

PaddleEdu使用过程中有任何问题欢迎在https://github.com/PaddlePaddle/awesome-DeepLearning 提issue,同时更多深度学习资料请参阅飞桨深度学习平台。

记得点个Star⭐收藏噢~~

参考文献

[1]Carion N, Massa F, Synnaeve G, et al. End-to-end object detection with transformers[C]//European Conference on Computer Vision. Springer, Cham, 2020: 213-229.

注:文中图片、公式来源End-to-End Object Detection with Transformers论文

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我爱计算机视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PaddlePaddle实战 | 经典目标检测方法Faster R-CNN和Mask R-CNN
机器视觉领域的核心问题之一就是目标检测(objectdetection),它的任务是找出图像当中所有感兴趣的目标(物体),确定其位置和大小。作为经典的目标检测框架FasterR-CNN,虽然是2015年的论文,但是它至今仍然是许多目标检测算法的基础,这在飞速发展的深度学习领域十分难得。而在FasterR-CNN的基础上改进的MaskR-CNN在2018年被提出,并斩获了ICCV2017年的最佳论文。Mask R-CNN可以应用到人体姿势识别,并且在实例分割、目标检测、人体关键点检测三个任务都取得了很好的效果。因此,百度深度学习框架PaddlePaddle开源了用于目标检测的RCNN模型,从而可以快速构建强大的应用,满足各种场景的应用,包括但不仅限于安防监控、医学图像识别、交通车辆检测、信号灯识别、食品检测等等。
用户1386409
2019/06/10
2.4K0
PaddlePaddle实战 | 经典目标检测方法Faster R-CNN和Mask R-CNN
EfficientDet:可扩展且高效的对象检测
这是在EfficientDet:可伸缩和有效对象检测一 文中描述的模型的pytorch实现(注意:还提供了预训练的权重,可以在./trained_models中看到)
代码医生工作室
2020/01/17
1.3K0
EfficientDet:可扩展且高效的对象检测
RT-DETR全解析:超越 YOLO,实时物体检测更快更精准(附代码)
近年来,物体检测技术在许多领域取得了显著进展,如视频监控、自动驾驶、智能家居等。传统的物体检测模型,如YOLO(You Only Look Once)系列,已经在实时检测任务中得到了广泛应用,但仍然存在一些限制,比如速度与精度的平衡问题。
CoovallyAIHub
2025/01/09
3.2K0
RT-DETR全解析:超越 YOLO,实时物体检测更快更精准(附代码)
首个目标检测扩散模型,比Faster R-CNN、DETR好,从随机框中直接检测
扩散模型( Diffusion Model )作为深度生成模型中的新 SOTA,已然在图像生成任务中超越了原 SOTA:例如 GAN,并且在诸多应用领域都有出色的表现,如计算机视觉,NLP、分子图建模、时间序列建模等。
机器之心
2022/12/16
7960
首个目标检测扩散模型,比Faster R-CNN、DETR好,从随机框中直接检测
DETR:基于Transformer的目标检测新范式,性能媲美Faster RCNN | ECCV 2020 Oral
论文: End-to-End Object Detection with Transformers
VincentLee
2020/08/03
3.3K0
Github 代码实践:Pytorch 实现的语义分割器
使用Detectron预训练权重输出 *e2e_mask_rcnn-R-101-FPN_2x* 的示例
AI研习社
2018/07/26
1.5K0
Github 代码实践:Pytorch 实现的语义分割器
UP-DETR 无需人工标注,随机裁剪多个 Query Patch ,并预训练 Transformer 进行目标检测 !
DETR是一种最近的框架,它将目标检测视为一个通过 Transformer 编码器-解码器[2]直接预测集合的问题。在没有手动设计的样本选择[3]和非最大值抑制(NMS)的情况下,DETR甚至可以达到与Faster R-CNN[4]相竞争的性能。然而,DETR在训练和优化方面存在挑战,它需要大规模的训练数据集以及即使在COCO数据集[5]上也需要极长的训练时间表。此外,研究发现,在训练数据不足且实例数量少于COCO的PASCAL VOC数据集[6]上,DETR的表现不佳。图1展示了DETR和作者提出的无监督预训练DETR(UP-DETR)在PASCAL VOC上的学习曲线。与DETR相比,UP-DETR以更高的AP值更快地收敛。
未来先知
2024/08/08
2850
UP-DETR 无需人工标注,随机裁剪多个 Query Patch ,并预训练 Transformer 进行目标检测 !
2020-ECCV-End-to-End Object Detection with Transformers
这篇文章[1]针对目标检测任务给出了一个基于 Transformer 的端到端的神经网络模型 DETR,简单且有效,不再需要任何的前/后处理操作。DETR 可谓是目标检测方向上一个里程碑式的工作。作者将目标检测看作是一个集合预测问题,即给定一个图片,预测出所有的物体框的集合。通过将问题转化为集合预测的问题,结合 Transformer 结构,作者将原先目标检测模型中依赖于人的先验知识的部分(NMS 和 Anchor)都删除了,设计出一个简单的端到端架构 DETR。DETR 通过一个全局的集合 Loss,强制模型针对一个物体只会对应有一个框,而不会生成过多的冗余框。此外,在 DETR 架构中,Transformer 的解码器的输入额外有一项 Learned Object Queries,类似于可学习的 Anchor。DETR 简单且有效(但在目标检测上和 SOTA 还是差了挺多)!
hotarugali
2022/08/30
5780
2020-ECCV-End-to-End Object Detection with Transformers
ECCV 2022 | 通往数据高效的Transformer目标检测器
本文介绍一下我们中稿今年 ECCV 的一项工作。对目标检测模型所需要的数据进行标注往往是十分繁重的工作,因为它要求对图像中可能存在的多个物体的位置和类别进行标注。本文旨在减少 Detection Transformer 类目标检测器对标注数据的依赖程度,提升其数据效率。
小白学视觉
2022/09/28
3450
DETR系列算法
Detection Transformer 是从2020年开始的一种全新的端到端的目标检测范式,图片通过CNN提取特征,然后将提取的特征展平输入transformer encoder-decoder,然后通过一系列查询,检测头输出每个查询的结果。查询的数量通常为100、300或900,远远少于之前的检测算法中的密集预测。
孔西皮
2023/10/18
7130
DETR系列算法
【论文复现】DETR[端到端目标检测]
在目标检测需要许多手工设计的组件,例如非极大值抑制(NMS),基于人工经验生成的先验框(Anchor)等。DETR这篇文章通过将目标检测作为一个直接的集合预测问题,减少了人工设计组件的知识,简化了目标检测的流程。给定一组固定的可学习的目标查询,DETR推理目标和全局图像的上下文关系,由于DETR没有先验框的约束,因此对于较大的物体预测性能会更好。
Eternity._
2024/12/04
3240
【论文复现】DETR[端到端目标检测]
使用PyTorch实现目标检测新范式DETR(基于transformer)| 留言送书
与传统的计算机视觉技术不同,DETR将目标检测作为一个直接的集合预测问题来处理。它由一个基于集合的全局损失和一个Transformer encoder-decoder 结构组成,该全局损失通过二分匹配强制进行唯一预测。给定固定的学习对象查询集,则DETR会考虑对象与全局图像上下文之间的关系,以直接并行并行输出最终的预测集。由于这种并行性,DETR非常快速和高效。
磐创AI
2020/06/04
4.3K0
快到没朋友的YOLO v3有了PaddlePaddle 预训练模型
YOLO作为目标检测领域的创新技术,一经推出就受到开发者的广泛关注。值得一提的是,基于百度自研的开源深度学习平台PaddlePaddle的YOLO v3实现,参考了论文【Bag of Tricks for Image Classification with Convolutional NeuralNetworks】,增加了mixup,label_smooth等处理,精度(mAP(0.5:0.95))相比于原作者的实现提高了4.7个绝对百分点,在此基础上加入synchronize batchnormalization, 最终精度相比原作者提高5.9个绝对百分点。我们将在下文中为大家详解实现的具体过程。
机器之心
2019/05/17
1.1K0
基于飞桨实现的“太空保卫战士”——地球同步静止轨道空间目标检测系统
卫星的应用十分广泛,许多行业每天都依赖其运作。我们通常会根据高度把人造地球卫星运行的轨道简单地分类为低轨道(200千米~2000千米)、中轨道(2000千米~20000千米)和高轨道(20000千米以上)。
用户1386409
2022/03/31
3730
基于飞桨实现的“太空保卫战士”——地球同步静止轨道空间目标检测系统
Transformer在小目标检测上的应用
小目标检测(Small Object Detection, SOD)作为通用目标检测的一个子领域,专注于对小尺寸目标的检测,在监控、无人机场景分析、行人检测、自动驾驶中的交通标志检测等各种场景中都具有重要的理论和现实意义。
不去幼儿园
2024/12/03
4080
Transformer在小目标检测上的应用
百度飞桨开源Open Images Dataset V5目标检测比赛最好单模型MSF-DET
近日,飞桨开源了比赛中使用的MSF-DET,助力大规模图像目标检测算法的研究探索和落地应用。
CV君
2019/12/27
1.3K0
技术分享 | 遥感影像中的旋转目标检测系列(一)
与自然影像数据集不同,遥感影像中的目标通常以任意角度出现,如图 1所示。自然影像常用的水平框目标检测方法,在遥感影像上的效果通常不够理想。一方面,细长类目的待检测目标(比如船舶、卡车等),使得水平框检测的后处理很困难(因为相邻目标的水平框的重合度很高)。另一方面,因为目标的角度多变,水平框不可避免引入过多的背景信息。针对这些问题,遥感目标检测更倾向于检测目标的最小外接矩形框,即旋转目标检测。旋转目标检测最近因其在不同场景中的重要应用而受到越来越多的关注,包括航空图像、场景文本和人脸等。特别是在航空图像中,已经提出了许多设计良好的旋转目标检测器,并在大型数据集上(比如 DOTA-V1.0)获得了较好的结果. 与自然图像相比,航拍图像中的物体通常呈现密集分布、大纵横比和任意方向。这些特点使得现有的旋转对象检测器变得复杂。我们的工作重点是简化旋转对象检测,消除对复杂手工组件的需求,包括但不限于基于规则的训练目标分配、旋转 RoI 生成、旋转非最大值抑制 (NMS) 和旋转 RoI 特征提取器。
郭好奇同学
2023/02/15
2.4K0
技术分享 | 遥感影像中的旋转目标检测系列(一)
【论文学习】End-to-End Object Detection with Transformers
DETR是Facebook在2020年提出的基于Transformer的端到端目标检测方法,克服了在传统目标检测中对Anchor和非极大值抑制(Non-Maximum Suppression, NMS)等先验知识的依赖 ,简化了目标检测的处理流程。
YoungTimes
2023/03/09
1.6K0
【论文学习】End-to-End Object Detection with Transformers
详细解读 | 如何让你的DETR目标检测模型快速收敛
最近发展起来的DETR方法将transformer编解码器体系结构应用于目标检测并取得了很好的性能。在本文中,作者解决了训练收敛速度慢这一关键问题,并提出了一种conditional cross-attention mechanism用于快速训练DETR。作者动机是cross-attention在DETR中高度依赖content embeddings定位的4端和预测框,这增加了对高质量content embedding的需求进而增加了训练的难度。
集智书童公众号
2021/08/26
3.4K0
目标检测 | Facebook开源新思路!DETR:用Transformers来进行端到端的目标检测
论文地址:https://arxiv.org/pdf/2005.12872.pdf
AI算法修炼营
2020/05/29
1.7K0
目标检测 | Facebook开源新思路!DETR:用Transformers来进行端到端的目标检测
推荐阅读
相关推荐
PaddlePaddle实战 | 经典目标检测方法Faster R-CNN和Mask R-CNN
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档