阅读笔记:You Only Look Once: Unified, Real-Time Object Detection
阅读笔记:You Only Look Once: Unified, Real-Time Object Detection
- 背景
- 算法设计
- 网络结构
- 实验设计
\quad\quadYOLO算法(原文链接:https://arxiv.org/abs/1506.02640)是CVPR2016上由Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi四人提出的。与早先的目标检测算法不同,YOLO视目标检测为回归问题(regression problem),采用一个神经网络同时输出图片中物体边界框和类别,而且一张图片只需要输入一次便可得到所有结果。经试验证明,YOLO的运行速度极快(45fps),简化版的Fast-YOLO有155fps,并且mAP是当时的其他实时系统的两倍。与当时的SOTA算法相比,YOLO的定位误差(localization error)较高,但把背景判断为物体的错误(false positive)较少。
背景
\quad\quad当时主流的目标检测算法DPM(deformable parts models)使用不同尺寸的滑动串口扫过图片,将截取的部分送入传统分类算法,再根据输出判断物体所在位置。此类算法对同一张图片存在大量的重复检测操作。
\quad\quad另一种方法R-CNN使用候选区域法(region proposal)生成候选边界框,然后在候选区域使用分类方法,根据分类输出优化定位结果,减少重复检测。此类方法虽然减少了对同一张图片的重复检测,但是算法构成复杂,各部分需要单独训练,而且运行速度很慢。
\quad\quad受人类高效准确的视觉系统启发,作者提出了YOLO算法(You Only Look Once),对于一张图片只需出入一次便可输出所有结果,如图。

YOLO有三大特性:
- 速度快。YOLO的图像处理速度可达45fps,简洁版Fast-YOLO可达155fps,并且将实时系统的mAP提高了两倍。
- 视野广。YOLO是在接收到一张图片的所有信息后再作判断,不像之前的滑动窗口法和候选区域法,在无物体的背景区域YOLO所犯错误更少。
- 泛化能力强。当使用实际图片训练所得模型去测试艺术画作时,YOLO的表现要比其他算法好。
算法设计
\quad\quad“区域责任制”:输入的图片划分为S\times S个方格,物体的groundtruth边框中心所在方格负责检测该物体。每个方格输出\mathit B个预测边框及边框置信度,置信度表示对应边框包含物体的预测准确度,定义为Pr(Object) \times IOU^{truth}_{pred},若边框中没有物体置信度应为零,否则置信度应该等于预测边框与标签框的交并比,即IOU^{truth}_{pred}。
\quad\quad交并比:Intersection Over Union,在目标检测任务中用于表示预测边框与标签框的重合程度。如下图,红色为标签框,面积为S_{truth},蓝色为预测框,面积为S_{pred},
阴影部分为二者重叠,面积为S_{in},则当前预测框对于图中狗的检测IOU=\frac {S_{in}}{S_{truth}+S_{pred}}。

\quad\quad每个预测框包含五个属性:x、y、w、h和置信度,(x,y)坐标表示预测边框中心点与方格边缘的相对位置,w、h则表示预测框相对于整张图片的宽度和高度。置信度前文已经介绍,不再赘述。
\quad\quad每个方格除了输出B个预测框外,还要输出一组条件分类准确率,意为只有判断当前方格存在物体时,分类预测结果才有效。注意分类结果只输出一组,与预测框多少无关。
测试环节中,作者把条件分类准确率与置信度相乘,
Pr(Class_i|Object)\times Pr(Object) \times IOU^{truth}_{pred}=Pr(Class_i) \times IOU^{truth}_{pred}
以此得到类具体置信度,以一个数值描述物体类别准确率和预测边框的准确度。如下图,每张图片分成S\times S个方格,每个方格输出B个预测框和一组分类预测结果。所以,YOLO对于一张图片的最终输出为长度S\times S\times(B\times5 +C)的tensor,其中C为物体种类数量。

本文所使用的数据集为PASCAL VOC,设定S=7, B=2,因为PASCAL检测数据集共有20个类别的物体,所以C=20,因此最终的输出为7\times 7 \times 30的tensor。
\quad\quad此外,作者还使用了目标检测常用的非极大抑制法。非极大抑制(non-maximal suppression)指尤其是大型目标,在本文实行“区域责任制”的时候,对于同一物体可能有多个方格认定其存在,那么经过长时间训练后,可能对于同一个物体,YOLO算法会输出多个置信度较高的结果,如下图:

\quad\quadNMS的主要意图是,在多个高分框中选取除最优秀的结果,忽略其他结果。

网络结构
\quad\quad如下图所示,前端的24层卷积神经网络用于提取图像特征,最后的两层全连接层用于判断输出物体存在可能性及位置坐标。Fast-YOLO只有9个卷积层,并且每层的卷积核个数也相对较少。

\quad\quad在进行目标检测的训练之前,作者取上图中前20层续接平均池化层和全连接层在ImageNet千分类数据集上进行了训练,用了一周的时间训练所得模型在ImageNet 2012验证集上取得了88%的准确率,排名前五。然后将在分类任务中训练所得的前20层参数作为目标检测任务训练的初始参数,后边的6层网络则进行了随机初始化。
\quad\quad因为目标检测任务对图像中细粒度信息的包含度要求较高,所以将输入图片尺寸从224\times 224,提升至448 \times 448。对于最终层的预测框坐标x、y、w、h则进行了归一化,使所有值都介于0和1之间。
\quad\quad网络中除最终层全部使用带泄露的ReLU作为激活函数:
\phi(x) = \begin{cases} x, & \text{if x>0} \\ 0.1x, & \text{otherwise} \end{cases}
\quad\quad为便于优化,损失函数则采用方差,传统方差公式在计算过程中预测框定位误差和分类误差的权重相等。而且,在使用“区域责任制”的思想时,往往一张图片中没有物体存在的方格数量要比存在物体的方格数量要多的多,即存在正负样本不平衡的问题,使模型在训练过程中过分关注背景部分,弱化了正样本方格在训练过程中的作用,有可能导致模型崩溃。所以,方差公式直接用于目标检测的训练不合适。
\quad\quad为解决上述问题,作者引入了两个超参数\lambda_{coord}=5和\lambda_{noobj}=0.5,以此提升有物体方格的损失在总损失中的权重,降低无物体方格的权重。
\quad\quad除上述问题外,用方差计算损失还存在大型预测边界框和小型预测边界框权重相同的问题。根据目标检测任务的要求,计算损失时应实现当不同大小的预测边界框存在相同面积的定位误差时,小边界框的误差权重要比大边界框的误差权重大,即定位误差不能只看面积,更重要的是看误差在边界框中所占的比重。比如,同一张图片中存在一艘航空母舰和一只蜂鸟,两个预测边界框分别对两个物体进行了检测,且相对标签框都存在着一平方厘米的误差,但此时,航空母舰框的预测准确率可能已经达到了99%以上,但是蜂鸟框的预测准确率可能还不到50%,所以在优化过程中,我们要提高蜂鸟框的误差权重,以尽快提升蜂鸟的检测准确率。
\quad\quad为此,作者在计算定位误差时,对w、h两个参数进行了开根号。
\quad\quad在进行“区域责任分配”时,每个方格还有B个检测框在工作。在训练过程中,作者设置B个预测框中当前IOU最高的框负责检测当前图片中的物体,由此,可以将同一方格中的预测框差异化,使他们适用于不同大小、角度或类别的物体。借此提高模型整体召回率。
\quad\quad根据对方差损失计算法的问题分析,作者给出了最终的损失函数:
loss = \lambda_{coord}\sum^{S^2}_{i=0}\sum^{B}_{j=0}{1}^{obj}_{ij}[(x_i-\hat x_i)^2+(y_i-\hat y_i)^2] \\ +\lambda_{coord}\sum^{S^2}_{i=0}\sum^{B}_{j=0}{1}^{obj}_{ij}[(\sqrt{w_i}-\sqrt{\hat w_i})^2+\sqrt{h_i}-\sqrt{\hat h_i})^2]\\ +\sum^{S^2}_{i=0}\sum^{B}_{j=0}{1}^{obj}_{ij}(C_i-\hat C_i)^2 \\ +\lambda_{noobj}\sum^{S^2}_{i=0}\sum^{B}_{j=0}{1}^{noobj}_{ij}(C_i-\hat C_i)^2 \\ +\sum^{S^2}_{i=0}{1}^{obj}_i\sum_{c\in classes}(p_i(c)-\hat p_i(c))^2
注:上式{1}^{obj}_i表示方格i中存在物体,{1}^{obj}_{ij}表示第i个方格中的第j个预测框负责检测当前物体。原文中的字体为blackboard bold体,但本站LaTeX语法只支持大写字母,本人水平有限,数字的blackboard bold体调试了好久并没有调出来,只能用普通字体代替。若哪位大神懂得如何设置,还望赐教,万分感谢!
\quad\quad根据上式得,在YOLO的损失计算中,分类损失只计算存在物体的方格中的,定位损失只计算负责检测当前物体的预测框的。
实验设计
\quad\quad实验中用到的优化技术有:mini batch、momentum、weight decay、artificial learning rate decay、dropout、data augmentation等。其中,在数据增强的过程中,除普通的图片旋转、裁剪外,作者还通过提升1.5倍的HSV色彩空间来随机调整图片的曝光和饱和度。
\quad\quad在实验数据方面,作者主要针对mAP、FPS两个指标将YOLO与其他目标检测算法进行对比。并且将YOLO与Fast R-CNN结合后进行试验,并与其他算法进行了mAP及分类准确率的对比。具体试验结果请看原文。
