yolo(ultralytics)训练完成后,增加epoch继续训练

如果已经完成了100epoch的训练,如果想继续在此基础上继续增加若干epoch进行训练,参考了ultralytics官方教程,可按照以下步骤,亲测可行:


第一步:ultralytics/engine/trainer.py中注释掉self.epochs = self.args.epochs ,重新将self.epochs写为需要训练的轮次数,例如这里改为200,相当于增加了100个epoch

class BaseTrainer:
    def __init__(self, cfg=DEFAULT_CFG, overrides=None, _callbacks=None):

        self.args = get_cfg(cfg, overrides)
        self.check_resume(overrides)
        self.device = select_device(self.args.device, self.args.batch)
        self.validator = None
        self.metrics = None
        self.plots = {}
        init_seeds(self.args.seed + 1 + RANK, deterministic=self.args.deterministic)


        self.save_dir = get_save_dir(self.args)
        self.args.name = self.save_dir.name  # update name for loggers
        self.wdir = self.save_dir / "weights"  # weights dir
        if RANK in {-1, 0}:
            self.wdir.mkdir(parents=True, exist_ok=True)  # make dir
            self.args.save_dir = str(self.save_dir)
            yaml_save(self.save_dir / "args.yaml", vars(self.args))  # save run args
        self.last, self.best = self.wdir / "last.pt", self.wdir / "best.pt"  # checkpoint paths
        self.save_period = self.args.save_period

        self.batch_size = self.args.batch
        # self.epochs = self.args.epochs
        self.epochs = 200  ## 这里修改
        self.start_epoch = 0
        if RANK == -1:
            print_args(vars(self.args))

第二步:ultralytics/engine/trainer.py中找到resume_training函数,将start_epoch改为已经训练完成的轮次数,已经完成了100个epoch的训练,故start_epoch设置为=100

    def resume_training(self, ckpt):
        
        #ckpt = torch.load('runs/obb/train/weights/last.pt')

        """Resume YOLO training from given epoch and best fitness."""
        if ckpt is None or not self.resume:
            return
        best_fitness = 0.0
        # start_epoch = ckpt.get("epoch", -1) + 1
        start_epoch = 100

第三步,参考官方写法,编写resume脚本训练

from ultralytics import YOLO

# Load a model
model = YOLO('runs/detect/train6/weights/last.pt')  # load a partially trained model

results = model.train(resume=True)

成功开始继续训练

4.注意!!!训练完后,对ultralytics/engine/trainer.py所做的所有更改撤销,不然下一次训练时所设置的epoch参数不起效了。

总结,想对已经训练完成后的模型增加epoch继续训练,本质上还是用到了resume机制,但是如果直接用resume脚本,yolo会报已经训练完成,无需resume的错误,因此,本次要将训练参数self.epochs(总训练轮次)强制修改为新增加的,start_epoch强制修改为最后一个轮次。

### 如何在 Ultralytics YOLO 训练增加 epoch 数量 在使用 Ultralytics 提供的 YOLO 实现时,可以通过修改配置文件来调整训练参数,其中包括 `epochs` 的设置。具体来说,在运行训练命令之前,可以编辑 YAML 配置文件中的 `epochs` 参数以指定所需的训练轮数。 以下是实现此操作的具体方法: #### 修改配置文件 Ultralytics 使用了一个名为 `hyp.yaml` 或类似的超参数配置文件来定义训练过程中的多个参数。如果需要更改默认的 epoch 数量,则可以在调用训练脚本前手动更新该值或者通过 CLI 命令动态传递新的 epoch 设置。 对于直接修改配置的方式,打开项目根目录下的对应配置文件(通常位于 `configs/` 文件夹),找到并更改编码如下所示的部分: ```yaml # Example configuration snippet from hyp.scratch-low.yaml or similar file. epochs: 160 # Number of epochs to run (default is set as per original paper). batch_size: 16 # Batch size during training. imgsz: 640 # Input image resolution. ... ``` 上述片段展示了如何定位到 `epochs` 字段,并将其数值改为期望的新值[^1]。 #### 利用命令行选项覆盖默认值 另一种更为灵活的方法是在启动训练的过程中利用命令行接口传入自定义参数。例如执行下面这条指令即可轻松完成对总迭代次数即周期数目设定上的变更而不必每次都去改动源代码或预设文档内容本身。 ```bash yolo task=detect mode=train model=yolov8n.pt data=coco128.yaml epochs=300 imgsz=640 ``` 在此例子当中,“--epochs”后面紧跟的就是所希望达到的最大循环遍历数据集之回次——这里被指派为了三百次而非原始状态下的可能一百六十次那样少的数量级。 以上两种途径任选其一均能有效达成提高模型见闻广度的目的从而有助于获取更加精确可靠的检测成果表现形式出来。 ```python from ultralytics import YOLO model = YOLO('yolov8n.pt') results = model.train(data='coco128.yaml', epochs=300, imgsz=640) ``` 这段 Python 脚本同样演示了怎样借助编程手段控制整个学习流程里涉及的关键要素之一 —— 总共经历多少完整的样本集合处理阶段以便优化最终产出效果质量水平得到进一步改善提升的机会空间变得更大一些。 ### 注意事项 当显著延长训练时间长度的时候需要注意硬件资源消耗情况以及可能出现过拟合现象的风险评估工作不可忽略掉任何一个环节步骤才行哦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TracyGC

创作不易,需要花花~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值