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区别。
网络详情
网络结构
网络主要采用GoogLeNet,使用1x1卷积层+3x3卷积层简单代替了GoogleNet中的Inception module。卷积层主要用来提取特征,全连接层主要用来预测类别概率和坐标。最后的输出是7*7*30。其中**函数为如下函数:
算法流程
YOLO将输入图像分成SxS个格子,每个格子负责检测‘落入’该格子的物体。若某个物体的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体。如下图所示,图中物体狗的中心点(红色原点)落入第5行、第2列的格子内,所以这个格子负责预测图像中的物体狗。
每个格子中产生B个BBox,以及C个物体属于某种类别的概率信息。每个BBox包含5个数据,分别是x,y,w,h和confidence。其中x,y是BBox中心位置相对于当前格子位置的偏移值,并且被归一化到[0,1]。w,h是BBox相对于原图的宽度和高度,也是在[0,1]内。confidence表示该BBox是否包含物体以及物体位置的准确性。计算公式如下:
若BBox包含物体,则;否则。IOU为预测bounding box与物体真实区域的交集面积(以像素为单位,用真实区域的像素面积归一化到[0,1]区间)。每个BBox的confidence乘以该BBox所在的格子的类别预测值就是该BBox的类别预测值。
损失函数
YOLO使用均方和误差作为loss函数来优化模型参数,即网络输出的S*S*(B*5 + C)维向量与真实图像的对应S*S*(B*5 + C)维向量的均方和误差。
其中,为网络预测值,为标注值。