1 引言
YOLO系列为目标检测经典算法,yolo v1(以下都称为yolo)算比较旧的方法了,不过近来想整理一下yolo系列算法,所以先从yolo v1开始整理。
闲话少说,我们直接开始。 :)
2 网络架构
论文题目: You Only Look Once: Unified, Real-Time Object Detection
论文链接: 戳我
YOLOv1的模型架构参考GoogleNet,一共有24个卷积层,2个全连接层,激活函数为Leaky ReLU,最后一次则是采用Linear activation.整体网络架构图如下所示:
3 检测流程
YOLO 的整体处理流程如下:
- 将图像resize成448X448,并分割成7X7的网格
- 输入整张图像至CNN model,提取其特征并进行网络预测
- 通过非最大值抑制算法(NMS)过滤confidence较低的预测框
上述过程如下所示:
4 模型预测
YOLOV1前向预测方法如下:
- 首先将输入的图像切分成7X7的网格(grid cell),每个网格负责预测2个bounding box以及输出预测每个类别的概率.论文中采用的数据集为PASCAL VOC,该数据集一共有20个类别.
- 每隔bounding box的输出有5个预测值:x,y,w,h以及confidence,分别表示为预测的物体的中心点(x,y),长宽(w,h)以及置信度(confidence)
- 注意上述中x,y,w,h值为bounding box中心点的x坐标,y坐标,bounding box的宽度高度,并且均为归一化后的结果
- 注意上述confidence为boundingbox与Ground Truth的IOU值,可以由该值来判断这个boundingbox框出的是物体还是背景
下面来解释每个网格(grid cell)的输出:
每个grid cell输出: 2X5+20
2个(B=2)bounding box坐标和confidence以及该cell的预测类别
网格grid cell的尺寸为 7x7,所以总输出: 7X7X(2X5+20)=7X7X30
5 重要概念
YOLOv1还有一个重要的概念:
- 若被预测物体的中心落入某个网格中,那么这个网格就要负责去预测该物体
如下图所示,预测到猫咪的bounding box中心点位于粉红框的网格内,则该网格会负责预测这只猫咪.
由上图可知,一个图像会预测出7X7X2=98个bounding box,这些预测框有的可能被认为是背景(没有框出任何物体),此时confidence会为0,在进行NMS时,该框会被删除;
若该框有框出物体,那么它预测出的x,y的值可能被认为是该物体的中心点,这里说可能是因为该预测物体框不一定就是实际答案.
对于同一物体,由于预测到的物体框可能有多个,最后需要经过NMS来消除那些重叠,置信度较低的框,剩下的框就是选出来的物体框.
6 NMS
下图所示为模型预测的过程:划分grid cell, 预测bounding box以及class,对bounding box 进行NMS,筛选后的bounding box与class结合后输出结果.
上述用来挑选最佳的目标检测预测框的算法为NMS,该算法的流程如下:
- 设定一个IOU阈值(threshold)
- 将所有预测框根据confidence进行排序
- 选择confidence最高的预测框作为最终输出预测框,并计算与其他预测框的IOU,若IOU大于阈值,代表两个框框住了同一个物体,则将confidence较小的框设为0, 即删除此预测框;若是小于阈值,则代表两者框住的是不同的物体框,需要留下该预测框.
- 重复上述步骤,直到遍历完所有预测框
NMS算法已经在前一篇文章中进行了详细的说明,感兴趣的同学可以直接戳我.
7 损失函数
在介绍损失函数之前,我们先来引入以下参数
1).bounding box中心点坐标xy与宽高
- ( b x i , b y i ) (b_{xi},b_{yi}) (bxi,byi)为gt框的中心点坐标, ( b ^ x i , b ^ y i ) (\hat{b}_{xi}, \hat{b}_{yi}) (b^xi,b^yi) 为预测框的中心点坐标
- 1 i j o b j 1_{ij}^{obj} 1ijobj 为第i个网格中第j个bounding box是否有匹配到gt中的标记框.若有匹配,表示该gt标记框与该预测框有最大IOU,此时该bounding box负责检测该物体,此时 1 i j o b j = 1 1_{ij}^{obj}=1 1ijobj=1
- ( b w i , b h i ) (b_{wi},b_{hi}) (bwi,bhi)为gt框的宽和高, ( b ^ w i , b ^ h i ) (\hat{b}_{wi}, \hat{b}_{hi}) (b^wi,b^hi) 为预测框的宽和高
- λ c o o r d = 5 \lambda_{coord}=5 λcoord=5使模型着重于物体定位能力
2). bounding box物体的置信度
- 1 i j n o b j 1_{ij}^{nobj} 1ijnobj 为第i个网格中第j个bounding box中无物体时为1
- 无物体的系数 λ n o b j = 0.5 \lambda_{nobj}=0.5 λnobj=0.5 使得模型专注于有物体的识别,并降低找到没有物体的情形
3). bounding box物体的类别
- 1 i j o b j 1_{ij}^{obj} 1ijobj判断是否有物体落入网格中,并且只针对有物体的网格才计算loss
下图为相应loss的计算公式:
另外,上图中需要注意的是在bounding box中宽高的loss计算时,会先进行开根号在相减,这是因为对于小尺寸的预测bounding box的偏移容忍程度较小.如下图所示:
观察上图可知,在小尺寸上的预测bounding box上发生偏移会产生比大尺寸上预测bounding box有更大的影响.因此文中采用先开根号在相减的操作能够尽可能消除大小尺寸间的差异.
8 总结
本文介绍了YOLO的网络架构和相应的具体实现细节,YOLO将物体检测作为回归问题求解。基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出。
您学废了吗?
关注公众号《AI算法之道》,获取更多AI算法资讯。