非极大抑制(Non-Maximum Suppression,NMS)

在进行目标检测的时候同一个物体可能存在好几个预测框,那我们通过非极大抑制来进行选取最优的框,去抑制那些冗余的框,NMS选择过程如下图所示

非极大抑制(Non-Maximum Suppression,NMS)_第1张图片

 

 

非极大抑制(Non-Maximum Suppression,NMS)_第2张图片

NMS伪代码流程如上图所示:先看红色框中的

B表示初始的预测框的list

S包含了对应的预测框的分数

N_t 是NMS的门限值,  

流程如下:

如果B不为空则进行一下循环

将B中的预测框按分数从大到小排序

将最大的S对应的预测框存于M中,

再将B中所有的预测框和M_i做IOU计算,如果大于N_t,

将B中剔除M,M存于D这个空list中,

一轮结束,再循环以上流程。

最终D中就是保留下来的最优值预测框

S_i表示为:

如上图绿框中,在SOFT_NMS中,不是单纯的将s设置为零,而是通过得分最大的预测框M和B中的每一个框的IOU输出的函数F得到S_i.那么进行最后输出的就不是零,而是最终的S_i..

1. 线性加权如下公式所示:

考虑到上式是不连续的,并且当达到N_t的NMS阈值时会施加突然的惩罚, 如果惩罚函数是连续的,那将是理想的,否则它可能导致检测结果的排序列表的突然改变(集合D中的score出现断层跳跃现象)。所以s_i的更新公式修改为如下

2. 高斯加权(大部分实验中采用的式子):

这样就避免了检测结果中的score会出现突然间的跳跃现象。

该NMS在DIoUloss一文中提出,在nms过程中采用DIoU的计算方式替换了IoU,原始的NMS,IOU被用来抑制冗余检测盒,其中重叠区域是唯一的因素,在有遮挡的情况下常常有错误的抑制,而DIoU的计算考虑到了两框中心点位置的信息,故使用DIoU进行评判的nms效果更符合实际,效果更优。

如下如所示:

在这里插入图片描述

CmBN

批规范化(Batch Normalization,BN):在minibatch维度上在每次训练iteration时对隐藏层进行归一化。BN在2015年被提出,能有效提升网络收敛的稳定性和速度.在训练的每次iteration,BN会对隐藏层神经元的激活值做规范化(减均值,除标准差,这个均值和标准差是对当前的minibatch求解得到的)。简而言之,BN的思想就是将激活前隐层的值x变为BN(x),x减去均值除以标准差,这样隐层状态不再发散,之后的激活值也更规范,但有时候处理完之后的分布不一定是我们想要的(这样的规范反而会使网络表达能力下降),所以乘上缩放系数γ,加上偏移β

公如图所示:

其中,μ为原始特征的均值、σ为原始特征的标准差(方差)。

它会将原始数据映射到均值为0、标准差为1的分布上(高斯分布/正态分布)

非极大抑制(Non-Maximum Suppression,NMS)_第3张图片

如图可以看出,当batch大小为16以上的时候各个曲线的准确率是最稳定的,但并不是所有网络都适合batch_size大于等于16.这就会导致如图所示的很多曲线的在小于16的时候准去率下降很快。但是CBN随着batch的减小,精确率下降的很小。其权重变化可以用泰勒级数拟合出来,因此通过基于泰勒多项式的拟合来补偿网络权重的变化,从而可以准确地估计统计量,并可以有效地应用批次归一化。BN就是仅仅利用当前迭代时刻信息进行norm,而CBN在计算当前时刻统计量时候会考虑前k个时刻统计量,从而实现扩大batch size操作。同时作者指出CBN操作不会引入比较大的内存开销,训练速度不会影响很多。

在网络的输入的时候,每个输入都是不统一的,就会导致,在梯度下降的时候不会一直向最小的地方迭代,导致梯度下降的速度变低。BN做的事情就是将每层输入都会化为标准分布的样子。好处就是可以用大的学习率提到速度,也可以防止过拟合。CmBN的做法和前面两个都不一样,其把大batch内部的4个mini batch当做一个整体,对外隔离。CBN在第t时刻,也会考虑前3个时刻的统计量进行汇合,而CmBN操作不会,不再滑动cross,其仅仅在mini batch内部进行汇合操作,保持BN一个batch更新一次可训练参数。

你可能感兴趣的:(深度学习,深度学习)