paper:https://arxiv.org/pdf/2005.12872.pdf
code:GitHub - facebookresearch/detr: End-to-End Object Detection with Transformers
近年,transformer开始大量从NLP引入计算机视觉,使得很多工作有了新的方向,本篇paper是第一篇端到端的将transformer引入目标检测和全景分割的工作,我对这个领域也没有那么熟悉,算是一起扫盲了,如果有新的idea,可以尝试复现一波,本文将按照paper的结构进行叙述(本篇paper解读只是占个坑,我对DETR并不熟,所以描述的并不好,等我阅读完最近的其他熟悉的paper后再过来填坑,如果有阅读的本文的同学可以适当的参考,我基本上是按照原文paper的翻译和理解写的)。
1、abstract
paper提出了一种将目标检测视为直接接种预测问题的新方法,简化了整个检测流程,有效的消除了手工设计组件的要求,比如nms和anchors的生成。paper提出的新的框架主要部分称之为Detection transformer或者DETR,是一种基于集合的全局损失函数,损失函数函数通过二分匹配和transformer的编码器和解码器的体系结构来强制进行唯一的预测,给定固定的学习对象一个查询的集合,DETR会考虑对象与全局图像上下文之间的关系,并直接运行输出最终的预测集合,DETR在coco上直接对标的是faster rcnn,并且DETR可以很简单迁移到全景分割等领域,不依赖于其他的库。
我要在这个位置给自己扫一下盲,然后再谈DETR这篇paper,本小节我是看的参考博客写的,我本人没有看过transformer的原始paper。我之前也没有接触过transformer,后文将根据作者提供的源码code进一步分析其实现(整个代码分析太复杂了,参考了别人的代码和博客写起来也很困难,每天写一点,然后每天将前面写错的再补齐一下)。
本小节参考博客:详解Transformer (Attention Is All You Need) - 知乎
1、什么是transformer
transformer抛弃了cnn和rnn,整个网络结构完全由attention机制组成,更准确的来讲,transformer仅由self-attention和feed forward neural network组成,一个基于Transformer的可训练的神经网络可以通过堆叠Transformer的形式进行搭建,transformer本质是一个encoder和decoder的结构:
其中,编码组件部分由一堆encoder构成,解码器也是由相同数量的解码器组成,如下图所示:
encoder的详细结构组成:数据首先经过self-attention的模块得到一个加权后的特征向量Z,其表达式如下:
这个Attention(Q,K,V)就是加权后的特征向量,得到这个Z后,将其送往encoder的下一个模块,即Feed Forward Neural Network,这个模块共有两层,第一层是激活函数RELU,第二层是一个线性激活函数,则将这个模块表示为:
则encoder的结构图如下图所示: