相对于R-CNN、Fast RCNN的two-stage目标检测方式,即先在图像中提取候选框,再逐一对图像进行分类。候选框的生成可以是滑动窗口或选择性搜索,再对候选框进行非极大值抑制(一般只在推理时做非极大值抑制,训练时需要这些重复的框)。而YOLO则是one-stage的端到端形式:输入图片,经过深度神经网络的黑盒,得到带候选框和预测概率标注的图像。
YOLO v1
数据格式
对于输入的图片,划分为\(S\times S\)个grid(文中S=7),每一个grid包含2个bounding box,box的中心位于grid内,但是范围可以超出grid。
输入图片大小为448x448x3,输出向量为7x7x30。输出向量可抽象为:\(S\times S\times(B*5+C)\),每个grid的有\((B*5+C)\)个属性,也就是30;其中C表示类别数,也就是20个,B表示bounding box数量,也就是2个;每个box有5个值\((x,y,w,h)\),还有置信度,\((x,y)\)表示框的中心
相对于grid的边界;\(w\)宽度和\(h\)高度是相对于整个图像进行预测的;置信度预测表示预测框与任何真实框之间的IOU,在计算时,还乘以了类别的预测概率:
训练
在训练中图像宽高被缩放到[0,1],因此每个grid内的box的x,y也被限制到[0,1]。
对最后一层使用线性激活函数,所有其他层使用Leaky ReLU:
损失函数中,\(\mathbb{1}_{ij}^\text{obj}\)表示指示函数,第i个grid中的第j个box存在物体时,为1。否则\(\mathbb{1}_{ij}^\text{noobj}\)为1。
第1项和第2项,通过回归问题计算bounding box的\((x_i,y_i,w_i,h_i)\)与标注\((\hat{x}_i,\hat{y}_i,\hat{w}_i,\hat{h}_i)\)之间的损失。考虑到w、h较大时,允许有一定的误差;而w、h较小时,需要对误差更敏感。因此计算w、h使用了开根号。
第3项和第4项,\(C_i\)表示置信度,第3项中\(\hat{C}_i\)为1;第4项中,\(\hat{C}_i\)为0,因为没有object。
第5项中,计算每一个grid中,所有类的概率分布\(p_i(c)\)与实际分布\(\hat{p}_i(c)\)的损失。
参考文献
- Redmon, J. "You only look once: Unified, real-time object detection." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.