EXPERIMENT / 配套代码

train_real.py

← 返回文章
"""显式使用本地数据与模型结构;此入口没有在课程制作时执行真实训练。"""

import argparse
from pathlib import Path


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--data", type=Path, required=True)
    parser.add_argument("--model", type=Path, required=True)
    parser.add_argument("--epochs", type=int, default=20)
    parser.add_argument("--device", default="cpu")
    parser.add_argument("--output", default="runs")
    args = parser.parse_args()
    if args.epochs < 1:
        parser.error("epochs must be positive")
    if not args.data.is_file() or not args.model.is_file():
        parser.error("local data YAML and model YAML required")
    if args.model.suffix not in [".yaml", ".yml"]:
        parser.error("use local model architecture YAML, not checkpoint weights")
    import yaml

    config = yaml.safe_load(args.data.read_text())
    if not isinstance(config, dict) or any(
        k not in config for k in ["train", "val", "names"]
    ):
        parser.error("data YAML requires train, val, names")
    if "download" in config:
        parser.error("remove download field; prepare dataset locally")
    from ultralytics import YOLO

    model = YOLO(str(args.model))
    model.train(
        data=str(args.data.resolve()),
        epochs=args.epochs,
        imgsz=640,
        batch=4,
        device=args.device,
        seed=7,
        workers=0,
        pretrained=False,
        amp=False,
        project=args.output,
        name="baseline",
    )


if __name__ == "__main__":
    main()