##YOLO网络结构
YOLO把检测问题看成是端到端的回归问题。把输入图片划分成一个个的小格子,让物体中心点所在的格子负责检测到该物体。
YOLO采用的是GoogLeNet结构,但是用1*1和3*3的卷积层来替代GoogLeNet的inception层。网络结构如下:
每个卷积层后面都会跟着leaky ReLu非线性层。第一个全连接层后面也跟着leaky ReLU非线性层。对于一张图片,输出的维度是7*7*30(YOLO为每个格子为每个格子预测一个概率分布,并且预测2个box以及每个box的置信度):
输出的box是(x_center, y_center, width, height),x_center和y_center是相对于格子的位移并且用格子的长宽进行归一化,width和height用448进行归一化,所以这四个值的范围是[0,1]。
训练
卷积层预训练
取YOLO的前20个卷积层,然后加上一个平均池化层和一个全连接层,在ImageNet 1000-class数据上进行训练。作者讲他训练了大约一周的时间。
损失函数
YOLO会为每个格子预测多个box,但我们希望训练时只有一个box为每个物体负责。责任box是和物体的真实box的IOU最大的box。
训练误差包含下面三种误差:
坐标误差:表示对物体负责的格子中的责任box和真实box标记之间的误差
置信度误差:表示每个预测box的置信度和真实置信度之间的误差。
目标置信度的表达式如下:
C^=Pr(Object)∗IOUtruthpred={ 0,如果box不是责任boxIOUtruthpred,如果box是责任box(1)
置信度不仅给出预测的box是否包含物体的信息,而且还给出了预测的box的准确度。作者在文中提到大多数的格子中是不包含物体的,这些格子中的box置信度应该向0趋近,这个目标带来的梯度有可能会比包含物体的格子带来的梯度更大。所以在损失函数中增加box的坐标预测损失,减少不包含物体的box的置信度预测损失,即在公式(2)中引入的系数 λcoor