博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ssd网络详解之detection output layer
阅读量:4212 次
发布时间:2019-05-26

本文共 2292 字,大约阅读时间需要 7 分钟。

ssd网络详解之detection output layer

本文转载自: https://blog.csdn.net/dan_teng/article/details/81561783

闲话少说,本文基本结构:首先介绍detection output 这一层的基本理解,之后给出ssd所有代码的详细注释,最后给出caffe中该层各个参数的定义和默认值。 

detection out layer是ssd网络最后一层,用于整合预选框、预选框偏移以及得分三项结果,最终输出满足条件的目标检测框、目标的label和得分。 

输入方面,mbox_priorbox是网络各个priorbox层输出concat后的结果(priorbox解析点这里),相当于把所有预选框放到一起;mbox_loc是在预选框的基础上的偏移量;mbox_conf_flatten就是每个类别在各个框上的得分。 
输出大小为[1, 1, x, 7],其中x是最后保留的框的个数,最后一维存放的数据为: 
[image_id, label, confidence, xmin, ymin, xmax, ymax]

计算思路: 

1)对bottom层的location、confidence和priorbox进行解析,放到vector中 
2)对每个priorbox进行解码。所谓解码其实就是整合输入层。前面说到过了,输出需要给出每个目标的检测框,但是输入是预选框和偏移量,这里要做的就是计算出最终的检测框。解码需要考虑priorbox编码方式,共三种情况。

假设检测框用b表示(存储内容:b_xmin, b_ymin, b_xmax, b_ymax),预选框用p表示(存储内容:p_xmin, p_ymin, p_xmax, p_ymax),偏移量用t表示(存储内容:t_x, t_y, t_height, t_width)。 

b和p的宽高分别用x和y的最大最小值减一下得到,中心点的值用最大最小值相加除以2得到。 
那么在每种类型中,编码公式分别为:

CodeType_CORNER:

                              t = b - p(每个维度一样)

1
CodeType_CENTER_SIZE:

                             t_x = (b_center_x – p_center_x) / p_width (t_y同理)

                             t_height = log(b_height / p_height) (t_width同理)
1
2
CodeType_CORNER_SIZE:

                              t_x = (b_x – p_x) / p_width

                              t_y = (b_y – p_y) / p_height
1
2
解码时求取b的各个值就可以。如果需要添加variance的值,将t与variance相乘即可。 
以center_size编码方式为例:

               b_center_x = t_x * p_width + p_center_x

               b_center_y = t_y * p_height + p_center_y
               b_width = exp(t_x) * p_width
               b_height = exp(t_y) * p_height
1
2
3
4
如果需要添加variance:

               b_center_x = t_x *prior_variance[0]* p_width + p_center_x

               b_center_y = t_y *prior_variance[1] * p_height + p_center_y
               b_width = exp(prior_variance[2] * t_x) * p_width
               b_height = exp(prior_variance[3] * t_y) * p_height
1
2
3
4
据此分别计算出b_xmin, b_ymin, b_xmax, b_ymax即可。详细可参见代码

3) Non-Maximum Suppression非极大值抑制 

检测算法给出的box往往有很多,如下图所示,多个检测框其实框出的是一个目标,nms就是一个目标保留一个最优框。抑制的过程是一个迭代-遍历-消除的过程。 
 
(图片来源:https://blog.csdn.net/shuzfan/article/details/52711706)

给定处理前的集合:预选结合,处理后的集合keep集合

首先,将预选集合所有框按照得分高低进行排序,选中得分最高的框,从预选集合移出放到keep集合中;

接下来进行迭代: 

*从当前预选集合移出得分最高的框,用它与keep集合每个框计算交并比: 
*超过阈值说明二者重复很多,框住的应该是同一个东西,不放到keep集合中; 
*如果与keep集合中每个框交并比都小于阈值,说明当前框框住的是一个新目标,应该放到keep中。

迭代下去,直到预选集合为空,那么keep集合中留下的就是检出的所有目标的检测框。

jaccard overlap 

这里补充介绍一下ssd网络中的jaccard overlap。 
jaccard overlap其实就是交并比,简单说起来就是两个检测框重合的面积(相交的部分)除以两个检测框并在一起的面积(面积之和减去重合部分),用公式表示为
J(A,B)=|A∩B||A∪B|
J(A,B)=|A∩B||A∪B|

J为0说明两个框一点没有重合,为1说明完全重合

--------------------- 
原文:https://blog.csdn.net/dan_teng/article/details/81561783 
 

你可能感兴趣的文章
java kettle v2
查看>>
jQuery中断跳转
查看>>
Eclipse下Nodejs项目配置步骤
查看>>
SQL Server 2008 对 T-SQL 语言的增强
查看>>
查询09年1-12月的车主数据样本
查看>>
Server 2005 专用管理员连接 (DAC) 使用技巧
查看>>
实例名 (SQL Server Express)
查看>>
索引视图
查看>>
信息粒度
查看>>
模式分解
查看>>
数据和信息
查看>>
讲解MSSQL数据库中SQL锁机制和事务隔离级别
查看>>
Reporting Services 2: 参数化报表
查看>>
配置用于远程管理的报表服务器
查看>>
Sql2005 全文索引
查看>>
全文检索拾零
查看>>
sql server 2008全文索引干扰词示例
查看>>
SQL Server DATEDIFF() 函数
查看>>
关于使用表接收存储过程返回结果集的问题
查看>>
SQL Server数据库常用的T-SQL命令
查看>>