YOLO及YOLOv2综述
最近在阅读yolo系列的文章,以下将对yolo以及yolov2做个综述
YOLO
YOLO核心思想:从R-CNN到Fast R-CNN一直采用的思路是proposal+分类 (proposal 提供位置信息, 分类提供类别信息)精度已经很高,但是速度还不行。 YOLO提供了另一种更为直接的思路: 直接在输出层回归bounding box的位置和bounding box所属的类别(整张图作为网络的输入,把 Object Detection 的问题转化成一个 Regression 问题)。
先复习一下faster-rcnn中的proposal+分类的过程:
首先是常规的conv layers操作:conv+relu+pooling层,生成的feature maps是共享的,一路经过RPN生成proposal,一路到ROIPooling层,结合proposal进入全连接层。全连接层有两路输出,一个为bbox的第二次回归结果,一个是被预测的bbox中物体的分类。
YOLO的主要特点
- 速度快
- 使用全图作为环境信息,把背景错认为物体的错误比较少。
- 泛化能力强
大致流程
-
Resize成448*448,图片分割成7*7的cell
-
CNN提取特征和预测: 卷积负责提取特征,全连接层负责预测。(和faster-rcnn有些不同:RPN中卷积层后输出anchor,每个anchor都有4个用于回归的变换量)
-
bbox的坐标:xywh
-
是否有物体的confidence
-
预测物体的概率
-
筛除bbox(nms)
网络结构
(模型中采用1x1的卷积层减少运算量)
模型最后输出7x7x30的张量,可以看到输出的channel为30。在一个cell中,前20是类别概率值,然后是两个边界框的confidence,最后八个是两个边界框的(x,y,w,h)。由此可以看出,一个cell预测两个bbox,一个预测值包含confidence和(x,y,w,h)。这两个predictor只能预测同一个目标。所以,一个cell无法预测多个目标。
-
为何一个cell不能预测多个目标呢:
两个predictor不知道自己该负责那个目标。
-
为何要有两个predictor呢:
在训练的时候会在线地计算每个predictor预测的bounding box和ground truth的IOU,计算出来的IOU大的那个predictor负责预测这个物体,另外一个则不预测。这样做的话,实际上有两个predictor来一起进行预测,然后网络会在线选择预测得好的那个predictor(也就是IOU大&