论文阅读笔记:End-to-End Object Detection with Transformers

前言

目标检测(Object Detection)如RCNN系列或YOLO系列都是使用滑动窗口的方式通过先验覆盖整幅图可能出现目标的部分来进行先验框偏移量的预测从而找到目标。

而加入Transformers后,可以得到pixel序列之间的依赖关系确定整幅图的实例关系,从而使得模型有选择地聚焦于输入的某些部分。

相比之下,Detection Transformers似乎更直接,他无需去设计检测的方法,从输入到输出实现更本质的目标检测。

Transformer介绍博客:论文阅读笔记:Attention Is All You Need
论文原文:End-to-End Object Detection with Transformers
代码下载地址: Github

Detection Transformer

整体流程

为了填补现有目标检测框架中存在的重复预测后处理步骤、anchor集合设计以及anchor与gt的分配策略等,作者提出了采用了基于transformers的编解码框架,该框架被广泛应用于序列预测。transformers中的自注意力机制使该框架非常适合于集合预测的特定约束比如移除重复预测等,自注意力机制显示的建模了序列中元素对之间的交互关系。
在这里插入图片描述
该文章提出的目标检测思路是通过CNN进行特征提取,再以特征图的通道为一向量,将 h × w h×w h×w大小的特征图转换为 h × w h×w h×w个特征向量,把特征向量集传入transformer模型来完成预测固定个数的结果,训练过程采用二分图匹配损失函数(bipartite matching loss)。

二分图匹配

二分图匹配就是将Boundingbox和Groundtruth进行匹配。模型会输出固定数量的预测box,对于预测值数量不够的情况会用 ∅ 补齐,标签的Groundtruth会和输出的值数量一致,不够的也会用 ∅ 补齐。
如下图所示:
在这里插入图片描述
直接使用集合损失(使用匈牙利算法来计算),即便预测输出同一目标多次,也只能有一个GT与之对应,类似NMS。最终模型通过训练就会学会在两边给出同样个数的无类别预测 ∅,因为如果给出一个不应该的到的输出都会受到惩罚。比如预测的两个物体和GT中的两个标签能够对应上,模型还给出第三个物体的预测,但GT中已经没有标签可以与之对应了就应该受到惩罚,因为剩下的预测应该是无类别的。这依赖于输出的预测数量必须固定且GT也应该补充到和其一致。
关于其匹配原理和代码可查看博文:算法讲解:二分图匹配【图论】

目标检测集合预测损失

目标检测中使用直接集合预测最关键的两个点是:1)保证真实值与预测值之间唯一匹配的集合预测损失。2)一个可以预测(一次性)目标集合和对他们关系建模的架构。

二分图匹配损失是真实值与预测值之间两两匹配的Loss。使用匈牙利算法来计算。匹配损失同时考虑到类别与真实值与预测值之间的相似度, y = ( c i , b i ) y=(c_i,b_i) y=(ci,bi)其中 c c c 是目标的类别, b b b 是值域在[0,1]的四维向量,bbox的中心坐标与宽高。
在这里插入图片描述
bbox损失直接使用L1loss的话,对小目标就不公平,因此使用了L1 loss 与IOU loss的组合,让loss对目标的大小不敏感。
在这里插入图片描述
损失函数的具体形式如下:
在这里插入图片描述
与常见的检测模型很相似,就是负对数似然与box损失的线性组合。其中 σ ^ \hat{σ} σ^是二分图匹配损失中求得的最优匹配。类似于faster-rcnn对负样本权重的设置,当 c i = ∅ c_i=∅ ci= 时,权重为原来的十分之一。目标与 ∅ 的匹配损失不依赖于预测值,因此是一个常量。在匹配损失中,使用概率去代替对数概率。这样是为了平衡类别预测与box预测的损失,效果更好。

网络结构

网络结构如下:
在这里插入图片描述
BackBone:CNN,输入 x i m g ∈ R C 0 ∗ H 0 ∗ W 0 x_{img}∈R^{C_0*H_0*W_0} ximgRC0H0W0,输出 f ∈ R C ∗ H ∗ W f∈R^{C*H*W} fRCHW H = H 0 / 32 , W = W 0 / 32 H=H_0/32,W=W_0/32 H=H0/32W=W0/32
Transformer相关内容(encoder.,decoder,FFNs)可查看前一篇博文:论文阅读笔记:Attention Is All You Need
附加的解码loss:使用附加的loss对模型的训练有帮助,每一个decoder层后面加上FFNs和匈牙利loss。所有FNNs共享权重。使用共享的 layer-norm 去归一化不同decoder层的输出。

Pytorch Inference Code

import torch
from torch import nn
from torchvision.models import resnet50

class DETR(nn.Module):
	def __init__(self, num_classes, hidden_dim, nheads,
				 num_encoder_layers, num_decoder_layers):
		super().__init__()
		# We take only convolutional layers from ResNet-50 model
		self.backbone = nn.Sequential(*list(resnet50(pretrained=True).children())[:-2])
		self.conv = nn.Conv2d(2048, hidden_dim, 1)
		self.transformer = nn.Transformer(hidden_dim, nheads,
		num_encoder_layers, num_decoder_layers)
		self.linear_class = nn.Linear(hidden_dim, num_classes + 1)
		self.linear_bbox = nn.Linear(hidden_dim, 4)
		self.query_pos = nn.Parameter(torch.rand(100, hidden_dim))
		self.row_embed = nn.Parameter(torch.rand(50, hidden_dim // 2))
		self.col_embed = nn.Parameter(torch.rand(50, hidden_dim // 2))

	def forward(self, inputs):
		x = self.backbone(inputs)
		h = self.conv(x)
		H, W = h.shape[-2:]
		pos = torch.cat([
		self.col_embed[:W].unsqueeze(0).repeat(H, 1, 1),
		self.row_embed[:H].unsqueeze(1).repeat(1, W, 1),], dim=-1).flatten(0, 1).unsqueeze(1)
		h = self.transformer(pos + h.flatten(2).permute(2, 0, 1),self.query_pos.unsqueeze(1))
		return self.linear_class(h), self.linear_bbox(h).sigmoid()

可以看出Positional Encoding(位置编码)是torch.rand(50, hidden_dim // 2)随机生成出来的。而不像上一篇论文中提到的使用COS/SIN函数来分割出来。

end-to-end object detection with transformers,即使用transformers进行端到端的目标检测。在传统的目标检测算法中,通常需要使用两个步骤:提取特征和应用对象分类器。然而,这种两步骤的方法可能存在一些问题,如信息丢失和局部优化。 为了解决这些问题,最近一些研究人员提出了使用transformers模型进行端到端的目标检测transformers是一种用于自然语言处理任务的强大模型,但其也可以应用于计算机视觉领域。 使用transformers进行端到端的目标检测可以直接输入图像,并通过transformers网络来同时提取特征和进行目标分类。这种方法的主要优势是能够处理全局信息,并且不需要使用传统的手工设计特征提取器。 使用transformers进行目标检测的具体过程通常包括以下几个步骤:首先,将图像输入transformers网络,以获得一些中间特征表示。然后,使用这些特征表示来预测目标的位置和类别。最后,根据预测结果来生成最终的目标检测结果。 与传统的目标检测算法相比,使用transformers进行端到端的目标检测具有一些优点。首先,这种方法可以处理全局信息,因此可以更准确地检测到目标。其次,由于没有使用手工设计的特征提取器,这种方法可以更好地适应不同类型的目标。此外,transformers模型具有许多预训练模型可供使用,这可以节省训练时间并提高检测性能。 总结来说,使用transformers进行端到端的目标检测是一种新的方法,它可以同时处理特征提取和目标分类,并能够更准确地检测目标。随着研究的进展和发展,我们相信这种方法将在目标检测领域有着广阔的应用前景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值