5.14笔记,yolov3

跳跃连接(skip connections)
  skip connections中文翻译叫跳跃连接,通常用于残差网络中。它的作用是:在比较深的网络中,解决在训练的过程中梯度爆炸和梯度消失问题。

上采样(Upsampling)
  缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的有两个:使得图像符合显示区域的大小;生成对应图像的缩略图。
  放大图像(或称为上采样(upsampling)或图像插值(interpolating))的主要目的是放大原图像,从而可以显示在更高分辨率的显示设备上。对图像的缩放操作并不能带来更多关于该图像的信息,因此图像的质量将不可避免地受到影响。然而,确实有一些缩放方法能够增加图像的信息,从而使得缩放后的图像质量超过原图质量的。详见:https://blog.csdn.net/stf1065716904/article/details/78450997

目标检测
  分类任务我们已经熟悉了,就是算法对其中的对象进行分类。而今天我们要了解构建神经网络的另一个问题,即目标检测问题。这意味着,我们不仅要用算法判断图片中是不是一辆汽车,还要在图片中标记出它的位置,用边框或红色方框把汽车圈起来,这就是目标检测问题。其中“定位”的意思是判断汽车在图片中的具体位置。

边界框回归(Bounding Box Regression)
  对于窗口一般使用四维向量(x,y,w,h)来表示,分别表示窗口的中心点坐标和宽高。对于图 2, 红色的框 P 代表原始的Proposal, 绿色的框 G 代表目标的 Ground Truth,我们的目标是寻找一种关系使得输入原始的窗口 P 经过映射得到一个跟真实窗口 G 更接近的回归窗口G^。


图2 边界框回归
  边框回归的目的:给定(Px,Py,Pw,Ph)寻找一种映射f,使得f(Px,Py,Pw,Ph)=(Gx^,Gy^,Gw^,Gh^)并且(Gx^,Gy^,Gw^,Gh^)≈(Gx,Gy,Gw,Gh)。详见:https://blog.csdn.net/zijin0802034/article/details/77685438/

 

IoU
  IoU是一种测量在特定数据集中检测相应物体准确度的一个标准。IoU是一个简单的测量标准,只要是在输出中得出一个预测范围(bounding box)的任务都可以用IoU来进行测量。详见:https://blog.csdn.net/briblue/article/details/91366128

非极大值抑制(Non-Maximum Suppression,NMS)
  非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索。这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二是邻域的大小。例如在行人检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分数。但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况。这时就需要用到NMS来选取那些邻域里分数最高(是行人的概率最大),并且抑制那些分数低的窗口。


图3 非极大值抑制
工作原理
此部分转自知乎大佬:https://zhuanlan.zhihu.com/p/36899263

 

 

全卷积神经网络
  YOLO仅是用卷积层,所以它是全卷积网络(FCN)。它具有75个卷积层,具有跳过连接和上采样层。不使用任何形式的池化,使用具有步幅为2的卷积层来下采样特征图。这有助于防止由于池化导致低级特征的丢失。
  作为FCN,YOLO的输入图像的大小是任意的。然而,在实践中,我们可能想要保持输入大小不变,因为各种问题只有在我们实现算法时才会显示出来。其中的一个重要问题是,如果我们想要批量处理图像(批量图像可以由GPU并行处理,从而提高速度),我们需要固定所有图像的高度和宽度。这是为了将多个图像级联成一个大批量(将多个PyTorch张量连接成一个)。
  网络通过称为网络步幅的因子对图像进行下采样。例如,如果网络的步幅为32,则尺寸为416 x 416的输入图像将产生尺寸为13 x 13的输出。一般而言,网络中任何层的步幅等于该层的输出的尺寸比网络的输入图像的尺寸小的倍数。

解析输出
  典型地,(对于所有目标检测器都适用)卷积层学习的特征会被传递到进行检测预测(边界框的坐标,类标签等)的分类器/回归器。在YOLO中,预测是通过使用1×1卷积的卷积层完成的。
  首先要注意的是我们的输出是一个特征图。由于我们使用了1 x 1卷积,所以预测图的大小恰好是之前的特征图的大小。在YOLO v3(以及它的后续版本)中,这个预测图的每个单元格可以预测固定数量的边界框。
虽然实际上描述特征图中的单元的正确术语应该是神经元,但将其称为单元格使得它在我们的上下文中更加直观。
  深度方面,我们在特征图中有(B x(5 + C))个条目。B表示每个单元可以预测的边界框的数量。根据该论文,这B个边界框中的每一个可能专门检测某种目标。每个边界框都有5 + C个属性,分别描述每个边界框的中心坐标,尺寸,目标分数(objectness score)和C个类的置信度。YOLO v3为每个单元格预测3个边界框。
  如果目标的中心位于单元格的感受野中,则希望特征图中的单元格可以通过其中一个边界框来预测目标。(感受野是输入图像对单元格可见的区域,进一步说明请参见关于卷积神经网络的链接)。
  这与YOLO是如何训练的有关,训练时只有一个边界框负责检测任何给定的目标。首先,我们必须确定这个边界框属于哪个单元格。
  为此,我们将输入图像划分成与最终特征图有相同维度的网格。让我们思考下面的一个例子,输入图像是416 x 416,网络的步幅是32。如前所述,特征图的维度将是13 x 13。于是,我们将输入图像划分为13 x 13个网格。


图4 特征映射
  然后,(在输入图像上)选择包含目标的真实标签框(ground truth box)的中心的单元格作为负责预测该目标的单元格。在图像中,它是标记为红色的单元格,它包含真实标签框(标记为黄色)的中心。现在,红色单元格是网格中第7行的第7个单元格。我们现在指派特征图上的第7行中的第7个单元(特征图中的相应单元)作为负责检测狗的单元。
  现在,这个单元格可以预测三个边界框。哪一个将被分配给狗的真实标签框呢?为了理解这一点,我们必须围绕锚的概念进行讨论。请注意,我们在这里讨论的单元格是预测特征图上的单元格。我们将输入图像分割成网格,以确定预测特征图的哪个单元格负责预测目标。

锚框(Anchor Box)
  预测边界框的宽度和高度可能是有意义的,但实际上,这会导致训练期间的梯度变得不稳定。因此,现在大多数目标检测器预测对数空间变换,或简单地预测与预定义的默认边界框(称作锚)之间的偏移。然后,对锚框进行这些变换以获得预测。YOLO v3有三个锚,可以为每个单元预测三个边界框。回到我们先前的问题,负责检测狗的边界框将是这样的边界框——它的锚与真实标签框有最高的IoU值。

预测
  以下公式描述了网络输出如何变换以获得边界框预测:


图5 输出公式
  bx,by,bw,bh是预测的中心坐标x,y,宽度和高度。 tx,ty,tw,th是网络的输出。 cx和cy是网格的左上角坐标。 pw和ph是的锚框的维度。

中心坐标
  注意我们正在通过一个sigmoid函数来预测中心坐标,它迫使输出的值压缩在0和1之间。为什么会这样呢?
  通常情况下,YOLO不预测边界框中心的绝对坐标。它预测的偏移相对于负责预测目标的网格单元的左上角。并且通过特征图中的单元的维度,即1,进行归一化。
  例如,图1狗的图像。如果预测的中心是(0.4,0.7),那么这意味着中心位于13×13特征图上的(6.4,6.7)。 (因为红色单元的左上坐标是(6,6))。
  但是,如果预测的x,y坐标大于1,会发生什么情况,比如(1.2,0.7)。这意味着它的中心位于(7.2,6.7)。注意现在中心位于红色单元,即第7排的第8个单元的右侧。这打破了YOLO背后的理论,因为如果我们假设红色框负责预测狗,狗的中心必须位于红色单元中,而不是位于红色单元旁。因此,为了解决这个问题,将输出通过一个sigmoid函数,该函数把输出缩小至0到1的范围内,有效地将中心保持在预测的网格单元中。

边界框的维度
  预测的边界框尺寸通过对输出进行对数空间变换,然后与锚点相乘来得到。


图6 如何将检测器输出转换为最终预测。图像来源: Christopher Bourez's blog
  预测的结果bw和bh通过图像的高度和宽度进行归一化。因此,如果包含狗的框的预测值bx和by(注:这里应该是bw和bh吧)分别为0.3和0.8,则13 x 13特征图上的实际宽度和高度为(13 x 0.3,13 x 0.8)。

 

目标分数
  目标分数表示边界框内包含目标的概率。红色及其相邻网格的目标分数应该接近1,而位于角落的网格接近0。目标分数也使用sigmoid函数来压缩数值,因为它被定义为一个概率。

类别置信度
  类别置信度表示检测目标属于特定类别(狗,猫,香蕉,汽车等)的概率。在YOLOv3之前的版本,YOLO对类别置信度使用softmax。
  但是,该设计选择已经在YOLO v3中被舍弃了,作者选择使用sigmoid。原因是对类别分数进行softmax意味着类别之间是互相排斥的。简而言之,如果一个目标属于一个类,那么它就不能属于另一个类。这对于COCO数据库来说是正确的,而我们将在COCO数据库上训练检测器。但是,当存在“女性”和“人”这样的类别时,这种假设可能不成立。这就是作者们避免使用Softmax激活的原因。

在不同尺度上进行预测


  YOLO v3可以进行3种不同尺度的预测。检测层在分别具有步幅32,16,8的三种不同尺寸的特征图上进行检测。这意味着,在输入416 x 416的情况下,我们在尺寸为13 x 13,26 x 26和52 x 52上进行检测。
  网络对输入图像进行下采样直到第一个检测层,它使用具有步幅为32的层的特征图进行检测。然后,将层上采样2倍,并与具有相同特征图尺寸的前一层的特征图连接。现在在具有步幅16的层上进行另一次检测,重复相同的上采样过程。并且在步幅8的层处进行最终检测。
  在每个尺度上,每个单元使用3个锚来预测3个边界框,锚的总数为9(在不同尺度上的锚是不同的)。


图7 不同尺度的特征图
  作者声称这有助于YOLO v3更好地检测小的物体,小型物体检测是困扰YOLO早期版本的问题。上采样可以帮助网络学习有助于小物体检测的细粒度特征。

 

输出处理
  对于尺寸为416×416的图像,YOLO预测((52×52)+(26×26)+ 13×13))×3 = 10647个边界框。但是,在我们的图像中,只有一个物体——一只狗。 我们如何将检测结果从10647减少到1?

目标置信度的阈值处理
  首先,我们根据目标分数过滤边界框。通常,具有低于阈值分数的框会被删除。

非最大值抑制
  NMS的作用是解决同一图像的的多重检测问题。例如,红色网格单元的3个边界框可能检测到同一个框,或者相邻单元可能检测到相同的目标。


图8 多重检测
执行过程
参照https://www.jianshu.com/p/f944ebd43f4c

 

数据集介绍
  MS COCO的全称是Microsoft Common Objects in Context,起源于是微软于2014年出资标注的Microsoft COCO数据集,与ImageNet 竞赛一样,被视为是计算机视觉领域最受关注和最权威的比赛之一。
  当在ImageNet竞赛停办后,COCO竞赛就成为是当前目标识别、检测等领域的一个最权威、最重要的标杆,也是目前该领域在国际上唯一能汇集Google、微软、Facebook以及国内外众多顶尖院校和优秀创新企业共同参与的大赛。
  该数据集主要解决3个问题:目标检测,目标之间的上下文关系,目标的2维上的精确定位。COCO数据集有91类,虽然比ImageNet和SUN类别少,但是每一类的图像多,这有利于获得更多的每类中位于某种特定场景的能力,对比PASCAL VOC,其有更多类和图像。
  该数据集有以下特点:

对象分割;
在上下文中可识别;
超像素分割;
330K图像(> 200K标记);
150万个对象实例;
80个对象类别;
91个类别;
每张图片5个字幕;
有关键点的250,000人;
执行结果

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值