数据集 VOC转YOLO格式2

简介: 数据集 VOC转YOLO格式

六、yolov7网络结构图

通过backbone获得3个有效特征层。特征金字塔可以将不同shape的特征层进行特征融合,有利于提取出更好的特征。

yolov7中将neck划分到了head里。

使用MP-1进行下采样,在卷积神经网络中,常见的用于下采样的模块是一个卷积核大小为3 * 3、步长为2 * 2的卷积或者一个步长为2*2的最大池化。池化层和卷积。左边的分支是一个步长为2 * 2的最大池化+1个1 * 1卷积,右边的分支是一个1 * 1卷积+1个卷积核大小为3 * 3、步长为2 * 2的卷积,两个分支的结果在输出时进行拼接。输出的通道数相较于输入没有改变,但是尺寸减半了,相当于复杂版的最大池化层。

目的是压缩宽和高,但是通道数不变。

加强特征提取模块。 作用是扩大感受野。池化核大小为5,9,13,无处理。

class SPPCSPC(nn.Module):
    # CSP https://github.com/WongKinYiu/CrossStagePartialNetworks
    def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5, k=(5, 9, 13)):
        super(SPPCSPC, self).__init__()
        c_ = int(2 * c2 * e)  # hidden channels
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = Conv(c1, c_, 1, 1)
        self.cv3 = Conv(c_, c_, 3, 1)
        self.cv4 = Conv(c_, c_, 1, 1)
        self.m = nn.ModuleList([nn.MaxPool2d(kernel_size=x, stride=1, padding=x // 2) for x in k])
        self.cv5 = Conv(4 * c_, c_, 1, 1)
        self.cv6 = Conv(c_, c_, 3, 1)
        self.cv7 = Conv(2 * c_, c2, 1, 1)
    def forward(self, x):
        x1 = self.cv4(self.cv3(self.cv1(x)))
        y1 = self.cv6(self.cv5(torch.cat([x1] + [m(x1) for m in self.m], 1)))
        y2 = self.cv2(x)
        return self.cv7(torch.cat((y1, y2), dim=1))

在yolov7中,每一个特征层上每一个特征点存在3个先验框。

最后的255可以拆分成3个85,对应3个先验框的85个参数,85可以拆分成4+1+80。

前4个参数用于判断每一个特征点的回归参数,回归参数调整后可以获得预测框;

第5个参数用于判断每一个特征点是否包含物体;

最后80个参数用于判断每一个特征点所包含的物体种类。

七、yolov7x的网络结构图

八、检测模块

测试中用的都是detect模块,在训练中,使用的是Idetect和Iauxdetect模块。I的意思是implicit隐式的意思。对于隐式内容可以通过学习yolo-R来了解。

IDetect

九、文件之间的关系

1、yolov7和yolov7x是常规GPU的模型。yolov7x是在yolov7的基础上在颈部进行堆栈缩放,并使用所提出的复合缩放方法对整个模型的深度和宽度进行缩放得到的。

2、yolov7-d6、yolov7-e6、yolov7-e6e和yolov7-w6是云GPU的模型。对于yolov7-w6,我们使用新提出的复合缩放方法来获得yolov7-e6和yolov7-d6。此外,我们将所提出的E-ELAN用于yolov7-e6,从而完成yolov7-e6e

3、yolov7-tiny和yolov7-tiny-silu是边缘GPU的模型。它们的区别只在于所使用的激活函数不同。yolov7-tiny它将使用Leaky ReLU作为激活函数。对于其他模型,我们使用SiLU作为激活函数。

十、预测结果的编码

具体可以看看这篇博文:睿智的目标检测61——Pytorch搭建YoloV7目标检测平台

1、获得预测框与得分

我们得到的三个特征层的预测结果并不对应着最终的预测框在图片上的位置,还需要解码才可以完成。

2、得分筛选与非极大抑制

得到最终的预测结果后还要进行得分排序与非极大抑制筛选。

得分筛选:筛选出得分满足confidence置信度的预测框。
非极大抑制:筛选出一定区域内属于同一种类得分最大的框。

十一、损失值部分

1、计算loss所需内容

计算loss实际上是 网络的预测结果和网络的真实结果的对比。

网络的损失由三个部分组成,分别是reg部分、obj部分和cls部分。

reg:特征点的回归参数判断

obj:特征点是否包含物体判断

cls:特征点包含的物体的种类

2、正样本的匹配过程

(1)对每个真实框通过坐标与宽高粗略匹配先验框和特征点

(2)使用SimOTA自适应精确选取每个真实框对应多少个先验框

正样本匹配的概念: 寻找哪些先验框被认为有对应的真实框,并且负责这个真实框的预测。

a. 不再使用iou进行正样本的匹配,而是直接采用高宽比进行匹配。

b. SimOTA自适应匹配

在yolov7中,会计算一个Cost代价矩阵,代表每个真实框和每个特征点之间的代价关系,Cost代价矩阵由两个部分组成:

(1)每个真实框和当前特征点预测框的重合程度

(2)每个真实框和当前特征点预测框的种类预测准确度

以上两个值越高,Cost代价越小。

3、计算loss

  1. Reg部分,由第2部分知道每个真实框对应的先验框,获取到每个框对应的先验框后,取出该先验框对应的预测框,利用真实框和预测框计算CIOU损失,作为Reg部分的Loss组成。
  2. Obj部分,所有真实框对应的先验框都是正样本,剩余的先验框均为负样本,根据正负样本和特征点的是否包含物体的预测结果计算交叉熵损失,作为Obj部分的Loss组成。
  3. Cls部分,获取每个框的先验框后,取出该先验框的种类预测结果,根据真实框的种类和先验框的种类预测结果计算交叉熵损失,作为Cls部分的Loss组成。
相关文章
|
Ubuntu 网络安全 Docker
|
机器学习/深度学习 vr&ar
一起来学MediaPipe(二)人脸面网格
一起来学MediaPipe(二)人脸面网格
1606 0
一起来学MediaPipe(二)人脸面网格
|
数据库
TortoiseSVN 执行清理( cleanUp )失败的解决方案
目前我们这边的内网代码是通过 TortoiseSVN 进行版本管理的,平时用着也挺好的,没碰到什么大问题。
890 0
TortoiseSVN 执行清理( cleanUp )失败的解决方案
|
人工智能 计算机视觉
Dataset之BDD100K:BDD100K数据集的简介、下载、使用方法之详细攻略
Dataset之BDD100K:BDD100K数据集的简介、下载、使用方法之详细攻略
Dataset之BDD100K:BDD100K数据集的简介、下载、使用方法之详细攻略
|
7月前
|
人工智能 搜索推荐 Docker
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
DeepSeek R1 + LobeChat + Ollama:快速本地部署模型,创建个性化 AI 助手
5369 119
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
|
8月前
|
机器学习/深度学习 存储 人工智能
深度强化学习实战:训练DQN模型玩超级马里奥兄弟
本文介绍了如何利用深度学习和强化学习技术构建一个能够自主学习并完成《超级马里奥兄弟》游戏的智能系统。通过使用深度Q网络(DQN)架构,智能体在虚拟环境中与游戏进行交互,逐步优化其行为策略。文中详细描述了环境构建、神经网络设计、智能体-环境交互机制等关键步骤,并展示了系统的训练过程和最终表现。该研究不仅展示了强化学习在游戏领域的应用潜力,也为未来的研究提供了宝贵的经验和技术参考。
472 81
深度强化学习实战:训练DQN模型玩超级马里奥兄弟
|
11月前
|
机器学习/深度学习 JSON 数据可视化
YOLO11-pose关键点检测:训练实战篇 | 自己数据集从labelme标注到生成yolo格式的关键点数据以及训练教程
本文介绍了如何将个人数据集转换为YOLO11-pose所需的数据格式,并详细讲解了手部关键点检测的训练过程。内容涵盖数据集标注、格式转换、配置文件修改及训练参数设置,最终展示了训练结果和预测效果。适用于需要进行关键点检测的研究人员和开发者。
1997 0
|
6月前
|
XML 前端开发 JavaScript
Ajax与Axios,以及Apifox的入门使用
本文由blue编写于2025年3月20日,主要介绍了Ajax、Axios以及Apifox的入门使用。文章首先讲解了Ajax的概念与作用,通过原生代码示例展示了如何实现异步数据交互;接着引入Axios,说明其对Ajax的封装简化了开发流程,并给出Axios实现相同功能的代码;最后详细讲述了Apifox的基本用法,包括创建接口、设置参数及生成Mock数据,为前后端开发提供了便利工具。
207 0
|
8月前
|
API 开发者 Python
Pygame Zero(pgzrun)详解(简介、使用方法、坐标系、目录结构、语法参数、安装、实例解释)
Pygame Zero(pgzrun)详解(简介、使用方法、坐标系、目录结构、语法参数、安装、实例解释)
1227 17
|
6月前
|
机器学习/深度学习 人工智能 运维
基于AI的自动化服务器管理:解锁运维的未来
基于AI的自动化服务器管理:解锁运维的未来
653 0