天天看点

读yolo目标识别算法有感

图像识别算法是计算机视觉的基础算法,例如VGG,GoogLeNet,ResNet等,这类算法主要是判断图片中目标的种类。目标检测算法和图像识别算法类似,但是目标检测算法不仅要识别出图像中的物体,还需要获得图像中物体的大小和位置,使用坐标的形式表示出来。而对于目标检测算法来说,它的输出值更像是这样:

读yolo目标识别算法有感

其中:

  • pc 为1时代表有物体被检测到,反之,没有物体被检测到,因此其他的输出值可以被忽略
  • bx 目标的x坐标值 为目标的左上角到物体中心的相对坐标
  • by 目标的y坐标值 为目标的右下角到物体中心的相对坐标值
  • bh 区域框bounding box的高
  • bw 区域框bounding box的宽

c1、c2、c3是目标属于分别表示三种物体出现的的概率,基于此,我们可以使用滑动窗口对整张图片进行处理来定位目标。就像是用一个放大镜去图像的每个区域去查找是否包含目标。

我们会使用滑动窗口时,许多计算都是重复性计算,我们可以使用卷积神经网络的思想。可以使用卷积计算代替滑动窗口。这里的窗口是固定的,如果需要检测不同大小的物体,需要不同大小的很多的窗口,这也就是是YOLO算法需要解决的重要问题。至于目标检测的用处,现在最大的场景就是无人驾驶,在无人驾驶中,需要实时检测出途中的人、车、物体、信号灯、交通标线等,再通过融合技术将各类传感器获得的数据提供给控制中心进行决策。而目标检测相当于无人驾驶系统的眼睛。

下面说说YOLO的思想。

YOLO是You Only Look Once的缩写。这也是为了特别突出YOLO区别于两阶段算法的特点,从名字就可以感受到,YOLO算法速度很快,事实上也是如此。可以看出在同样的设备上,YOLO可以达到45帧每秒的速度。在YOLO中,目标图片被划分为Grid Cell。Anchor Box使得YOLO可以检测出同一个grid cell中包含多个物体的情况。Anchor box为标签增加了更多的纬度。如果我们可以对每个物体对应一个anchor box来标识。为了解释方便,这里我们只使用两个anchor box。介绍了YOLO中的一些基本概念后,我们先看看YOLO是如何进行目标检测的。假设我们已经训练出了YOLO的模型:第一输入待检测的图片,对图片进行一系列的处理,使得图片的规格符合数据集的要求。第二,通过模型计算获得预测输出,假如使用的是19*19的grid cell数目,5个anchor box, 80个分类,于是输出的纬度为(1,19,19,5,80+5)。第三,对于输出值进行处理,过滤掉得分低的值,输出值中的Pc 在原论文中被称为confidence 而C被称为 probs,得分为confidence * probs,可以看出,所谓的得分就是含有目标的概率值。第四,同一个物体可能会有多个grid cell预测到,那么同一个物体就会有多个bouding box,我们需要留下具有最高pc值的预测值,将其他的预测值过滤掉。如何判断多个bounding box预测的是同一个物体呢,这里就需要使用IOU算法。最后得到的值就是图片中被预测的目标的类型和位置值,再经过一系列计算和转换变成图片上的真实坐标值,使用工具画到原图上。

yolo v1的缺点在于bbox的定位不准,精度低,对于小物体的检测效果不好,yolo v1对于小物体的检测效果较差,yolo v2借鉴了Faster-RCNN和SSD的思想,在不同层次的特征图上获取不同分辨率的特征。

Yolov2有的改进:

  • 移除Dropout
  • 使用了更高分辨率的分类器.
  • 学习faster rcnn一类的算法,引入了anchor。
  • 作者也丢弃了之前在yolo v1中使用全连接来进行预测,因为全连接层参数较多,也会丢失一些空间信息,采用卷积网络来替换,这样yolo v2是一个全卷积的网络结构。
  • 使用直接的定位预测。
  • 使用细粒度特征。
  • 使用了多尺度的训练。

Faster

很多的detection frameworks把vgg作为backbone来提取突破特征,但是vgg的效果一般,而且参数较多,作者为yolo v2设计了一个新的backbone叫做Darknet-19(有19个卷积层)。Darknet-19在imagenet上获得了比vgg更好的top-5准确率。

Stronger

这一部分主要讲的是如何利用wordtree联合训练分类和检测任务,使得yolo v2可以检测training data中没有出现过的类别,

Yolo v3

yolo v3也就是把一些视觉这块最新的思想融入了yolo的框架之中,作者也在论文中表示最近都在玩推特,但是yolo v3的效果确实非常的好,接下来就看看作者在yolo v3上做了哪些改进。

3.1.bbox预测:

yolov3对每个bounding box通过逻辑回归预测一个物体的得分,如果预测的这个bounding box与真实的边框值大部分重合且比其他所有预测的要好,那么这个值就为1.如果overlap没有达到一个阈值(yolov3中这里设定的阈值是0.5),那么这个预测的bounding box将会被忽略,也就是会显示成没有损失值。

3.2.多标签分类:

在yolo v2中对于每个bbox的类别预测使用的是softmax,但在yolo v3中使用了sigmoid,主要是为了应对多标签分类的问题。

3.3.多尺度预测:

这里借鉴了SSD和FPN的思想,提取多个feature map并且利用低层的高分辨率信息和高层的语义信心融合后进行预测。

3.4.新的back-bone网络:

新设计了一个网络Darknet53,该网络学习了resnet的residual block,并且采用了SSD的思想输出多个feature map,规模也比yolo v2的Darknet13大。

继续阅读