写论文做消融实验的时候,间隔期可能浪费时间。
根目录下新建一个文件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)