YOLO详解

Redmon, J., Divvala, S., Girshick, R., Farhadi, A.: You only look once: Unified, real-time object detection. In: CVPR. (2016)

思想

YOLO将物体检测作为回归问题求解,用卷积神经网络直接从输入图像预测BBox和类别的概率,没有单独的求取region proposal的过程。下图是RCNN,Fast RCNN, Faster RCNN和YOLO区别。
YOLO详解

网络详情

网络结构

YOLO详解
网络主要采用GoogLeNet,使用1x1卷积层+3x3卷积层简单代替了GoogleNet中的Inception module。卷积层主要用来提取特征,全连接层主要用来预测类别概率和坐标。最后的输出是7*7*30。其中**函数为如下函数:

f(x)={xx>00.1xx<0

算法流程

YOLO详解
YOLO将输入图像分成SxS个格子,每个格子负责检测‘落入’该格子的物体。若某个物体的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体。如下图所示,图中物体狗的中心点(红色原点)落入第5行、第2列的格子内,所以这个格子负责预测图像中的物体狗。
YOLO详解
每个格子中产生B个BBox,以及C个物体属于某种类别的概率信息。每个BBox包含5个数据,分别是x,y,w,h和confidence。其中x,y是BBox中心位置相对于当前格子位置的偏移值,并且被归一化到[0,1]。w,h是BBox相对于原图的宽度和高度,也是在[0,1]内。confidence表示该BBox是否包含物体以及物体位置的准确性。计算公式如下:

confidence=P(object)× IOU

若BBox包含物体,则P(object)=1;否则P(object)=0。IOU为预测bounding box与物体真实区域的交集面积(以像素为单位,用真实区域的像素面积归一化到[0,1]区间)。每个BBox的confidence乘以该BBox所在的格子的类别预测值就是该BBox的类别预测值。

损失函数

YOLO使用均方和误差作为loss函数来优化模型参数,即网络输出的S*S*(B*5 + C)维向量与真实图像的对应S*S*(B*5 + C)维向量的均方和误差。
YOLO详解
其中,x,y,w,C,p为网络预测值,x^,y^,w^,C^,p^为标注值。