目标检测基础-YOLO系列

目录

YOLO v1 理论简单介绍:

论文思想:

YOLO v1的整个网络结构:

损失函数部分:

YOLO v1 存在的一些问题:

YOLO v2 理论简单介绍:

YOLO v2中的各种尝试(在原论文中的Better章节)

举个例子来理解PassThrough Layer

Faster 章节(Darknet-19)

YOLOv2模型框架:

YOLO v3理论讲解:

YOLO v3网络结构

 目标边界框的预测:

正负样本的匹配:

损失计算:

YOLO v3 SPP:

Mosaic图像增强:

SPP模块:

​CIOU  LOSS:

IOU LOSS:

GIoU Loss:

DIOU LOSS:

DIoU Loss的计算方式:

CIOU LOSS: 

通过样例来直观了解GIOU和CIOU loss的差别:


学习某一个网络的代码的流程:先看该网络的讲解视频(先有个大概印象)--->读该网络原文(了解细节)--->读代码,结合原论文进行参考(先跑通代码-->分析网络搭建部分的代码-->分析数据预处理和损失计算的代码)

YOLO v1 理论简单介绍:

You Only Look Onece:Unified,Real-Time Object Detection

2016 CVPR 45FPS 448×448 63.4mAP

论文思想:

1.将一副图像分成S×S个网格(grid cell)如果某个Object的中心落在这个网格中,则这个网格就负责预测这个object。

2.每个网格要预测B个 bounding box ,每个 bounding box 除了要预测位置(x,y,w,h)之外,还要附带预测一个 confidence 值(一共五个值)。每个网络还要预测 c 个类别的分数。

 目标检测基础-YOLO系列_第1张图片目标检测基础-YOLO系列_第2张图片

 Confidence 可以理解为预测 bounding box 和 真实的GT box 的交并比,值一般在0-1之间。

YOLO v1的整个网络结构:

目标检测基础-YOLO系列_第3张图片

损失函数部分:

目标检测基础-YOLO系列_第4张图片

 对于bounding box,坐标位置可以采用误差平方和,对于长和宽采用根号下的误差平方和是为了在同样偏移距离大小下,区分小的预测框和大的预测框的区别。

对于confidence,第一部分损失是计算的正样本的损失,第二部分是计算的是负样本的损失。对于正样本来说等于1 ,负样本的等于0. 

计算都是采用的预测值减去真实值。

YOLO v1 存在的一些问题:

1.YOLO v1对群体性的小目标检测效果很差。因为在YOLO v1的思想当中每个cell都只预测两个bounding box,而且这两个bounding box都属于同一个类别的。还有一种说法是貌似不对,两个Bounding box表示预测两个种类,只不过根据置信度的高低去掉一个,两个BB不代表一个种类。

2.目标比例问题,目标出现了新的尺寸和配置效果也会变差。

3.主要问题来自定位不准确,也就是作者直接预测目标的坐标信息,不像Fast-RCNN预测都是相对anchor的参数。所以从YOLOv2 开始作者就开始采用基于Anchor的回归预测定位目标。

YOLO v2 理论简单介绍:

YOLO9000:Better,Faster,Sttronger 2017 CVPR

这个名字还有个小故事,为什么会叫做YOLO9000呢?因为作者通过 pascal voc数据集 和 imagenet数据集 进行联合训练,最终能检测目标种类个数能超过9000.

目标检测基础-YOLO系列_第5张图片

YOLO v2中的各种尝试(在原论文中的Better章节)

1.Batch Normalization

2.High Resolution Classifier

3.Convolutional With Anchor Boxes

4.Dimension Clusters

5.Direct location prediction

6.Fine-Grained Features

7.Multi-Scale Training

1.作者在每个卷积后都添加了BN层,对训练收敛的提高非常大。减少了一系列正则化处理操作。并且BN层对模型能起到正则化的作用。在BN层之后可以移除Dropout操作了。

2.更高分辨率的分类器:更高分辨率的分类器能带来更高的 map提点。

3.使用 基于Anchor的目标边界框的预测 ,使用基于Anchor偏移的预测 相比于 直接预测 能够简化目标边界框预测的问题,使我们的网络更加容易去学习以及收敛。作者在原文中提到使用基于 Anchor的目标边界框的预测比没有使用的 map有微微的下降 ,但是 recall 却有很大的提升。recall的大幅提升,recall 的提升意味着模型有更多的提升空间。

4.相当于一个anchor的聚类。采用 k-means 聚类的方法来获取我们的anchor。且作者提高使用更好的 priors 的网络能更简单、更好的进行学习和预测。

5.(这一个点我木有听懂,我是fw。TvT)

6.主要思想是将高层信息与底层信息进行融合,以此来提升小目标检测的提升效果。原文中是融合26×26×512的和13×13×2048的特征图(其中经过了一个卷积层,特征图大小变成了26×26×64)。主要是通过 passthrough layer 来实现的。

目标检测基础-YOLO系列_第6张图片

举个例子来理解PassThrough Layer

目标检测基础-YOLO系列_第7张图片

首先这个特征矩阵的小大是4×4的,通过标注后得到的方格进行分离,得到了4个2×2的小方格。特征图大小由(4,4,1)--->(2,2,4)。特征图大小会缩小为原来的一半,深度变成原来的四倍。

7.多尺度训练方法,在原文中每迭代10次 都将网络的输入尺度进行一个随机的选择。YOLO v2的缩放因子是32,从输入的416×416到13×13的倍数就是32.

Faster 章节(Darknet-19)

目标检测基础-YOLO系列_第8张图片

 top1指取最大概率模型预测判断正确才算正确,top5指概率前五只要有判断正确的就视为正确。

Top-1是指预测结果中分数最高的那一类别和实际类别一致的准确率,Top-5是指预测结果中排名前5的类别中有一个和实际类别相符的准确率

YOLOv2模型框架:

目标检测基础-YOLO系列_第9张图片

 目标检测基础-YOLO系列_第10张图片

YOLO v3理论讲解:

YOLOv3:An Incremental Improvement

目标检测基础-YOLO系列_第11张图片

YOLO v3在当年与其他主流网络的对比。

YOLO v3网络结构

目标检测基础-YOLO系列_第12张图片

这里我们讨论一个问题。为什么Darknet53的网络的效果要比更深层的的ResNet的效果要好呢?

我们可以发现在我们的Darknet53的网络层中是没有Maxpooling层的。分析的原因就是使用了卷积层替代了最大池化下采样层;速度的提升在卷积核的数量上,Darknet网络的卷积核数量比同样深度的ResNet网络的卷积核要少很多。

目标检测基础-YOLO系列_第13张图片目标检测基础-YOLO系列_第14张图片

 由论文原文中知道,YOLOv3是在三个特征层上进行预测的,每个特征层上使用三种不同尺度的预测框(通过 k-means 聚类算法得到的,预设有九个边框)

 目标检测基础-YOLO系列_第15张图片

目标检测基础-YOLO系列_第16张图片

N(13,26,52,64,128)为预测框的大小,3表示在预测特征层上每个cell预测3个尺度,在每一个尺度上会预测4+1+80个参数,因为是coco数据集上所以是80个类别,对于每一个anchor而已要预测4个偏移参数+1个yolo特有的confidence score参数。

 目标边界框的预测:

 Pw和Ph对应的框是Anchor的框,anchor点的坐标是(Cx,Cy)是从左上角开始算的。

目标检测基础-YOLO系列_第17张图片

预测值是tx,ty,tw,th。首先通过tx,ty坐标通过sigmoid函数,分别加上Cx和Cy,得到了最终预测的bx和by。获得bw和bh的值使用对数可以防止宽和高变成负数。

正负样本的匹配:

针对每个GT都会分配一个bounding box prior(也就是正样本)。分配的机制是将与GT重合程度最大的bounding box prior作为正样本。某一个bouding box prior 不是最大但超过了某个预设值,这个bouding box就会被丢弃。如果某一个博uding box prior没有被分配给GT,那它既没有定位损失,也没有类别损失。只有Objectness,也就是confidence score。

损失计算:

目标检测基础-YOLO系列_第18张图片

目标检测基础-YOLO系列_第19张图片

目标检测基础-YOLO系列_第20张图片

目标检测基础-YOLO系列_第21张图片

YOLO v3 SPP:

SPP模块、CIOU Loss、Focal loss、Mosaic图像增强

Mosaic图像增强:

将多张图片拼接在一起,然后输入网络进行训练的过程。在YOLOv3 SPP源码当中默认使用4张图像进行拼接,然后预测。

优点:增加了数据多样性、增加目标的个数、BN能一次性统计多张图片的参数

SPP模块:

目标检测基础-YOLO系列_第22张图片 这里的Maxpool的步距都是等于1的。原文中SPP只添加在了第一个预测特征层之前。其实在第二、第三特征层之前也可以添加SPP模块。如下图,多的spp模块带来的提升并不大:

目标检测基础-YOLO系列_第23张图片CIOU  LOSS:

目标检测基础-YOLO系列_第24张图片

IOU LOSS:

通过图的右上角的三个边界框,我们可以发现最后一个的效果是比较好的。绿色代表GT,黑色代表预测框。但是如果是计算I2损失的话,这三组的值是一样的。

目标检测基础-YOLO系列_第25张图片

 这里有个更常用的用来计算IoU loss的公式,IoU loss = 1 - IOU。

GIoU Loss:

目标检测基础-YOLO系列_第26张图片

Ac等于蓝色边界框的面积,u对应GT(绿)和预测框(红)并集的面积.

缺点:GIOU在某些情况下会退化成IOU损失。

DIOU LOSS:

这里提到了IOU和GIOU有两个问题:收敛得慢、回归得不够准确。

1.图左边的第一行表示使用GIOU去训练网络,让预测的目标边界框尽可能的与真实边界框重合。黑色的框框代表的是anchor(default box),绿色的是GT BOX.我们的目的是通过我们的训练预测使得蓝色的框框尽可能和绿色框重合。我们可以看到分别迭代40、100、400步的样子。

图左边第二行是使用DIoU去训练网络的结果,我们可以看到分别迭代20、40、120步的样子。

由上图我们可以得知,DIOU相比较与GIOU收敛速度是更快的且效果能更好。

2.右边这副图给出了三组 预测边界框与真实边界框的 重合关系。我们可以看到这三组的边界框的位置是不一样的。通过结果看到,当计算IOU loss的时候结果是一样的,且计算GIOU loss的结果也是一样的,只有当计算DIoU的时候能表示出 预测边界框和真实边界框 不同的位置关系

DIoU Loss的计算方式:

表示为b,bgt之间的欧式距离,b为预测边界框的中心坐标,bgt为真实边界框的中心坐标。

c表示为预测框和真是框的最远的点的距离。完美的重合在一起的话,d平方-c平方为0,IOU等于1.

当预测框与真实框的距离为无穷远时,d平方-c平方等于1,IOU等于0,DIOU等于-1.

目标检测基础-YOLO系列_第27张图片

CIOU LOSS: 

CIOU通过 v和α长宽比 给引入进来了。

目标检测基础-YOLO系列_第28张图片

通过样例来直观了解GIOU和CIOU loss的差别:

由左一 

目标检测基础-YOLO系列_第29张图片

通过左一我们可以看到使用GIOU loss的识别结果还不算特别准确,而使用CIoU loss的时候却能完美的匹配到。第二幅也表示当使用GIOU的时候,对于火车的匹配效果也不是特别好。图三也类似。

你可能感兴趣的:(目标检测,计算机视觉,深度学习,人工智能,机器学习)