DETR
特点:CNN + Transformer,端到端,一次预测,二分匹配,匈牙利算法。
关键部分:
1、使用Transformer的encoder-decoder架构一次生成N个box prediction,N为一个事先设定的,远远大于一个图片中object个数的一个整数。
2、设计了bipartite matching loss,基于预测的bbox和ground truth boxes的二分图像匹配计算loss的大小,从而使得预测的box的位置和类别更接近于groundtruth。(一次性生成100个box,然后使用这100个框和groundtruth(假如为2)计算二者之间的matching loss从而确定这100个框中哪两个对应于groundtruth,决定好匹配关系后再像普通的目标检测一样去计算一个分类的loss和一个bounding box 的loss,而其余没有匹配到groundtruth的框即剩下的98个则被视为背景类)
整体结构
DETR整体结构可以分为四个部分:backbone,encoder,decoder和FFN
1、backbone
将输入图像转换为BCHW(C为2048或256)
2、encoder
- 通道压缩:使用1*1conv处理,将通道从C压缩到d,得到新的feature map。
- 转换为序列化数据:将空间的维度高宽压缩为一个维度(HW,B,256)
- 位置编码:与原Transformer有两点不同,1)DETR考虑了xy方向的位置编码,因为图像特征是二维特征,每个方向各编码128维向量,这种编码方式更符合图像特点。(vision transoformer做法简单的将其拉伸为d×HW,然后从 [1,HW] 进行长度为256的位置编码)。2)原版Transformer 只在Encoder之前使用了Positional Encoding,而且是在输入上进行Positional Encoding,再把输入经过transformation matrix变为Query,Key和Value这几个张量。但是DETR在Encoder的每一个Multi-head Self-attention之前都使用了Positional Encoding,且只对Query和Key使用了Positional Encoding。
3、decoder
DETR的Transformer Decoder是一次性处理全部的object queries,即一次性输出全部的predictions;而不像原始的Transformer是auto-regressive的,从左到右一个词一个词地输出。
两个输入
- Transformer Encoder输出的Embedding与 position encoding 之和。
- Object queries。