目标检测基础

一. NMS(非极大值抑制)

在目标检测网络中,会生成许多重复地目标框,使用NMS去除冗余的目标框,保留置信度高的目标框。

(1)在Bounding Box列表中,首先选择置信度最高的目标框A。

(2)将与A的IoU超过阈值的目标框从Bounding Box中去除,并将A标记并移入保留框列表中。

(3)重复(1)和(2),知道Bounding Box列表清空为止。

对每个分类,都需要使用一次上述流程,直到Bounding Box清空为止。

(图片来自https://www.cnblogs.com/makefile/p/nms.html)

目标检测基础_第1张图片

然而,单纯使用NMS去选取目标框,可能会导致两个相同类别的物体,由于IoU较大,较小置信度的目标框被删除而导致漏检。

下图中绿色框由于与红色框IoU较大,但置信度低于红色框,导致置信度被归零。

目标检测基础_第2张图片

Soft-NMS就是针对这种情况出现的。

原NMS算法中,当IoU较大时,小置信度的框的置信度会直接置零:

float

Soft-NMS算法中,当IoU较大时,小置信度的目标框的得分,会被重置,重置方法有两种:

线性加权法:

float

高斯加权法:

float

当目标框与当前选定的最大置信度的目标框重合度越高,分数被扣除的越多。

这样,当选取的阈值合适时,就会降低同类目标由于IoU较大而被误删的概率。

 

二. RCNN系列模型简介

  1. RFCN

    (1)Selective Search提取约2000个建议框。

    (2)框周围用平均像素值填充添加16个像素边框,再resize为227x227。

    (3)预处理后,用AlexNet为每个框提取4096个特征。

    (4)使用20个SVM(20个分类),获取2000x20个得分。

    (5)20列做NMS操作。

    (6)对建议框做回归操作。

   2. Fast RCNN

    (1)Selective Search提取约2000个建议框。

    (2)对整张图卷积得到feature map。

目标检测基础_第3张图片

(图片来自吴恩达网易课堂-卷积滑窗)

    (3)找到每个候选框的feature map中的映射patch。

    (4)特征输入softmax代替svm。

    (5)Smooth L1 Loss回归调整候选框位置。

3. Faster RCNN

    (1)整图CNN特征提取。

    (2)RPN网络得到候选框信息。

    (3)候选框特征进行分类。

    (4)回归调整。

      这篇写的比较详细:https://zhuanlan.zhihu.com/p/30720870

流程如下:

(1)首先经过原始特征提取网络生成特征图,根据缩放比例,将特征图上每个点映射到原图上,并生成尺度大小及宽高比不同的anchors k个。

(2)将与ground truth的IoU大于0.7的作为正样本,小于0.3的作为负样本,若样本不均衡,可使用难例挖掘。

(3)再讲结果输入一个二分类器及一个bbox的回归器中。

(4)将概率较大的region proposal输入fast-rcnn中。

      在Faster RCNN中,RPN网络的两个分支,一个是获取是否有目标,一个获取候选框距离最近的目标中心点的偏移量和宽高。

(可以把网络看成学习了9个前景/背景打分器,9个线性回归器)

      当特征图为60 x 40时,生成了60 x 40 x 9 个anchors,经过RPN训练后,使用NMS筛选后,留下的约2000个预测框用于 Fast-rcnn的输入。

https://blog.csdn.net/weixin_42273095/article/details/81699352

模型训练

模型整体训练流程:

(1)先训练RPN

(2)固定RPN训练Faster-RCNN

(3)固定Faster-RCNN训练RPN

(4)重复1.2.3

RPN训练细节:

1)每个mini-batch选取一张图片中256个proposal,正负样本比例为1:1。

2)若正样本不足,选取负样本代替。

3)训练RPN时,共享的卷积层采用迁移学习,剩下的使用高斯分布(标准差为0.01)初始化。

 

三、ROI Pooling and ROI Align

ROI Pooling

1)一直原图为800x800, CNN缩小32倍后为25x25

2)若得到原图ROI为655x655,映射到特征图中为600/32下取整为20,若pooling后大小为7x7,则窗口大小为20/7下取整为2,则pooling窗口大小为2x2。

ROI Align

1)一直原图为800x800, CNN缩小32倍后为25x25

2)若得到原图ROI为655x655,映射到特征图中为600/32=20.78,若pooling后大小为7x7,则窗口大小为20.78/7

=2.49,则pooling窗口大小为2.49x2.49。

若采样点为4,将2.49*2.49中分成四份,每一份通过双线性插值计算中间值,取四个中间值中的最大值作为该小区域的值,即max pooling操作。

 

四、mAP和FLOPs概念

1. mAP

准确率Precision

Precision = \frac{True Positive}{True Positive + False Positive}

目标检测中,分子为预测框和标定框的交集,分母为预测框

召回率Recall

Recall = \frac{True Positive}{True Positive + False Negative}

目标检测中,分子为预测框和标定框的交集,分母为标定框

单个类别的平均准确率为:

AP = \frac{1}{11}\sum recall\left \{ 0,0.1,...1 \right \}Precision\left ( recall \right )

mAP = AVG\left ( AP for\ each\ class \right )

http://nooverfit.com/wp/david9的普及贴:机器视觉中的平均精度ap-平均精度均/

2. FLOPs

浮点数运算量

在深度学习论文中,我们经常能看到一个评价标准FLOPs,许多论文用FLOPs来衡量一个网络的性能(速度)。

卷积层的FLOPs可以使用以下公式计算:

FLOPs = 2HW(C_{in}K^{2}+1)C_{out}

HW分别为输入的高和宽,Cin和Cout为输入和输出的通道数,K为卷积核的大小。

全连接层可以使用以下公式计算:

FLOPs = (2I-1)O

I是输入的维数,O是输出的维数

五、训练策略

训练时,采用一些策略,能够有效的提升收敛速度或者提升准确率。

1. 多尺度训练/测试

首先备选多个固定尺度,每个epoch选一个尺度进行训练。

测试时生成不同尺度特征图对每一个region proposal选最接近某一固定尺寸的region proposal。或者在多尺度下,随机选两个相邻尺度,pooling后使用maxout合并。

2. 全局语境

ResNet中,将整图作为RoI,RoI pooling后,将得到的feature vector拼接在每个RoI vector上,作为辅助传入R-CNN中。

3.难例挖掘

选取将传入R-CNN的RoI-Proposal时,选取loss较大的,能够有效提高监督学习的效率。

 

五、SSD模型

1. 样本选择

选取正样本(FindMatches函数,bbox_util.cpp)

先从GroundTruth出发,从boxes中找与GroundTruth最匹配的box放入正样本集中,再从boxes出发,找到与GroundTruth中IoU大于0.5的box放入正样本集中候选。

选取负样本

不符合正样本候选集的box有很多,远超正样本集

先将每个物体位置对应的prediction loss进行从大到小的排序,选最高的几个与正样本候选集匹配,匹配不成功则删除这个正样本(难例挖掘),负样本匹配成功则加入负样本集。

 

2. SSD与Faster-RCNN的区别

(1)Faster-RCNN只使用特征提取网络最后一层再卷积后的一层特征图做anchors提取,而SSD通过多尺度的feature生成roi。

(2)Faster-RCNN在RPN时,仅做二分类,即前景/背景,再输入fast-rcnn,计算类别概率和框回归。

          SSD将多分类及框回归融合,去掉了RPN层,因此速度较快,但对比Faster-RCNN,在小物体检测上较差。

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