YOLOv8 训练 预测 更改save输出位置 全网首发

本文详细解释了如何在Ultralytics的YOLO项目中修改default.yaml文件中的save_dir字段,以及如何自定义训练保存路径。
摘要由CSDN通过智能技术生成

方法 1

先给代码

from ultralytics.utils import DEFAULT_CFG
from datetime import datetime
current_time = datetime.now()
time_str = current_time.strftime("%Y-%m-%d_%H-%M-%S") # 个人习惯, 用训练时间命名保存路径, 或者你自己自定义
DEFAULT_CFG.save_dir= f"../models/{time_str}"
model = YOLO('yolov8n.pt')
data = 'data.yaml'
result = model.train(data = data, epochs = 100, batch = 32, save = True, device = 0)

save_dirtrainer 的属性, 在 trainer 初始化时通过 cfg = DEFAULT_CFG 传入训练参数, 所以通过给全局变量 DEFAULT_CFG 添加字段可以更改 save_dir

注意了: 当调用 model.train() 时才会初始化 trainer, 直接更改 model.trainer.save_dir会报错, 因为在调用 model.train() 之前 model.trainerNone

我们来看BaseTrainer.__init__():

	def __init__(self, cfg=DEFAULT_CFG, overrides=None, _callbacks=None):
        """
        Initializes the BaseTrainer class.

        Args:
            cfg (str, optional): Path to a configuration file. Defaults to DEFAULT_CFG.
            overrides (dict, optional): Configuration overrides. Defaults to None.
        """
        self.args = get_cfg(cfg, overrides)
        self.device = select_device(self.args.device, self.args.batch)
        self.check_resume()
        self.validator = None
        self.model = None
        self.metrics = None
        self.plots = {}
        init_seeds(self.args.seed + 1 + RANK, deterministic=self.args.deterministic)

        # Dirs
        project = self.args.project or Path(SETTINGS['runs_dir']) / self.args.task
        name = self.args.name or f'{self.args.mode}'
        if hasattr(self.args, 'save_dir'):
            self.save_dir = Path(self.args.save_dir)
        else:
            self.save_dir = Path(
                increment_path(Path(project) / name, exist_ok=self.args.exist_ok if RANK in (-1, 0) else True))
        ...

get_cfg(cfg, overrides) 默认的 cfg 没有 save_dir 字段, overrides 也不能有(因为会用字段检验函数,如果有默认 cfg 中没有的字段就会报错)

所以默认的 save_dir 来自这句代码:

increment_path(Path(project) / name, exist_ok=self.args.exist_ok if RANK in (-1, 0) else True))

完全根据项目目录自动生成的路径

而官方留了一手:

		if hasattr(self.args, 'save_dir'):
            self.save_dir = Path(self.args.save_dir)

self.argsyaml 文件解析而来, 所以按官方的思路是需要在 yaml 中指定 save 路径
但是懒得自己创建 yaml 又不想改库里的 yaml 怎么办呢
很简单, 那就在 trainer 初始化前改 DEFAULT_CFG

方法 2

更改ultralytics库里的 yaml 文件: /ultralytics/yolo/cfg/default.yaml

添加字段

save_dir: ./runs/train1 # 自己设置路径
  • 20
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值