2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 目标检测:YOLO You Only Look Once

目标检测:YOLO You Only Look Once

时间:2019-04-08 00:21:57

相关推荐

目标检测:YOLO You Only Look Once

参考文献: Redmon J , Divvala S , Girshick R , et al. You Only Look Once: Unified, Real-Time Object Detection[J]. .

项目主页: /darknet/yolo/

包含理解!

You Only Look Once

Redmon J , Divvala S , Girshick R , et al.

1 Introduction

现在的 detection systems 将物体检测问题,最后会转变成一个分类问题。在检测中,detection systems 采用一个 classifier 去评估一张图像中,各个位置一定区域的 window 或 bounding box 内,是否包含一个物体?包含了哪种物体?(理解:RCNN的基本思想)

一些 detection systems,如 Deformable Parts Models(DPM),采用的是 sliding window 的方式去检测。

最近的 R-CNN、Fast R-CNN 则采用的是 region proposals 的方法,先生成一些可能包含待检测物体的 potential bounding box,再通过一个 classifier 去判断每个 bounding box 里是否包含有物体,以及物体所属类别的 probability 或者 confidence。这种方法的 pipeline 需要经过好几个独立的部分(理解:ROI生成+RNN+(SVM+边界框回归),至少两阶段),所以检测速度很慢,也难以去优化,因为每个独立的部分都需要单独训练。

本文将 object detection 的框架设计为一个 regression problem。直接从图像像素到 bounding box 以及 probabilities。这个 YOLO 系统如图看了一眼图像就能 predict 是否存在物体,他们在哪个位置,所以叫 You Only Look Once。

YOLO 的 idea 十分简单,如 Figure 1:

将图像输入单独的一个 CNN 网络,就会 predict 出 bounding boxes,以及这些 bounding boxes 所属类别的概率。YOLO 用一整幅图像来训练,同时可以直接优化 detection performance。

这样的统一的架构,对比之前如 R-CNN、Fast R-CNN 的 pipeline(区域建议ROI),有以下几点好处:

a.YOLO 检测系统非常非常的快。受益于将 detection 架构设计成一个regression problem,以及简单的 pipeline。在 Titan X 上,不需要经过批处理,标准版本的 YOLO 系统可以每秒处理 45 张图像;YOLO 的极速版本可以处理 150 帧图像。这就意味着 YOLO 可以以小于 25 毫秒延迟的处理速度,实时地处理视频。同时,YOLO 实时检测的mean Average Precision(mAP,平均精度)是其他实时检测系统的2倍。

b.YOLO 在做 predict 的时候,YOLO 使用的是全局图像。与 sliding window 和 region proposals 这类方法不同,YOLO 一次“看”一整张图像,所以它可以将物体的整体(contextual)的 class information 以及 appearance information 进行 encoding。目前最快最好的Fast R-CNN ,较容易误将图像中的 background patches 看成是物体,因为它看的范围比较小。YOLO 的 background errors 比 Fast R-CNN 少一半多

c.YOLO 学到物体更泛化的特征表示。当在自然场景图像上训练 YOLO,再在 artwork 图像上去测试 YOLO 时,YOLO 的表现优于 DPM、R-CNN 。

2 Unified Detection(统一检测)

YOLO 检测系统首先将输入图像分成S*S个 grid(小格),如果一个物体的中心掉落在一个 grid cell 内,那么这个 grid cell 就负责检测这个物体。

每个 grid cell 预测B个 bounding boxes,每个 bounding box 包含了5个predictions:Center_x,Center_y表示bounding box 的中心点坐标;width,height表示bounding box宽度高度;confidence表示置信度,confidence = P(object)* IOU,其中, P(object)表示包含目标的概率,IoU 值(intersection over union, IOU=交集部分面积/并集部分面积,2个box完全重合时IOU=1,不相交时IOU=0)。

理解:为什么置信度是包含目标的概率乘以IOU,损失函数中计算定位损失时不相当于衡量了IOU,在损失函数计算分类损失时只用是否包含目标的概率不行吗?答:置信度衡量了是否包含目标的概率和与真实框之间的重叠度,如果不考虑IOU,在做nms时,容易把概率大的框保留下来,即使这个框包含真实目标的IOU并不大(举例,一个框概率0.998,IOU为0.8,;另一个框概率0.999,IOU为0.5,容易保留第二个框)。此外,车牌检测中也计算了有无车牌的概率,是否要乘以IOU?答:车牌很多倾斜,IOU度量不准确,可用其他指标度量。

每个 grid cell 预测C个条件类别概率P(classi∣object)P(class_i|object)P(classi​∣object),指grid cell包含物体条件下,物体出现的概率。不管 grid cell 包含了多少bounding boxes,每个 grid cell 只 predict 每个类别的 conditional probabilities。

在测试阶段,将每个 grid cell 的条件类别概率与每个 bounding box 的 confidence 相乘得到每个bounding box的具体类别的 confidence score,P(classi∣object)∗P(object)∗IOU=P(classi)∗IOUP(class_i|object)*P(object)* IOU=P(class_i)* IOUP(classi​∣object)∗P(object)∗IOU=P(classi​)∗IOU,以此把bounding box 中预测的 class 的 probability,以及 bounding box 与 object 的契合度,都进行了 encoding。

综上,网络将一张图像分为S * S个grid cells,每一个 grid cell 预测B个 boxes(每个 box 是 5个数值),检测C个类别,最后输出的tensor为S * S*(B*5+C)

3 Network Design(网络设计)

YOLO 仍是 CNN 的经典形式,开始是convolutional layers 提取特征,再是 fully connected layers 进行 predict 结果:probabilities 以及 coordinates。

YOLO 的 CNN 结构取自两篇论文:GoogLeNet、Network in Network. YOLO 有24个卷积层,随后就是2个全连接层。不像 GoogLeNet 中使用的 inception modules, 而是使用1x1卷积层(此处1x1卷积层的存在是为了跨通道信息整合)+3x3卷积层简单替代。如下图 Figure 3 所示:

可以看到,YOLO以448 * 448 * 3为固定输入,输出的 Tensor 为7 * 7 * 30, 对应了 7*7个 grid cells,30 对应了预测值。其中,8 维是回归的bounding box坐标,2 维是 bounding box 的 confidence,20 维是检测类别。

论文中还给出一个更轻快的检测网络fast YOLO,它只有9个卷积层和2个全连接层。使用titan x GPU,fast YOLO可以达到155fps的检测速度,但是mAP值也从YOLO的63.4%降到了52.7%,但却仍然远高于以往的实时物体检测方法(DPM)的mAP值。(mAp60%+,这大概是YOLO没有大力推广的原因。。。)

4 Training

YOLO在ImageNet 1000-class 的分类任务数据集上进行pretraining。预训练的网络是Figure 3中网络的前 20 层卷积层,加上一个average-pooling layer,最后是一个 fully connected layer。此预训练的网络大约训练了一个星期,在 ImageNet 的 validation dataset 上的 top-5 精度为88%,本文的 training 以及 inference 都是用Darknet卷积网络框架完成的。

把预训练的model用于detection,Ren et al., Object Detection Networks on Convolutional Feature Maps 指出了在预训练的model上增加convolution layer以及connected layer可以增加model的performance。因此,在预训练的 model 上,本文增加了4个 convolutional layers 以及2个 connected layers,这新加的层的参数是随机初始化的。因为要用于detection,本文在detection的fine-grained 阶段,将图像的输入分辨率从224*224调整至448 * 448

网络最后输出的为 class probabilities 以及 bounding box coordinates。但在输出时,根据图像的 width、height 将 bounding box 的 width、height 进行归一化,归一化到 0~1 的区间。将 bounding box 中的坐标(x,y)通过grid cells 的offset归一化到 0~1 之间。

模型的最后一层,本文使用一个线性激活函数,其余的层则使用的是 leaky rectified linear activation:

本文使用的是sum-squared error 来作为优化目标。虽然 sum-squared error 较容易去优化,但是对于本问题,直接使用 sum-squared error 却不是那么合适。因为将 localization error 以及 classification error 在优化求解中,相等的去衡量优化,本身就不合理。另外,每一张图像中,很多 grid cells 并没不包含物体,使得这些 cells 的 confidence 置为 0,这些不包含物体的 grid cells 的梯度更新,将会以压倒性的优势,覆盖掉包含物体的 grid cells 进行的梯度更新(理解:样本的严重不均衡)。这些问题会使得模型不稳定,甚至造成网络的发散。

为了避免上述的问题,本文将 localization error 以及 classification error 的 loss 重新用权重衡量。以平衡上述的失衡问题。简单的说,就是增加 bounding box coordinate 的 loss,减少不包含物体 grid cells 的 confidence 的 loss。通过设置两个参数:λcoord = 5 和 λnoobj =0 .5。

Sum-squared error loss 中还将 large box 与 small box 的 loss 同等对待。因为相比较于large box与 groundtruth 的偏离,small box偏离一点,结果差别就很大,而large box偏离大一点,对结果的影响较小。为了解决这个问题,用了一个很巧妙的 trick,即最后并不是直接输出 bounding box 的 width、height,而是width、height 的平方根

如下图所示,当 bounding box 的 width、height 越小时,发生偏移后,其反应在 Y 轴上的变化越大,这样就正确反映了 large box 与 small box 对于偏移的敏感性不同。这图哪儿说明啦?

在 YOLO 中,每个 grid cell 预测多个 bounding box,但在网络模型的训练中,每一个物体,只想要一个 bounding box predictor 来负责预测。因此,当前哪一个 predictor 预测的 prediction 与 groundtruth 的 IoU 最大(正例),这个 predictor 就负责 predict object。这会使得每个 predictor 可以专门的负责特定的物体检测。随着训练的进行,每一个 predictor 对特定的物体尺寸,长宽比,物体的类别的预测会越来越好。

训练时,需要优化的目标函数(loss function)如下:

训练中,总共进行了 135 轮 epoches,训练、验证集来自 PASCAL 、。当在 VOC 数据集上测试时,训练集包括了 VOC 的测试集。训练中,bacthsize 为 64,momentum 为 0.9,decay 为 0.0005.

Learning rate 的设置

(1)在第一轮 epoch 中,learning rate逐渐从10e-3增加到10e-2。如果训练时从一个较大的 learning rate 开始,通常因为不稳定的梯度,而使得模型发散。

(2)之后,保持 learning rate 为10e-2直到 epoch = 75;

(3)再接下的 30 轮 epoch,learning rate 为10e-3 ;

(4)最后 30 轮 epoch,learning rate 为 10e-4。

在训练中,为了避免 overfitting,使用了 dropout 技术,在第一层全连接层后面增加了一个 dropout layer,随机置零的 。为了防止 overfitting,也使用了 data augmentation 技术。

5 Inference(推理)

在训练好 YOLO 网络模型后,在 PASCAL VOC 数据集上进行 inference,每一张图像得到 98 个 bounding boxes,以及每个 bounding box 的所属类别概率。

当图像中的物体较大,或者处于 grid cells 边界的物体,可能在多个 cells 中被定位出来。可以用Non-Maximal Suppression(NMS,非极大值抑制,抑制不是极大值的元素,保留最好的) 进行去除重复检测的物体,可以使最终的 mAP 提高。

6 优缺点

优点:

a.YOLO 结构十分的快,标准的 YOLO 版本每秒可以实时地处理 45 帧图像。一个较小版本:Fast YOLO,可以每秒处理 155 帧图像,它的 mAP(mean Average Precision,平均精度)=依然可以达到其他实时检测算法的2倍。

b.YOLO 有更少的 false-positive,文章这里提到了一个词:background errors,背景误差。这里所谓的背景误差即是指 False Positive,误检,把背景当成了目标。

c.YOLO 可以学习到物体的更加泛化的特征,在将 YOLO 用到其他领域的图像时(如 artwork 的图像上),其检测效果要优于 DPM、R-CNN=这类方法。

缺点:

a. 相比较于其他的 state-of-art detection systems,YOLO 的定位更容易出错,这里的定位出错,即是指 coordinate errors

b.不擅长特别密集的场景,因为YOLO把图像分成了小格,每个 grid cell 中只能预测两个 boxes,以及一个类别。这种太强的空间约束,限制了 YOLO 对于相邻物体的检测能力,一旦相邻的物体数量过多,YOLO 就检测不好了。如对于一群鸟儿,这种相邻数量很多,而且又太小的物体,YOLO 难以进行很好的检测。

c.对于图像中,同一类物体出现新的、不常见的长宽比时,YOLO 的泛化能力较弱

d. 最后,loss functions 中对于 small bounding boxes,以及 large bounding boxes 的误差,均等对待。尽管正如前面提到的,大尺寸 bounding box 的 error 与小尺寸 bounding box 的 error,其影响是不同的。即使用了平方根的技巧优化了这个问题,但是这个问题还得得到更好的解决。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。