邢台网站制作市场互联网创业项目有哪些
web/
2025/9/30 3:21:33/
文章来源:
邢台网站制作市场,互联网创业项目有哪些,做网站视频背景,公司手机app开发公司1 DETR算法概述 ①端到端 ②Transformer-model
之前的方法都需要进行NMS操作去掉冗余的bounding box或者手工设计anchor#xff0c; 这就需要了解先验知识#xff0c;增加从超参数anchor的数量#xff0c;
1.1 训练测试框架
一次从图像中预测n个object的类别 训练阶段我们…1 DETR算法概述 ①端到端 ②Transformer-model
之前的方法都需要进行NMS操作去掉冗余的bounding box或者手工设计anchor 这就需要了解先验知识增加从超参数anchor的数量
1.1 训练测试框架
一次从图像中预测n个object的类别 训练阶段我们将一张图像喂入DETR模型会得到100个bounding box并且得到这些预测框的类别信息和坐标信息 100个是超参数因为大部分的图像中的object的数量不会超过100个 通过label我们知道图像中有2个object 然后使用匈牙利算法从预测出的100个候选框中筛选出2个预测框与两个标注框一起计算损失然后反向传播优化模型参数 测试阶段通过网络预测出100个预测框把这100个预测框的置信度去和阈值进行比较大于阈值的预测框保留。
这样在DETR里面是没有用到anchor也没有NMS操作的
算法的两个重点一是基于集合的全局损失通过二分类匹配得到与标注框匹配的独一无二的损失二是引入encoder-decoder框架 object queries是可学习的参数通过他的尺寸指定输出的预测框的个数在transforme中输出的token个数是等于输出的token个数
没有固定的框架只要框架能够支持这些就能支持DETR CNN位置编码encoder-decoderMLP
2 DETR模型结构讲解
inference ①图像预处理输入(batch_size,3,800,1066) ②经过CNN的backbone得到feature map是(batch_size,2048,25,34)下采样了32倍channel数是2048 ③特征图再经过一个1x1的卷积输入的通道数是2048输出的通道数是256这个卷积层的目的就是减少channel数输出(batch_size,256,25,34) ④维度flatten得到(batch_size,256,850) ⑤再把维度调换一下得到(850,batch_size,256)850就是后面transformer的token的个数256就是每个token的特征向量的长度 ⑥特征图(850,batch_size,256)和位置编码都要传入encoder中并且位置编码需要在每个多头自注意力层里都要加到key和query上这就和标准的transformer不一样了。对比标准的transformer结构位置编码是直接加到输入上的但是DETR的encoder的位置编码在每个堆叠的encoder-decoder中都要使用位置编码 ⑦query的初始值是0(100,256)object query也是(100,256)encoder的输出包含了图像提取的全局信息通过两个检测头得到预测框的坐标和类别 ⑧decoder的下面部分可以理解为在学习anchor特征 decoder的上面部分可以理解为在得到encoder输出的全局信息后以及anchor的特征基础上学习和预测bounding box的坐标和目标的类别 代码 输入包括了两个参数①src:从backbone里面得到的 image features ②pos 就是位置编码
两种位置编码方法 可以二选一 src做dropout和跨层连接模拟resnet src2 是FFN层 再经过relu decoder: 参数①tgtqueries (100,256) ②memory:就是encoder的输出 (850,batch_size,256) ③pos:位置编码 (850,batch_size,256)
④query_pos就是Object queries (100,256)
①首先用with_pos_embed将queries和Object queries相加得到k,qv就是queries ②然后对q,k,v进行Self-attention操作 ③dropout和残差 ④linear_norm1覆盖tgt ⑤下一个query等于tgt加上Object queries下一个k等于encoder输出的memory加上位置编码下一个v就等于encoder输出的memory再进行Multi-head Self-attention得到tgt2 ⑥dropout和残差 ⑦linear_norm2覆盖tgt ⑧FFN层包括一个全连接层一个relu激活层一个dropout一个全连接层输出tgt2 ⑨dropout和残差 ⑩linear_norm3
最终输出 (batch_size,100,256) 训练阶段是(6,batch_size,100,256) 因为堆叠了6个encoder-decoder一次得到了6个 两个检测头分别预测类别和bounding box的坐标 检测类别的FFN只是一个全连接层92是因为coco数据集有91个类别再加一个背景类别 检测bounding box的坐标的FFN是一个MLP包括3个全连接层前两个全连接层的输入和输出尺寸都是256第3个的输入是256输出是44是bounding box的(x,y,w,h)因为是需要相对坐标所以做一个sigmoid归一化(0,1)
在测试阶段设置一个类别置信度阈值对于100个bounding box取置信度最大的那个类作为bounding box的类别
3 DETR损失函数 训练阶段能从网络中得到输出是一个字典包括了3个部分
pred_logits和pred_boxes是decoder输出的类别预测和坐标预测结果(batch_size,100,92)和(batch_size,100,4) batch_size这里被设置为2aux_outputs是decoder的5个中间层的输出结果中间层的输出和最终的decoder的检测头是一样的 要往矩阵中填的是预测框与真实的损失其中包括两个部分前半部分是类别损失后半部分是坐标损失 c i c_i ci不为空表示不计算背景的损失 outputs是预测值targets是标注值先把outputs中的预测类别提取出来即out_prob(2,100,92) 2是batch_size100是100个预测框92是类别flatten为(200,92) 第62行把标注里面的类别取出来可以看到第一张图中有两个类别分别是第82和第79个类别第二张图中有4个类别分别是第1、1、34、1个类
第68行要从预测的200个bounding box中提取出对应的损失绿色和紫色分别表示第1和2张图中的类别损失取负号就是公式的前半部分 匈牙利算法损失的第二部分是用来给bounding box打分的传统的L1损失会存在问题对于不同尺度的box计算的损失是相似的为了缓解这一问题采用L1损失和GIoU损失的线性结合 第59行从预测结果中提出坐标部分(2,100,4)flatten成(200,4) 第63行从targets中提出两张图像的标注坐标
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84228.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!