| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 经典文献阅读之--Deformable DETR -> 正文阅读 |
|
[人工智能]经典文献阅读之--Deformable DETR |
0. 简介已经好久不写深度学习相关的博客了。但是我觉得DETR值得我重新时期来进行详细介绍。Deformable DETR作为这两年来最有名的DETR变种之一,当然代码量也是比较多的。这里我们从论文到代码来详细分析Deformable DETR的精华之处。最近两年时间从Attention到NAS再到Transformer,视觉检测行业被Transformer拉到了一个新的高度。而DETR作为Transformer中近两年备受关注的方法,也吸引了很多人争相的去改动。其中比较有名的就是Deformable DETR。DETR 提出在目标检测方法中去除人为组件,也可保持优异性能。但由于 Transformer 注意力模块只能有限地处理图像特征图,它的收敛速度就比较慢,特征空间分辨率有限。为了缓解这些问题,作者提出了 Deformable DETR,其注意力模块只会关注目标框周围少量的关键采样点。Deformable DETR 能够取得比 DETR 更优异的性能(尤其在小物体上)。在 COCO 基准上大量的实验证明了该方法的有效性。 1. 文章贡献目前的目标检测都使用了很多人为组件,比如 anchor 生成、基于规则的训练目标分配机制、NMS 后处理等。而 Carion 等人提出了 DETR 来去除人为组件,第一次构建了一个完全端到端的目标检测器。利用一个简单的结构,将 CNN 和 Transformer 编码器-解码器结合起来使用。但是DETR也有几个问题:(1) 需要更长的训练时间来收敛。例如,在 COCO 基准上,DETR 需要500个 epochs 才能收敛,要比 Faster R-CNN 慢了10-20倍。(2) DETR 对小目标检测表现相对较差。当前的目标检测器通常使用多尺度特征,从高分辨率特征图上可以检测小目标。而对 DETR 来说,高分辨率特征图意味着高复杂度。这些问题主要可以归结为 Transformer 缺乏处理图像特征图的组件。Transformer 编码器的注意力权重的计算,相对于像素个数来说是平方计算的。因此,要处理高分辨率特征图,其计算量是非常高的,内存复杂度也是非常高的。 而Deformable DETR,通过下述的方法加快了 DETR 的收敛速度,并降低高复杂度问题。
2. Transformer在讲Deformable DETR之前,我们需要先了解一下Transformer和DETR。这一节我们主要通过self-attention来介绍Transformer中最主要的Q、K、V三个参数,分别对应查询向量(Query)、键向量(Key)、值向量(Value)。
具体步骤为:
2.1 将张量引入图景我们已经了解了模型的主要部分,接下来我们看一下各种向量或张量(译注:张量概念是矢量概念的推广,可以简单理解矢量是一阶张量、矩阵是二阶张量。)是怎样在模型的不同部分中,将输入转化为输出的。 像大部分NLP应用一样,我们首先将每个输入单词通过词嵌入算法转换为词向量。每个单词都被嵌入为512维的向量,我们用这些简单的方框来表示这些向量。 2.2 什么是查询向量、键向量和值向量向量?它们都是有助于计算和理解注意力机制的抽象概念。请继续阅读下文的内容,你就会知道每个向量在计算注意力机制中到底扮演什么样的角色。 计算自注意力的第二步是计算得分。假设我们在为这个例子中的第一个词“Thinking”计算自注意力向量,我们需要拿输入句子中的每个单词对“Thinking”打分。这些分数决定了在编码单词“Thinking”的过程中有多重视句子的其它部分。 这些分数是通过打分单词(所有输入句子的单词)的键向量与“Thinking”的查询向量相点积来计算的。所以如果我们是处理位置最靠前的词的自注意力的话,第一个分数是q1和k1的点积,第二个分数是q1和k2的点积。 最后,由于我们处理的是矩阵,我们可以将步骤2到步骤6合并为一个公式来计算自注意力层的输出。 3. Multi-head Transformer这一节主要围绕Transformer 的 Multi-head 注意力。通过增加一种叫做“多头”注意力(“multi-headed” attention)的机制,论文进一步完善了自注意力层,并在两方面提高了注意力层的性能: Transformer中Self-Attention以及Multi-Head Attention详解 1.它扩展了模型专注于不同位置的能力。在上面的例子中,虽然每个编码都在 z 1 z_1 z1?中有或多或少的体现,但是它可能被实际的单词本身所支配。如果我们翻译一个句子,比如“The animal didn’t cross the street because it was too tired”,我们会想知道“it”指的是哪个词,这时模型的“多头”注意机制会起到作用。 2.它给出了注意力层的多个“表示子空间”(representation subspaces)。接下来我们将看到,对于“多头”注意机制,我们有多个查询/键/值权重矩阵集(Transformer使用八个注意力头,因此我们对于每个编码器/解码器有八个矩阵集合)。这些集合中的每一个都是随机初始化的,在训练之后,每个集合都被用来将输入词嵌入(或来自较低编码器/解码器的向量)投影到不同的表示子空间中。 但是,前馈层不需要8个矩阵,它只需要一个矩阵(由每一个单词的表示向量组成)。所以需要把这八个矩阵压缩成一个矩阵,可以直接把这些矩阵拼接在一起,然后用一个附加的权重矩阵
W
O
W^O
WO与它们相乘。 3.1 使用位置编码表示序列的顺序到目前为止,我们对模型的描述缺少了一种理解输入单词顺序的方法。 为了解决这个问题,Transformer为每个输入的词嵌入添加了一个向量。这些向量遵循模型学习到的特定模式,这有助于确定每个单词的位置,或序列中不同单词之间的距离。这里的直觉是,将位置向量添加到词嵌入中使得它们在接下来的运算中,能够更好地表达的词与词之间的距离。(这一点在Vision Transfomer中也很重要)
原始论文里描述了位置编码的公式(第3.5节)。你可以在 4. DETRDETR 构建于 Transformer 编码器-解码器之上,结合使用了匈牙利损失,该损失通过二分匹配为每个 ground-truth 边框分配唯一的预测框。李沐的B站账号中也对DETR进行了详细的学习和讲述。 DETR 论文精读【论文精读】 DEtection TRansformer,其大大简化了目标检测的框架,更直观。其将目标检测任务视为一个图像到集合(image-to-set)的问题,即给定一张图像,模型的预测结果是一个包含了所有目标的无序集合。 …详情请参照古月居 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 0:41:26- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |