首页 > 其他分享 >YOLOv8配置文件应该如何命名?

YOLOv8配置文件应该如何命名?

时间:2024-12-01 19:30:56浏览次数:8  
标签:配置文件 YOLOv8 yaml nslmx file 命名 path model stem

文末有重点

1.配置文件解析代码yolov8/ultralytics/nn/tasks.py 如下:

def yaml_model_load(path):
    """Load a YOLOv8 model from a YAML file."""
    import re

    path = Path(path)
    if path.stem in (f'yolov{d}{x}6' for x in 'nsmlx' for d in (5, 8)):
        new_stem = re.sub(r'(\d+)([nslmx])6(.+)?$', r'\1\2-p6\3', path.stem)
        LOGGER.warning(f'WARNING ⚠️ Ultralytics YOLO P6 models now use -p6 suffix. Renaming {path.stem} to {new_stem}.')
        path = path.with_name(new_stem + path.suffix)

    print("path,",path)
    unified_path = re.sub(r'(\d+)([nslmx])(.+)?$', r'\1\3', str(path))  # i.e. yolov8x.yaml -> yolov8.yaml
    print("unified_path,",unified_path)
    yaml_file = check_yaml(unified_path, hard=False)
    if not yaml_file:
        yaml_file = check_yaml(path)
    d = yaml_load(yaml_file)  # model dict
    d['scale'] = guess_model_scale(path)
    d['yaml_file'] = str(path)
    return d


def guess_model_scale(model_path):
    """
    Takes a path to a YOLO model's YAML file as input and extracts the size character of the model's scale. The function
    uses regular expression matching to find the pattern of the model scale in the YAML file name, which is denoted by
    n, s, m, l, or x. The function returns the size character of the model scale as a string.

    Args:
        model_path (str | Path): The path to the YOLO model's YAML file.

    Returns:
        (str): The size character of the model's scale, which can be n, s, m, l, or x.
    """
    with contextlib.suppress(AttributeError):
        import re
        return re.search(r'yolov\d+([nslmx])', Path(model_path).stem).group(1)  # n, s, m, l, or x
    return ''

这段代码的功能是加载一个 YOLOv8 模型的 YAML 文件,并对可能存在的文件名或路径格式进行规范化处理。此外,它还提取模型的“大小标识”(n, s, m, l, x)并返回包含配置信息的字典。以下是代码的详细解读:


函数 1:yaml_model_load(path)

功能:

加载一个 YOLOv8 模型 YAML 文件,并规范化路径以支持 YOLO 的不同模型文件格式。

代码分析

1. 路径初始化:
path = Path(path)

将输入的路径参数转为 Path 对象,以便更方便地操作文件名、扩展名等。

2. 模型文件重命名逻辑:
if path.stem in (f'yolov{d}{x}6' for x in 'nsmlx' for d in (5, 8)):
    new_stem = re.sub(r'(\d+)([nslmx])6(.+)?$', r'\1\2-p6\3', path.stem)
    LOGGER.warning(f'WARNING ⚠️ Ultralytics YOLO P6 models now use -p6 suffix. Renaming {path.stem} to {new_stem}.')
    path = path.with_name(new_stem + path.suffix)
  • 检查文件名是否匹配特定格式path.stem 是文件名(不含扩展名)。通过生成器表达式 (f'yolov{d}{x}6' for x in 'nsmlx' for d in (5, 8)),匹配 YOLOv5 或 YOLOv8 的 P6 模型文件名,例如:

    • "yolov8n6"
    • "yolov5x6"
  • 修改文件名以添加 -p6 后缀: 如果文件名符合上述规则,用正则表达式将其后缀从 6 替换为 -p6

r'(\d+)([nslmx])6(.+)?$'

替换为:

r'\1\2-p6\3'
    • 示例:
      • "yolov8n6.yaml""yolov8n-p6.yaml"
  • 记录警告信息: 使用 LOGGER.warning 提示用户文件名已被修改。

  • 更新路径: 将路径更新为新的文件名。

3. 文件名规范化处理
unified_path = re.sub(r'(yolov\d+)([nslmx])(.+)?$', r'\1\3', str(path))
  • 正则表达式匹配:

    • yolov\d+: 匹配版本号(如 yolov8)。
    • [nslmx]: 匹配大小标识(n, s, m, l, x)。
    • (.+)?$: 匹配剩余部分(可选)。
  • 替换模式:\1\3

    • 保留版本号(yolov\d+)和剩余部分((.+)?)。
    • 去掉大小标识 [nslmx]
  • 示例:

    • "yolov8n.yaml""yolov8.yaml"
4. 检查 YAML 文件
yaml_file = check_yaml(unified_path, hard=False)
if not yaml_file:
    yaml_file = check_yaml(path)
  • 尝试加载经过统一处理的路径(unified_path)。
  • 如果失败,则尝试加载原路径(path)。
5. 加载 YAML 内容
d = yaml_load(yaml_file)

调用 yaml_load 方法读取 YAML 文件内容为字典。

6. 提取模型大小标识
d['scale'] = guess_model_scale(path)

使用 guess_model_scale 函数从文件名中提取大小标识(n, s, m, l, x)。

7. 返回结果:
d['yaml_file'] = str(path)
return d

返回包含模型配置信息和路径的字典。


函数 2:guess_model_scale(model_path)

功能:

从文件路径中提取模型的大小标识(n, s, m, l, x)。

代码分析

1. 正则匹配大小标识:
return re.search(r'yolov\d+([nslmx])', Path(model_path).stem).group(1)
  • yolov\d+: 匹配版本号(如 yolov8)。

  • ([nslmx]): 捕获大小标识(n, s, m, l, x)。

  • 示例:

    • "yolov8n.yaml" → 匹配 "n"
2.异常处理:
with contextlib.suppress(AttributeError):

如果正则匹配失败,返回 None,调用 .group(1) 会引发 AttributeError。通过 contextlib.suppress 忽略此错误并返回空字符串 ''


整体逻辑

  • 尝试处理 YOLO P6 文件名的历史兼容性问题,添加 -p6 后缀。
  • 规范化路径,去掉文件名中的大小标识(如 ns)。
  • 提取文件名中的模型大小标识。
  • 加载 YAML 文件,返回配置信息。

示例输入和输出

输入:

文件名:"yolov8n6.yaml"

输出:
{
    'scale': 'n',
    'yaml_file': 'yolov8n-p6.yaml',
    # 其他 YAML 文件中的配置内容
}

改进部分(重点)

在寻找配置文件的名字的正则,按照yolov8给的配置文件,在文件名字中是没有尺寸信息,在文件里面是有尺寸信息的。

re.sub(r'(\d+)([nslmx])(.+)?$', r'\1\3', str(path))

得到网络尺寸的正则化。代码传入的配置文件是具有尺寸信息的。

re.search(r'yolov\d+([nslmx])', Path(model_path).stem).group(1)

两者是不一样。有时候会导致可以解析文件尺寸,但是找到文件名字。

为了让两个正则化匹配一样。

(1)建议把找文件名字的匹配改成的

re.sub(r'(yolov\d+)([nslmx])(.+)?$', r'\1\3', str(path))

(2)建议新的配置文件名字为{name}_yolov8.yaml.

根据需要命名,但是name不能包括yolov。

在训练导入配置文件的时候

{name}_yolov8n.yaml. 

{name}_yolov8s.yaml.

{name}_yolov8l.yaml.

{name}_yolov8m.yaml.

{name}_yolov8x.yaml.

分别对应不同的尺寸,但是都是加载{name}_yolov8.yaml.进行配置。

文件中对应尺寸的配置信息。

scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024]  
  s: [0.33, 0.50, 1024]  
  m: [0.67, 0.75, 768]   
  l: [1.00, 1.00, 512]   
  x: [1.00, 1.25, 512]  

标签:配置文件,YOLOv8,yaml,nslmx,file,命名,path,model,stem
From: https://blog.csdn.net/Lucy_wzw/article/details/144119339

相关文章

  • Java 百度网盘300文件一组 文件批量重命名
     按260个文件一个文件夹publicstaticvoidmain(String[]args){Stringpath="F:\\壁纸爬虫合集\\爬虫文件夹No1";intfileCount=0;List<List<File>>folderList=newArrayList<>();List<File>folder......
  • 编译配置文件 build.gradle
    新创建的App项目默认有两个build.gradle,一个是Project项目级别的build.gradle;另一个是Module模块级别的build.gradle。项目级别的build.gradle指定了当前项目的总体编译规则,打开该文件在buildscript下面找到repositories和dependencies两个节点,其中repositories节点用于设置Andro......
  • 在数据库字段命名格式和实体类属性命名格式不一致的情况下,通过配置 MyBatis 的通用 Ma
    MyBatis的通用Mapper支持使用@Column注解进行字段映射,但需要满足以下条件:项目中已集成MyBatis的通用Mapper(例如Mapper插件)。在通用Mapper的配置中启用了@Column注解支持。通用Mapper会根据实体类中字段的@Column注解值来映射数据库表的列名。使用@Colum......
  • 在数据库字段命名格式和实体类属性命名格式不一致的情况下,通过配置 MyBatis 的通用 Ma
    如果在MyBatis的通用Mapper中结合Example模式查询时,未自动使用实体类中@Column注解定义的字段映射,可能的原因是配置或使用方式上存在一些问题。以下是解决方案和注意事项:原因分析通用Mapper的@Column支持:通用Mapper支持通过@Column注解映射字段和数据库列,但......
  • YOLOv8实战无人机视角目标检测
      本文采用YOLOv8作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv8以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对无人机目标数据集进行训练和优化,该数据集包含丰富的无人机目标图像样本,为模型的准确性和泛化能力提供了有力保......
  • yolov8目标检测_结果文件(run/detrct/train)详解
    笔者这里是自己学习yolov8结果文件时的笔记心得分享给各位读者,可能也有很多不足之处,希望大家批评指正,共同成长!在YOLOv8的训练过程中,训练结果会存储在runs/detect/train目录下,其中包含多个文件和子文件夹。这些文件记录了训练的过程和结果,便于后续的评估和分析。结果文件......
  • 配置文件(Configuration Files)在不同的应用场景和技术体系中有多种形式。常见的配置文
    配置文件(ConfigurationFiles)在不同的应用场景和技术体系中有多种形式。常见的配置文件类型可以根据其格式、用途和配置的复杂度进行分类。下面列出了几种常见的配置文件类型:1. INI文件格式:简单的键值对格式,通常包括多个节(Sections)。用途:广泛用于小型应用的配置,如桌面软件、......
  • ScanState 和 LoadState 是 Microsoft 提供的用户状态迁移工具(USMT)中的两个核心命令行
    常见迁移方案|MicrosoftLearn计划为大量计算机升级硬件和/或操作系统时,可以使用用户状态迁移工具UserStateMigrationTool(USMT)。USMT(UserStateMigrationTool)通过从源计算机捕获以下用户的项来管理最终用户数字标识的迁移:操作系统设置。应用程序设置。个人文件......
  • YOLOv8-ultralytics-8.2.103部分代码阅读笔记-autobatch.py
    autobatch.pyultralytics\utils\autobatch.py目录autobatch.py1.所需的库和模块2.defcheck_train_batch_size(model,imgsz=640,amp=True,batch=-1): 3.defautobatch(model,imgsz=640,fraction=0.60,batch_size=DEFAULT_CFG.batch): 1.所需的库和模块#Ultr......
  • YOLOv8姿态估计(跟踪+检测+姿态估计+代码)
    概述YOLOv7姿态估计:一种快速准确的人体姿态估计模型添加图片注释,不超过140字(可选)人体姿态估计是计算机视觉中的一项重要任务,具有各种应用,例如动作识别、人机交互和监控。近年来,基于深度学习的方法在人体姿态估计方面取得了显著的性能。其中最流行的深度学习方法之一是......