[自注意力神经网络]DETR目标检测网络

一、概述

        相较于传统目标检测,DETR是一种纯端到端的网络。它不再需要NMS(非极大值抑制,用于去除多余的预测框)和生成anchor

        DETR提出了一个新的目标函数(二分图匹配),这个函数可以强制网络输出一个独一无二的预测值(没有冗余的预测框)。

二、网络结构

[自注意力神经网络]DETR目标检测网络_第1张图片

         DETR的前向流程如上图所示:使用一个CNN抽取图片的特征;将这个特征拉平;将拉平后的特征送入Transformer的encoder-decoder单元;由decoder输出预测框的信息(出框的信息是一个超参数,原文为100)利用二分图匹配的方式将Ground Truth与预测结果进行匹配,对于匹配成功的框才会进一步计算loss(没有匹配成功的框将会被标记为no object<背景类>)

        1.基于集合的目标函数

                DETR的输出是一个固定集合(固定数目)。为了在这些集合中找到正确的预测框,DETR采用了一个二分图匹配的方法来解决这个问题。具体做法是:将n个预测框和x个Ground Turth构建成一个cost matrix(代价矩阵),通过算法在其中找出代价最小的排列。

[自注意力神经网络]DETR目标检测网络_第2张图片

                        

                         矩阵中的内容为损失函数(分类Loss和框体Loss),公式即可写为:

                 这个公式的意义是:在二分图匹配的基础上计算两个loss(分类Loss和框体Loss),其中对于第一个loss,由于要与第二个loss取值范围一致,其log被去除且实验表明并不会影响结果;对于第二个loss,由于L1-Loss会对大物体敏感,所以采用generalized iou loss来计算(与物体大小无关)。

        2.整体网络框架

[自注意力神经网络]DETR目标检测网络_第3张图片

                默认图片输入大小为1066x800x3,经过卷积网络提取特征,得到输出2048x25x34;然后经过一个1x1卷积进行通道调整(降维)得到256x25x34。

                将特征拉平(850*256),并为其叠加位置编码(256x25x34)

                将序列输入Encoder中,计算自注意力

                将结果输入Decoder,进行解码输出;这里引入一个object query(一个可学习,维度为100*256),在每个decoder会先做一次object query的自注意力操作用于移除冗余框(第一个decoder可以不做)

                 将特征输入检测头(FFN-MLP),进行预测。

三、代码

[自注意力神经网络]DETR目标检测网络_第4张图片

         出自原文的DETR42最简结构

你可能感兴趣的:(神经网络,学习笔记,目标检测,神经网络,深度学习,transformer)