从壹开始解读Yolov11【源码研读系列】——cfg:模型配置加载功能

 

目录

一、模型配置操作:cfg.__init__.py

        1.cfg.cfg2dict:yaml转字典

        2.cfg.get_cfg:读取覆盖配置

        3.cfg全局配置参数查询表

        ①*基础参数配置:

        ②*训练参数配置:

        ③验证测试参数配置:

        ④*预测参数配置:

        ⑤可视化参数配置:

        ⑥导出部署模型参数配置:

        ⑦*训练超参数配置

        ⑧*数据增强参数配置


        在之前的从零开始使用YOLO系列文章中,简单记录了训练部署YOLO模型到自己的应用场景的一般方法。ultralytics平台的代码设计,让用户可以非常便捷轻易的使用命令行或者python接口脚本使用模型。

        从零开始使用YOLO系列——基础使用博文快速链接:https://blog.csdn.net/qq_58718853/article/details/140501645

        在此基础上,尝试使用Pycharm自带的debug模块,通过动态运行代码查看使用其便捷接口时具体调用模块的逻辑和结构。这样检视的好处是可以了解模型运作的流程,如加载模型要么调用model类中的self._load,要么调用self._new。

        从零开始使用YOLO系列——debug源码博文快速链接:https://blog.csdn.net/qq_58718853/article/details/141122605

        但是debug的方法是跳跃式的,在不同文件下python文件跳转,对于一些模块只能了解其部分,而对类的整体理解审视缺失。因此,新开本系列——按源码子文件顺序,研读官方参考文档,结合源码和实验解读YOLO源码。此系列可以作为YOLO内置功能函数的查询文档,也可以搭配debug系列深度理解YOLO运行逻辑。下见所有源码子文件夹。

        

一、模型配置操作:cfg.__init__.py

        cfg 内文件夹结构如下图。其中datasets存放了相关数据集的 yaml 配置文件,models存放从Yolov3到11的模型 yaml 配置文件。__init__.py 文件中编写了处理cfg的相关函数。

 

        1.cfg.cfg2dict:yaml转字典

        官方文档参考地址:https://docs.ultralytics.com/reference/cfg/__init__/

        这是一个读取yaml配置文件并转为字典的功能函数。下例分别读取了yolo11的模型yaml配置文件和整体环境yaml配置。

        输入:yaml配置环境地址

        输出:具体配置参数的字典dict格式

        yaml配置环境可以在克隆下载的源码内找到。详见下图。

# 测试代码
from ultralytics.cfg import cfg2dict

model_yaml = cfg2dict('yolo11.yaml')
print(model_yaml)
config = cfg2dict('default.yaml')
print(config)

        cfg2dict解析了yaml文件中的设置,并将其转为模型方便取用的dict字典格式。

 

        2.cfg.get_cfg:读取覆盖配置

        读取并修改覆盖配置参数函数。

        输入:空(默认配置)或配置文件地址, override=输入修改参数的字典

        输出:ultralytics.utils.IterableSimpleNamespace是ultralytics自定义的类

        自定义配置文件my_cfg只修改mode为val验证模式,下述测试代码可以验证使用override覆盖后,将my_cfg改回了默认配置。

        

from ultralytics.cfg import get_cfg

config1 = get_cfg('default.yaml')
config2 = get_cfg('my_cfg.yaml')
print(type(config1))
print(config1==config2)

config3 = get_cfg('default.yaml', overrides={'mode':'val'})
print(config3==config2)

        3.cfg全局配置参数查询表

        官方参考文档地址:https://docs.ultralytics.com/usage/cfg/

        ①*基础参数配置:

task任务模式:检测(detect)、语义分割(segment)、分类(classify)、姿态检测(pose)、定向边界框(obb)
mode模型模式:训练(train)、验证(val)、预测(predict)、导出部署格式模型(export)、目标追踪(track)、基准评估(benchmark)

        ②*训练参数配置:

model模型参数地址 .pt.yaml 格式(path/yolo11.yaml)
data数据 .yaml 文件存放地址(path/coco8.yaml)
epochs训练轮次数(100)
time最长的训练时长-小时数,超出时间终止轮次epochs(10)
patience验证指标没有改进下,最大容忍的训练轮次(10)
batch训练一轮的批量大小——图片数量(batch = -1:自动选择)
imgsz输入模型图片矩阵大小,所有输入图片都会调整为这一大小的正方形矩阵(640)
save是否保存模型检查点参数——恢复训练 & 最终模型结果参数——部署模型(True)
save_period

保存模型参数的频率——每几个轮次保存一次

(save_period = -1:禁用此功能)

cache数据加载在ram内存(True)——增加内存占用但提高训练速度 or 禁用此功能(False)
device训练设备:单gpu(device=0)、多gpu(device=0,1,2,3)、cpu(device=cpu)、Apple芯片(device=mps)
workers工作线程数(8),在多gpu中影响数据预处理和训练速度
project保存项目名称(my_project)
name实验项目具体保存文件名称(name=train1:保存在my_project/train1)
exist_ok用于迭代训练覆盖同名name文件(True)or 新增改名文件保存——my_project/train2(False)
pretrained是否启用预训练模型参数(True / False),或者直接输入预训练模型参数地址(path/yolo11.yaml)
optimizer训练优化器:(SGD)、(Adam)、(Adamax)、(AdamW)、(NAdam)、(RAdam)、(RMSProp)、自动(auto)
verbose训练中详细打印出训练过程(True),如训练loss、精度、召回率、map等指标
seed设置训练随机种子(0)
deterministic强制使用确定性算法(True),可能影响性能和速度
single_cls专注于提升预测框的精度,而不考虑框内目标分类(True)
rect启用矩形训练,提高速度,降低精度(True)
cos_lr启用余弦学习率调节,控制学习速度,帮助收敛(True)
close_mosaic在最后几(10)个轮次里禁用马赛克数据增强,以提高模型稳定性(close_mosaic=0:禁用此功能)
resume从最后的中断点开始恢复训练(True)
amp启动自动混合精度训练,减少内存加快速度(True)
fraction选择使用数据集的比例分数(fraction=1.0:完整数据集训练;fraction=0.5:使用数据集一半训练)
profile在训练期间对ONNX和TensorRT速度进行分析,这对于优化模型部署非常有用(True)
freeze冻结模型的前几层参数不参加训练,对微调和迁移学习有帮助,减少内存提高速度(2);禁用功能,完整模型训练(None)
multi_scale是否启动多尺度图像训练(True),帮助模型识别远近物体关系
overlap_mask仅对分割(segment)任务有用:训练中掩码需重叠(True)
mask_ratio仅对分割(segment)任务有用:掩码下采样比率(4)
dropout仅对分类(classify)任务有用:使用dropout正则化(0.0)

        ③验证测试参数配置:

val是否在训练时启用验证,验证集计算模型指标map(True)
split使用数据集 yaml 文件中的 val 目录下的数据作为验证集(val)
save_json使用 json 作为保存格式(True)
save_hybrid保存将原始预测标签与其他模型预测相结合的标签的混合版本(True)
conf设置检测的最小置信阈值。置信度低于此阈值的检测将被丢弃(conf=None:禁用此功能,将保留所有检测框)
iou设置非最大抑制(NMS)的联合交叉口(IoU)阈值。有助于减少重复检测。高于阈值的重叠框将选出唯一置信度最高的(iou=0.7:高于0.7的重叠框将舍弃到唯一框)
max_det一张图片中最多的检测数量(300)
half启用半精度计算——FP16,减少内存(True)
dnnPyTorch推理的替代方法:使用OpenCV DNN模块——图像处理与模型推理的集成,进行ONNX模型推理——支持跨架构跨模型的硬件加速优化(True)
plots保存模型结果的可视化图片(True)

        ④*预测参数配置:

source指定推理的数据源。可以是图像路径、视频文件、目录、URL或设备ID(/path/xxx.img)
vid_stride视频输入的帧步长。允许跳过视频中的帧,以时间分辨率为代价加快处理速度。值为1时处理每一帧,值越大则跳过帧(1)
stream_buffer确定是否为视频流的传入帧排队:禁用功能旧帧将被丢弃以容纳新帧(False);启用此功能,新帧排队到缓冲区中,确保没有帧被跳过,但如果推理FPS速度低于传入流FPS,则会导致延迟(True)
visualize在推理过程中激活模型特征图的可视化,提供对模型“看到”内容的洞察。可用于调试和模型解释(True)
augment启用预测的测试时间增强(TTA)——图像翻转、旋转、缩放、裁剪、色彩调整等,以牺牲推理速度为代价提高检测鲁棒性(True)
agnostic_nms启用类无关的非最大抑制NMS,合并不同类的重叠框(True)
classes选择专注的目标类别,可以是单个类别的索引整数值(0),也可以是关注的类别索引列表([ 0,2,5 ])
retina_masks仅对分割(segment)任务有用:使用高分辨率分割掩模(True)
embed返回指定层数结果的特征向量,列表形式([ 1 ]),可用于下游任务如聚类或相似性分析

         ⑤可视化参数配置:

show启用在窗口显示带标签检测结果的实时图片或视频(True)
save_frames仅在处理视频输入时可用(True):将单个帧保存为图片
save_txt将检测结果保存在文本文件中(True),格式为[class][x_center][y_center][width][height][confidence]
save_conf启用保存检测框的置信度得分(True)
save_crop启用保存检测的裁剪图像结果(True)可用于数据集增强、分析或为特定对象创建聚焦数据集
show_labels启用展示当前框的框内目标类别名称(True)
show_conf启用展示当前框的置信度(True)
show_boxes启用展示当前框的边界框(True)
line_width设置画框的线条粗细(4),默认为(None:此时根据输入图片大小自动选择)

        ⑥导出部署模型参数配置:

format选择导出模型的目标格式(【onnx、torchscript、tensorflow...】)
keras允许导出TensorFlow SavedModel的Keras格式,提供与TensorFlow服务和API的兼容性(True)
optimize移动端导出设置:导出到TorchScript时,对移动设备进行优化,减小模型大小并提高性能(True)
int8边缘设备设置:使用 int8 量化,进一步压缩模型,以最小的精度损失加速推理(True)
dynamic动态图片输入大小设置:允许ONNX、TensorRT和OpenVINO导出的动态输入大小,增强了处理不同图像尺寸的灵活性(True)
simplify使用onnxslim简化ONNX导出的模型图(True)
opset指定ONNX opset版本,以与不同的ONNX解析器和运行时兼容。如果未设置,则使用最新支持的版本(opset vision / None)
workspace设置TensorRT优化的最大工作空间大小(GiB),平衡内存使用和性能(4:默认)
nms在Apple生态框架CoreML导出中添加非最大抑制(NMS)

        ⑦*训练超参数配置

lr0初始学习率:SGD(0.01),Adam(0.001)
lrf最终学习率:初始学习率 lr0*lrf = 最终学习率(0.01)
momentumSGD的动量因子或Adam优化器的beta1:影响更新过程中之前梯度的权重(0.937)
weight_decayL2正则化项增加惩罚项实现权重衰退:增大值(0.001)增加惩罚,模型权值变小——过拟合风险减少,欠拟合风险增加;减小值(0.0001)减小惩罚,模型权值变大——过拟合风险增加(0.0005:默认)
warmup_epochs学习率预热的迭代次数:逐渐将学习率从较低值提高到初始学习率,以在早期稳定训练(3.0:默认)
warmup_momentum学习率预热的初始势头:调大值(0.9)可以在稳定梯度方向更快收敛,适合大规模数据;调小值(0.7)可以使得更新更加平滑稳定(0.8:默认)
warmup_bias_lr预热阶段偏差参数的学习率:初始阶段稳定模型训练(0.1:默认)
box损失函数中框坐标损失的权重:影响对精确预测边界框坐标的重视程度,调大模型将更重视框的精确度(7.5:默认)
cls损失函数中框内目标分类的权重:影响对目标正确分类预测的重视程度(0.5:默认)
dfl分布焦点损失权重:box损失——预测边界框的坐标值的回归问题;dfl损失——每个坐标预测拆分为一个离散分布,预测坐标值的概率分布的分类问题(1.5:默认)
pose姿态估计训练模型中姿态损失的权重:影响对准确预测姿态关键点的重视程度(12.0:默认)
kobj姿态估计模型中关键点物体损失的权重:平衡检测置信度和姿态精度(1.0:默认)
label_smoothing

硬标签“软化”:将单一绝对值的标签如0,1转为概率分布的软标签如【0.9,0.1】,【0.15,0.85】。

硬标签“平滑化”:此参数的值大小决定标签的平滑程度,如(0.0:默认)代表使用传统硬标签【1,0】,【0,1】。取值越大越平滑,最大为(1.0:max),此时每个标签都是一个均匀分布【0.5,0.5】,【0.5,0.5】

nbs标准化损失名义批次大小:在不同批次大小下对损失值进行归一化处理,防止批次大小对梯度稳定性的影响(64:默认)

        ⑧*数据增强参数配置

        此处参数较为抽象,将在后续对数据增强源码解析的实验中,记录调整相关参数的数值,会对最终生成的数据增强图片造成怎样的影响。

hsv_h数据增强参数——图像色轮色调调整:模拟不同光照条件的图像亮度,提高模型泛化性,数值越高亮度越大(0.0-1.0:取值范围)
hsv_s数据增强参数——图像饱和度:调整图像颜色强度以模拟不同环境,数值越大,颜色越强(0.0-1.0:取值范围)
degrees数据增强参数——图片随机旋转:在指定范围内随机旋转图片,提高模型对不同方向目标的泛化能力。特别的,如果输入值为正数(如45:旋转范围为-45到45度),如果输入值为负数(如-45:旋转范围为-45到0度)(单值,-180-180:取值范围)
translate数据增强参数——图片水平或垂直平移:数值大小代表平移距离占图片高(宽)的比例(0.1:平移图片的十分之一长度或宽度),提高模型对图片部分不可见时的泛化能力(0.0-1.0:取值范围)
scale数据增强参数——图片缩放:数值代表缩放比例,模拟相机不同距离下的目标物体(>=0.0:取值范围)
shear数据增强参数——图片“剪切”:根据设定度数拉伸或倾斜物体,模拟不同角度观测物体效果(-180-180:取值范围)
perspective数据增强参数——图片3D透视变换:提高模型对三维物体的理解(0.0-0.001:取值范围)
flipud数据增强参数——指定概率上下翻转图片:数值是随机翻转图片的概率值,越大越可能生成翻转图片(0.0-1.0:取值范围)
fliplr数据增强参数——指定概率左右翻转图片:同上描述,随机左右翻转图片(0.0-1.0:取值范围)
bgr数据增强参数——指定概率翻转颜色通道:以一定概率随机将图片颜色通道从RGB转为BGR,提高对不正确通道输入的鲁棒性(0.0-1.0:取值范围)
mosaic数据增强参数——图像组合复杂化:将四个图片组合成一张图片,模拟不同场景对象交互形成的复杂检测环境(0.0-1.0:取值范围)
mixup数据增强参数——混合图像:将两张图片及其标签信息混合,形成合成图片,模拟图片存在标签噪音和视觉变化(0.0-1.0:取值范围)
copy_paste数据增强参数——混合目标:将一个图像中的目标区域剪贴到另一种图像,模拟图像中目标被其他目标遮盖的场景(0.0-1.0:取值范围)
copy_paste_mode数据增强参数——混合目标模式:翻转剪贴目标(‘flip’);混合目标图像(‘mixup’)
auto_augment数据增强参数——自动增强模式选择:自动应用预定义的增强策略(randaugment、autoaugment、augmix)
erasing数据增强参数——随机擦除:在分类训练过程中随机擦除图像部分,模拟图像中目标特征不太明显时识别状况(0.0-0.9:取值范围)
crop_fraction数据增强参数——目标小图裁剪:将目标裁剪到其边界检测框大小,以减小背景干扰,强调中心特征(0.1-1.0:取值范围)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/896994.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

element plus中menu菜单技巧

我在使用element plus的menu(侧边栏)组件的过程中遇到了一些问题,就是menu编写样式和路由跳转,下面给大家分享以下,我是怎么解决的。 1.页面效果 我要实现的网站布局是这样的: 侧边栏折叠以后的效果&#…

使用 Spring 框架构建 MVC 应用程序:初学者教程

Spring Framework 是一个功能强大、功能丰富且设计精良的 Java 平台框架。它提供了一系列编程和配置模型,旨在简化和精简 Java 中健壮且可测试的应用程序的开发过程。 人们常说 Java 太复杂了,构建简单的应用程序需要很长时间。尽管如此,Jav…

PHP露营地管理小程序系统源码

🏕️露营新风尚!露营地管理小程序系统,打造完美露营体验✨ 📍营地预订,轻松搞定📅 想要逃离城市的喧嚣,享受大自然的宁静?露营地管理小程序系统让你的露营计划轻松实现&#xff01…

Vulnhub打靶-Empire-LupinOne

基本信息 靶机下载:https://download.vulnhub.com/empire/01-Empire-Lupin-One.zip 攻击机器:192.168.20.128(Windows操作系统)& 192.168.20.138(kali) 提示信息: 这个盒子被创建为中等…

FineReport 填报简介vs控件vs页面设置

填报简介 填报功能可以将页面数据写入到数据库,包括数据的增加、删除和修改操作。同时也支持对填写数据的自定义校验,Excel 导入数据,根据填写值智能联动等功能。 填报控件 设计填报报表时,如果需要修改和新增数据,则…

vue3使用element-plus手动更改url后is-active和菜单的focus颜色不同步问题

在实习,给了个需求做个新的ui界面,遇到了一个非常烦人的问题 如下,手动修改url时,is-active和focus颜色不同步 虽然可以直接让el-menu-item:focus为白色能解决这个问题,但是我就是想要有颜色哈哈哈,有些执…

【JAVA面试题】什么是Springboot的自动配置以及注意事项

文章目录 强烈推荐核心概念:自动配置的关键特点:示例: 需要注意的点1.默认配置可能不适合所有场景2.Bean 冲突与覆盖3.应用启动慢的问题4.过度依赖自动配置5.安全性问题6.依赖冲突与版本兼容7.过多不必要的自动配置8.调试困难 专栏集锦 强烈推…

python实战项目43:采集汽车之家数据

python采集汽车之家数据 一、寻找数据接口二、发送请求获取响应三、解析数据四、完整代码一、寻找数据接口 如下图所示,在汽车之家首页点击报价图标: 在下图中选择价位,例如选择15-20万: 打开浏览器开发者工具,刷新页面,找到数据接口。接下来,通过翻页寻找接口url的变…

如果你不幸成为家里第一个GIS专业的学生

家里无法给我很多建设性意见,大学四年到工作都是自己一个人跌跌撞撞走过来的,期间因为信息差走了不少弯路。对于GIS专业而言,没有家里人的指路,信息差就成了同学之间拉开差距的重要因素。现在我们要做的就是打破专业信息差&#x…

Vue+ECharts+iView实现大数据可视化大屏模板

Vue数据可视化 三个大屏模板 样式还是比较全的 包括世界地图、中国地图、canvas转盘等 项目演示: 视频: vue大数据可视化大屏模板

uiautomatorviewer安卓9以上正常使用及问题处理

一、安卓9以上使用uiautomatorviewer问题现象 打开Unexpected error while obtaining UI hierarchy 问题详情 Unexpected error while obtaining UI hierarchy java.lang.reflect.InvocationTargetException 二、问题处理 需要的是替换对应D:\software\android-sdk-windows…

这种V带的无极变速能用在新能源汽车上吧?

CVT的无极变速器的结构能用在电动汽车上吗?

Python 将网页保存为图片(Chrome内核)

一、背景介绍 之前写过一篇将网页保存为图片的文章 C# 将网页保存为图片(利用WebBrowser)_c# webbrowser 把网页内容转换成图片-CSDN博客​​​​​​ 这里有个弊端,C# WebBrowser使用的是IE内核,目前很多网站都不支持IE了&…

深度学习(二)框架与工具:开启智能未来之门(2/10)

一、深度学习框架:引领智能变革的利器 深度学习框架在人工智能领域中扮演着至关重要的角色,堪称引领智能变革的利器。随着人工智能技术的飞速发展,深度学习框架不断崛起并迅速壮大。 主流的深度学习框架如 TensorFlow、PyTorch、Keras 等&a…

社招高频面试题

1.单例模式 面试突击50:单例模式有几种写法? 2.Mybatis缓存机制 MyBatis的一、二级缓存查询关系 一级缓存是SqlSession级别,不能跨SqlSession共享,默认开启。 二级缓存是基于mapper namespace级别的,可以跨SqlSessi…

第J6周:ResNeXt-50实战解析(pytorch版)

>- **🍨 本文为[🔗365天深度学习训练营]中的学习记录博客** >- **🍖 原作者:[K同学啊]** 任务: ●阅读ResNeXt论文,了解作者的构建思路 ●对比我们之前介绍的ResNet50V2、DenseNet算法 ●使用ResNeX…

基于Java+SpringBoot+Vue的古典舞在线交流平台的设计与实现

基于JavaSpringBootVue的古典舞在线交流平台的设计与实现 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接&a…

科研类型PPT的制作技巧

目录 科研类型PPT的制作技巧 荣誉: 首页:ppt开头结尾 小标题 重点标记:加粗红色下划线 使用三线表 图片,文本排版 一、明确目的与受众分析 二、基础设计原则 三、内容组织与呈现 四、绘图与模型制作 五、其他注意事项 科研类型PPT的制作技巧 荣誉: 首页:ppt开…

spark读取parquet文件

源码 parquet文件读取的入口是FileSourceScanExec,用parquet文件生成对应的RDD 非bucket文件所以走createNonBucketedReadRDD方法。 createNonBucketedReadRDD 过程: 确定文件分割参数 openCostInBytes4M 相关参数spark.sql.files.openCostInBytes4M…

Vue 上传图片前 裁剪图片

一. 使用的技术 vue-cropper 文档:vue-cropper | A simple picture clipping plugin for vue 二. 安装 npm install vue-cropper 或 yarn add vue-cropper 三. 引入 在使用页面中引用 import { VueCropper } from vue-cropper; 四. 使用 配置项&#xff1…