yolo系列——v1详解
概述
yolo系列,持续更新
yolo系列已经出到v5,在目标检测方向的表现越来越强。虽然v1较之后的版本,SSD等网络相对简单,但还是建议大家从头学起,打好一些基本功,以便于日后设计新的识别网络、发顶会或者工程化可以有清晰的思路。任何算法都需要自己理解并实现,简单的拿来主义并没有实质性的帮助。
论文地址:https://arxiv.org/pdf/1506.02640.pdf
tf实现:https://github.com/gliese581gg/YOLO_tensorflow
yolo1详解
yolo1的过程可以分为三步:
1.将输入图像划分成7x7=49个网格grid cell(以网格为基本单位)
2.CNN网络做特征提取
3.计算类别信息和位置回归
一、划分S*S网格
将输入图像划分为SXS个网格(yolo1设置为7x7),每个网格预测出2个边界框,所以一幅图像可以得到7x7x2=98个边界框。当物体的中心点落到某个grid cell内,由该cell确定的BoundingBox负责预测此物体。如下图所示:
每个边界框要回归自己的位置(x,y,w,h)外加一个confidence。置信度包含了此bbox内含有目标的概率和IOU值。公式如下:
式中,Pr(Object)是边界框内存在对象的概率,若存在对象,Pr(Object)=1,否则Pr(Object)=0;IOU是真实框与预测框的交并比,之前在SSD网络详细讲解过,这里不再赘述。同样地,yolo1使用NMS来保留最优解。
二、yolo1的主干网络:
yolo1使用的特征提取主干网络类似于GoogLeNet,
网络结构如下:
Yolov1的主干网络参考GoogLeNet,包含24层卷积,4层最大池化,2层全连接层。输入是448x448x3的图像,输出是7x7x30的张量。
输出张量的大小就对应着第一步里7x7个网格,通道数30具体的含义如下:
如上图,输出的7x7x30的张量的含义:某一个cell确定的边界框内20类物体的概率(20维)+ 某一个cell确定的2个边界框内的置信度(第一步介绍) + 某一个cell确定的2个边界框的位置信息(4x2)=30
三、损失函数:
yolo1的loss使用均方和误差,简单粗暴的将五种信息的均方误差按照一定的权重累加在一起。具体表达如下:
如上式子,包括五个部分。第一行表示边界框中心点位置误差;第二行表示边界框宽高误差;第三行表示当边界框内有目标时的置信度误差,第四行表示当边界框内无目标时的置信度误差,第五行表示20个类的概率误差。
yolov1比较简单,v2~v5持续更新。