You Only Look Once #1
You Only Look Once: Unified, Real-Time Object Detection
Prime Algorithm
概述
YOLO将输入图片划分为SxS个网格。每个网格预测B个边缘框,表示为(x,y,h,w,c),分别代表中心点坐标、边缘框高宽和边缘框置信度(图片中越粗的线c越大);同时,每个网格还要预测一组类别概率(softmax分类概率)来确定目标的类别
上述过程训练阶段和测试阶段具体方法有所不同,下文将两个阶段分别讨论
预测阶段
在预测阶段,网络直接接受3x448x448的图片作为输入。图片经24层卷积提取特征,再经两个全连接层回归得到7x7x30(S=7,B=2,类别数=30-Bx5=20)的张量作为输出,即输出49个网格生成的98个边缘框的信息及每个网格所属20个类别分别的概率(全部的信息都是由神经网络预测得出的)。这也表明了YOLOv1最多只能检测SxS个目标,且难以检测小而密集的目标
在获取YOLO提供的预测信息后,需要进行一系列的后处理(置信度过滤和非极大值抑制)得到目标检测结果。下图为SxS个网格生成的BxSxS个边缘框,颜色代表了其预测类别(一个网格生成的所有边缘框同属一个类别),粗细代表了其置信度,经后处理得到最终结果
计算全概率:将每个边缘框的置信度与其所属网格的类别概率相乘得到BxSxS个类别数维的全概率向量
NMS:对所有类别分别做如下操作,将最大全概率的边缘框与其他所有非零的边缘框计算IoU,如果超过了threshold(如0.5),则认为他们重复预测了同一目标,将概率小的边缘框在这一类别的概率置零,再继续将第二高全概率的边缘框与其后(降序)所有其他边缘框比较并重复上述过程。如此反复,直到找不到新的非零概率边缘框。有二十个类别的情况下会做二十次的NMS
完整后处理过程:将全概率向量中数值小于threshold的直接置零,然后按照某一类别将向量降序排列,并用NMS非极大值抑制删除多余边缘框,最后对每一个全概率向量(对应每一个边缘框)找出它最大概率的类别(非零),画出该边缘框并表明这一类别。如果向量此时为零向量,则代表该边缘框不包含任何目标,不画出该边缘框
训练阶段
在训练阶段,训练集提供了已经标注好的ground truth,我们要让YOLO的输出去拟合ground truth。
真实边缘框的中心点落在哪一个网格内,就应当由哪一个网格负责去预测出一个边缘框来拟合该真实边缘框,并且此网格的类别也被决定。每一个网格将预测B个边缘框,选择与真实边缘框IoU大的去拟合,小的边缘框置信度越小越好
对于没有真实边缘框中心点落入的网格,其预测边缘框的置信度越小越好
在训练时,也是整张图片作为输入,预测的中心点坐标值是0-1之间的数,表明了在某一个网格的坐标
损失函数如下(lambda是权重,因为不包含目标的边缘框一般远多于包含的边缘框)