批量训练 | YOLOv8自动依次训练一批消融实验

文章讨论了使用YOLO框架进行多模块实验,包括模型训练和验证,以优化性能并实现自动化执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写论文做消融实验的时候,间隔期可能浪费时间。

根目录下新建一个文件mytrain.py

from ultralytics import YOLO

if __name__ == '__main__':
'''
    如果是3个模块(A, B, C)要进行测试,排列组合数是3+2+1=7次实验+1次baseline=8次
    如果考虑模块插入部位的变化,组合数剧增。
'''
#TODO 实验0:baseline
    model = YOLO('yolov8s.yaml')
    model.train(data='mydataset.yaml', epochs=300, imgsz=640, batch=16, workers=0, pretrained=False, save_dir=runs\detect\yolov8s)

#TODO 实验1:+module1
    model = YOLO('yolov8s+module1.yaml')
    model.train(data='mydataset.yaml', epochs=300, imgsz=640, batch=16, workers=0, pretrained=False, save_dir=runs\detect\yolov8s+module1)

#TODO 实验2:+module2
    model = YOLO('yolov8s+module2.yaml')
    model.train(data='mydataset.yaml', epochs=300, imgsz=640, batch=16, workers=0, pretrained=False, save_dir=runs\detect\yolov8s+module2)

#TODO 实验3:+module3
    model = YOLO('yolov8s+module3.yaml')
    model.train(data='mydataset.yaml', epochs=300, imgsz=640, batch=16, workers=0, pretrained=False, save_dir=runs\detect\yolov8s+module3)

#TODO 实验4:+module1+module2
    model = YOLO('yolov8s+module1+module2.yaml')
    model.train(data='mydataset.yaml', epochs=300, imgsz=640, batch=16, workers=0, pretrained=False, save_dir=runs\detect\yolov8s+module1+module2)

#TODO 实验5:+module1+module3
    model = YOLO('yolov8s+module1+module3.yaml')
    model.train(data='mydataset.yaml', epochs=300, imgsz=640, batch=16, workers=0, pretrained=False, save_dir=runs\detect\yolov8s+module1+module3)

#TODO 实验6:+module2+module3
    model = YOLO('yolov8s+module2+module3.yaml')
    model.train(data='mydataset.yaml', epochs=300, imgsz=640, batch=16, workers=0, pretrained=False, save_dir=runs\detect\yolov8s+module2+module3)

#TODO 实验7:+module1+module2+module3
    model = YOLO('yolov8s+module1+module2+module3.yaml')
    model.train(data='mydataset.yaml', epochs=300, imgsz=640, batch=16, workers=0, pretrained=False, save_dir=runs\detect\yolov8s+module1+module2+module3)

运行后可以自动依次往下执行,如果中间某个yaml文件配置出错,就会中断,所有最好提前全部测试一遍,保证无人值守的情况下顺利执行全部实验。算一算每个epoch的所需时间,就可以估计几天后再见了!

于是先把model.train()注释掉。

from ultralytics import YOLO

if __name__ == '__main__':
'''
    如果是3个模块(A, B, C)要进行测试,排列组合数是3+2+1=7次实验+1次baseline=8次
    如果考虑模块插入部位的变化,组合数剧增。
'''
#TODO 实验0:baseline
    model = YOLO('yolov8s.yaml')
    # model.train(data='mydataset.yaml', epochs=300, imgsz=640, batch=16, workers=0, pretrained=False, save_dir=runs\detect\yolov8s)

#TODO 实验1:+module1
    model = YOLO('yolov8s+module1.yaml')
    # model.train(data='mydataset.yaml', epochs=300, imgsz=640, batch=16, workers=0, pretrained=False, save_dir=runs\detect\yolov8s+module1)

#TODO 实验2:+module2
    model = YOLO('yolov8s+module2.yaml')
    # model.train(data='mydataset.yaml', epochs=300, imgsz=640, batch=16, workers=0, pretrained=False, save_dir=runs\detect\yolov8s+module2)

#TODO 实验3:+module3
    model = YOLO('yolov8s+module2.yaml')
    # model.train(data='mydataset.yaml', epochs=300, imgsz=640, batch=16, workers=0, pretrained=False, save_dir=runs\detect\yolov8s+module3)

#TODO 实验4:+module1+module2
    model = YOLO('yolov8s+module1+module2.yaml')
    # model.train(data='mydataset.yaml', epochs=300, imgsz=640, batch=16, workers=0, pretrained=False, save_dir=runs\detect\yolov8s+module1+module2)

#TODO 实验5:+module1+module3
    model = YOLO('yolov8s+module1+module3.yaml')
    # model.train(data='mydataset.yaml', epochs=300, imgsz=640, batch=16, workers=0, pretrained=False, save_dir=runs\detect\yolov8s+module1+module3)

#TODO 实验6:+module2+module3
    model = YOLO('yolov8s+module2+module3.yaml')
    # model.train(data='mydataset.yaml', epochs=300, imgsz=640, batch=16, workers=0, pretrained=False, save_dir=runs\detect\yolov8s+module2+module3)

#TODO 实验7:+module1+module2+module3
    model = YOLO('yolov8s+module1+module2+module3.yaml')
    # model.train(data='mydataset.yaml', epochs=300, imgsz=640, batch=16, workers=0, pretrained=False, save_dir=runs\detect\yolov8s+module1+module2+module3)

训练结束之后,再批量验证一下

from ultralytics import YOLO

if __name__ == '__main__':

    model = YOLO('yolov8s.yaml').load('runs/detect/yolov8s/weights/best.pt')
    model.val(split='test',data='mydataset.yaml', imgsz=640, batch=1)

    model = YOLO('yolov8s+module1.yaml').load('runs/detect/yolov8s+module1/weights/best.pt')
    model.val(split='test',data='mydataset.yaml', imgsz=640, batch=1)

    model = YOLO('yolov8s+module2.yaml').load('runs/detect/yolov8s+module2/weights/best.pt')
    model.val(split='test',data='mydataset.yaml', imgsz=640, batch=1)

    model = YOLO('yolov8s+module3.yaml').load('runs/detect/yolov8s+module3/weights/best.pt')
    model.val(split='test',data='mydataset.yaml', imgsz=640, batch=1)

    model = YOLO('yolov8s+module1+module2.yaml').load('runs/detect/yolov8s+module1+module2/weights/best.pt')
    model.val(split='test',data='mydataset.yaml', imgsz=640, batch=1)

    model = YOLO('yolov8s+module1+module3.yaml').load('runs/detect/yolov8s+module1+module3/weights/best.pt')
    model.val(split='test',data='mydataset.yaml', imgsz=640, batch=1)

    model = YOLO('yolov8s+module2+module3.yaml').load('runs/detect/yolov8s+module2+module3/weights/best.pt')
    model.val(split='test',data='mydataset.yaml', imgsz=640, batch=1)

    model = YOLO('yolov8s+module1+module2+module3.yaml').load('runs/detect/yolov8s+module1+module2+module3/weights/best.pt')
    model.val(split='test',data='mydataset.yaml', imgsz=640, batch=1)

### 如何进行YOLOv8消融实验 #### 设计实验方案 为了有效开展YOLOv8消融实验,需精心设计实验方案以验证各个模块对整体性能的具体影响。这涉及到创建多个变体版本的模型,在这些版本中逐一移除或修改特定组件。 #### 构建基线模型 建立一个标准配置下的YOLOv8作为对照组,记录其默认设置下的各项指标表现,包括但不限于mAP@0.5、推理时间和计算资源消耗等[^1]。 #### 定义变量因素 针对想要测试的不同改进措施设立独立变量,比如更换骨干网络(如ShuffleNetV1)、引入新特性(如CARAFE插件),或是加入特殊结构(如同双注意块)。每次只改变单一变量,保持其余条件不变,以便清晰区分各要素的作用效果[^2]。 #### 执行对比试验 对于每一个预设的变化点执行训练过程,并收集相应的评测数据。确保每轮迭代都基于相同的初始权重初始化以及一致的数据集划分方式,从而减少外部干扰带来的偏差。 #### 数据分析与总结 整理所有获得的结果,制作成直观易懂的形式,例如表格或图表形式呈现出来。通过定量分析找出哪些改动确实带来了正面效益;同时也要关注是否存在负面效应或者其他意外发现。 ```python import pandas as pd # 假定有如下几个列名代表不同的实验条件及其对应的评价指标 columns = ['Model Variant', 'Configuration Parameters(M)', 'Computational Cost(GFLOPs)', 'mAP@0.5(%)', 'Inference Time(ms)'] data = [ ["Original YOLOv8", 7.2, 16.5, 45.8, 28], ["YOLOv8 + ShuffleNetV1 w/o Group Conv.", 6.8, 15.8, 44.5, 26], ] df = pd.DataFrame(data=data, columns=columns) print(df) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值