记录yolov5目标检测算法学习(模型的框架学习)23/10/10

先是卷理论,后是看代码,收获的只有一次又一次的一脸懵逼。在深夜向导师哭诉之后,终于取得真经,先从整体把握,在从局部入手,说人话就是——先学模型框架!

资源分享:

本人是通过观看b站博主<小许同学在思考>来学习框架的,如有需要可移步自查

这是博主分享的框架图,需要可移步保存图片

框架介绍:

前言:我们小白学习项目,一定要做到“不求甚解”,就是先大概懂某个模块的作用是什么,而不先去细究它的内部实现,先从整体把项目的框架把握住,明白项目由哪些模块组成。本篇也只是本小白的个人学习理解,存在误区属实正常,万分盼望路过的大佬能够指点小生一二!

下面进入框架的介绍:(本篇介绍的是yolov5的6.0版本,比它小的版本的框架存在细微差异,比如backbone部分使用spp模块而非sppf或者conv模块数量差异)

yolov5算法的框架主要分为三大部分(backbone,neck,head),

①backbone:

作用:翻译为主干网络的意思,既然说是主干网络,就代表其是网络的一部分,那么是哪部分呢?翻译的很好,主干部分!这是用来提取图片特征的网络,作用就是提取图片中的信息,供后面的网络使用。总结:backbone用来提取特征,并不断缩小特征图

组成:其存在3种模块:conv(基本卷积操作,提取特征,整理特征,压缩特征图,在backbone部分中,每经过一个conv模块,原特征图大小减一半),c3(从不同维度去提取特征并融合,训练模型能够准确精细地检测目标),sppf融合不同尺度的特征,确保最终输出统一大小的特征向量

结构(建议配合结构图食用):

(0)conv -> (1)conv -> (2)c3 -> (3)conv -> (4)c3 -> (5)conv -> (6)c3 -> (7)conv -> (8)c3 -> (9)sppf

个人理解:整体来看结构并不复杂,从(0)到(9)共10层,你注意,前面这个数字不是本人自己喜欢这么标的,而是原作者这样规定的,应该是某种约定俗成。因为后面其它部分和backbone部分是有联系的!那么用对应标号就方便对应联系,标号越大代表神经网络越深,包括项目的代码里面的参数也有涉及这个标号,因此标号一定不要记差了!其次就是前言已提,我们暂时把这几个模块名字和大概作用记住,先不细究其内部实现


②neck:

作用:首先从字面上去理解,neck意为“脖子”,大概可猜其在整体中主要起到一定的连接、过渡作用,也就是过渡backbone和head这两部分

在更具体介绍它的作用之前,我们先粗略理解两个概念:图形特征语义特征

图形特征:指神经网络提取到的,在图像中位置、大小、形状等几何信息,图形特征可以帮助目标检测时定位和识别目标物体

语义特征:随着网络加深,神经网络会把只是简单的图形特征不断融合、升维、产生新的特征,根据物体的类别和属性进行分类和识别,语义特征可以帮助区分不同类别的物体

综合来说,在卷积神经网络中,先从浅层提取到图形特征,它们是简单的图形,语义性不够强;再从深层提取到语义特征,语义性很强了,但却没了简单的图形。而通过neck部分,就能实现浅层图形特征和深层语义特征的融合,归根到底还是为了目标检测能够更精细、准确!

组成:其存在conv(前文已提,在neck部分中,每经过一个conv模块,原特征图的通道扩大(左支路)or缩小一倍(右支路))upsample(上采样操作,将特征图放大两倍,以便和backbone部分中不断减半以及neck部分右支路的下采样的特征图融合)concat(将不同深度的特征图融合,图形特征和语义特征的融合大概就是在这步实现)c3(前文已提)四种模块

结构(建议配合结构图食用):

-> (10)conv -> (11)upsample -> (12)concat -> (13)c3 -> (14)conv -> (15)upsample -> (16)concat        (截止此处为neck部分左支路即上采样,以下是右支路即下采样)

-> (17)c3 -> (18)conv -> (19)concat -> (20)c3 -> (21)conv -> (22)concat -> (23)c3

个人理解:你注意,这个标号是从backbone部分继承下来的,也就是说,我们虽然主观把整个模型架构分成3部分,但其实它们是紧密联系的,不同部分之间存在一些联系,比如特征融合(如backbone部分中深度为4的c3模块和neck部分中深度为16的concat模块,它俩是连在一起做了一个80*80*256的特征图的融合,这里先简单举个例子,后续学习博客再细致分析);然后neck部分可划分成左支路和右支路,分别实现上采样和下采样,把特征图像一块面团似的先按压成饼又揉搓成团,以实现不同部分不同深度的特征图的融合,这样不断汇总在不同维度提取到的特征,以获取更为完整的特征


③head:

作用:head部分很简单,就只有一个detect模块,负责解码网络输出并生成最终目标检测框和类别预测结果,用于最终的目标检测和预测阶段,这个模块产生了对输入图像中物体的位置、类别和置信度的预测结果。

结构:-> (24)detect        没错,就这么简单!

个人理解:这一部分只有一个模块,并以总共25层(第一层深度是0)的深度结束了整个架构,值得注意的是,detect这个模块是对neck部分中分别位于深度为(17)、(20)、(23)的三个c3模块输出的分别为80*80*256、40*40*512、20*20*1024的特征图分别进行处理,这是因为,在neck部分的右支路中,使用了多个下采样层来逐渐减小特征图的尺寸,这导致了较低分辨率的特征图较大感受野。虽然这可以帮助网络学习到更高级别的语义特征,但也会损失一些细节信息。为了能够检测到不同大小的物体,通过设计detect模块处理不同尺度的特征图来解决这个问题。

较早的尺度通常捕捉较多的细节信息,而较深的尺度具有更高级别的语义信息。

通过对三个不同尺度的特征图进行处理,YOLO算法可以同时预测不同大小的目标物体。较小的目标通常出现在较早的尺度上,而较大的目标则出现在较深的尺度上。这种多尺度处理能够帮助提高目标检测的准确性,并对不同大小的物体有更好的响应能力。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值