赞
踩
神经网络算法关注:网络结构输出值+损失函数。
YOLO(You Only Look Once),2015.6.8,Joseph Redmon
YOLOv2(YOLO9000),2016.12.25,Joseph Redmon
YOLOv3,2018.4.8,Joseph Redmon
YOLOv4,2020.4.23,Alexey Bochkovskiy
YOLOv5,2020.6.10,Ultralytics
YOLOX,2021.7.20,旷世
YOLOv6,2022.6.23,美团
YOLOv7,2022.7.7,Alexey Bochkovskiy
YOLOv8,2023.1,Ultralytics
参考:https://blog.csdn.net/qq_34451909/article/details/128779602
YOLOv1:2015,paper:https://arxiv.org/pdf/1506.02640.pdf
YOLOv2:2017,paper:https://arxiv.org/pdf/1612.08242.pdf
YOLOv3:2018,paper:https://arxiv.org/pdf/1804.02767.pdf
YOLOv4:2020,paper:https://arxiv.org/pdf/2004.10934.pdf
YOLOv5:2020,paper:https://arxiv.org/pdf/2108.11539.pdf
YOLOv6:2022,paper:https://arxiv.org/pdf/2209.02976.pdf
YOLOv7:2022,paper:https://arxiv.org/pdf/2207.02696.pdf
其核心思想是:把目标检测当做一个单一的回归任务。它首先将图像划分为SxS个网格,物体真实框中心落在哪个网格上,就由该网格对应的锚框负责检测该物体。
经典的one-stage方法,把检测问题转换为回归问题,一个CNN搞定,可输出x,y,h,w。
将输入数据分成S*S的小格子**(v1中输出是7×7)**。
判断物体在哪个格子看他的中心点。
先基于经验给出两种候选框的H和W,与真实的框计算IoU,哪个高就用哪个作为预测框,再进行微调(回归任务),对每一个格子,都生成预测框,最终输出x,y,h,w(bounding box,边界框)和confidence(置信度),然后对生成的许多框进行过滤,得到置信度较高的框,对置信度较高的框再进行微调。
对于全连接层,因为其权重和偏置的大小在每次回归中是不变的,必须限制输入特征的大小,否则就没办法做,所以YOLO-v1中给定了输入图像大小为448×448×3。
全连接层前面的部分可以看成进行卷积过程,因为GoogLeNet网络现在用的很少了,所以就不细讲,v3的时候会细讲用的网络模型。
主要看后面输出的7×7×30的含义:
7×7表示把图像分成7×7的格子。
30=10+20:表示两种候选框(bounding box)的位置、大小和置信度,加上20个类别。
最终预测结果的维度为S×S×(B*5+C)
i表示对于不同的格子,一共有S的平方个,j表示对不同的候选框,共有B个,选择IoU最大的那个框,计算真实值和预测值的差异。
对w和h加上根号是为了应对物体大小不同的情况,对小物体来说框的大小变一个单位可能就框不住了。
y=根号x函数在数值较小的时候会比较敏感,数值较大的时候没那么敏感。对于小物体来说偏移量比较小的时候可能不敏感,现在让它敏感一些。
前面的系数就相当于权重项。
分为前景(即含目标)和背景(不含目标)
当某一个框与真实框的IoU大于阈值,比如0.5,那么当前这个框的置信度越接近IoU越合适,但是可能有许多框与真实框多有重叠的部分,那么就计算IoU大的那个框。
在实际图像中前景和背景的比例多少不同,所以在背景的计算中有一个权重项,让背景对损失的影响小一点。
计算交叉熵损失。
在预测时,对于IoU比较大的框(预测的是同一个物体),比较他们的置信度,保留极大值,把其他的都去掉。
优点
快速简单。
缺点
v2没有全连接层。
BN现在用的非常多,conv-bn可以说是标配了。
v1的时候计算机性能可能比较差,训练448×448×3的图像会比较慢,所以训练跟测试用的图像像素点数量不同。
v2的时候不考虑时间了,额外进行了10次的微调。
借鉴了VGG(2014)和Resnet网络结构。
就是为了提取特征,所以没有了全连接层。
全连接层容易过拟合,而且由于参数非常多,训练的比较慢。
右边的output只是举了个例子,实际情况不是这样。
5次降采样,每次降采样降低为原来的一半,输出特征图上的一个点相当于原始图像的1/32。
实际输入为416×416,输出13×13(比v2更精细),这是实际的网络结构Darknet 19,有19层,层数可以根据自己的需求改,层数多,可能mAP就高,FPS就低。输出是个奇数,这样特征图有个中心点。
网络中有两种卷积核:3×3和1×1,前者是借鉴了VGG网络那篇论文的思想,选择比较小的卷积核时参数比较小,感受野比较大。1×1卷积是只改变了特征图的个数(channel通道数),都是想要达到特征浓缩的一个过程,用1比用3参数少,计算的快。
坐标映射与还原
越大的感受野相当于它看原始图像当中的信息就更多了,方便识别出更大的物体。
感受野的计算公式:
如果有空洞卷积:
第一层卷积感受野为3,第二层卷积后感受野5,第三层:5+(3-1)×1=7
越大的感受野适合捕捉大的目标,小的特征就可能丢失。
既要大的又要小的感受野,就把这两层的叠加起来。
v2中图像的尺寸都得能被32整除。
经过几次迭代,改变图像的尺寸,让网络有个适应能力,既能在小的图像当中检测到,又能在大的图像当中检测到,让它的能力更全面一点。
v3是非常实用的,它被用在了军事和隐私领域。2020年YOLO原作者发表了一个推特,说自己要退出计算机视觉领域的研究了。
v3之后的版本都不是原作者开发的。
特征图网格大小:
v1:7×7
v2:13×13
v3:13×13、26×26、52×52.
左图:图像金字塔,将输入图像做一个resize,分别输入进网络,产生三种特征图大小:52×52,26×26,13×13,但是这种速度太慢。
右图:其实就是YOLOv1,单一的预测结果,一张图像做一个CNN。
左图是各做各的。
v3中用右图,使用上采样,用线性插值去做。
13×13的特征图经过上采样变成26×26,然后与26×26的进行融合,去预测中等大小的目标,26×26的经过上采样之后与13×13的进行融合,预测小目标。
YOLOv3把resnet(2016)论文中的思想融合进去了。
2014年VGG只做了19层,因为有时层数增加,预测效果反而不好了,梯度消失。
resnet解决了梯度消失的问题,因为有同等映射x,所以网络性能可以达到至少不比原来差。
左下角是个残差块儿。
1x, 2x, 8x指的是堆叠的次数。
YOLO v3把模型叫做DarkNet 53,其实可以把它当做resnet。
池化会把特征压缩,可能效果反而不好。卷积省时省力速度快效果好。
输出值:13×13×3×85(13网格数×3种先验框比例×4边框坐标×1置信度×80类别)
做完聚类之后出来9中常见的规格,但是并不是每个格子都出来9中先验框,而是分了类,不同的先验框交给不同的特征图做。
每一个标签都做一个二分类。
很多地方听不明白。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。