第一章 YOLO系列概述
1.深度学习经典检测方法
(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达到收敛的预期效果。这一过程就可以称之为回归过程。
https://blog.csdn.net/weixin_44987948/article/details/109165215
2.指标分析
1)mAP指标:综合衡量检测效果
2)IOU:交集和并集的比值
3)准确率:TP/(TP+FP)
4)召回率:TP/(TP+FN)
第二章 YOLOv1
1. 核心思想
将输入图像划分为SxS的网格,每个网格的中心点产生两种候选框,对置信度高的中心点(或者设置一定的阈值)对应的两个候选框进行筛选(选择IOU大的),进行微调,得到其的(x,y,w,h)。
2. 网络架构
最终输出为:14701=77*30
3. 损失函数
理解算法主要关注以下部分:网络架构
,最终输出值(全连层)
,以及损失函数
怎么定义。
3.1 位置误差(x,y,w,h)
预测位置与真实位置之间的差值,损失函数越小越好为什么w,h添加根号?
(使损失函数对较小物体比较敏感,但是在v1版本没有根本解决这个问题)
3.2 置信度误差
基于置信度计算当前网格的候选框是背景还是前景
3.3 分类误差
预测该类别的概率和真实该类别的概率之差(交叉熵)
3.4 NMS非极大抑制
- 主要针对同一类别的重叠检测框
- 先按置信度进行排序(从大到小)
- 只取最大值(存在缺陷:最大的置信度不一定是检测效果最佳的,或者说IOU最大的)
3.5 YOLOv1存在问题
- 每个Cell只预测一个类别,重合在一起的物体难以检测
- 小物体难以检测(两种候选框主要针对检测较大的物体,候选框的长宽比过于单一)
- 多标签难以检测(同一物体映射多个标签)
第三章 YOLOv2
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作为先验框尺寸
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)
这张图讲道理真的过分了!!! 我不是针对谁,在座的各位都是。。。。
- (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
在上述数据处理的方法中,作者参考CutMix然后四张拼接成一张进行训练(相当于间接增加了batch size)
3.2 其他数据增强方法
- (1)Random Erase : 用随机值或训练集的平均像素值替换图像区域
- (2)Hide and Seek:根据概率设置随机隐藏一些补丁
3.3 Self-adversarial-training(SAT)
- 通过引入噪音点来增加游戏难度
3.4 DropBlock
- 之前的dropput是随机选择点(b),现在吃掉一个
区域
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损失
-
公式:
-
引入了最小封闭形状C(C可以把A,B包含在内)
-
在
不重叠
情况下能让预测框尽量朝着真实框前进 -
但是下面这种情况又完了。。。
-
DIOU -
公式:
-
其中分子计算预测框与真实框的中心点欧氏距离d
-
分母是能覆盖预测框与真实框的最小BOX的对角线长度c
-
直接优化距离,速度更加快,并解决GIOU问题
CIOU -
公式:
-
损失函数必须考虑三个几何因素:重叠面积,中心点距离,长宽比
-
其中a可以当作权重参数
DIOU-NMS -
之前使用NMS来决定是否删除一个框,现在改用DIOU-NMS
-
公式:
-
不仅考虑了IoU的值,还考虑了两个Box中心点之间的距离
-
其中M表示高置信度候选框,Bi就是遍历各个框跟置信度高的重合情况
SOFT-NMS -
柔和一点的NMS,更改分数再剔除
-
公式:
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(将关注点放在更加重要的地方)
- (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)公式:
-
(4)但是计算量确实增加了,效果会提升一点
4.5 eliminate grid sensitivity
-
(1)比较好理解,坐标回归预测值都在0-1之间,如果在grid边界怎么表示?
-
(2)此时就需要非常大的数值才可以达到边界
-
(3)为了缓解这种情况可以在激活函数前加上一个系数(大于1的):
5. 整体网络架构
YOLOv5
1. Focus模块
- (1)先分块,后拼接,再卷积
- (2)间隔来完成分块任务
- (3)此时卷积输入的C就为12了
- (4)参考实验并不多,目的是为了加速,并不会增加AP
2. BottleneckCSP
- (1)注意叠加个数
- (2)里面包含了resnet模块
- (3)与V3版本相似,多了CSP
- (4)效果有一定提升