第一章 YOLO系列概述

1.深度学习经典检测方法

yolov5图像识别怎么弄 yolo识别物体_卷积

(1) tow-stage(两阶段):Faster-rcnn Mask-rcnn系列:增加了区域建议网络(RPN),即预选框
特点

  • 速度通常较慢(5FPS),但是效果通常不错
  • 非常实用的通用检测框架MaskRcnn

(2) one-stage(单阶段):YOLO系列
特点

  • 最核心的优势:速度非常快,适合实时检测
  • 检测效果比较一般

回归任务:
首先,输入一张图片,经过一个CNN,提取出一个高维的特征,最后面一层不再接softmax进行分类,而是预测出4个坐标值,由[x,y,w,h]组成,那么如何来计算这四个值呢?
对于每一张图片,我们有一个grounding truth,grounding truth就是给定的框的实际数据,我们要做的就是使神经网络预测出来的框不断地拟合给定的输入,即不断接近真正的框。我们用L2欧式距离计算差异值,预测出来的框和grounding truth越接近,loss值越小,利用SGD对CNN的参数不断调节,让loss达到收敛的预期效果。这一过程就可以称之为回归过程。

2.指标分析

1)mAP指标:综合衡量检测效果
2)IOU:交集和并集的比值
3)准确率:TP/(TP+FP)
4)召回率:TP/(TP+FN)

第二章 YOLOv1

yolov5图像识别怎么弄 yolo识别物体_卷积_02

1. 核心思想

将输入图像划分为SxS的网格,每个网格的中心点产生两种候选框,对置信度高的中心点(或者设置一定的阈值)对应的两个候选框进行筛选(选择IOU大的),进行微调,得到其的(x,y,w,h)。

yolov5图像识别怎么弄 yolo识别物体_卷积_03

2. 网络架构

yolov5图像识别怎么弄 yolo识别物体_开发语言_04


最终输出为:14701=77*30

yolov5图像识别怎么弄 yolo识别物体_计算机视觉_05

3. 损失函数

理解算法主要关注以下部分:

网络架构最终输出值(全连层),以及损失函数怎么定义。

yolov5图像识别怎么弄 yolo识别物体_卷积_06

3.1 位置误差(x,y,w,h)

预测位置与真实位置之间的差值,损失函数越小越好

为什么w,h添加根号?(使损失函数对较小物体比较敏感,但是在v1版本没有根本解决这个问题)

yolov5图像识别怎么弄 yolo识别物体_开发语言_07

3.2 置信度误差

基于置信度计算当前网格的候选框是背景还是前景

yolov5图像识别怎么弄 yolo识别物体_卷积_08

3.3 分类误差

预测该类别的概率和真实该类别的概率之差(交叉熵)

yolov5图像识别怎么弄 yolo识别物体_卷积_09

3.4 NMS非极大抑制

  • 主要针对同一类别的重叠检测框
  • 先按置信度进行排序(从大到小)
  • 只取最大值(存在缺陷:最大的置信度不一定是检测效果最佳的,或者说IOU最大的)

3.5 YOLOv1存在问题

  • 每个Cell只预测一个类别,重合在一起的物体难以检测
  • 小物体难以检测(两种候选框主要针对检测较大的物体,候选框的长宽比过于单一)
  • 多标签难以检测(同一物体映射多个标签)

第三章 YOLOv2

yolov5图像识别怎么弄 yolo识别物体_matlab_10

1. YOLOv2-Batch Normalization

什么是Dropout:主要运用在全连接层,杀死一部分的神经元,防止网络过于拟合
什么是Batch Normalization:对每层卷积层进行归一化

  • (1)V2版本舍弃Dropout,卷积后全部加入Batch Normalization,V2不再有全连接层
  • (2)网络的每一层的输入都做了归一化,收敛相对更容易
  • (3)经过Batch Normalization处理后的网络会提升2%的mAP
  • (4)从现在的角度看,Batch Normalization已经成为网络必备处理

2. YOLOv2-更大的分辨率

  • (1)V1训练时用224224,测试时用448448
  • (2)可能导致水土不服,V2训练时额外又进行了10次448*448的微调
  • (3)使用高分辨率分类器后,YOLOv2的mAP提高了约4%

3. YOLOv2(DarkNet19)-网络结构

  • (1)DarkNet,实际输入为416*416(必须被32整除后最好为奇数)
  • (2)没有FC层,全部为卷积层,5次降采样(2^5=32),(13*13)
  • (3)1*1卷积节省了很多参数

4. YOLOv2聚类提取先验框(anchor)

  • (1)faster-rcnn系列选择的先验比例都是常规的,但是不一定完全适合数据集(9种先验比例,3种尺寸大小,3种比例(1:1, 1:2, 2:1))
  • (2)K-means聚类中的距离d(box,centroids) = 1-IOU(box,centroids)(距离不是采取欧氏距离,而是利用1-IOU作为距离判断)

利用聚类中心点的w和h作为先验框尺寸

yolov5图像识别怎么弄 yolo识别物体_matlab_11

5. YOLOv2-Anchor Box

  • (1)通过引入anchor boxes,使得预测的box数量更多(1313n)
  • (2)跟faster-rcnn系列不同的是先验框并不是直接按照长宽比固定比给定

6. YOLOv2-Directed Location Prediction(定向位置预测)

  • (1)bbox:中心为(xp,yp);宽和高为(wp,hp),先验框加上预测的偏移量,则
  • (2)tx=1,则将bbox在x轴向右移动wp;tx=-1则将其向左移动wp
  • (3)这样会导致收敛问题,模型不稳定顶,尤其是刚开始进行训练的时候
  • (4)V2中并没有直接使用偏移量,而是选择相对grid cell 的偏移量
  • 计算公式为:
  • -将偏移量归一化,使得偏移不超过当前预测网格范围(利用sigmoid函数进行归一化),再加上相对位置坐标。

7. YOLOv2-Fine-Grained Features

  • (1)最后一层时感受野太小了,小目标可能丢失了,需要融合之前的特征

8. YOLOv2-Multi-Scale

  • (1)都是卷积操作无法限制,一定iterations之后改变输入图片大小
  • 最小的图像尺寸为320*320
  • 最大的图像尺寸为608*608

感受野的认识

1. 感受野

  • 概述来说就是最后一个特征图上的一个点能看到原始图像多大区域(可以理解为对原始图像特征的一个浓缩)
  • 感受野有什么用?怎么把感受野融入到物体检测任务中去?
  • 越大的感受野越能考虑图像的全局信息
  • 为什么非要堆叠多个小卷积,而不是直接用一个大卷积实现感受野的扩充呢?(为什么当前的网络卷据一般都是用尺寸较小的卷积核)
  • 很明显,堆叠小的卷积核所需的参数更少一些,并且卷积过程越多,特征提取也会越细致,加入的非线性变换也随着增多,还不会增大权重参数个数,这就是VGG网络的基本出发点,用小的卷积核来完成特征提取操作,并且每个卷积操作后面相应的跟着一个BN(Batch Normalization)。

第四章 YOLOv3(DarkNet53)

这张图讲道理真的过分了!!! 我不是针对谁,在座的各位都是。。。。

yolov5图像识别怎么弄 yolo识别物体_yolov5图像识别怎么弄_12

  • (1)终于到V3了,最大的改进就是网络结构,使其更适合最小目标检测
  • (2)特征做的更加细致,融入多持续特征图信息来预测不同规格物体
  • (3)先验框更丰富了,3种scale,每种3个规格,一共9种
  • (4)softmax改进,预测多标签任务

1. 多scale

  • (1)为了能检测到不同大小的物体,设计了3个scale

2. scale变换经典方法

  • (1)左图:图像金字塔(速度慢);(2)右图:单一的输入

    -(3) 左图:对不同的特征图分别利用;(4)右图:不同的特征图上采样后,再融合后进行预测(YOLOv3核心思想);

3. 残差连接-为了更好的特征

  • (1)从今天的角度来看,基本所有网络架构都用上了残差连接的方法
  • (2)V3中也用来resnet的思想,堆叠更多的层来进行特征提取

    **理解残差连接:**至少不比原来差

4. 核心网络架构

  • (1)没有池化和全连接层,全部卷积
  • (2)下采样通过stride为2来实现
  • (3)3种scale,更多先验框
  • (4)基本上当下经典算法全部融入了

    13133(4+1+80)*

5. 先验框设计

  • YOLOv2中选了5个,这会更多了,一共9个
  • 1313特征图上:(116x90);(156198));(373x326)
  • 1313特征图上:(30x61);(6245));(59x119)
  • 1313特征图上:(10x13);(1630));(33x23)

6. softmax层替代

  • (1)物体检测任务中可能一个物体有多个标签
  • (2)logistic激活函数来完成,这样就能预测每一个类别是/不是

第五章 YOLOv4

1. 整体介绍(Optimal Speed and Accuracy of Object Detection)

  • (1)虽然作者换了,但是精髓没有变
  • (2)如果CV界有劳模,一定非他莫属(集百家之长)
  • (3)整体看还是那个味,细还是他细
  • (4)江湖中最高的武功:嫁衣神功

2. V4的贡献

  • (1)单GPU就能训练的非常好,接下来很多小模块都是从这个出发点
  • (2)两大核心方法,从数据层面和网络设计层面来进行改善
  • (3)消融实验,感觉能做的都给他做了,这工作量不轻
  • (4)全部实验都是单GPU完成的,不用担心设备问题
    计算机视觉的框架主要包括以下组成部分:
    初始特征提取------>特征融合--------->头部(分类还是回归)

3. Bog of freebies(BOF,免费包)

  • (1)只增加训练成本,但是能显著提高精度,并不影响推理速度(不影响测试的速度)
  • (2)数据增强:调整亮度、对比度、色调、随机缩放、剪切、翻转、旋转
  • (3)网络正则化方法:Dropout、Dropblock等
  • (4)类别不平衡,损失函数设计

3.1 Mosiac data augmentation

yolov5图像识别怎么弄 yolo识别物体_matlab_13


在上述数据处理的方法中,作者参考CutMix然后四张拼接成一张进行训练(相当于间接增加了batch size)

3.2 其他数据增强方法

  • (1)Random Erase : 用随机值或训练集的平均像素值替换图像区域
  • (2)Hide and Seek:根据概率设置随机隐藏一些补丁

3.3 Self-adversarial-training(SAT)

  • 通过引入噪音点来增加游戏难度

yolov5图像识别怎么弄 yolo识别物体_计算机视觉_14

3.4 DropBlock

  • 之前的dropput是随机选择点(b),现在吃掉一个区域
  • yolov5图像识别怎么弄 yolo识别物体_开发语言_15


3.5 标签平滑(label smoothing)

  • 神经网络最大的缺点:自觉不错(过拟合),让它别太自信
  • 例如原来的标签(0,1):[0,1] x (1-0.1)+0.1/2 = [0.05,0.95]
  • 使用之后效果分析(右图):簇内更紧密,簇间更分离(防止过拟合)

3.6 IOU损失

  • IOU损失:也经常1-IOU
  • 有那些问题:存在梯度消失
  • 没有相交则IOU=0无法梯度计算,相同的IOU却反应不出实际情况到底怎么样

GIOU损失

  • 公式:
  • yolov5图像识别怎么弄 yolo识别物体_计算机视觉_16

  • 引入了最小封闭形状C(C可以把A,B包含在内)
  • 不重叠情况下能让预测框尽量朝着真实框前进
  • 但是下面这种情况又完了。。。
  • DIOU
  • 公式:
  • yolov5图像识别怎么弄 yolo识别物体_yolov5图像识别怎么弄_17

  • 其中分子计算预测框与真实框的中心点欧氏距离d
  • 分母是能覆盖预测框与真实框的最小BOX的对角线长度c
  • 直接优化距离,速度更加快,并解决GIOU问题
    CIOU
  • 公式:
  • yolov5图像识别怎么弄 yolo识别物体_计算机视觉_18

  • 损失函数必须考虑三个几何因素:重叠面积,中心点距离,长宽比
  • 其中a可以当作权重参数
    DIOU-NMS
  • 之前使用NMS来决定是否删除一个框,现在改用DIOU-NMS
  • 公式:
  • yolov5图像识别怎么弄 yolo识别物体_yolov5图像识别怎么弄_19

  • 不仅考虑了IoU的值,还考虑了两个Box中心点之间的距离
  • 其中M表示高置信度候选框,Bi就是遍历各个框跟置信度高的重合情况
    SOFT-NMS
  • 柔和一点的NMS,更改分数再剔除
  • 公式:
  • yolov5图像识别怎么弄 yolo识别物体_计算机视觉_20

4. Bog of specials (BOS,特价包)

  • (1)增加稍许推断(测试)代价,但可以提高模型精度的方法
  • (2)网络细节部分加入了很多改进,引入了各种能让特征提取更好的方法
  • (3)注意力机制,网络细节设计,特征金字塔等
  • (4)将2020年论文中优秀的方法都融合进来了

4.1 SPPNet(Spatial Pyramid Pooling)

  • (1)V3中为了更好满足不同输入大小,训练的时候要改变输入数据的大小
  • (2)SPP其实就是用最大池化来满足最终输入特征一致即可

4.2 CSPNet(Cross Stage Partial Network)

  • (1)每一个block按照特征图的channel 维度拆分成两个部分
  • (2)一份正常走网络,另一份直接concat到这个block的输出

4.2 CBAM(将关注点放在更加重要的地方)

yolov5图像识别怎么弄 yolo识别物体_开发语言_21

  • (1)其实就是加入了注意力机制,已经很常见在各种论文中
  • (2)V4中用的是SAM,也就是空间注意力机制
  • (3)不光NLP,语言识别领域在搞attention,CV中也一样

4.3 PAN(Path Aggregation Network)

  • (1)先从FPN说起(区域候选网络)
  • (2)自顶向下的模式,将高层特征传下来
  • (3)好像只有一条路能不能双向呢
  • (4)这就轮到PAN登场了,思想也很简单
  • (5)引入了自底向上的路径,使得底层信息更容易传到顶部
  • (6)并且还是一个捷径,红色的没准走个100层Resnet,绿色的几层就到了
  • (7)YOLOV4中并不是加法,而是拼接

4.4 Mish(也许就是明日之星)

  • (1)别一棒子全给打死,给个改过自新的机会
  • (2)Relu有点太绝了,Mish更符合实际
  • (3)公式:
  • yolov5图像识别怎么弄 yolo识别物体_matlab_22

  • (4)但是计算量确实增加了,效果会提升一点

4.5 eliminate grid sensitivity

  • (1)比较好理解,坐标回归预测值都在0-1之间,如果在grid边界怎么表示?
  • (2)此时就需要非常大的数值才可以达到边界
  • (3)为了缓解这种情况可以在激活函数前加上一个系数(大于1的):
  • yolov5图像识别怎么弄 yolo识别物体_计算机视觉_23

5. 整体网络架构

yolov5图像识别怎么弄 yolo识别物体_yolov5图像识别怎么弄_24

YOLOv5

1. Focus模块

  • (1)先分块,后拼接,再卷积
  • (2)间隔来完成分块任务
  • (3)此时卷积输入的C就为12了
  • (4)参考实验并不多,目的是为了加速,并不会增加AP

2. BottleneckCSP

  • (1)注意叠加个数
  • (2)里面包含了resnet模块
  • (3)与V3版本相似,多了CSP
  • (4)效果有一定提升

3. PAN流程

yolov5图像识别怎么弄 yolo识别物体_yolov5图像识别怎么弄_25