目标检测学习笔记

  • Faster-RCNN
  • YOLOv3
  • SSD
  • 两阶段和一阶段优缺点
  • mAP

Faster-RCNN

RCNN

解决问题:

  • 使用CNN提取特征,取代了传统方法手工提取特征。

步骤:选择性搜索+分别提取特征+缩放到固定大小+svm分类

  • 用候选区域方法(选择性搜索)创建2000个ROI,将它们转换为固定大小送到神经网络中提取特征,用SVM进行分类。

选择性搜索:子区域合并

  • 首先,对输入图像进行分割算法产生许多小的子区域;
  • 其次,根据这些子区域之间相似性(相似性标准主要有颜色、纹理、大小等等)进行区域合并,不断迭代,得到候选框;

Fast-RCNN

解决问题:

  • 避免了RCNN对候选框重复提取特征;
  • 缩放改成了ROI pooling;
  • 用CNN进行分类和回归;

步骤:选择性搜索+整张图提取特征+候选框映射+pooling到固定大小+分类(softmax)和回归(smooth L1)

  • 同R-CNN一样,使用selective search 算法在图像中从上到下提取2000个建议窗口(Region Proposal)
  • 整张图片输入CNN,提取特征
  • 把在第一步中的2000个建议窗口映射到第二步中的特征图上;
  • 通过RoI pooling层使每个建议窗口(可能尺寸不同)生成固定尺寸的feature map;
  • 利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练(检测)。

什么是ROI Pooling

  • ROI Pooling是将特征图分割出 H×W 大小的子窗口,这里的H和W是超参数,人为设定,对这 H×W 个子窗口分别进行最大池化操作,得到固定大小的特征图。
  • 反向传播时,最大值所在的位置的梯度为1,其他为0。

Faster-RCNN

解决问题:

  • 用RPN网络取代选择性搜索,实现端到端。

步骤:整张图特征提取+RPN+建议框映射+ROI pooling+分类和回归。

  • 将整张图片输入CNN,进行特征提取;
  • 用RPN(在CNN特征基础上做进一步卷积)生成300个建议框;
  • 把建议框映射到CNN的最后一层卷积feature map上;
  • 通过RoI pooling层使每个RoI生成固定尺寸的feature map;
  • 用Softmax Loss和Smooth L1 Loss,对分类概率和边框回归联合训练;

RPN和特征提取网络

  • RPN和特征提取网络的绝大部分特征是共享的(RPN在CNN特征上加入了额外的卷积),减少了计算量,加快了速度;
  • 为了融合RPN网络和特征提取网络,二者交替训练;

RPN实现细节:

  • RPN在共享的特征图上继续卷积(用一个3×3的滑窗,stride=1,padding=2),得到同样大小同样维度的特征图,再以此特征图上每一个点,映射到原始图像上,以该点为中心,根据3个尺度、3种长宽比,提出9个建议框,也就是9个anchors。
  • RPN可以给出当前框的位置和它是前景物体的概率。取概率最大的前300个,送到全连接层进行分类和回归;

anchor机制的作用:

  • 网络直接进行分类和回归的难度大,在anchor的基础上,对偏移量进行预测,降低了网络收敛的难度。

YOLOv3

YOLO

与Faster-RCNN对比:

  • YOLO没有显示求取region proposal的过程。Faster R-CNN中尽管RPN与fast rcnn共享卷积层,但是在模型训练过程中,需要反复训练RPN网络和fast rcnn网络.相对于R-CNN系列的"看两眼"(候选框提取与分类),YOLO只需要Look Once。
  • YOLO统一为一个回归问题,而R-CNN将检测结果分为两部分求解:物体类别(分类问题),物体位置(回归问题)。

步骤:

  • 将一幅图像分成SxS个网格,如果物体中心落在这个网格中,则这个网格就负责预测这个物体。
  • 每个网络需要预测B个BBox的位置和置信度,一个BBox对应着四个位置信息和一个置信度信息;每个网格还要预测一个类别信息,记为C类。则输出就是S x S x (5*B+C)个tensor。( 注意:类别信息是针对每个网格的,置信度信息是针对每个bounding box的。)
  • 在test的时候,每个网格预测的类别和bounding box预测的置信度相乘,就得到每个bounding box预测的特定类别的置信度;
  • 对特定类别的置信度设置阈值,滤掉得分低的,再进行NMS处理,就得到最终的检测结果。

缺点:

  • 每个网格只能预测一个物体,对小物体检测效果差;

为什么YOLO没有先验框,直接进行回归,也能取得较好的检测效果:

  • 在划分成网格的时候,网格本身就包含了位置信息,另外,被检测物体的尺度在一个可以回归的范围内;

NMS步骤(抑制重叠度高的预测框):

  • 把预测框按照类别置信度排序,选中得分最高的框;
  • 遍历其余的预测框,如果它们与最高得分的框的IOU大于一定阈值,就剔除;
  • 再将置信度排第二的框作为目标,重复上述步骤;

YOLOv2

改进处:

  • 通过聚类得到先验框,只需要预测先验框到真实物体的偏移,降低了预测难度;
  • 提出了Darknet网络结构,加入了深浅层特征融合;
  • 运用工程化技巧,在不同分辨率的图像上训练,使模型适应变化的尺度;

YOLOv3

改进处:

  • 提出Darknet53,加入了残差等结构;
  • 多尺度预测,输出3种尺寸的特征图;
  • softmax改为logistic,实现多类别预测;

SSD

特点:

  • 使用VGG作为主干网络,为了提取更高语义的特征,增加了多个卷积层;
  • 利用多层的特征图进行预测:浅层的特征图检测小物体,深层的特征图检测大物体;

两阶段和一阶段优缺点

  • 两阶段算法,如RCNN系列,先对固定的anchor进行修正产生候选框,然后对候选框进行分类和回归,网络的精度相对较高,时间复杂度也大;
  • 一阶段算法,如SSD、YOLO系列,通过聚类等方法得到固定的先验框,然后直接进行分类和回归,由于先验框中有大量的负样本,正负样本不均衡导致模型的准确度不如两阶段,但是检测速度快;

mAP

precision和recall

  • precision:检测器检测出是狗并且确实是狗的部分占所有检测器认为是狗的比例;
  • recall:检测器检测出是狗并且确实是狗的部分占所有确实是狗的比例;
  • 用检测狗举例,为了尽可能的提高召回率,我们可以预测出尽可能多的框来包含可能出现狗的地方,甚至可以直接以整幅图像为预测框,这时候召回率是最高的接近于1,但是很明显,精度很低;
  • precision和recall会随着设置的iou阈值的变化而变化,以precision为纵坐标,以recall为横坐标画图,可以得到不同iou阈值的精度/召回率曲线,简写为PR曲线;

mAP概念

  • 为了取得一个平衡,使得precision和recall都较高,使用PR曲线下方的面积来衡量检测效果,该面积即为AP(Average Precision),所有类别的AP值取平均就是mAP;

mAP计算方法

  • 过滤低置信度:遍历groungtruth对应的预测框,过滤掉置信度低于阈值的框(默认0.5);
  • 计算iou:剩下的预测框按照置信度排序,依次比较预测框与真值框的IOU,若大于iou阈值则为TP,并标记为已检测(同一个真值框的剩余预测框都为FP),若小于阈值,则为FP;
  • 计算AP:根据TP,FP计算AP;

[1]:再谈R-CNN系列
[2]:YOLO算法最全综述:从YOLOv1到YOLOv5
[3]:NMS(非极大值抑制)
[4]:目标检测算法之SSD
[5]:目标检测之IoU、precision、recall、AP、mAP详解

你可能感兴趣的