人工智能|大白话DETR 模型

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: DETR(检测变换器)是首个端到端目标检测模型,摒弃锚框与NMS后处理。它以CNN提取特征,经Transformer编码器-解码器处理,配合100个可学习目标查询(OQ),通过二分图匹配实现预测框与真实框的一对一最优分配,直接输出类别与坐标。(239字)

 简单的介绍

DETR = DEtection TRansformer,中文可以叫「检测变换器」

  • DET = Detection(目标检测)
  • R = Transformer(变换器,就是大名鼎鼎的那个 Transformer)

合起来就是:专门做目标检测的 Transformer 模型。

传统 YOLO 系列算法存在不少依赖人工设计的环节,最典型的就是需要手动预先设定锚框。同

时,模型推理后会产出大量冗余的预测框,必须依靠非极大值抑制(NMS) 算法筛选、剔除重复

框,才能保留最优检测框。而 DETR 模型的诞生,正是为了从根本上解决这些繁琐的人工操作与

后处理步骤。

接下来简单说明 DETR 的整体工作流程:

    首先将整张图片送入卷积骨干网络,提取图片的深层特征信息。随后,DETR 会把提取到的特

征图展平处理,再送入完整的 Transformer 模型,该模型同时包含编码器解码器结构

    Transformer 最终会固定输出100 组预测结果,对应 100 个目标查询,每组结果都包含两部分

关键信息:目标类别、预测框坐标。

由于一张图片里不会刚好有 100 个物体,对于没有匹配到真实目标的预测框,DETR 会统一标记

为无目标(no object) 类别;对于有效目标的预测框,则映射回原图,和数据集中的真实标注框

进行比对。

训练阶段,DETR 采用二分图匹配的方式,一对一匹配预测框与真实框,计算专属的匹配损失。通

过反向传播不断优化模型参数,持续缩小预测框与真实框的坐标误差、分类误差,让检测结果越来

越精准。

等到推理阶段就更加简洁,模型不需要锚框、不需要非极大值抑制等后处理,直接输出有效目标的

边界框坐标和对应类别,一步完成端到端目标检测。

image.gif


二分图匹配损失

假设现在有 3 名司机、3 名乘客,需要完成合理的匹配调度。我们的优化目标是:实现整体出行总

成本最低。可以通过成本矩阵,直观展示每位司机分别接送每一位乘客所对应的单独成本,以此作

为最优调度的计算依据。

image.gif

DETR 里预测框和真实框的匹配逻辑,和刚刚司机与乘客的调度匹配原理完全一样。

我们可以构建一个损失矩阵,矩阵里的每一个数值,都代表单个预测框与单个真实框之间的匹配损

失。通过二分图匹配算法,自动算出哪一个预测框和哪一个真实框契合度最高、整体损失最小,直

接完成一对一最优配对。正是依靠这种全局最优匹配的方式,DETR 不需要再做非极大值抑制

(NMS)筛选重复框,直接省去了这一步后处理操作。

DETR 默认设置固定数量:(N=100),也就是固定生成 100 个预测框。模型默认一张图片里的目标

物体数量,不会超过 100 个,足够覆盖绝大多数检测场景。

二分图匹配的核心作用,就是确定:第 i 个真实目标,应该对应匹配哪一个预测框。

整体损失函数主要由分类损失和回归损失两部分组成:

第一部分为分类损失:(C_i) 代表真实目标的类别。举个例子,如果真实物体是猫,模型就要让猫

类别的预测概率无限接近 1;损失计算时会对概率取负值,概率越高、预测越准,分类损失就越

小。同时加入指示函数,只有当真实目标不是背景、是有效物体时,才会计算分类损失,背景类不

参与损耗计算。

第二部分是边界框回归损失,用来约束预测框的位置和大小。

回归损失又分为两项:

一是绝对值误差,主要衡量预测框中心点的偏移距离,修正框的位置偏差;

二是交并比误差,用来约束两个框的重合程度,保证预测框和真实框的面积、范围尽量贴合。

DETR 依靠二分图匹配完成框的一对一分配,搭配分类损失 + 回归损失联合优化,既保证物体类

别预测准确,又能让检测框的位置、尺寸精准贴合真实目标。

image.gif


模型架构

首先说骨干网络部分:我们先让一张图片经过卷积神经网络(CNN),目的就是提取图片的特

征。提取完特征之后,要和位置编码做一个加法,这样才能让模型知道图片里各个像素的位置关

系,再把加完之后的结果传给Transformer模型

这里的位置编码有两种方式,和大家熟悉的操作一致:第一种是正弦余弦编码,和原始

Transformer用的完全一样,简单说就是用正弦标记图片像素的横坐标位置,用余弦标记纵坐标位

置,固定不变;第二种是可学习的位置编码,不用复杂操作,只要初始化一个位置编码矩阵,模型

训练的时候自己就能慢慢优化调整。

接下来看Transformer模型,它分为编码器和解码器两部分。先看编码器:它用的就是刚才卷积神

经网络提取到的特征,核心作用就是在这些特征之间做注意力计算,让不同位置的特征建立起关

联。比如图片里有一头牛,编码器能让“牛头”和“牛尾”的特征产生联系,这样模型才能认出这是一

个完整的牛,而不是零散的部位。

编码器处理完之后,就把结果传给解码器了。解码器的核心作用,就是利用编码器学到的特征相关

性,把图片里的物体组合识别出来,还能画出对应的预测框。这里要提一下OQ(目标查询),它

就相当于一个给解码器“提问”的角色——比如问解码器“这张图片里有人形物体吗?”“图片右下角有

没有圆形物体?”。OQ一开始是一个全0的张量,等解码器训练完成后,它的输出会传给前馈神经

网络(也就是检测头),每个前馈神经网络专门负责预测一个物体,最后模型就会把预测出的边界

框画在原始图片上。

结合具体的张量尺寸,给大家一步步说清楚(不用记太复杂,理解流程就行):

假设我们输入的图像是一个(3,800,1066)大小的张量(3是图片通道数,800和1066是图片的

高和宽)。经过卷积神经网络处理后,图片的长和宽都会缩小到原来的32倍,变成(2048,25,

34)大小的张量(2048是特征通道数,25和34是缩小后的高和宽)。

然后这个张量会经过一个2D卷积层,把特征通道数从2048压缩到256,变成(256,25,34)的张

量;接着和同样是(256,25,34)大小的位置编码做加法,融合特征和位置信息。

之后会把这个融合后的张量变形,变成(850,256)大小的张量,传给Transformer编码器——这

里的850很简单,就是25×34(缩小后的高×宽),可以理解成“编码长度”,256就是每个特征token

的嵌入维度。编码器处理完之后,张量形状不变,还是(850,256),直接传给解码器的交叉注

意力层。

解码器的输入是一个(100,256)大小的张量,100就对应我们之前说的100个预测框(模型默认

一张图最多100个物体),256还是token的嵌入维度。解码器处理完之后,输出形状还是(100,

256),再传给前馈神经网络(检测头)。

最后检测头会输出两个结果:一个是1×91的类别预测值(91代表所有可能的物体类别,包括背

景),另一个是1×4的预测框坐标(对应预测框的位置和大小)。

这里补充下和之前“司机-乘客调度”一致的逻辑:我们可以构建一个,矩阵的行对应100个预测框,

列对应图片中的真实物体,矩阵里的每一个数值,就代表“第i个预测框匹配第j个真实物体”的总损

失(包含分类损失和回归损失)。通过二分图匹配算法,找到让整体损失最小的一对一匹配方式,

直接确定每个真实物体对应的最优预测框,这样就不用再做NMS处理了。

image.gif

预测头这里其实有两个并行的小网络:一个负责预测物体的类别,另一个负责预测边界框的坐标,

两者独立输出,最后合并成最终的检测结果。

Object Query(oq)是一组可学习的张量,它是解码器的输入,而不是编码器的输出。 你可以把

它理解成解码器提前准备好的一批"问题"——比如"图里有没有物体?在哪?是什么?"——解码器

带着这些问题去查询编码器提炼出的图像特征。 oq 的初始值是零,但它附带一个可学习的位置编

码,用来区分不同的查询槽位。

位置编码方面,在编码器里,每一层的自注意力计算中,位置编码都会加到 K 和 Q 上;在解码器

里,每一层交叉注意力的 K(来自编码器的输出)也会加上对应的位置编码,而 oq 本身就扮演了

解码器 Q 的位置编码角色。 并且这个加法在编码器和解码器的每一层都会重复做,一共各做 6

次。

解码器的每一层并不是从零开始的,它会把上一层输出的预测结果(物体的类别和位置)以残差连

接的形式传入下一层,相当于"带着上一轮的结论继续优化"。 这样做的好处是,预测结果可以在每

一层被逐步精细化。

举个例子:第一层解码器可能只能模糊地感知到"图里有个人";到了第二层,结合了更多上下文信

息,发现"这个人站在画面右侧";到了第三层,进一步细化,识别出"这个人正在举着双手"。 每一

层都在前一层的基础上往前推进一步,最终得到更准确的检测结果。

image.gif


目录
相关文章
|
1天前
|
数据采集 人工智能 计算机视觉
人工智能|YOLOv1的简单介绍
YOLOv1将输入图像划分为7×7网格,每个网格单元预测2个边界框(BBOX)及对应置信度,并输出20类概率。通过中心点归属、相对坐标偏移与归一化,实现端到端实时目标检测。(239字)
41 3
|
1天前
|
人工智能 机器人 芯片
人工智能|YOLOv8实战
本内容为安全帽检测实战项目,基于YOLOv8模型,涵盖Kaggle数据获取、自定义yaml配置、模型训练(yolo_train.py)与测试(yolo_test.py),并提供服务器(FastAPI+Docker)、边缘(Jetson+TensorRT)及国产嵌入式(RK3588+RKNN)三类部署方案,支持工业场景实时智能识别。(239字)
44 0
|
1天前
|
存储 调度 芯片
《OpenClaw边缘轻量化部署的核心技术与实践》
本文针对OpenClaw原生云端微服务架构与边缘设备极端资源约束之间的本质矛盾,指出简单裁剪策略的局限性,提出从底层进行全面架构重构的轻量化核心思路。文章系统阐述了微服务转单体、计算图动静结合优化、算子级精细化调优、按需内存管理、混合精度量化与知识蒸馏等关键技术,同时介绍了任务特定裁剪、硬件加速适配与跨平台统一抽象层的实现方法。
|
1天前
|
弹性计算 监控 Java
Maven 并行构建配置:-T 4C 提速 4 倍实战
本文深入讲解了 Maven 并行构建的核心原理和实战技巧,包含 -T 参数详解、模块并行化改造、性能监控与分析等企业级最佳实践。通过真实案例展示了如何将多模块项目的构建时间从 45 分钟缩短到 11 分钟(提升 4.1 倍),提供完整的性能测试脚本和优化检查清单。掌握这些技能,你将能够充分利用多核 CPU 加速 Maven 构建。适合 Java 开发者、架构师、DevOps 工程师阅读。
|
1天前
|
人工智能 自然语言处理 Python
人工智能|BERT的简单介绍
BERT(2018年谷歌提出)是基于Transformer编码器的双向预训练语言模型,通过掩码语言建模(MLM)和下一句预测(NSP)任务学习深度上下文语义,在文本分类、问答、NER等理解型任务中表现卓越。
42 1
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能 |手算CLIP模型
本文详解CLIP模型原理:突破传统CNN需重新训练的局限,通过4亿图文对联合训练文本与图像编码器,实现零样本迁移。利用对比学习对齐多模态特征,支持图文检索、零样本分类等应用,让AI像人一样理解未见过的概念。(239字)
35 3
|
1天前
|
数据采集 机器学习/深度学习 人工智能
人工智能|YOLOv1的损失函数和非极大值抑制
YOLOv1将图像划分为7×7网格,每格预测2个边界框(共98个),含中心点、宽高、置信度及20类概率。损失函数由坐标(加权5)、置信度(含/不含物体分权重)和分类三部分构成,均采用带平衡系数的均方误差,并以IoU为核心匹配与评估依据。(239字)
35 1
|
1天前
|
机器学习/深度学习 自动驾驶 PyTorch
PyTorch深度学习实战 |SegNet
CamVid_11是面向自动驾驶的语义分割数据集,含700+张精准标注图像,划分为训练/验证/测试集。涵盖道路、车辆、行人等11类场景目标(含背景共12类),支持SegNet等模型训练与评估。
37 0
|
1天前
|
人工智能 自然语言处理 计算机视觉
人工智能|大白话Meshed-Memory Transformer
M2Transformer是一种图像描述生成模型,由三部分构成:骨干编码器(Faster R-CNN)提取区域特征;记忆增强编码器(Transformer)对特征进行语义细化;网格解码器(Transformer)将增强特征转化为自然语言描述。结构清晰、层次分明,兼顾准确性与可解释性。(239字)
42 1
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能|大白话GPT
GPT-1是首个基于Transformer解码器的生成式预训练模型,采用自回归方式逐词生成文本:以起始,依上下文预测下一词,循环直至。其核心为12层Decoder-only架构,通过掩码自注意力实现单向语言建模,并支持分类、蕴含等下游任务微调。(239字)
37 0