YOLOv3论文阅读

在这里插入图片描述

YOLOv3增量的改进
You Only Look Once:(创造性的将候选区和对象识别这两个阶段合二为一,看一眼图片(不用看两眼哦)就能知道有哪些对象以及它们的位置)说的是只需要一次CNN运算

在这里插入图片描述

实战:使用yolov3完成肺结节检测(Luna16数据集)及肺实质分割:https://blog.csdn.net/qq_24739717/article/details/97112144
从零开始实现YOLO v3(Part1):https://zhuanlan.zhihu.com/p/36899263
超详细的Pytorch版yolov3代码中文注释详解(一):https://zhuanlan.zhihu.com/p/49981816
系列简介:https://www.cnblogs.com/silence-cho/p/11717135.html
重磅!YOLOv3最全复现代码合集(含TensorFlow/PyTorch和Keras等):https://zhuanlan.zhihu.com/p/91409783
为啥CNN可以实现更高效的滑动窗口方法?(图四):https://zhuanlan.zhihu.com/p/32525231

在这里插入图片描述
在这里插入图片描述

Yolo的CNN网络将输入的图片分割成S*S网格,每个单元格负责去检测那些中心点落在该格子内的目标,如图所示,可以看到狗这个目标的中心落在左下角一个单元格内,那么该单元格负责预测这个狗。每个单元格会预测B个边界框(bounding box)以及边界框的置信度(confidence score)。
置信度包含两个方面,一是这个边界框含有目标的可能性大小,二是这个边界框的准确度(边界框匹配目标的好坏)。前者用P=1或者0来表示边界框是否含有目标。边界框的准确度可以用预测框与实际框(ground truth)的IOU(交并比)来表征。因此置信度就是P*交并比。
边界框的大小与位置用(x,y,w,h)表示,(x,y)是边界框的中心坐标,而w和h是边界框的宽与高。(后面对x,y,w,h的一些限制我先省略)
还有分类问题,对于每一个单元格其还要给出预测出C个类别概率值,表征的是由该单元格负责预测的边界框其目标属于各个类别的概率
https://zhuanlan.zhihu.com/p/32525231

参考

在这里插入图片描述

这是YOLO用的卷积网络

在这里插入图片描述

要注意的是,并不是说仅仅网格内的信息被映射到一个30维向量。经过神经网络对输入图像信息的提取和变换,网格周边的信息也会被识别和整理,最后编码到那个30维向量中。
https://zhuanlan.zhihu.com/p/46691043

在这里插入图片描述

YOLO的整个结构就是输入图片经过神经网络的变换得到一个输出的张量,只用了常规的神经网络结构,所以,理解YOLO的设计的时候,重要的是理解输入和输出的映射关系(这个系列都是这么用的).1)输入:
输入就是原始图像,唯一的要求是缩放到448*448的大小(只念这句话)。

主要是因为YOLO的网络中,卷积层最后接了两个全连接层,全连接层是要求固定大小的向量作为输入,所以倒推回去也就要求原始图像有固定的尺寸。那么YOLO设计的尺寸就是448*448。
(2)输出:
输出是一个 7*7*30 的张量(tensor)
(2.17*7网格
我们把 7*7*30 的张量看作 7*7=4930维的向量,也就是输入图像中的每个网格对应输出一个30维的向量


(下面这句不念)注意,并不是说仅仅网格内的信息被映射到一个30维向量。经过神经网络对输入图像信息的提取和变换,网格周边的信息也会被识别和整理,最后编码到那个30维向量中。
(2.230维向量
如PPT中右图所示

总的来说,30维向量 = 20个对象的概率 + 2个bounding box * 4个坐标 + 2个bounding box的置信度

在这里插入图片描述

在loss function中,前面两行表示localization error(即坐标误差),第一行是box中心坐标(x,y)的预测,第二行为宽和高的预测。
这里注意用宽和高的开根号代替原来的宽和高,这样做主要是因为相同的宽和高误差对于小的目标精度影响比大的目标要大。
第三、四行表示bounding box的confidence损失,就像前面所说的,分成grid cell包含与不包含object两种情况。
这里注意下因为每个grid cell包含两个bounding box,所以只有当ground truth 和该网格中的某个bounding box的IOU值最大的时候,才计算这项。
第五行表示预测类别的误差,注意前面的系数只有在grid cell包含object的时候才为1

损失函数的设计

在这里插入图片描述

对每一个网格的每一个bbox执行同样操作: 7x7x2 = 98 bbox (每个bbox既有对应的class信息又有坐标信息)
得到98个bbox的信息后,首先对阈值小于0.2的score清零,然后重新排序,最后再用NMS算法去掉重复率较大的bounding box(NMS:针对某一类别,
选择得分最大的bounding box,然后计算它和其它bounding box的IOU值,如果IOU大于0.5,说明重复率较大,该得分设为0,如果不大于0.5,则不改;这样一轮后,
再选择剩下的score里面最大的那个bounding box,然后计算该bounding box和其它bounding box的IOU,重复以上过程直到最后)。
最后每个bounding box的20个score取最大的score,如果这个score大于0,那么这个bounding box就是这个socre对应的类别(矩阵的行),如果小于0,说明这个bounding box里面没有物体,跳过即可。

NMS处理操作
在这里插入图片描述

这是YOLO的整体网络
优点: one-stage,速度快,可以用于实时系统
缺陷:YOLO对相互靠的很近的物体(挨在一起且中点都落在同一个格子上的情况),还有很小的群体 检测效果不好,这是因为一个网格中只预测了两个框,并且只属于一类。
测试图像中,当同一类物体出现的不常见的长宽比和其他情况时泛化能力偏弱。
由于损失函数的问题,定位误差是影响检测效果的主要原因,尤其是大小物体的处理上,还有待加强。

直接将原始图片分割成互不重合的小方块,然后通过卷积最后生产这样大小的特征图,基于上面的分析,
可以认为特征图的每个元素也是对应原始图片的一个小方块,然后用每个元素来可以预测那些中心点在该小方格内的目标,这就是Yolo算法的朴素思想

下面介绍YOLO v2
(好几点改进+新的分类网络)https://www.cnblogs.com/makefile/p/YOLOv3.html

YOLO v2在保持原有速度的优势之下,精度上得以提升,提出了一种目标分类与检测的联合训练方法,训练后的模型可以实现多达9000种物体的实时检测。
使用有标记的检测数据集精确定位,使用分类数据增加类别和鲁棒性。

在这里插入图片描述

从yolo_v2开始,yolo就用batch normalization作为正则化、加速收敛和避免过拟合的方法,把BN层和leaky relu层接到每一层卷积层之后

Batch Normalization
高分辨率分类器:(先不念)
预训练分类模型采用了更高分辨率的图片
YOLOv1先在ImageNet(224x224)分类数据集上预训练模型的主体部分(大部分目标检测算法),获得较好的分类效果,然后再训练网络的时候将网络的输入从224x224增加为448x448。
但是直接切换分辨率,检测模型可能难以快速适应高分辨率。所以YOLOv2增加了在ImageNet数据集上使用448x448的输入来finetune分类网络这一中间过程(10 epochs),
这可以使得模型在检测数据集上finetune之前已经适用高分辨率输入。使用高分辨率分类器后,YOLOv2的mAP提升了约4%

在这里插入图片描述

YOLOv1是利用全连接层直接预测bounding box的坐标。
YOLOv2则借鉴了Faster R-CNN的思想,引入anchor(先验框)。
YOLOv2移除了YOLOv1中的全连接层而采用了卷积和anchor boxes来预测边界框。
采用先验框后,每个网格可预测N(选定)个bounding box,可以预测上千个边界框,YOLOv2的召回率大大提升

Dimension Clusters(维度聚类)(V3在用)
之前先验框都是手工设定的,YOLO2尝试统计出更符合样本中对象尺寸的先验框,这样就可以减少网络微调先验框到实际位置的难度。YOLO2的做法是对训练集中标注的边框进行聚类分析,以寻找尽可能匹配样本的边框尺寸。

Multi-Scale Training(V3在用)
YOLOv2中只有卷积层和池化层,因此不需要固定的输入图片的大小。
为了让模型更有鲁棒性,作者引入了多尺度训练。(做法)就是在训练过程中,每迭代一定的次数,改变模型的输入图片大小。
这种网络训练方式使得相同网络可以对不同分辨率的图像做检测。
在输入size较大时,训练速度较慢,在输入size较小时,训练速度较快,而多尺度训练又可以提高准确率,因此算是准确率和速度都取得一个不错的平衡。

YOLO v2的参考链接:https://zhuanlan.zhihu.com/p/47575929
https://zhuanlan.zhihu.com/p/35325884
https://blog.csdn.net/litt1e/article/details/88852745

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

YOLO v3的改进之处(三点):
1、多尺度预测 (类FPN)
更好的基础2、分类网络(类ResNet)和3、分类器

在这里插入图片描述

DBL:卷积+BN+Leaky relu
resn:n代表数字,有res1,res2,,res8等等,表示这个res_block里含有多少个res_unit
concat:张量拼接。将darknet中间层和后面的某一层的上采样进行拼接。拼接的操作和残差层add的操作是不一样的,拼接会扩充张量的维度,而add只是直接相加不会导致张量维度的改变

在这里插入图片描述

https://blog.csdn.net/leviopku/article/details/82660381
Yolo_v3使用了darknet-53的前面的52层(没有全连接层),yolo_v3这个网络是一个全卷积网络,大量使用残差的跳层连接,并且为了降低池化带来的梯度负面效果,作者直接摒弃了POOLing,用conv的stride来实现降采样。在这个网络结构中,使用的是步长为2的卷积来进行降采样。


在图像特征提取上,YOLO3采用Darknet-53的网络结构(含有53个卷积层),网络最左侧那一列的12884(与网络架构对应)等数字表示多少个重复的残差组件。它借鉴了残差网络residual network的做法,每个残差组件有两个卷积层和一个快捷链路。整个v3结构里面,是没有池化层和全连接层的

darknet-19 vs darknet-53:
yolo_v2中对于前向过程中张量尺寸变换,都是通过最大池化来进行,一共有5次。而v3是通过卷积核增大步长来进行,也是5次。
darknet-19是不存在残差结构的,和VGG是同类型的backbone,而darknet-53是可以和resnet-152正面刚的backbone。
从backbone性能表中可以看出,darknet-19在速度上仍然占据很大的优势。yolo_v3并没有那么追求速度,而是在保证实时性(fps>36)的基础上追求performance。(但是可以用tiny-darknet来代替darknet-53,一行代码就可以变快)

backbone性能参数分析:
Top1和Top5的解释:模型在ImageNet数据集上进行推理,按照置信度排序总共生成5个标签。按照第一个标签预测计算正确率,即为Top1正确率;前五个标签中只要有一个是正确的标签,则视为正确预测,称为Top5正确率https://zhuanlan.zhihu.com/p/76802514
flop/s 就是每秒计算机计算的速度,剩下两个参数百度不到

在这里插入图片描述

YOLO3采用了3个不同尺度的特征图来进行对象检测。
看图,卷积网络在79层后,经过下方几个黄色的卷积层得到一种尺度的检测结果。相比输入图像,这里用于检测的特征图有32倍的下采样。比如输入是416*416的话,这里的特征图就是13*13了。由于下采样倍数高,这里特征图的感受野比较大,因此适合检测图像中尺寸比较大的对象。
为了实现细粒度的检测,第79层的特征图又开始作上采样,然后与第61层特征图融合(Concatenation),这样得到第91层较细粒度的特征图,同样经过几个卷积层后得到相对输入图像16倍下采样的特征图。它具有中等尺度的感受野,适合检测中等尺度的对象。
最后,第91层特征图再次上采样,并与第36层特征图融合(Concatenation),最后得到相对输入图像8倍下采样的特征图。它的感受野最小,适合检测小尺寸的对象。
链接:https://www.jianshu.com/p/d13ae1055302

在这里插入图片描述

Bounding Box:https://blog.csdn.net/litt1e/article/details/88907542
https://www.jianshu.com/p/d13ae1055302
这里注意bounding box 与anchor box的区别:Bounding box它输出的是框的位置(中心坐标与宽高),confidence以及N个类别。anchor box只是一个尺度即只有宽高。


随着输出的特征图的数量和尺度的变化,先验框的尺寸也需要相应的调整。YOLO2已经开始采用K-means聚类得到先验框的尺寸,YOLO3继续用,
为每种下采样尺度设定3种先验框,总共聚类出9种尺寸的先验框。在COCO数据集这9个先验框如表格三三行所示。
分配上,在最小的13*13特征图上(有最大的感受野)应用较大的先验框(116x90)(156x198)(373x326),适合检测较大的对象。
中等的26*26特征图上(中等感受野)应用中等的先验框(30x61)(62x45)(59x119),适合检测中等大小的对象。
较大的52*52特征图上(较小的感受野)应用较小的先验框(10x13)(16x30)(33x23),适合检测较小的对象。

在这里插入图片描述

输入到输出的映射
不考虑神经网络结构细节的话,总的来说,对于一个输入图像,YOLO3将其映射到3个尺度的输出张量,代表图像各个位置存在各种对象的概率。
我们看一下YOLO3共进行了多少个预测。对于一个416*416的输入图像,在每个尺度的特征图的每个网格设置3个先验框,总共有 13*13*3 + 26*26*3 + 52*52*3 = 10647 个预测。每一个预测是一个(4+1+80)=85维向量,这个85维向量包含边框坐标(4个数值),边框置信度(1个数值),对象类别的概率(对于COCO数据集,有80种对象)。
对比一下,YOLO2采用13*13*5 = 845个预测,YOLO3的尝试预测边框数量增加了10多倍,而且是在不同分辨率上进行,所以mAP以及对小物体的检测效果有一定的提升。

3、分类器-类别预测(改进3):
YOLOv3不使用Softmax对每个框进行分类,主要考虑因素有两个:
1、Softmax使得每个框分配一个类别(score最大的一个),而对于Open Images这种数据集,目标可能有重叠的类别标签((比如一个人有Woman 和 Person两个标签)),因此Softmax不适用于多标签分类。
2、Softmax可被独立的多个logistic分类器替代,且准确率不会下降。
分类损失采用binary cross-entropy loss.

在这里插入图片描述

YOLOv3不使用Softmax对每个框进行分类,而使用多个logistic分类器,因为Softmax不适用于多标签分类,用独立的多个logistic分类器准确率也不会下降。分类损失采用binary cross-entropy loss.

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值