天天看点

深度学习中的目标检测算法概述前提

前提

目标检测问题是在分类任务是上逐渐发展起来的,首先介绍一下两者之间的差别

  • 分类任务:

    一张图片往往只有一个目标,通过网络输出目标的得分,得到图像中的物体类别,常见的网络有CNN, Resnet等

  • 检测任务:

    一张图片包含多个目标,通过网络输出不同物体的种类和标注框(Bounding Box),常见的网络有Fast-CNN,yolo,SSD等

Bounding Box(Bbox):一般有三种表示方法,1,(x0,y0,x1,y1),代表标注框的起点(x0,y0)和终点(x1,y1)2,(x0,y0,x1,y1,h) 代表标注框的起点(x0,y0)和中心点(x1,y1)以及高度 3, (x0,y0,w,h,alpha)代表标注框的起点,宽,高,以及旋转的相位

深度学习中的目标检测算法概述前提

由于检测问题是从分类任务发展起来的,故按照分类任务的发展顺序来看网络的发展。

CNN

CNN是分类任务中常用的方法,通过网络模型加一个全连接层实现物体的预测,最终输出物体在不同类别中的得分,得分最高的类别的就是预测的物体的类别。

要想用CNN实现物体的检测,必须事先随机生成大小,形状不同的框,对图像进行裁剪,放入网络中,然后在最后的全连接层加上物体的Bbox(x0,y0,w,h)预测,通过预测的Bbox结果与真实Bbox坐标做差,计算loss,完成传递,训练。(其实就是随机裁剪图像后进行分类)

由于不确定标注框的大小,位置,这种随机生成标注框的方法无疑是十分浪费计算资源的。

R-CNN

相比CNN,R-CNN生成Bbox的方法比较高级,R就是Region proposal,找到存在物体最可能的区域,能高效的查找可能存在物体的Bbox,一般一次训练会生成2000个左右的图片去分类。(也就是把原始图片高效分成2000张大小,形状不同的图片,放到网络中进行预测。)

这种方法比直接找高效了一些,但是一次前向传递相当于2000次,效率也不是很高。

深度学习中的目标检测算法概述前提

Fast R-CNN

Fast R-CNN的改动是在图像经过一次卷积之后,在Feature map上对图像进行区域划分(Region proposal)目的是减少计算量,例如一张416x416的图像,卷积之后可能变成52x52,然后再进行后续网络的预测。

Faster R-CNN

Faster R-CNN在Fast R-CNN基础上改变区域划分的规则,Faster R-CNN通过在网络中的某一处提取Feature map,通过锚点(Anchor)划分区域图像,然后继续训练。

训练过程也有所不同:

==》 区域中判断存在 object

==》 该区域对object(positive) Bbox回归

==》 输出positive object的BBox

==》 对输出的Bbox类别判断

==》 对输出的Bbox坐标回归

YOLOV1

可以看到Faster R-CNN中有了对所划分的区域中是否存在物体的判断,YOLOV1对此进行了改进,整张图片作为网络的输入,然后再Feature map直接对Bbox进行回归。

深度学习中的目标检测算法概述前提
  • 更改网络模型,24个卷积层,2个全连接层
  • 7x7个anchors
  • 每个anchor预测B个Bbox,(B=2)
  • 每个Bbox包含位置(x,y,w,h)及置信度(confidence),共5个输出
  • 每个anchors同时预测物体类别(C个)
  • 结果输出: 7x7x(Bx5 + C), e.g., VOC数据集(20分类): 7x7x(10+20)

YOLOV3/4/5

YOLO发展过程中,又创新了自己的网络模型darknet53,例如yolov3在不同的层提取出不同大小的Feature map,选取合适的锚点步长,避免了一些小物体在Feature map上像素消失的问题,从而完成对小中大物体的预测,预测精度和速度都有较大的发展。

继续阅读