前提
目标检测问题是在分类任务是上逐渐发展起来的,首先介绍一下两者之间的差别
- 分类任务:
一张图片往往只有一个目标,通过网络输出目标的得分,得到图像中的物体类别,常见的网络有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上像素消失的问题,从而完成对小中大物体的预测,预测精度和速度都有较大的发展。