DETR理论

流程梳理

文章提出了一种新的模型架构,实现了端到端的输出,他不会生成很多冗余的框,从而去除了传统的nms处理,并且不需要很多的先验知识。他将目标检测任务看成是一个集合预测的问题。它很简单,在大目标检测上面比较有优势,它还很简单的可以拓展到其他的任务上面。下图是他的大致流程:

  • 首先将图片输入到CNN中进行特征提取得到特征图,并将它进行展平
  • Transformer-encoder接收输入进一步的学习全局的特征
  • Transformer-decoder进行框的输出
  • 将预测框与真实框进行匹配,进行loss计算

二分匹配与loss计算

在第四步的时候需要用到二分匹配和匈牙利算法。下面具体说说两者。

二分图相当于一个连线问题,通俗点讲,左边点集U,右边点集V,U有5个点,V有4个点,U的点只和V的点相连,不内部相连,就可以算是一个二分/二部图了。

在DETR当中我们使用的是有权值的最大匹配,所谓最大匹配就是U和V当中元素个数最少的那个集合都有唯一一个对应的边相连,而有权值就是指每个边都对应有权重。如下图示:

有权值最大匹配则是指,需要找到每个类别权重之和最大的边。那我们的DETR来说,就是找到图片中的对象所对应的权值之和最大的预测框。最大匹配和最小匹配是可以相互转化的,也就是寻找最小的权值。

匈牙利算法就是用来找到有权值的最小匹配,如果使用匈牙利算法寻找最大匹配,则需要将原来的权值进行取负的操作。第一步是先找到每一行所对应的最小值,然后每一行都减去这个最小值,则每一行至少有一个0。然后找到每一列的最小值,每一列减去一个最小值,保证每一列至少有一个0。

第二步进行循环:

  • 用尽量少的线覆盖所有的0元素
  • 判断是否需要终止循环,定义一个n(代表u或者v当中的元素数量),如果要使用n条线才能覆盖所有的0元素则停止循环,如果少于n则停止循环。
  • 对矩阵中的元素做变换,得到更多的0元素。先在所有没被线所覆盖的元素中找到最小值记为k,然后所有的元素减去k。最后还需要在线交叉的地方加上k。具体实现如下图所示。

 

最终得到结果的结果如下图所示。每个0代表一条边,然后我们需要进行筛选,保证每行每列都得有一个0。我们首先发现U3对应的地方的0为第一条边,虽然V1列还有元素0,但是如果选择U1的0,那么第三行U3就没有0元素了。接着我们忽略已经选中的0对应的行和列,继续执行上述操作,则可以找到我们需要的最小匹配。

经过上述二分匹配之后我们就能找到ground truth所对应的预测框,接着我们便可以进行loss的计算公式和下面差不多,但是DETR去掉了类别损失的对数函数而是直接使用

。损失函数主要由分类损失和框的损失组成。

其中Lbox由下图所示的公式组成

详细结构

下图是DETR的详细结构。在接受3*800*1066图片之后进行CNN提取特征得到2048*25*34的特征图,接着进行1*1的卷积操作进行通道数的调整,得到256*25*34的特征图。接着需要加入位置编码,他的维度也是256*25*34。将得到的新的特征图进行拉直,也就是展平处理,得到850*256的序列作为encoder的输入。然后decoder进行框的输出,这个时候就需要用到object queries。他是可以学习的,维度是100*256,256是和前面的256进行对应,100值得是需要输出的框的个数。将得到输出丢给全连接层,做类别和框的预测。最后就可以进行二分匹配和优化了。需要注意的是DETR的decoder摆脱了传统的自回归,他的输出是并行的,因此提高了模型的运行效率。

总结

论文主要提出了一种新的目标检测模型架构,通过使用CNN进行特征提取,transformer进行编码解码,FFN进行预测。模型去除了传统的anchor和候选框,而是在decoder的时候输出预测框,然后通过二分图最大匹配和匈牙利算法进行匹配并且进行loss的计算。模型在目标检测方向实现了端到端,ta'detade在大的目标检测上性能较好,但是小目标性能略差并且有训练时间过长的缺点。

论文地址:End-to-End Object Detection with Transformers (readpaper.com)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值