YOLO系列算法学习

YOLO系列算法学习

YOLOV1算法

预测阶段(前向推断)

yolo基准模型和tiny模型结构

image-20221012161329197

基准模型

image-20221012161443041

为什么是7x7x30的输出?

image-20221012161532424

image-20221012161936030

image-20221012162047971

流程可视化

image-20221012162554682

image-20221012162610990

image-20221012162331513

预测阶段后处理-NMS非极大值抑制

image-20221012162951610

image-20221012163118223

image-20221012163242173

11

两个bboxs分别和20个类别的置信概率相乘,可以得到该框对应的真正类别

image-20221012163456739

image-20221012163521275

0

对应49个patch,分别得到对应的两个bboxs的对应类别的概率

image-20221012163630719

image-20221012163706038

image-20221012163758521

1

怎样只在结果图中展示出正确的类别?

基本流程如下

先使用非极大抑制,通过遍历的方法,每次让置信概率最大的和后面全的框进行IOU比较,如果大于0.5(设定好的阈值)就让该框的值为0,遍历一遍之后,在从头进行剩下的元素第二大的进行比较,知道全部比较完成。

image-20221012164012280

GIF

通过上面的筛选之后,获得到关于类别的稀疏矩阵,之后在竖直方向上比较,进行筛选最大的类别概率获得结果,对应正确的bboxs留在图中即可

3

训练阶段(反向传播)

一个方块(grid cell)生成两个bboxs,两个虚线是生成的bboxs,实线是Ground Truth,其中两个框中和Ground Truth IOU大的尽可能拟合Ground Truth

image-20221012170423064

没有Ground Truth落入grid cell时,该grid cell生成的bboxs都被舍弃

image-20221012191348104

Loss函数

这是回归损失函数,将目标检测当成回归问题

image-20221012191414588

论文细节

对比faster-rcnn

image-20221012192243405

基于faster-rcnn的模型融合

image-20221012192516506

下游任务表现好

image-20221012192624612

YOLOV2-YOLO 9000:Better,Faster,Stronger

回顾

image-20221012193226541

增加的trick(Better)

image-20221012193839160

Batch normalization

image-20221012193927874

image-20221012193944603

image-20221012194322903

image-20221012194404822

High Resolution Classifier

适应大分辨率,先在224x224数据上训练一会,在使用resize的448x448数据上训练10epoch,再使用目标检测数据集上进行训练

image-20221012194544516

Anchor 、Dimension Clusters 、Direct location prediction

其中V1中的bboxs在选定的时候没有任何限制和规则,例如图中的人和汽车的bbox都是相同的

image-20221012195045446

改进后的bboxs选定有初始设定,一个细长,一个矮胖,两个分别识别不同类型的物体,细长倾向于高的目标,矮胖的倾向于低长的目标

image-20221012195230424

image-20221012195247107

分成13x13的grid cell,使用五种初始bboxs

image-20221012195332035

feature map设定为奇数长宽,而不是使用偶数,因为奇数会有一个中心的grid cell,

image-20221012195519327

输出向量结构改变,因为一次性会生成五个框,所以这里是(4+1+20)*5=125

image-20221012195553702

image-20221012195735755

image-20221012195851875

anchor的大小怎样设定?

对两个目标检测数据进行了kmeans聚类,发现当选择5时性能折中 (蓝框是coco数据集框,黑框为VOC数据集)

image-20221012195943242

image-20221012200159907

对grid cell的选择进行归一化(0,1)之间,预测中心店约束在grid cell 内,使用sigmoid函数。

宽和高允许更大

防止野蛮生长,全图乱标

image-20221012200340450

image-20221012200604155

YOLOV2损失函数

image-20221012214942902

Fine-Grained Features(细粒度特征)

整合不同尺度信息,底层细粒度特征和高层信息融合,有利于小目标物体检测

image-20221012215820099

image-20221012215857051

image-20221012215955362

Multi-Scale Training

训练时每经过10个epoch更换输入图像大小,

image-20221012220236300

可以通过调整不同大小的图像,提升精度,选择一个合适的size配比

image-20221012220348679

image-20221012220427504

trick总结

image-20221012220458014

Faster

更换骨干网络

image-20221012220715782

Darknet结构(分类和检测结构)

image-20221012220751160

Stronger(类别更多)

将coco数据集和Imagenet数据集联合训练

image-20221012221039929

image-20221012221057632

image-20221012221157188

分级完成softmax

image-20221012221233017

对imagenet类别重新划分

image-20221012221428585

同等级的进行softmax

image-20221012221446009

树状分类

image-20221012221556593

image-20221012221616384

YOLOV3

性能展示

image-20221013092908596

image-20221013093043463

image-20221013093107489

Backbone骨干网络–Darknet-53

去掉分类头之后就变成了一个全卷积网络,输入大小不受限制

image-20221013093256049

YOLOV3网络结构

分别融合32倍、16倍、8倍下采样

image-20221013093503255

image-20221013093827506

image-20221013094000676

上采样使用差值法扩展图像

不同尺度对应的anchor box

image-20221013100302488

不再使用那个anchor的中心点落在那个grid cell里,而是选择那个anchor和ground truth的IOU最大

image-20221013100633837

image-20221013100751912

YOLOV3损失函数

image-20221013101336861

训练过程

image-20221013101454508

测试过程

image-20221013101532984

YoloV3-SPP

image-20221014093353822

Mosaic图像增强

使用四张图像进行拼接输入

一次性输入四张等同于batch-size为4,BN可以一次性统计多张图片的参数

image-20221014093502711

SPP模块

image-20221014093724581

image-20221014094254298

添加一个spp层和三个的对比

image-20221014094213945

Ciou Loss

iou的发展

image-20221014094419804

IOU loss

image-20221014094609927

GIou Loss

其中AC代表两个框中对应的最小边界矩形框,u为两个框的并集,有效避免了不相交loss为0的情况

image-20221014094907491

但是当两个框处于水平或者垂直的情况时,Giou会退化为Iou

image-20221014095143965

Diou loss

image-20221014101442221

其中d是两个框中心点的距离,c是大框的对角线距离

image-20221014103522910

Ciou loss

三个角度考虑:重叠面积、中心点、长宽比

image-20221014104040548

image-20221014104059395

Focal Loss

image-20221014104346933

image-20221014104739634

image-20221014105000119

其中 α \alpha α代表的不是比例系数,而是一个超参数,主要作用是平衡正负样本的比例

image-20221014105250533

论文中提出的公式

这里我们一般希望 p t p_t pt越大越好,对应的,到正样本中p则是越大越好,负样本中P越小越好

image-20221014105506468

展开详细的,并添加 α \alpha α效果相较之前会有些许提升

image-20221014105554643

效果

其中rate是指将原先的样本数量缩小多少倍

CE损失为常用的方法

FL为本文提到的focal loss

三种颜色代表区分的难易程度,越难学习的样本,降低的倍数越少

image-20221014110149824

使用Focal loss有两点需要注意:

1、调参比较麻烦,调不好效果差

2、标注数据尽量不要出错,否者会出现疯狂学习错误特征的情况,整个网络效果会变差

YOLOV4

image-20221014150330711

image-20221014150436676

网络结构

在Darknet53的基础上使用了CSP结构

cspnet结构是将输入特征图均分,在yolov4中是融合到输入的一半(卷积核步幅为2),并没有均分

image-20221014150709340

image-20221014150837966

image-20221014151053920

下面downsample3-5和2相同

添加SPP结构

image-20221014151203433

PAN结构

image-20221014151422557

整体网络结构

image-20221014151519906

优化策略

Eliminate grid sensitivity

原始方式

这种情况如果gtboxs的中心在一个grid cell的左上角,也就是 C x , C y C_x,C_y Cx,Cy,原本的计算公式很难到这个值

image-20221014152057504

优化之后

image-20221014152540290

Mosaic data augmentation

image-20221014152912800

IoU threshold(match positive samples)

V3中的用法

image-20221014153224506

V4的用法

由于V3中的做法生成grid cell对应anchor template正样本量太少,所以对应右下角的计算公式,旁边两个grid cell也是符合要求的,因此将这两个的对应anchor temple也设置成正样本,扩充正样本量。

image-20221014153440116

image-20221014153650014

对应的最后一种只会使用一个框,尽量避免公式中缩放的极限-0.5和1.5情况的出现

Optimizered Anchors

image-20221014153852385

CIOU

image-20221014153911948

YOLOV5

模型效果

image-20221014154456194

image-20221014154620979

网络结构

image-20221014154844147

image-20221014154922560

image-20221014155010201

数据增强

Mosic

image-20221014155203503

Copy paste

image-20221014155245444

Random affine(仿射变换)

image-20221014155332385

MixUp(将两张图片按照一定的透明度混合在一起)

只有10%的概率会启用

image-20221014155445488

Albumentations(需要单独下包,默认不安装该包)

滤波、直方图均衡化以及改变图片质量等等

Augment HSV(Hue,Saturation,Value)

image-20221014155637854

Random horizontal flip

image-20221014155719392

训练策略

Multi-sacale training(0.5~1.5x)

输入图像会被缩放到0.5倍到1.5倍之间整数倍

AutoAnchor(For training custom data)

等同于迁移学习,如果输入数据分类不合理,会自动通过聚类重新标注

Warmup and Cosine LR scheduler

训练初期热身,学习率根据cosin的方式下降

EMA(Exponential Moving Average)

学习参数加入动量,整个流程更平滑

Mixed precision

启动可以减少显存占用,加快训练,使用需要含有TensorCores的GPU才支持混合精度训练

Evolve hyper-parameters

调参方式

损失计算

image-20221014160535312

其中的Objectness loss和v3的不太一样,v3及以前的使用的是非0即1,这里使用的是与GT的Ciou

平衡不同尺度损失

P3,P4,P5对应不同大小目标,小、中、大

image-20221014160750884

消除Grid cell 敏感度

image-20221014161046203

image-20221014161100263

对比之前的方法,v5在长宽的基础上做了限制,不变之前长度和宽度可能会出现爆炸性增长,使用sigmoid修改之后将大小限制在0-4之间,避免了这种问题

image-20221014161133864

匹配正样本

image-20221014161548026

anchor_t=4的设置是因为上面敏感度的设置将长宽限制在0~4

匹配的时候通过左边的公式计算,如果 r m a x r^{max} rmax小于4,则匹配成功,否者失败

接下来得到正样本的方法和之前一样,扩充正样本数量

image-20221014161851862

YOLOX

概述

旷世研究院新作

image-20221015092741767

image-20221015092914586

对于两种网络怎么选择?

对于小分辨率,640x640大小,二者都可以进行尝试,如果是大分辨率图像最好使用V5,因为yolox在官方仓库中为提供大分辨率的检测

网络结构

image-20221015093126284

解耦的分类头

V5的检测头

image-20221015093855405

yoloX的检测头

image-20221015093920227

image-20221015093657616

Anchor Free

image-20221015094118463

损失计算

image-20221015094238541

正负样本匹配SimOTA

image-20221015094347241

image-20221015094433962

image-20221015094548878

image-20221015094829696

image-20221015095021634

image-20221015095039159

image-20221015095300360

猜你喜欢

转载自blog.csdn.net/charles_zhang_/article/details/127331557