yolov4项目记录2-yolov4网络结构

目录

一、各模块介绍

 1.CBM

 2.CBL

 3.Res Unit

 4.CSPX

二、BackBone

三、Neck

四、Head

1.yolo网格的思想

2.先验框anchors原理

3.头部的decode


一、各模块介绍

注:输入是(608,608,3)

 1.CBM

卷积+BN层+Mish激活函数

 2.CBL

卷积+BN层+LeakyRelu激活函数

 3.Res Unit

卷积+卷积,后将输入与输出进行element-wise相加

 4.CSPX

输入分成两拨,一波直接进行1*1卷积,另一波进行1*1卷积后,进入X个Res Unit,出来后再进行1*1的卷积,最后把这两拨输出拼接起来。

二、BackBone

即上图左侧黄+绿部分。这部分就是CBM和CSPX的拼接,并在特定的阶段,把输出分出来传给其他模块,进行特征信息的融合。

三、Neck

即上图中间部分,到右边CBL之前。

这一部分使用了FPN+PANET进行信息的融合。红色竖线左侧,是从底部向顶部的融合,也就是yolov3里面的FPN,右侧是从顶部向底部的融合,也就是PANET。

同时,在BackBone最后一层的输出后面,又拼接了一个SPP模块,使得输出特征能够以不同的方式被提取之后,再合并起来,增强了特征的提取效果。

当输入进来之后,进入到三个MaxPool层,其中pool的大小从上到下分别是13,9,5,使用的步长均为1,三个生成的形状拼接起来,和输入的形状一致。最后再和输入拼接起来。

四、Head

即上图右侧部分,橙色CBL+蓝色Conv+灰色

1.yolo网格的思想

yolov4的输出有三个头,每个头的feature map的尺寸不一样,分别为19*19,38*38,76*76。但他们的feature map的数量是一样的,都是18。(如果分类类别为1的情况下,前文有介绍。)

那么这样的话,就把原图分为三种类型的网格,19*19个网格的话,每一个网格就比较大包含的内容就比较多,适合判断大物体,76*76的话,每一个网格包含的内容就少,适合判断小物体。

假如我们使用76*76的网格,有一个人的中心点落在了第四行第三列的位置上,即(3,2)位置的网格,并且中心点相对于所在网格的xy的偏移量分别是0.8和0.2(注意:这里是经过了sigmoid函数之后的数值。),那么这个人所对应的标签信息,就会是如下的内容:(0,3,2, [ 0.8, 0.2, tw, th, 1, 1 ]),这里假设了第0号anchor框是最符合物体的,这个信息就是在训练过程中的标签,用来和预测的结果计算损失。、

2.先验框anchors原理

对于每一个生成的yolo头,都会定义三个先验框,也就是9种提前定义好的先验框。假设下面的图,分别对应19*19,38*38,76*76,那么蓝色的框,就是对于每一个网格,所定义的先验框。黄色的框是标签。每一个物体,只由物体中心点的网格所预测,因此红色的网格就是预测物体的网格,在这里,能看出来,19*19的中等大小的先验框,是更适合预测图中的狗的,因为这个框基本上覆盖到了标签框的大概70%了,而最大的,看起来覆盖的内容有点太多了。

 

而数学上,我们使用IOU(交并比)来计算,决定使用哪个框,也就是两个框的交集的面积,除以两个框并集的面积。

设19*19的anchors从小到大的序号为0,1,2,最适合预测的是1号框,预测物体中心点的那个网格所在的框的位置是(6,6),中心点相对于预测网格的偏移量分别是0.7,0.2。那么输出的18维度的结果就是这样:(1,6,6, [ 0.7, 0.2, tw, th, obj, cls ])

而tw和th的计算,是和先验框和标签框的宽高有关,先对tw和th取一个exp,那么exp(tw)和exp(th)就分别是标签框的宽和高,除以先验框的宽和高,假设计算结果分别是0.9和1.2,那么输出现在就是(1,6,6, [ 0.7, 0.2, 0.9, 1.2, obj, cls ])。作为标签的话, obj和cls就都是1。

训练过程中,输出的形状也是和上面的一样,但是值可能是随机的,比如(1,6,6, [ 0.2, 0.24, 0.1, 1.9, 0.2, 0.1 ]),然后计算损失,再反向传播更新参数,再计算,直到这个结果和标签非常接近。

 

3.头部的decode

通过网络得到了(3,19,19,6)的结果之后,这个结果就输入给了yolo头部,通过头部的decode,得到最终的标记框的位置以及大小。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
complex-yolov4-pytorch是一个基于PyTorch实现的复杂目标检测算法,其复现过程涉及到模型结构、参数设置以及训练测试流程等多个方面。 首先,复现complex-yolov4-pytorch需要详细了解论文中提出的模型结构和损失函数等细节,然后根据论文中的描述在PyTorch架下构建模型,包括网络层的搭建、激活函数的选择等,并且要注意模型参数的初始化和正则化操作。 其次,对于训练数据的处理也是复现过程中的重要环节,需要根据论文中提供的数据集或自己的数据集进行预处理,包括数据增强、标签生成等操作,以及构建数据加载器并进行合适的数据分割。 接着,需要根据论文中给出的训练策略和超参数设置来实现模型的训练过程,包括学习率的调度、优化器的选择、损失函数的定义等,同时要注意在训练过程中记录和保存模型参数和训练日志。 最后,针对复现模型的性能进行评估和测试,可以使用论文中提出的评价指标来计算模型在测试集上的表现,并根据实际需求对模型进行调优和改进。 总之,复现complex-yolov4-pytorch是一个综合性的任务,需要对目标检测算法有深入的理解,并具备较高的PyTorch编程能力和实践经验。在复现过程中要注重细节,对比论文中的描述和代码实现进行验证,并根据实际情况进行适当的调整和优化,以获得更好的模型性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值