首页 > 其他分享 >深度学习小白初学者入门干货!

深度学习小白初学者入门干货!

时间:2024-12-30 20:29:39浏览次数:3  
标签:采样 Conv 入门 训练 模型 改进 干货 实验 初学者

前言:主要内容阐述了深度学习中常见的实验问题与实验技巧,包括消融实验、对比实验的做法及相关指标,数据集的分配问题,深度学习改进实验的顺序,预训练权重对改进和精度的影响,YAML 模型结构图的绘制,训练的可重现性,pytorch 模块内结构图的绘制,创新性,模块加入结构的方法,判断模型收敛与过拟合的方法,模型训练结果,以及上采样和下采样等内容。主要面向深度学习小白初学者,尤其是与图像相关的内容。

目录

1.深度学习常见实验问题与实验技巧

1.1 消融实验的做法

1.2 对比实验的做法

1.3  消融实验和对比实验的指标

1.4  数据集分配问题

2.深度学习改进实验顺序

3.深度学习中预训练权重对改进和精度的影响

4.画YAML模型结构图

5.深度学习中训练的可重现性

6.画pytorch模块内的结构图

7.创新性

8.写模块加入结构里

9.判断模型已经收敛,模型过拟合

10.模型训练结果

11.上采样和下采样

其他


1.深度学习常见实验问题与实验技巧

1.1 消融实验的做法

控制变量思想

可分为两种:堆叠模式和组合模式

例如我做了一个yolov11的改进,我改进点有三个(这里简称为①、②、③)。

适用于大部分同学的是堆叠模式:

实验一:基准模型(baseline),也就是原版yolo11

实验二:yolo11+①

实验三:yolo11+①+②

实验四:yolo11+①+②+③

适用于与要求比较高的同学是组合模式:

实验一:基准模型(baseline),也就是原版yolo11

实验二:yolo11+①

实验三:yolo11+②

实验四:yolo11+③

实验五:yolo11+①+②

实验六:yolo11+①+③

实验七:yolo11+②+③

实验八:yolo11+①+②+③

1.2 对比实验的做法

在所有实验开始前,先选择部分模型控制好超参数进行跑 baseline,假如我选择了yolov5,yolov7 volov8,假如最高的是 yolov7,那么我可以选择使用 yolov7进行改进,这样就避免在消融实验做完后,上面要求需要增加跟其他模型的对比的时候发现其他模型比改进后的模型精度都要高的情况!

不同论文同数据集的对比实验应该怎么做?如果没有别人的源码,一般情况下是比较难复现,这种情况一般都是引用。对于超参数问题一般不需要理会,可以理解为每个论文都在适合自己模型的超参数上训练和测试。

需要注意:消融和对比实验中的超参数设定,无论是学习率还是 batchsize 还是 epoch 都必须得一致!保持实验环境和机器的一致性(涉及到随机种子的问题)

1.3  消融实验和对比实验的指标

最常用:Param,FLOPs,Size,FPS,Precision,Recall, mAP50,mAP75,mAP50-95 (前四个为性能指标,其余后面的是精度指标)

还有一种(精度指标和COC0 指标选择其一):COC0 指标 如下图

最常用指标

  1. Param(参数数量):指模型中可训练参数的总数。参数数量直接反映了模型的复杂度,模型的参数越多,通常意味着它具有更强的表达能力,但同时也会增加模型的训练时间和内存需求。例如,一个具有数百万参数的大型模型可能能够学习到更复杂的特征,但在资源有限的环境中可能难以部署和训练。
  2. FLOPs(浮点运算次数):即每秒浮点运算次数,用于衡量模型在处理输入数据时所需的计算量。FLOPs 越高,表明模型在推理过程中需要进行更多的计算操作,这会影响模型的运行效率和实时性。对于一些对实时性要求较高的应用场景,如自动驾驶、实时视频监控等,低 FLOPs 的模型更具优势。
  3. Size(模型大小):表示模型文件占用的存储空间大小。较小的模型大小不仅便于存储和传输,还能在资源受限的设备(如移动设备、嵌入式设备)上更高效地运行。在实际应用中,模型大小是一个重要的考虑因素,特别是对于需要在多个设备上部署的模型。
  4. FPS(每秒帧数):主要用于衡量模型在处理视频流或连续图像数据时的实时处理能力。FPS 越高,模型能够处理的图像帧数就越多,从而提供更流畅的处理效果。在实时视频处理任务中,如视频目标检测、视频跟踪等,高 FPS 是保证系统性能的关键指标之一。
  5. Precision(精确率):定义为预测为正例的样本中实际为正例的比例。它反映了模型预测的准确性,即模型在识别出的正例中有多少是真正的正例。例如,在目标检测任务中,精确率表示检测出的物体中有多少是正确识别的。
  6. Recall(召回率):指实际为正例的样本中被正确预测为正例的比例。召回率衡量了模型对正例的捕捉能力,即模型能够找到多少真正的正例。在一些应用场景中,如医疗诊断、安全监控等,高召回率是非常重要的,因为我们希望尽可能不漏掉真正的正例。
  7. mAP50(平均精度均值,IoU 阈值为 0.5):平均精度均值(mAP)是目标检测任务中常用的评价指标。mAP50 表示在交并比(IoU)阈值为 0.5 时的平均精度均值。IoU 是衡量预测框与真实框之间重叠程度的指标,当 IoU 大于等于 0.5 时,认为预测框是一个有效的检测结果。mAP50 主要关注模型在检测目标时的准确性,在 IoU 阈值为 0.5 的情况下,综合评估模型对不同类别目标的检测性能。
  8. mAP75(平均精度均值,IoU 阈值为 0.75):与 mAP50 类似,mAP75 是在 IoU 阈值为 0.75 时的平均精度均值。相比 mAP50,mAP75 对检测框的准确性要求更高,因为 IoU 阈值从 0.5 提高到了 0.75。这意味着模型需要更精确地定位目标物体,才能获得较高的 mAP75 分数。mAP75 更能反映模型在精确检测目标方面的能力。
  9. mAP50 - 95(平均精度均值,IoU 阈值从 0.5 到 0.95 以 0.05 步长):mAP50 - 95 是一个综合评估指标,它计算了在 IoU 阈值从 0.5 到 0.95 以 0.05 步长变化时的平均精度均值。这个指标能够更全面地反映模型在不同 IoU 阈值下的性能,对模型的检测精度和稳定性进行了更细致的评估。它考虑了不同程度的目标重叠情况,能更准确地衡量模型在各种复杂场景下的表现。

训练完成后可看精度指标(最右边四个)是否平缓(收敛)

COCO 指标

COCO(Common Objects in Context)指标是在 COCO 数据集上进行目标检测、实例分割等任务时常用的评价指标体系。COCO 数据集包含了大量的自然图像,涵盖了多个常见的物体类别,具有丰富的标注信息。

COCO 指标与上述提到的一些通用指标有相似之处,但也有其独特的特点和计算方式。例如,COCO 指标中的 AP(Average Precision)与 mAP 类似,用于衡量模型在不同 IoU 阈值下的平均精度。不过,COCO 指标在计算 AP 时,考虑了更多的细节和场景,并且对不同类别的目标进行了更细致的评估。

COCO 指标体系还包括其他一些重要的指标,如 AR(Average Recall),用于衡量模型在不同 IoU 阈值下的平均召回率;以及针对不同尺度目标的检测指标,如 AP_small、AP_medium 和 AP_large,分别反映了模型对小、中、大尺度目标的检测性能。

这些指标在消融实验和对比实验中起着关键作用,通过对这些指标的分析和比较,可以深入了解模型的性能特点,发现模型的优势和不足,从而有针对性地对模型进行改进和优化。同时,这些指标也为不同模型之间的公平比较提供了客观依据。


轻量化需要看参数量和计算量,然后精度的跌幅在一个点左右

FPS不是计算量和参数量下降就提升,FPS还要看结构和模型的复杂度

提点的情况下,不要大力出奇迹,参数量和计算量最好20%增幅内


1.4  数据集分配问题

建议尽量分训练、验证、测试

比例一般为6:2:2或者7:1:2

训练集用于模型的学习和参数优化,它是模型训练的基础。在训练过程中,模型通过对训练集的学习来调整自身的参数,以适应任务的要求。验证集则用于评估模型在训练过程中的性能,帮助我们确定模型是否过拟合或欠拟合。通过验证集的反馈,我们可以调整模型的超参数,从而提高模型的泛化能力。测试集则用于评估模型在真实场景下的性能,它独立于训练集和验证集,用于检验模型的最终效果。

2.深度学习改进实验顺序

改进的方案一般有以下内容:
1.替换 backbone.(例如 fasternet,efficientViT...)---成本相比低,掉点率较高
2.改进 backbone.(在 backbone 上添加注意力,更换主干模块,例如使用 Fasternet 中的 FasterBlock
改进 C2f)---成本相比高
3.替换 neck.(例如 BiFPN 替换 PAFPN...)---成本相比低,掉点率相比高
4.改进 neck.(改进 neck 中的融合方式,添加注意力...)---成本相比高
5.改进检测头(DyHead,轻量化,解耦头...)--提点率相比高
6.改进损失函数.(Focalloss,sildeloss,loU...)--成本最低,可作为额外增加堆工作量、不额外增加推理时间、不增加模型大小--只要提点,白赚
7.模型剪枝、蒸馏.---对模型没有任何影响,模型定型后,堆工作量很大,可做很多对比实验

8.数据增强

推荐顺序:
1.替换 backbone.(例如 fasternet, efficientViT...)---成本相比低,掉点率较高
2.替换 neck.(例如 BiFPN 替换 PAFPN...)---成本相比低
3.改进 backbone.(在 backbone 上添加注意力,更换主干模块,例如使用 Fasternet 中的 FasterBlock
改进 C2f)---成本相比高,掉点率相比高
4.改进 neck.(改进 neck 中的融合方式,添加注意力...)---成本相比高,
5.改进检测头(DyHead,轻量化,解耦头...)---提点率相比高
6.改进损失函数.(Focalloss,sildeloss.loU...)--成本最低,无损,可作为额外增加堆工作量、不额外增加推理时间、不增加模型大小--只要提点,白赚
7.模型剪枝、蒸馏.---对模型没有任何影响,无损,模型定型后,堆工作量很大,可做很多对比实验

多尝试,做实验,看效果

3.深度学习中预训练权重对改进和精度的影响

1.预训练权重对模型的影响。

一般情况下,载入预训练权重,模型训练效果会更好,精度要高,收敛速度快。

更庞大的数据集比体量小的数据集的预训练权重效果要好(网络能学习到的特征就越来越多)

2.改进模型的时候,在什么情况下可以使用预训练权重,在什么情况下不使用预训练权重?

目标检测有Backbone, Neck,Head。

第一种情况,可以使用预训练权重:只改Head的情况下(可选择Head+剪枝+蒸馏去丰富工作量),拉高整体精度

第二种情况,可以使用预训练权重:改动Neck或Head(需要做变动修改预训练权重),拉高整体精度

第三种情况,不使用预训练权重:改动Backbone(提取特征用)(因为条件不统一了,改进模型与改进前模型的起步条件不一样了)

3.改进不推荐加预训练权重

4.模型改了结构后,可以指定去加载预训练权重,有可能很多对不上

5.在实验环境变量中,都没有加预训练权重,改进的模型有提升则证明有效

6.一般建议不加预训练权重

4.画YAML模型结构图

配置文件上的结构图相对好画,不同于在代码去搭建网络的结构图。接下来介绍一下在配置文件上的结构图绘制

也就是个连线游戏,例如下面的yolov5的结构图,主要看第一个参数from。

from为-1表示继承自上一层,-2表示继承自上上一层,其他数字表示接入自其它数字的层。

主干backbone提供不同下采样尺度的一个特征图,例如0-P1/2表示2倍下采样;7-P5/32表示32倍下采样,同时7、8、9层都是32倍下采样,32倍下采样一般都取第9层也就是最后的输出

yolo系列是有5个不同的下采样倍数的特征图,如下2倍、4倍...到32倍(例如输入图像是640*640,32倍就是640/32),需要的是特征图的最后输出

0-P1/2

1-P2/4

2-P3/8

3-P4/16

4-P5/32

在对模型主干修改改进时,主干的序号是从第四层开始 

如下为yolov5的结构图

例如,下面的-1就是直接顺着连线,配合上图结构图来看

例如这个【-1,6】

配合上图结构图来看,就是下面这个部分,第12层有来自11层(-1)也有第6层

如下为yolov5.yaml文件,这个 YAML 文件完整地定义了 YOLOv5 模型的结构,包括骨干网络、头部以及相关参数。通过这些配置,可以构建出用于目标检测的 YOLOv5 模型。

# Ultralytics YOLO 

标签:采样,Conv,入门,训练,模型,改进,干货,实验,初学者
From: https://blog.csdn.net/m0_61712829/article/details/144795684

相关文章

  • 【Linux】入门到精通——开启你的Linux之旅
    一、欢迎加入欢迎来到“Linux学习专栏”!我是Rocy,一个正在和你一起探索Linux世界的同行者。说实话,刚开始接触Linux时,我也感到过迷茫和不知所措。但随着不断的学习和实践,我逐渐发现了它的魅力和无限可能。在这个专栏里,我们将从最基础的概念开始,一步步深入到高级应用。无论你是......
  • 21. C++快速入门--协程 Coroutine 入门
    参考:https://www.cnblogs.com/blizzard8204/p/17563217.htmlhttps://www.bennyhuo.com/2022/03/09/cpp-coroutines-01-intro/本文不完整,更新中1基本概念什么是协程?C++20的协程是一个特殊函数,具有挂起和恢复的能力.(可以不一次性执行)协程可用于异步编程,提供......
  • 16. C++快速入门--模板和Concept
    待修改1定义模板1.1模板形参模板参数模板可以有两种参数,一种是类型参数,一种是非类型参数这两种参数可以同时存在,非类型参数的类型可以是模板类型形参template< typenameT,//1 Ta//2>第一个参数是类型参数T第二个是非类型参数a,它的类型和形参......
  • Ajax入门以及Axios的详细使用(含Promise)
    1.概述1.1是什么Ajax=AsynchronousJavaScriptandXML(异步的JavaScript和XML)Ajax不是新的编程语言,而是一种用于创建快速动态网页的技术Ajax最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容,使网页实现异步更新传统的网页(......
  • [笔记]Airflow入门
    前言Airflow入门教程正文简介任务管理、调度、监控工作流平台。基于DAG(有向无环图)的任务管理系统。基本架构组件scheduler:以有向无环图(dag)的形式创建任务工作流,根据用户的配置将任务定时/定期进行调度worker:任务的执行单元,worker会从任务队列当中拉取任务并运行......
  • docker自学入门教程
    目录1docker的安装1.1卸载旧版本docker1.2下载相关依赖1.3配置docker的安装源地址1.4安装docker1.5设置开机启动1.6简单命令检验是否安装成功1.7配置镜像加速器(官网属于国外网站,下载镜像会比较慢,推荐阿里云)1.8docker官网的镜像仓库地址2docker基......
  • 零基础python入门要多久?python怎么学?python就业前景如何?看这篇就够了
    包含编程籽料、学习路线图、爬虫代码、安装包等!【点击领取】Python入门需要要多久?作为一门简单高效、对新手友好的一门编程语言,入门只需要花费2-4周就够了。从入门到精通,花费3-4个月也就够了。但是也不能一概而论,因为总是会有人在学习的过程中做无用功,所以会花费更长的时......
  • java之mybatis框架第一天-mybatis入门
    1.前言什么是mybatisMyBatis是一款优秀的持久层框架,用于简化JDBC的开发。MyBatis本是Apache的一个开源项目iBatis,2010年这个项目由apache迁移到了googlecode,并且改名为MyBatis。2013年11月迁移到Github。2.mybatis快速入门目标:使用Mybatis查询所有用户数据(1)准备工......
  • 大模型入门书籍 | 《大模型基础》开源分享!
    一、书籍介绍由浙江大学DAILY实验室毛玉仁研究员、高云君教授领衔撰写的《大模型基础》教材第一版。这本教材为对大语言模型感兴趣的读者系统地讲解相关基础知识、介绍前沿技术。本书包括传统语言模型、大语言模型架构、提示工程、高效参数、模型编辑、搜索增强增加生成......
  • 开源即时通讯IM框架MobileIMSDK的鸿蒙NEXT端开发快速入门
     相关链接:① MobileIMSDK-鸿蒙端的详细介绍② MobileIMSDK-鸿蒙端的开发手册new(* 精编PDF版)一、理论知识准备您需要对鸿蒙Next和ArkTS开发有所了解:1)HarmonyOSNEXT星河版零基础入门到实战(B站视频)2)零基础快速上手HarmonyOSArkTS开发(系列文章)3)HarmonyOS第一课(鸿蒙官......