YOLO一些笔记(1)

1.深度学习经典检测算法比较

two-stage(两阶段):Faster-RCNN,Mask-RCNN,第一步RPN选预测框,第二步得到物体检测框的位置。(先预选,后得到结果)

优点:效果好

缺点:5fps ,速度较慢。

one-stage(单节段):YOLO系列,一个CNN网络做回归得到物体检测框的位置(直接得到结果)  网络简单  还有SSD。

优点:速度快,适合实时检测,可以到40到200fps

缺点:效果通常不太好,结果比较粗

2.MAP指标与IOU

MAP:综合衡量检测效果,精度与召回率recall(在机器学习中二者矛盾)

IOU:交并比,真实值与预测值的交集与并集  交集/并集。

精度:tp/(tp+fp)真阳比上真阳与假阳之和,

召回率/查全率:tp/(tp+fn)真阳比上真阳与假阴之和,给你的正样本你有没有都找出来

一个样本集,有正样本与假样本,并有其对应标签。

tp 正样本输入得到正的标签         fp 假样本输入得到正的标签

tn 正样本输入得到假的标签         fn 假样本输入得到假的标签

例子,班级总数100,男生80,女生20,选出所有女生。

网络选出了50人,20人是女生,30名是男生

所以TP = 20,女生得到女生,FP = 30,男生得到女生,FN = 0 ,男生得到男生,没有这个情况,TN女生得到男生, 80-30 = 50;

3.检测任务中的精度与召回率是代表什么?

精度,标签框与预测出来框的重合多少。

召回率,预测正确/预测正确+与预测错误

置信度,当前检测物体是目标的可能性。

AP,把所有阈值考虑(0~1),进来,将P,R化成图,得到RP曲线

MAP,RP曲线下方的面积。

4.YOLO v1的算法整体思路,YOLO(you only look once)

把检测问题转成回归问题。一个CNN搞定。

回归任务调整检测框的大小和位置,看那种最合适。

将图像分成许多格子,每个格子每个点产生两个候选框,算IOU与置信度,谁的IOU大,确定有物体,对那个检测框调整。

预测时不仅预测检测框的大小和位置,还有置信度(是物体的可能性,置信度小的过滤掉)。

四个坐标值,置信度值。

最终就得到最终检测结果。

5.YOLOv1网络架构

输入448*448*3 ,(输入大小不能变)

卷积不影响输入图像大小,但是全连接层固定了输入的大小。

输入-特征提取(卷积)-全连接层-reshape(7*7*30)-输出结果

格子大小是7*7的,30表示的是

每个格子产生两个候选框(B1:x1,y1,w1,h1,c1,B2:x2,y2,w2,h2,c2)这是5+5=10个。

另外20表示20分类,当前格子属于那种物体的概率。

10 = (X,Y,H,W,C)*B(2个)

当前数据集20个类别 C = 20;

7*7网格大小。S = 7;

(S*S)*(B*5+C)

6.损失函数:

x,y,w,h  位置误差,x,y的位置误差(平方差之和) + w,h的大小误差(根号差的平方之和),因为物体的大小不一样,物体有可能会小一点,需要为w,h加根号对小物体的检测更敏感。

c 置信度误差,置信度误差分为有物体(前景),和没物体的(背景),一般背景多。

候选框的预测置信度 与 该候选框与目标框的IOU的置信度真实值的差异

不含物体的加了一个权重,因为背景多,加上权重项可以减小背景的影响

分类误差,这是20分类,预测类别的概率与目标类别的概率误差。

最终loss将这些加起来。

7.NMS(非极大值抑制)

有许多检测框是重叠的,将这些检测框按照IOU大小排序,排除不符合的。

YOLO v1,快速简单,每个cell只能预测一个类别,重叠无法解决,小物体检测效果一般,长宽比可选,但是单一

8.YOLO v2 改进

(1)舍弃 dropout(可以防止过拟合),没有全连接层。

每次卷积后加入Batch Normalization(数据经过网络卷积后数据可能会偏移,不可操纵,所以进行数据归一化)

网络的每一层的输入都做了归一化,收敛相对容易。

经过BN网络提升2%的map,性能提升。

BN称为网络必备处理。  

CONV-BN

(2)更大的分辨率

v1训练用的是224*224,测试时使用的是448*448

v2训练加了10次448*448微调

使用高分辨率分类器,YOLO v2 的map提升了4%9.

9.yolo v2网络架构

使用的时DarkNet,实际输入416*416;

没有FC层,5次降采样(maxpool)

全连接层容易过拟合,权重多。

1*1卷积节省参数

所有都用卷积来做。

v2中最终输出13*13,v1时7*7*30

所有卷积都是3*3,darknet有19层,卷积。经过卷积特征图就变大了。而中间进行了1*1卷积。

10 聚类提取先验框:

faster-rcnn 在不同尺度,不同h,w比例中产生9种框。不一定完全适合数据集。

而v2中不是直接按照长宽固定比给的。

聚类提取先验框,将数据集中的标准框进行聚类,用k-means聚类来分成几类。

将分类得到的边框的数据更有说服力,因为是从实际物体出发的。

聚类时的距离采用的是,聚类点的检测框与待聚类点的IOU作为距离。

d = 1-IOU;  k = 5;聚类5

所以这里每个网格块产生5个先验框。

加了先验框map并不是多了,框多了反而预测的不好。recall提升了,查全率。

11.偏移量的计算

先验的是x,y,w,h

预测是 tx,ty,tw,th,以上代表偏移量,直接预测偏移量,偏移量大就会出现问题。

预测结果不在是直接预测偏移量。而是预测格子中心点的偏移量。那么预测的偏移量就不会超出网格。这里tx,ty预测方式变了,而tw,th不变。

坐标值映射与还原

12.感受野的作用

输入,conv1,conv2

特征图的一个点相对于原始图的数据与卷积核大小一样。

感受野就是最后一次的特征图中的一个点,相对于原始输入图的大小。

特征图上的点能看到原始图像的多大区域。

感受野,输入5*5,卷积3个3*3,stride=1,感受野就是7*7。

这种卷积与7*7的卷积结果是一样的,那为什么非要堆叠3个小卷积。

大的卷积核参数多,堆叠小的卷积核所需的参数更少一些,并且卷积越多,特征提取就会越细致,加入的非线性变换也随着增多,还不会增大权重的参数个数。这就是VGG网络的基本出发点。

13.特征融合

最后一层的感受野太大了,适合捕捉大目标,小目标可能就丢失,需要融合之前的特征。

将前几层的特征图reshape,拆分,拼接后,与最后一层特征图融合。

多尺度检测,只用卷积,多少输入都可以做。经历一次迭代之后改变输入图片的大小。

13. v3改进

YOLO v3 速度和map很强

作者是做到YOLOv3就结束了。后续版本是别人的改进。

现在已经改进到YOLOv8了。

最大改进网络结构,更适合小目标

特征更细致,融入多持续特征图信息来预测不同规格的物体。

先验框更丰富,3种scale,3种规格,一共9种。多尺度检测不同大小的物体,设计了3个scale,

13*13 预测大的,最后的特征    26*26 预测中的,中间的特征要借鉴最后的特征,即特征融合

52*52 预测小的 ,前面的特征要借鉴中和大的特征,即特征融合

每种都生成3个合适的候选框。

scale变换经典方法

(1)生成图像金字塔,做采样。但速度慢

(2)每层特征分别利用

(3)每层特征与之前的特征进行融合

由于尺度不匹配,所以做上采样,将13*13变成26*26,再与中间的结合,其他层同理。

残差连接:v3中野加入了resnet思想,堆叠更多的层进行特征提取。

14年vgg,只做到19层,但是网络层数越深后反而效果差了。

而resnet,解决的深度造成的效果差的问题,当效果好就保留,效果不好那我就恒等映射。

深度网络层数多,效果差不是所有层都不行,而是有些层有效果,有些层没效果。所以保留有效果的层,没效果的就把之前的层结果拿过来。

resnet 至少不比原来差。

YOLO v3核心网络框架,中间加入了残差模块,没有池化与全连接层,池化会对特征做压缩,而全连接层引入的参数太多,计算效率下降。而下采样通过设置卷积参数stride=2来实现。生成3种尺度的先验框。

最后输出

13*13*3*85    13表示网格

26*26*3*85    26表示网格

52*52*3*85    52表示网格

85(4边框坐标+1边框置信度+80类别)

yolov2 聚类5个先验框,v3中聚类选了将大的先验框交给13*13,中的先验框交给26*26的,小的先验框交给52*52的。

softmax 替代,交叉熵损失

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

14.YOLO-v4

YOLO v4 速度和精度更块更强

创新没多少,但融合了当时很多的优质细节。

两大核心,从数据层和网络设计层面来进行改善。

全是实验都是,单GPU就能训练的非常好。

数据层面的改进:

BOF(Bag of freebies)增加训练成本,对数据增强(旋转,裁剪,平移,放大,缩小,颜色转换,Mosaic数据增强(四张图拼接成一张训练),图像融合,裁剪,裁剪融合),并不影响推理速度。

SAT(self adversarial-training)通过引入噪音点来增强数据。

网络正则化:dropout,dropblock。类别不平衡,损失函数设计。

dropout是随机选择点pass,而dropblock是吃掉一个区域。增强网络泛化能力。

Mosatic数据增强。间接增大了Batch size。

label Smoothing 标签平滑,神经网络最大的缺点,自觉不错,过拟合,别让他太自信。

标签平滑就是给类别加上概率,可以抗过拟合。使用之后簇内更紧密,簇间更分离。

损失函数:IOU损失存在的问题(当没有相交时,则IOU=0,无法梯度计算,相同的IOU却反应不出实际情况到底啥样。)

升级:GIOU损失引入最小封闭形状C,可以把A,B包含在内。最小包围框与并集的关系。

再不重叠的情况下能让预测框尽可能朝着真实框前进。

DIOU损失,分子(计算预测框与真实框的中心点欧式距离d),分母(能覆盖预测框与真实框的最小BOX的对角线长度C),直接优化距离,速度更快,解决了GIOU的问题。

CIOU损失再DIOU基础上加上了av,考虑重叠面积,中心点距离,长宽比。(a是权重,v是长宽比)

最后呈现结果时:

DIOU-NMS 决定是否删除一盒框,现在改用DIOU。非极大值抑制。

先找置信度最大的框,与其他框计算IOU,IOU越大,重叠度越高就删除。现在是加上DIOU(考虑两个BOX中心点的距离)

SOFT-NMS,如果高度重合就直接删除有点太刚了,不满足要求的不直接删,降他的置信度,最后看他的综合表现。

网络结构的改进:

加入了注意力机制,网络细节设计,特征金字塔等。

SPPNet(spatial pyramid pooling)

在v3中为了满足不同的输入大小,训练的时候要改变输入数据大小

SPP用最大池化(Max pooling)然后concat满足最终输入特征一致。

CSPNet(cross stage partial Network)

将特征图一切为2,第二部分走正常的卷积网络,第一部分直接concat加到第二部分的结果

使得最终结果下降不是特别多,速度上升。

CBAM:卷积块注意力机制模型

加入了注意力机制,V4中只加入了SAM,即空间注意力机制。

注意力机制就是关注充电,先做channel维度的,再是空间维度的子注意力机制。

给每个特征图加上权重,那个重要权重就大。空间维度就是那个点(空间位置)重要就加上权重。

乘在原始的特征图上。多引入一个softmax或者sigmod计算权重。

PAN(path aggregation network)

自顶向下的模式,将高层特征传下来,只有一条路,缺了一个从底层到高层的路子。

而PAN引入了自底向上的路径,使得底层信息更容易传到底部。

YOLOv4是拼接而不是相加。两个人融合成一个人,是加法,两个人合一块一起上,是拼接。

激活函数用的Mish,Relu太绝对了,Mish跟符合实际。

公式f(x) = x*tanh(ln(1+e^x));

计算量确实增加了,效果会提升一点。

在坐标值回归预测是在0-1之间是,在网格边界怎么表示,即取到0或1太难了,由于sigmoid函数,实际结果加上一个偏置。

CSP Darknet53        yolo  head

SPP           PAN      

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值