[重读经典论文]YOLOv1
1. 前言
由Joseph Redmon等人2016年在论文《You Only Look Once: Unifified, Real-Time Object Detection》中提出的一阶段目标检测算法,核心思想是将物体检测任务视为回归问题。它通过将图像分成S×S个网格,每个网格负责预测该网格中是否存在物体以及物体的类别和位置信息。使用单个神经网络同时预测所有物体的类别和位置信息。这种端到端的训练方式使得YOLOv1的训练和测试速度非常快。然而,YOLOv1的定位精度相对较差,特别是对于小物体和重叠的物体,精度表现不佳。
2. 具体算法
2.1. 网络结构
如上图所示,输入是448*448的图片,经过24层的卷积层提取图像特征,输出7*7*1024的feature map,然后再接两个全连接层,最后输出reshape成7*7*30的张量。为什么输出是这个形状呢?
2.2. 预测阶段
如上图所示,将输入图片划分为S*S个grid cell,然后每个cell有B个Bounding Boxes(简单起见简称为bbox)去拟合目标,在本文中,S取7,B取2。
然后每个bbox预测5个参数,分别为x,y,w,h,c:
- x,y为预测物体中心点坐标,是相对坐标,相对于属于的grid cell左上角坐标的偏移量。
- w,h为宽高,是相对于输入图片宽高的比例。
- c为该bbox包含物体的概率,隐含表示bbox与groud truth的IOU。
另外每个grid cell还会预测一组条件概率,在本文中,类别为20。总结来说,一张图片划分为7*7个格子,每个格子有2个bbox,每个bbox预测5个参数,加上每个grid cell预测20个类别的概率,总共有:
7*7*(2*5+20)=7*7*30,参考下图:
最后,将所有预测的框,通过nms过滤后,输出最后的预测结果。
由于每张图有49个grid cell,每个grid cell有两个bbox对groud truth进行拟合,但是最终的结果是取Confidence最大的那个bbox,因此在本文的设置中,网络最多也只能预测49个物体,因此对稠密的目标和靠得很近的目标,本网络检测效果不佳。
2.3. 训练阶段
如上图所示,左边是groud truth,在训练阶段,其中心点落在哪个grid cell就由那个grid cell负责拟合这个gt,由于每个grid cell生成两个bbox,因此,哪个bbox与gt的IOU较大则由这个bbox负责预测这个gt,如上图右所示,外边的bbox与gt的IOU更大,因此由它负责拟合gt,这个grid cell输出的类别也需要拟合为gt的类别。
对于不负责预测物体的bbox,则这些bbox只需要让Confidence尽量拟合为0。
3. 损失函数
损失函数可以分为几部分:
- 负责检测物品的bbox中心点定位误差。
- 负责检测物体的bbox宽高定位误差,取平方根,使得对小框更敏感。
- 负责检测物体的bbox Confidence误差,标签值为这个bbox与gt的IOU。
不负责检测物体的bbox Confidence误差。 - 负责检测物体的grid cell的分类误差。
每种误差前面都有一个指示函数,指示这个bbox或者grid cell是否含有物体。
因为在数据集中,一张图片49个grid cell中,往往只有少量grid cell有物体,其他的都没有,类别非常不平衡,如果负责检测物体的loss和不负责检测物体的loss权重都一样的话,会导致模型更偏向于训练不含有物体的grid cell,因此本文分别增加了λcoord作为有物体的loss权重,λnoobj作为不含物体的loss权重,分别取5和0.5。
4. 其他细节
与Fast R-CNN相比,Yolo明显map要低一点,不过在分类错误上主要是定位错误上很高,在背景的分类错误上很低,得益于yolov1能够看到全图,区分背景的能力强。另外由于yolo是在7*7的feature map上进行预测的,粒度比较粗,对小目标的检测效果也不好。
5. 参考
(完)