IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> YOLO系列(v1-v4)精华总结 -> 正文阅读

[人工智能]YOLO系列(v1-v4)精华总结

YOLOV1

核心思想:把目标检测简化为回归问题,从像素出发得框和分类概率;以整张图片进行输入,在输出层对框的位置和类别进行回归。

实现:

1.整张图像会被分为NxN个网格,若某个目标的中心在在网格内,则此网格对目标进行预测。

2.每个网格预测B个框的位置信息和置信度,一个框对应四个位置信息和一个置信度值(预测框和标签框的IOU);位置信息包括x,y,h,w;其中x和y代表中心坐标,h和w代表框的高和宽。

3.每个网格预测一个类别信息为C,所以每个网格要预测B个框还有C个类别信息。所以输出是S x S x (5*B+C)的一个张量。(张量实际上就是一个多维数组)

流程概括:

(1)给个一个输入图像,将图像划分成7*7的网格。

(2)对于每个网格,我们都预测2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)。

(3)根据上一步可以预测出7*7*2个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口即可。

网络结构:

GoogLeNet 作为神经网络主干,24层卷积层加上两层全连接层

损失函数:误差平方和函数

存在的问题:

(1)8维的定位误差和20维的分类误差同等重要显然是不合理的;

(2)如果一个网格中没有目标(一幅图中这种网格很多),那么就会将这些网格中的框的置信度变为0,相比于较少的有目标的网格,这会导致网络不稳定甚至发散。

解决方法:

(1)重点是8维的坐标预测,给这些损失前面赋予更大的损失权重。

(2)对没有目标的框的置信度损失,赋予小的损失权重。

(3)有目标的框的置信度损失和类别的损失的损失权重正常取1。

损失函数中:

(1)只有当某个网格中有目标的时候才对分类误差进行惩罚。

(2)只有当某个框预测对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth box的IoU是不是在那个cell的所有box中最大。

优点:

1.快速,简单.

2.背景误检率低。

3.通用性强。

缺点:

1.由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率。

2.虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。这是YOLO方法的一个缺陷。

3.YOLO loss函数中,大物体IOU误差和小物体IOU误差对网络训练中loss贡献值接近(虽然采用求平方根方式,但没有根本解决问题)。因此,对于小物体,小的IOU误差也会对网络优化过程造成很大的影响,从而降低了物体检测的定位准确性。


YOLOV2

(补充点):

FPS:FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS也可以理解为我们常说的“刷新率(单位为Hz)”;f就是英文单词Frame(画面、帧),p就是Per(每),s就是Second(秒)。用中文表达就是多少帧每秒,或每秒多少帧。

mAP 是?Mean Average Precision? 的缩写,即?平均AP值。作为?目标检测?中衡量检测精度的指标

mAP = 所有类别的平均精度求和除以所有类别

改进:

(1)Batch Normalization(批量归一化)

(2)High resolution classifier(高分辨率图像分类器)

(3)Convolution with anchor boxes(使用先验框)

(4)?Dimension clusters(聚类提取先验框的尺度信息)

(5)Direct location prediction(约束预测边框的位置)

(6)Fine-Grained Features(passthrough层检测细粒度特征)

(7)Multi-ScaleTraining(多尺度图像训练)

(8)Darknet-19(backbone网络)

(9)Hierarchical classification(分层分类)

(10)保证处理速度基础上,更准、更快、识别对象更多。

(11)训练算法为训练方法–联合训练算法,两种数据集混合到一起。使用一种分层的观点对物体进行分类,用巨量的分类数据集数据来扩充检测数据集。

联合训练算法思路:同时在检测数据集和分类数据集上训练物体检测器,用检测数据集的数据学习物体的准确位置,用分类数据集的数据来增加分类的类别量、提升健壮性。

批量归一化

具体精华内容可见:

Batch Normalization(批量归一化精解)---key point系列(六)_T_just_for_tomorrow的博客-CSDN博客https://blog.csdn.net/T_just_for_tomorrow/article/details/125329446?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22125329446%22%2C%22source%22%3A%22T_just_for_tomorrow%22%7D&ctrtid=Vd5AX

High resolution classifier(高分辨率图像分类器):

YOLOV2在采用 224*224 图像进行分类模型预训练后,再采用 448*448 的高分辨率样本对分类模型进行微调。

Convolution with anchor boxes(使用先验框):

?YOLOV2采用先验框(anchor)。 在每个网格预先设定一组不同大小和宽高比的边框,来覆盖整个图像的不同位置和多种尺度;会导致召回率升高,mAP轻微下降的原因在于,框多但是无用的会占据一些,导致mAP下降,同时预测得到正确的框也多了,所以召回率增加。

Dimension clusters(聚类提取先验框的尺度信息):

统计出更符合样本中对象尺寸的先验框,对训练集中标注的边框进行K-mean聚类分析,以寻找尽可能匹配样本的边框尺寸。

Direct location prediction(约束预测边框的位置):

调整预测公式,将预测边框的中心约束在特定gird网格内,使网络学习更稳定。

Fine-Grained Features(passthrough层检测细粒度特征):

为保留细节特征,加入passthrough层,在最后一个pooling之前,特征图的大小是26*26*512,将其1拆4,直接传递(passthrough)到pooling后(并且又经过一组卷积)的特征图,两者叠加到一起作为输出的特征图。

?Multi-ScaleTraining(多尺度图像训练):

每迭代几次都会改变网络参数。每10个?批次?,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是32,所以不同的尺寸大小也选择为32的倍数{320,352…..608},最小320*320,最大608*608,网络会自动改变尺寸,并继续训练的过程。

网络结构:

主干网络为Darknet-19,有19个卷积层和5个maxpooling层,采用全局平均池化的方法进行预测,并采用 1*1?卷积来压缩 3*3?卷积之间的特征表示。使用批处理归一化来稳定训练,加快收敛速度,并对模型进行规范化。

Hierarchical classification(分层分类)

实现在分类数据集和检测数据集上联合训练的机制;遇到来自分类集的图片则只计算分类的Loss,遇到来自检测集的图片则计算完整的Loss。

损失函数:

可分为五层:

1.负责检测物体的bbox的置信度误差,

2.预测框与锚框误差,

3.定位误差,

4.置信度误差,

5.分类误差。

也就是说YOLOV2(LOSS) = 1+2+3+4+5。


YOLOV3

网络结构:

?与之前的模型相比,复杂度增加很多

DBL:卷积+BN+Leaky relu

resn:n代表数字,代表含有多少个res_unit

CONCAT:张量拼接。将darknet中间层和后面的某一层的上采样进行拼接。

拼接的操作和残差层add的操作是不一样的,拼接会扩充张量的维度,而add只是直接相加不会导致张量维度的改变。

将模型应用于图像的多个位置和尺度。评分较高的区域就可以视为检测结果;将一个单神经网络应用于整张图像,该网络将图像划分为不同的区域,因而预测每一块区域的边界框和概率,这些边界框会通过预测的概率加权。

测试时会查看整个图像,所以它的预测利用了图像中的全局信息,通过单一网络评估进行预测,加快速度。

改进的地方:

多尺度预测 (引入FPN)

更好的基础分类网络(darknet-53, 类似于ResNet引入残差结构)

分类器不在使用Softmax,分类损失采用binary cross-entropy loss(二分类交叉损失熵)

基础网络为Darknet-53;结构主要由75个卷积层构成,没有使用全连接层,使网络可以对应任意大小的输入图像,没有池化层,使用卷积层的stride设为2来达到下采样的效果。同时将尺度不变特征传送到下一层;使用ResNetFPN网络的结构提高检测精度;

?检测结构:

?YOLOV3思想理论是将输入图像分成SxS个格子(有三处进行检测,分别是在52x52, 26x26, 13x13的feature map上,即S会分别为52,26,13),若某个物体Ground truth的中心位置的坐标落入到某个格子,那么这个格子就负责检测中心落在该栅格中的物体。三次检测,每次对应的感受野不同,32倍降采样的感受野最大(13x13),适合检测大的目标,每个cell的三个anchor boxes为(116 ,90),(156 ,198),(373 ,326)。16倍(26x26)适合一般大小的物体,anchor boxes为(30,61), (62,45),(59,119)。8倍的感受野最小(52x52),适合检测小目标

使用sigmoid函数:YOLO不预测边界框中心的绝对坐标,它预测的是偏移量,预测的结果通过一个sigmoid函数,迫使输出的值在0~1之间;sigmoid函数在0到1的范围内缩放输出,有效地将中心保持在预测的网格中。

loss计算时 anchor box与ground truth的匹配。

因为是监督学习,通过知道网络预测的结果,从而逼近真实的label

将每个锚框(anchor boxes)视为一个训练样本,需要标记每个anchor box的标签,即类别标签和偏移量。所以我们只需要考虑有目标的anchor boxes,那么目标是什么?ground truth的中心落在哪个cell,那对应这三个anchor boxes就有,所以计算ground truth与anchor boxeses的IOU;只需要选取重叠度最高的anchor box就可以,再将三个anchores通过torch.stack后max(0)下就知道选择三个中的哪个了。

?多尺度预测:更好地对应不同大小的目标物体:

每种尺度预测3个box, anchor的设计方式仍然使用聚类,得到9个聚类中心,将其按照大小均分给3个尺度.

尺度1: 在基础网络之后添加一些卷积层再输出box信息.

尺度2: 从尺度1中的倒数第二层的卷积层上采样(x2)再与最后一个16x16大小的特征图相加,再次通过多个卷积后输出box信息.相比尺度1变大两倍

尺度3: 与尺度2类似,使用了32x32大小的特征图.

SSD做法为:在不同深度的feature map获得后,直接进行目标检测,这样小的物体会在相对较大的feature map中被检测出来,而大的物体会在相对较小的feature map被检测出来,从而达到对应不同scale的物体的目的。

在实际的特征图中,随着网络深度的加深,浅层的feature map中主要包含低级的信息(物体边缘,颜色,初级位置信息等),深层的feature map中包含高等信息(例如物体的语义信息:狗,猫,汽车等等)。因此在不同级别的feature map中进行检测,听起来好像可以对应不同的scale,但是实际上精度并没有期待的那么高。

对于多重scale,目前主要有以下几种主流方法:

(a)特征图像金字塔:首先对于一幅图像建立图像金字塔,不同级别的金字塔图像被输入到对应的网络当中,用于不同scale物体的检测。但这样做的结果就是每个级别的金字塔都需要进行一次处理,速度很慢。

(b)单特征图:只在最后一个特征图阶段进行检测,这个结构无法检测不同大小的物体。

(c)特征金字塔层次结构:对不同深度的feature map分别进行目标检测。 SSD中采用的便是这样的结构。 每一个feature map获得的信息仅来源于之前的层,之后的层的特征信息无法获取并加以利用。

(d)特征金字塔网络:

特征金字塔网络相当于先进行传统的bottom-up自上而下的特征卷积,然后FPN试图融合左侧特征图的相邻的特征图。左侧模型叫bottom-up,右侧模型叫top-down,横向的箭头叫横向连接。这么做的目的是因为高层的特征语义多,低层的特征语义少但位置信息多。

ResNet残差结构:更好地获取物体特征

加一条shortcut path,学习过程就从直接学习特征,变成在之前学习的特征的基础上添加某些特征,来从而获得更好的特征。

替换softmax层:对应多重label分类

Softmax层被替换为一个1x1的卷积层+logistic激活函数的结构;Softmax不适用于多标签分类


YOLO v4

整体网络结构:

主干网络为:CSPDarknet53

中间挖网络为:SPP+PAN

头部网络为:YOLO HEAD

改进部分:

YOLOV3--DarkNet53;YOLOV4---CSPDarkNet53

YOLO V3--FPN;YOLO V4---SPP+PAN

CutMix数据增强和马赛克(Mosaic)数据增强

DropBlock正则化

进程1:

接受CSPDarknet53最终的输出,返回变量y19

进程二:

将上述的y19进行上采样大小38x38,然后再和CSPDarknet53的204层输出进行堆叠,最后通过一系列DarknetConv2D_BN_Leaky模块,获得特征图y38。

进程三:

接受y_38上采样后的特征图?y38_upsample以及darknet网络的第131层输出作为输入,从而获得特征图y_38。

YOLO Head1:

在进程三之后简单的5+2层卷积层对上面的y76进行输出,该网络最后使用1x1卷积输出最大的一张特征图y76_output,维度为(76,76,num_anchor*(num_classes+5))。对应结构图中最大的输出特征图(最右边的淡蓝色特征图)

进程四:

PAN和FPN的差异在于,FPN自顶向下的特征融合,PANFPN基础上,多了个自底向上的特征融合。具体自底向上的特征融合,就是process4完成的,可以看到该步骤先将y76下采样至38x38大小,再和y38堆叠,作为YOLO HEAD2的输入。

YOLO Head2:

YOLO HEAD2进行一系列卷积运算,获得维度大小为(38,38,num_anchor*(num_classes+5))的输出y38_output。

进程5:

与进程4相似

YOLO Head3:

YOLO HEAD 3输出为(19,19,num_anchor*(num_classes+5))的特征图y19_output。

损失函数:根据预测框真实框中心点坐标以及宽高信息设定MSE(均方误差)损失函数或者BCE损失函数

(a)使用IOU损失代替MSE损失

IOU损失为1与预测框A和真实框B之间交并比的差值

缺点:只在bounding box重叠的时候才管用

(b)GIOU损失

为了缓解上述IOU损失在检测框不重叠时出现的梯度问题,定义就是在原来的IOU损失的基础上加上一个惩罚项

缺点:预测框是以先验框为基础进行位置移动和大小缩放的。GIOU首先尝试增大预测框的大小,使得它能够与真实框有所重叠,然后才能进行公式的计算。这样做会消耗大量的时间在预测框尝试与真实框接触上,这会影响损失的收敛速度。

(c)DIOU

直接在IOU损失的基础上加了一个简单的惩罚项,用来最小化两个检测框中心点的标准化距离,这样可以加速损失的收敛过程

(d)CIOU

DIOU考虑到了两个检测框的中心距离。而CIOU考虑到了三个几何因素,分别为重叠面积、中心点距离、长宽比

CIOU比DIOU多了一个长宽比的信息

?惩罚项作用就是控制预测框的宽高能够尽可能快速地与真实框的宽高接近。

YOLO V4相较于YOLO V3,只在bounding box regression做了创新,用CIOU代替了MSE,其他两个部分没有做实质改变

YOLOV4加入的改进点:

1.Weighted-Residual-Connections(加权残差连接 WRC)

可以更好更快的结合不同层传递过来的残差,虽然增加了一些计算量,但是当网络层数从100+增加到1000+时,网络效果更好,收敛速度更快。

2.Cross-Stage-Partial-connections (?跨阶段部分连接CSP)

网络计算量大是由于在网络优化的过程中重复的梯度信息,将一个stage的头尾两部分的特征图集成起来,来解决这个问题,减少了至少20%的计算量。

3.Cross mini-Batch Normalization?(交叉迷你批量规范化 CmBN)

4.Self-adversarial-training(自适应对抗训练SAT)

是数据增强的技巧,在前后两阶段上进行操作。在第一阶段,神经网络代替原始的图片而非网络的权重。用这种方式,神经网络自己进行对抗训练,代替原始的图片去创建图片中此处没有期望物体的描述。在第二阶段,神经网络使用常规的方法进行训练,在修改之后的图片上进行检测物体

将SAM的spatial-wise注意力变成了point-wise注意力机制,然后将PAN中的shortcut连接变成了concatenation连接,正如图5和图6所表示的那样?

5.激活函数Mish

?x轴无边界(即正值可以达到任何高度)避免了由于封顶而导致的饱和。理论上对负值的轻微允许,能够允许更好的梯度流,而不是像ReLU中那样的硬零边界。最后,平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性和泛化能力。

6.Mosaic data augmentation(马赛克数据增强?)

一种混合四幅训练图像的数据增强方法

7.DropBlock regularizationDropBlock 正则化)?

一种针对卷积层的正则化方法DropBlock

通过d去掉一部分相邻的整片的区域(比如头和脚),网络就会去注重学习别的部位的特征,来实现正确分类,从而表现出更好的泛化。

8.CIOU损失

用到的技巧:

用于backbone的BoF:CutMix和Mosaic数据增强,DropBlock正则化,Class label smoothing

用于backbone的BoS:Mish激活函数,CSP,MiWRC

用于检测器的BoF:CIoU-loss,CmBN,DropBlock正则化,Mosaic数据增强,Self-Adversarial 训练,消除网格敏感性,对单个ground-truth使用多个anchor,Cosine annealing scheduler,最佳超参数,Random training shapes

用于检测器的Bos:Mish激活函数,SPP,SAM,PAN,DIoU-NMS

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-06-23 00:53:40  更:2022-06-23 00:53:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:33:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码