DETR方法是一种使用了Transformer的端到端的目标检测方法,也是经典目标检测算法之一,本文将用最少的话,介绍DETR算法的大致思想。之前的方法或多或少的都不要添加一下额外的步骤,进行人为干预,即使是号称端到端的YOLO系列算法,也是会生成大量冗余的框,然后需要最后加上进行非极大值抑制的步骤。
DETR算法的大致步骤如下所示:
简而言之:首先通过CNN网络提取输出图像特征,然后将特征图展平输入到transformer中进行encoder和decoder,这里transformer通过注意力机制就能够学习到图像的全局特征,。然后输出固定个数的预测框,比如100个,(输出预测框的个数是一个超参数)。将100个输出的预测框和ground truth进行匹配(这里是使用二分图匹配方法,下面再介绍),得到最匹配的n个预测框(n是ground truth的个数),然后在匹配的框中计算检测目标的loss和进行边框的回归。
上述是训练过程,预测过程前面都一样,假设生成的预测框的个数是100个,后面生成100个预测框之后,直接对置信度设置阈值,置信度大于阈值的框作为前景被留下来,剩下的作为背景
更加详细的整体框架图:
那什么是二分图匹配法呢:
首先要了解什么是二分图问题:
举个例子,x,y,z三个工人,执行a,b,c三个任务,三个工人每个都有自己最擅长的部分,这里二分图问题就是解决给工人分配任务,解决任务的效率最高
上图是根据工人执行任务案例绘制的一个矩阵,这个矩阵叫做损失矩阵,损失矩阵中的值就是损失,比如工人执行具体任务花费的时间。目前有匈牙利算法能够解决这个问题,在scipy这个库中提供了linear_sum_assignment函数来解决这个问题
上述100个预测框和2个ground truth之间匹配的问题,也可以看做是二分图问题,
a,b,c...就可以看做是100个预测框,x,y就可以看做是ground truth
DETR论文中的匹配问题就是通过直接调用匈牙利算法来解决的,匈牙利算法的细节就不介绍了,因为我也不懂,反正这也不是关键的,关键就是了解上述DTER算法的思想。
上述是对DETR算法的简要介绍,主要是介绍算法的框架结构和大致思想,想要深入学习DTER的朋友,建议去看原论文,上述内容如果对您有所帮助,麻烦给我点个赞,谢谢