| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 目标检测 | YOLO系列超全讲解v1,v2,v3 -> 正文阅读 |
|
[人工智能]目标检测 | YOLO系列超全讲解v1,v2,v3 |
资料汇总选自 前言从Two Stage到One Stage: Two stage(先选取候选框,再进行回归调整候选框和分类):RCNN,SPP-Net,Fast-RCNN,Faster-RCNN,Mask-RCNN等
一、YOLOv12016年,Joseph Redmon等人提出了一种单阶段(one-stage)的目标检测网络,在 PASCAL VOC2007 的测试集上达到了 63.4 mAP,在 448 × 448 的输入图像上的二推理能达到 45 FPS。作者将其取名为:You Only Look Once。
1. 网络结构
2. 实现方法在YOLOv1中,它将整张图片输入后平均分为S×S个网格(grid cell),当某个目标的中心落在这个网格中,那么这个网格就负责预测它。对于Faster-RCNN需要训练一个RPN网络获得目标候选框区域,然后再映射到特征图上得到特征矩阵,这消耗了大量时间空间。
实际操作: 在YOLOv1的CVPR 2016论文中,图片输入为448×448的像素,S图片划分网格量=7,B每个网格预测边框量=2,C类别个数=20。于是,网格输出=7×7×(5×2+20) 在test的时候,每个网格预测的class信息和bounding box预测的confidence信息相乘,根据上一步可以预测出S×S×B个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后用NMS非极大值抑制去除冗余窗口即可得到最终的检测结果。
3. 损失函数YOLOv1损失分为三类。1.目标 bounding box坐标预测的损失,2. confidence置信度预测的损失,3.classes分类预测的损失。原论文中都是使用sum-squared error loss误差平方和进行计算。 3.1 bounding box坐标检测损失 对于x和y的向量都是用预测值减去真实标签值的平方就是误差平方和;对于w和h,先进行开根处理,再做误差平方,这样可以提升小目标的损失,消除大尺寸框和小尺寸框之间的差异。 开根处理原因: 3.2 confidence和classes的损失 confidence分为含有object和不含object的损失,即正样本和负样本。在正样本中,真实值为1;负样本真实值为0。于是,confidence 损失需要计算正负样本,而 bounding box 以及 class 损失都只计算正样本的。正样本的 confidence 真实值应该为预测框与真实物体框的 IoU 数值;负样本的 confidence 真实值应该为 0。 3.3 处理目标不均衡 目标检测问题是一个典型的类别数目不均衡的问题,在7×7的grid cell格点中,含有物体的格点一般比较少。所以需要让含有物体的格点在损失函数中的权重更大,让模型更加重视含有物体的格点所造成的损失。于是在bbox坐标误差损失中代入λ_coord取值5;对于不含目标的置信度预测损失代入λ_noobj=0.5。 4. 缺点
二、YOLOv2YOLOv2作者命名为(Better, Faster, Stronger),基于YOLOv1的不足,提出了很多改进方法,主要是保持检测速度,改善recall,提升定位的准确度,同时保持分类的准确性。 1. 网络结构YOLOv2使用Global Average Pooling,使用Batch Normilazation来让训练更稳定,加速收敛,使model规范化。v2采用 Darknet-19(有19个卷积层和5个maxpooling层)作为特征提取网络,即backbone,Darknet-19整体结构如下:
YOLOv2模型框架如下:
更多具体的训练过程,跳转《目标检测|YOLOv2原理与实现(附YOLOv3)》以及《深度学习之目标检测(七)–YOLO v2理论介绍》 2. 改进方法2.1 Batch Normalization 简称BN层,即批量标准化。在每一层卷积后,都增加了批量标准化(Batch Normalization)进行预处理。 关于Batch Normalization的更多资料,可以阅读《Batch Normalization原理与实战》 以及 《深度学习笔记(三):BatchNorm(BN)层》 2.2 High resolution classifier YOLOv1使用ImageNet的图像分类样本采用 224×224 作为输入,来训练CNN卷积层。然后在训练目标检测时,检测用的图像样本采用更高分辨率的 448×448 像素图像作为输入,但这样不一致的输入分辨率肯定会对模型性能有一定影响。 而YOLOv2采用更高分辨率的分类器,在采用 224224 图像进行分类模型预训练后,再采用 448448 高分辨率样本对分类模型进行微调(10个epoch),带来了4%的mAP提升。 2.3 Convolution with anchor boxes 在YOLOv1中,作者通过全连接层直接预测边界框的位置并且做回归;而在Faster RCNN算法只用卷积层与Region Proposal Network来预测Anchor Box的偏移值与置信度,而不是直接预测坐标值。于是,通过预测偏移量而不是坐标值能够简化问题,让神经网络学习起来更容易,对于卷积层有以下变化:
2.4 Dimension Clusters 在Faster R-CNN 以及 SSD 中,作者并没有明确地给出采用那些作者给定的 Anchor 或者 Default Box的尺寸,基本上为工程经验得到。于是,YOLOv2尝试统计出更符合样本中对象尺寸的先验框,这样就可以减少网络微调先验框到实际位置的难度。 YOLOv2的做法是对训练集中标注的Anchor Box边框进行K-means聚类分析,以寻找尽可能匹配样本的边框尺寸。如果我们用标准的欧式距离的k-means,会导致尺寸大的框比小框产生更多的错误。 聚类的目的是使 Anchor boxes 和临近的 ground truth boxes有更大的IOU值,因此自定义的距离度量公式为 :
从下表可以看出,YOLOv2采用5种 Cluster(61.0) 比 Faster R-CNN 采用9种 Anchor(60.9) 得到的平均 IoU 还略高,并且当 YOLOv2 采用9种时,平均 IOU 有显著提高(67.2)。说明 K-means 方法的生成的Anchor boxes 更具有代表性。为了权衡精确度和速度的开销,最终选择K=5。 下图黑蓝图形为在 VOC 和 COCO 数据集上的聚类分析结果,随着聚类中心数目的增加,平均 IoU 值(各个边界框与聚类中心的IoU的平均值)是增加的。综合考虑模型复杂度和召回率,作者最终选取 5 个聚类中心作为先验框,其相对于图片的大小如右边图所示。 在 Faster R-CNN 算法中,是通过预测 bounding box 与 ground truth 的位置偏移值,间接得到bounding box的位置。公式如下:
为了让网络的结果能落在这一范围内,网络使用一个 Logistic Activation来对于网络预测结果进行限制,让结果介于0到1之间。 网络在每一个网格单元中预测出5个Bounding Boxes,每个Bounding Boxes有五个坐标值tx,ty,tw,th,t0,他们的关系见下图(蓝色的是要预测的bounding box,黑色虚线框是Anchor box): 细粒度特征,可以理解成对不同层的物体预测的精细研究。YOLOv2 提出了一种 Pass Through Layer层来利用更精细的特征图,把高分辨率的浅层特征连接到低分辨率的深层特征(把特征堆积在不同Channel中)而后进行融合和检测。 具体操作是:先获取前层的26×26的特征图,将其同最后输出的13×13的特征图进行连接,而后输入检测器进行检测(而在YOLOv1中网络的FC层起到了全局特征融合的作用),以此来提高对小目标的检测能力。 2.7 Multi-Scale Training 采用多尺度训练,替换固定尺寸训练。作者希望YOLOv2能健壮的运行于不同尺寸的图片之上,所以把这一想法用于训练model中。区别于之前的补全图片的尺寸的方法,YOLOv2每迭代几次都会改变网络参数。每10个Batch,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是32,所以不同的尺寸大小也选择为32的倍数{320,352……608},最小320×320,最大608×608,网络会自动改变尺寸,并继续训练的过程。 在测试时,YOLOv2 可以采用不同大小的图片作为输入,在 VOC 2007 数据集上的效果如下图所示。
3. YOLO9000YOLO9000 是在 YOLOv2 的基础上提出的一种可以检测超过 9000 个类别的模型,其主要贡献点在于提出了一种分类和检测的联合训练策略。 一般来说,检测数据集的标注要比分类数据集打标签繁琐的多,所以 ImageNet 分类数据集比 VOC 等检测数据集高出几个数量级。在 YOLO 中,边界框的预测其实并不依赖于物体的标签,所以YOLO可以实现在分类和检测数据集上的联合训练。 对于检测数据集,可以用来学习预测物体的边界框、置信度以及为物体分类,而对于分类数据集可以仅用来学习分类,但是其可以大大扩充模型所能检测的物体种类。在训练时,如果是检测样本,按照 YOLOv2 的 loss 计算误差,而对于分类样本,只计算分类误差。 通过联合训练策略,YOLO9000 可以快速检测出超过 9000 个类别的物体,总体 mAP 值为 19.7%。从某方面说,YOLOv2的改进策略亮点并不是很突出,但是YOLO9000算是开创之举。 4. 网络训练细节由于作者在论文中没有体现误差,损失函数等内容,对于相关细节可跳转《目标检测|YOLOv2原理与实现(附YOLOv3)》 以及《YOLO v2 损失函数源码分析》 三、YOLOv32018年,作者Redmon在YOLOv2的基础上做了一系列的改进,但是正如作者所说,这仅仅是他们近一年的一个工作报告(TECH REPORT),不算是一个完整的paper,因为他们实际上是把其它论文的一些工作在YOLO上尝试了一下。其核心在于做大做强,再创辉煌。可跳转视频霹雳吧啦Wz《yolo系列理论合集》查看详细讲解。 小小将 认为,YOLOv3 最大的变化为backbone中的残差模型以及采用FPN特征金字塔结构。 其中,在YOLOv3中保留的步骤有:
1. 网络结构YOLOv3 的第一个改进之处就是将 backbone 替换为 Darknet-53。而在 YOLOv2 中采用的是 Darknet-19 这样一个网络。Darknet-53 的top-1准确率相较于 Darknet-19 有比较大的提升,与 ResNet 性能相当,但是FPS即检测速度比 ResNet 要好很多。Darknet-53 如下图所示。YOLOv3最大的变化为使用残差模型和采用FPN(feature pyramid networks)架构。
Darknet-53网络结构有如下特点,如下图所示。
YOLOv3的416模型网络结构,即输入图像尺寸为416×416,预测的三个特征层大小分别为52,16,13。结构如下图所示:
2. 改进方法2.1 多尺度预测 为了能够预测多尺度的目标,当输入图片为416×416时,YOLOv3基于k-means方法对不同size的目标进行检测(越精细的grid cell就可以检测出越精细的物体),得到的九组预设边界框尺寸,并将其划分到3个尺度特征图上,尺度更大的特征图使用更小的anchor先验框,和SSD类似。这些预设的框被称为 bounding box priors,这个和 Anchor 以及 Default box 其实是一个概念。 在COCO数据集上选择的9种Anchors的尺寸如下所示: YOLOv3 借鉴了==FPN (feature pyramid networks)==特征金字塔的思路,Concatenate层与来自backbone里的相同特征图大小的残差层拼接,可参考YOLOv3网络结构。在COCO数据集(有80个分类)上进行预测时,每一个预测特征层上会张量为 N × N × [ 3 ? ( 4 + 1 + 80 ) ] 。N为特征图大小。 2.2 目标边界框预测 下图中虚线矩形框为先验框,即预设边界框,实线矩形框为通过网络预测的偏移量计算得到的预测边界框。通过右下角的式子可以计算得出实际预测框 b 的尺寸。 注:虚线框 Anchor 的中心画到了 cell 的左上角,它的中心坐标就是 ( c x , c y ) (c_x,c_y) (cx?,cy?),宽度和高度分别是 p w p_w pw?和 p h p_h ph?,σ是sigmoid函数。sigmoid函数目的是将预测偏移量缩放到0到1之间,能够将预设边界框的中心坐标固定在一个cell ( c x , c y ) (c_x,c_y) (cx?,cy?)当中,作者说这样能加快网络收敛。
3. 损失函数
3.1 目标置信度损失 目标置信度可以理解为预测目标矩形框内存在目标的概率,采用二值交叉熵损失(Binary Cross Entropy) 方法;
o
i
o_i
oi?∈{0, 1} 表示预测目标边界框i中是否真实存在目标,0表示不存在,1表示存在。
3.2 目标分类损失 目标分类损失同样采用的是二值交叉熵损失,同一目标可同时归为多类,比如猫可归为猫类以及动物类,这样能够应对更加复杂的场景。
3.3 目标定位损失 采用的是真实偏差值与预测偏差值差的平方和,通过左下角的式子能够得到目标定位损失值。 4. 性能比较通过在 COCO 数据集上正确率的对比我们可以看出,相比于其他网络而言,YOLOv3 速度非常的快,但是正确率并没有那么高。而在满足检测精度差不都的情况下,YOLOv3具有更快的推理速度! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 17:45:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |