赞
踩
YOLO系列一直是最近几年机器视觉的炙手可热的项目之一,自从Joseph Redmon发表于CVPR2016夺得了当年的最佳论文之后,接下来机器视觉领域的学者研究专家蜂拥而至对于Joseph的YOLO框架进行继承和改善,创造出了YOLO V1-8的众多版本开源为大众使用。如今时代,动态物体识别的领域中最主要运用的版本就是YOLO V5。但是YOLO V5的内容是基于之前的YOLO进行修改完善的,因此只学习YOLO V5相关的内容似乎有些不太合理。事实上,从作者本人的经历来看,Joseph在前3个版本的YOLO之中所加入的元素撑起了整个YOLO的框架,而之后的V4 和V5做到的仅仅是在其上添砖加瓦,但是再难以在结构上做出什么创新性的调整,因此学习YOLO V1-3不仅不是浪费时间,其在梳理整个发展的时间线的基础上更是一步一步为YOLO V5的出现铺平着道路。本文将通过对于不同版本的YOLO模型的对比,仅从思想思路上给出对于YOLO V1-4的内容分析。就代码来说,作者下一篇博客将基于ultralytics发布的YOLO V5s的源码进行讲解。
简介&每一个版本的基础特性
表格如下:
序号 | 模块/代 | V1 | V2 | V3 | V4 |
1 | BackBone 网络架构 | Google Net | Darknet 19 | Darknet53 (Res残差模块) | CSP Darknet53 (CSP架构) |
2 | Neck部分 &输出形式 | 无特殊处理 一个特征矩阵 | 无特殊处理 一个特征矩阵 | 采用了FPN结构 三个特征矩阵(代表分辨率不同) | 采用了PAN结构 输出形式同前 |
3 | Anchor相关 | ||||
是否采用先验框(Anchor) 每个cell采用几个框 | 否 2预测框/cell | 是 5 预测框/cell 对应5 anchor | 是 3 预测框/cell 对应9Anchor/点 | 同 V3 | |
每一个预测框对应的参数数量 | 5(W,H,X,Y,C) | 25(WHXYC& Imagenet对应的20种class的概率) | 85(WHXYC&COCO数据集对应的80种class的概率) | 同左 |
YOLO V1-3的具体变化
那么接下来将按照上面分画的三个大模块进行分析学习与解析。
上图为YOLO V2的结构图,聚焦Passthrough层
从上面的网络结构中可以看出一点:Passthrough层是通过concatenation拼接的,拼接的操作实际上就是和残差结构的直接相加有着异曲同工之妙
优点:通过类似于残差的结构,使得较高分辨率下的特征信息可以保留。
不足:仅仅采用了残差的结构但是没有采用残差块的形式,只有一层细粒度不够
这一块并没有什么值得分析的内容,网络的加深带来了更好的效果。
增添CSP和SPP这两个模块属于是trick,不过就实验结果来看属于较为有效的trick。
论文中的CSP模块图
论文:[1911.11929] CSPNet: A New Backbone that can Enhance Learning Capability of CNN (arxiv.org)
CSP模块通过从一开始的矩阵中截下一部分保持原样拼在了经过处理的剩下的矩阵之后,可以说是同时保留了原样的一部分信息和处理后的信息。拼接完成之后通过一组CBR函数(convolution+batch normalization+ReLU)激活就得到了同时糅合了浅层内容(即被直接拼接的原矩阵的一部分)和深层内容(即经过卷积操作之后的原矩阵的另一部分)的输出结果。
具体就是通过三种不同的池化,得到三个不同的结果拼接得到最终输出的内容。好处是maxpool采用的kernel size的不同尺寸分别对应着三个不同的范围,因此可以看到不同尺度的信息,最后得到的结果融合了以上得到的这些,对于模型的效果和精度有所提升。
V1和V2的输出结果,仅仅只有一个矩阵(作者:铁心核桃)
V3和V4对应的输出结果,可以看出分成了三个不同的矩阵
不同大小的矩阵也就意味着同一图片在被分割成不同大小的方格时,每一种分割方式对应分割出的图片其均可以用来产生预测框。被分割地较粗的图片可以用来定位识别较大的物体,被分割地较细密的图片可以用来识别较小的物体的,这样分成三层有效弥补了前版本难以识别小物体的缺点。
图示如下:
论文网址:[1612.03144] Feature Pyramid Networks for Object Detection (arxiv.org)
具体的操作正如上图所画的一样,输出的三个分别是1*,2*,3*这三个不同的结果,而其中的1*和2*分别融合进了2**和3**,每一个大小的矩阵都采取了别的感受野的矩阵的一些信息使得每一个矩阵中包含的信息更加全面。
论文:[1803.01534v2] Path Aggregation Network for Instance Segmentation (arxiv.org)
论文中的图示
正如图上所画的一样,这个结构像是一个正金字塔和一个倒金字塔相拼接得到的结果。每一步都揉合了之前的内容和上一层的内容使得得到的结果信息更加丰富。这两个也都是提升效果的trick,在实验中效果较好。
大部分的物体的大小都是有规律的,则V2中先确定Anchor框再以此为基础微调后生成预测框相比于V1中直接预测预测框的对角顶点的坐标要更稳定,可以减少较多的计算量。
聚类得到的结果
采取类K-means算法,通过在训练集上聚类来取得具体应该设置几个Anchor。
对于V2使用了5个Anchor以及对于V3每一个方格使用了三个Anchor,但实际上等效的是9个
对于Anchor而言,数量越多,平均IOU会越大,效果也会越好,但是相应的会带来更多的计算量
对于V3来说:一个点,若其不在边界上,会也只有可能属于三个不同的方格,且这三个方格一定属于不同的分割方式。于是如果一个方格有K个对应的预测框,则等效于每一个点有3K个包含其的预测框。同样综合考虑之后,决定令K=3。
取自书本《深度学习之Pytorch物体检测实战》,作者:董洪义
YOLO V2&V3对应的计算公式
知乎用户luckily的图片
Sigmoid函数目的:将横向与纵向的坐标偏移值都用sigmoid函数限制在0-1中,即将预测框的中心点限制在格子中,在开始训练时更容易达到应该处在的位置
对于sigmoid函数,当标注框的中心点落在方格的边缘上时,对应的sigmoid(
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。