【论文阅读】【2d目标检测】set prediction的目标检测算法总结

目标的目标检测算法大都依赖于大量放置预定义的anchors,即使一些anchor free的算法也是通过gt内部的点来预测proposals。这样的通病是需要用nms处理大量的重叠框来达到dense to sparse的目的。那么,能不能有一个检测器直接暴力预测一个集合的candidate 然后对于这些candidate与gt进行一一匹配随后计算loss呢?
随着算力的提升,我们发现这样的做法是可以的。
下面便介绍set prediction 的一些论文:

  1. DETR
  2. Deformable DETR
  3. Sparse RCNN

DETR

这篇文章开始目标检测领域引入了transformer。
在这里插入图片描述
很简单的想法,就是把图像放进backbone中进行卷积 输出下采样的特征图 随后对这个特征图进行reshape处理,加上位置编码 便对所有的pixel level的feature进行自注意力机制的编码,将进行了encode后的feature再与初始化定义的object queries进行cross attention处理。对输出的query输送到检测头里面,对object进行检测。
文章检测出来的object显然是query数目的。那么对于得到的这些proposals我们便需要与GT进行一一的匹配。match过程作为一个函数进行优化 注意 首先我们需要对于GT进行一个补充
在这里插入图片描述
随后 我们便得到了一对一的proposal与GT 对他们我们计算Hungarian loss 即类似faster rcnn的loss计算
在这里插入图片描述

Deformable DETR

这篇文章是对于DETR的改进,作者认为DETR的训练过程是在是太漫长了 往往需要经过几百个epoch的训练才能收敛 这主要是因为DETR计算了特征图上每一个点与其他点的关系,这样的计算是冗余的。其次DETR对于小目标的减小效果也不太好 这是很容易理解 因为相比之前的检测网络都是用了FPN的 这里只用一层feature map 显然不是对所有尺寸的目标都能有很好的检测效果的。本文就是从这个目标出发的。
这篇文章 作者用了变形卷积
在这里插入图片描述
对于feature map上每一个pixel 我们计算它的偏移量 偏移到的feature pixel 我们把它们作为transformer 的value 进行编码 他们的权重也是有query经过一个linear加softmax层来进行计算得到的。
这样 我们的计算量便大大减少 使得每个feature map上的pixel仅仅与经过计算的偏移点相关。
在这里插入图片描述
针对不同scale的feature map 我们还计算了分scale的feature
在这里插入图片描述
decode则是用初始化的object query与经过自编码后的多层的feature map进行cross attention。
decode中每一层的query是经过上一层编码refine后的query
在这里插入图片描述
这里的loss计算也是类似DETR的set to set形式 没有后续的nms处理。

Sparse RCNN

这便是一个更加简单的网络
backbone用的是resnet 生成特征图后 作者提出了可学习的proposal box 用4个0-1之间的数来代表这个box 和可学习的box feature 256维度的一个向量 开始都是对他们进行一个初始化
在这里插入图片描述
对于选择box对应特征图上的roi特征 我们采用roi align的操作,首先对于预义的feature我们直接进行self attention处理后 分别于roi align选择出来的feature进行iteract,操作细节如下:
在这里插入图片描述
输出obj维度的feature 并利用他输入到head中预测box 把box作为可学习的box 进行下一轮的迭代。
这样我们预测出数目大小是预定义的box 同样进行一个set to set的loss 计算。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 显著点的检测 Itti的A Model of Saliency-Based Visual Attention for Rapid Scene Analysis (TPAMI 1999)论文是显著性检测的鼻祖论文,检测出来的是用户关注的点。 2. 显著区域的检测 侯晓迪同学在2007年发表的一篇CVPR的论文,用很简单的方法检测了显著性区域,那之后显著性检测主要以区域检测为主:Saliency detection: A spectral residual approach (CVPR 2007),虽然之后有人诟病这篇论文有不足之处,但该想法简单,推动了显著性研究的普及。侯同学靠这一篇文章再加上投稿期间的趣事,就封神了。 3. 其他经典的显著性检测方法 在那之后陆续又有一些经典的显著性检测算法被提出:https://blog.csdn.net/touch_dream/article/details/78716507 可以看这个博文。 4. 基于深度学习的显著性检测 再之后,显著性检测领域就进入了Deep Learning时代, Deep Visual Attention Prediction TIP2018 (CODE)     https://github.com/wenguanwang/deepattention Predicting Human Eye Fixations via an LSTM-based Saliency Attentive Model (CODE)     https://github.com/marcellacornia/sam CVPR2016 Shallow and Deep Convolutional Networks for Saliency Prediction (CODE)     https://github.com/imatge-upc/saliency-2016-cvpr Saliency Detection with GAN (2017)     https://github.com/imatge-upc/saliency-salgan-2017  (CODE)     https://github.com/batsa003/salgan/ (PyTorch的版本) 5. 非自然图象的显著性检测 例如,海报的显著性检测,图表的显著性检测,地理数据的显著性检测等等。
基于Transformer的目标检测算法是近年来发展起来的一种新型目标检测算法。其主要思想是将Transformer模型应用于目标检测任务中,通过对图像中的不同位置进行编码和解码,实现对目标的检测和定位。以下是两篇相关论文的简要介绍和代码实现: 1. 结构重新设计 Rethinking Transformer-based Set Prediction for Object Detection(ICCV 2021) 该论文提出了一种新的Transformer-based目标检测算法,称为Transformer Set Prediction(TSP)。TSP通过重新设计Transformer的结构,将其应用于目标检测任务中。具体来说,TSP将输入图像分成多个子区域,并将每个子区域表示为一个向量。然后,TSP使用Transformer模型对这些向量进行编码和解码,以实现对目标的检测和定位。相比于传统的目标检测算法,TSP具有更好的性能和更高的效率。 以下是TSP的代码实现: ```python import torch import torch.nn as nn import torch.nn.functional as F class TSP(nn.Module): def __init__(self, input_dim, hidden_dim, num_heads, num_layers): super(TSP, self).__init__() self.input_dim = input_dim self.hidden_dim = hidden_dim self.num_heads = num_heads self.num_layers = num_layers self.encoder_layer = nn.TransformerEncoderLayer(d_model=input_dim, nhead=num_heads, dim_feedforward=hidden_dim) self.encoder = nn.TransformerEncoder(encoder_layer=self.encoder_layer, num_layers=num_layers) self.decoder_layer = nn.TransformerDecoderLayer(d_model=input_dim, nhead=num_heads, dim_feedforward=hidden_dim) self.decoder = nn.TransformerDecoder(decoder_layer=self.decoder_layer, num_layers=num_layers) self.linear = nn.Linear(input_dim, 1) def forward(self, x): x = x.permute(0, 3, 1, 2) # 将输入的图像转换为(batch_size, input_dim, height, width)的形式 x = x.reshape(x.shape[0], x.shape[1], -1) # 将图像分成多个子区域,并将每个子区域表示为一个向量 x = self.encoder(x) # 对向量进行编码 x = self.decoder(x) # 对向量进行解码 x = x.permute(1, 0, 2) # 将输出的向量转换为(batch_size, height*width, input_dim)的形式 x = self.linear(x) # 对输出的向量进行线性变换 x = x.squeeze(-1) # 去掉最后一维 return x ``` 2. End-to-End Object Detection with Adaptive Clustering Transformer(北大&港中文) 该论文提出了一种新的End-to-End目标检测算法,称为Adaptive Clustering Transformer(ACT)。ACT通过将Transformer模型应用于目标检测任务中,实现了对图像中目标的检测和定位。具体来说,ACT将输入图像分成多个子区域,并将每个子区域表示为一个向量。然后,ACT使用Transformer模型对这些向量进行编码和解码,并通过聚类算法对编码后的向量进行聚类,以实现对目标的检测和定位。相比于传统的目标检测算法,ACT具有更好的性能和更高的效率。 以下是ACT的代码实现: ```python import torch import torch.nn as nn import torch.nn.functional as F class ACT(nn.Module): def __init__(self, input_dim, hidden_dim, num_heads, num_layers, num_clusters): super(ACT, self).__init__() self.input_dim = input_dim self.hidden_dim = hidden_dim self.num_heads = num_heads self.num_layers = num_layers self.num_clusters = num_clusters self.encoder_layer = nn.TransformerEncoderLayer(d_model=input_dim, nhead=num_heads, dim_feedforward=hidden_dim) self.encoder = nn.TransformerEncoder(encoder_layer=self.encoder_layer, num_layers=num_layers) self.decoder_layer = nn.TransformerDecoderLayer(d_model=input_dim, nhead=num_heads, dim_feedforward=hidden_dim) self.decoder = nn.TransformerDecoder(decoder_layer=self.decoder_layer, num_layers=num_layers) self.linear = nn.Linear(input_dim, num_clusters) def forward(self, x): x = x.permute(0, 3, 1, 2) # 将输入的图像转换为(batch_size, input_dim, height, width)的形式 x = x.reshape(x.shape[0], x.shape[1], -1) # 将图像分成多个子区域,并将每个子区域表示为一个向量 x = self.encoder(x) # 对向量进行编码 x = self.decoder(x) # 对向量进行解码 x = x.permute(1, 0, 2) # 将输出的向量转换为(batch_size, height*width, input_dim)的形式 x = self.linear(x) # 对输出的向量进行线性变换 x = F.softmax(x, dim=-1) # 对输出的向量进行softmax操作 x = x.reshape(x.shape[0], -1, self.num_clusters) # 将输出的向量分成多个子区域,并将每个子区域表示为一个概率分布 x = x.mean(dim=1) # 对每个子区域的概率分布进行平均 return x ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值