import argparse import shutil from pathlib import Path def main(): parser = argparse.ArgumentParser(description="Treino do detector de componentes de arquitetura") parser.add_argument("--data", type=str, default="../data/data.yaml", help="Caminho para o data.yaml do dataset") parser.add_argument("--epochs", type=int, default=100) parser.add_argument("--imgsz", type=int, default=960, help="Resolução de treino. 960 (acima do padrão 640) para preservar " "ícones pequenos em diagramas densos.") parser.add_argument("--model", type=str, default="yolov8n.pt", help="Checkpoint base do YOLOv8 (transfer learning)") parser.add_argument("--batch", type=int, default=8, help="Batch reduzido para acomodar imgsz=960 em GPUs/CPUs limitadas.") parser.add_argument("--out", type=str, default="../models/best.pt") args = parser.parse_args() from ultralytics import YOLO model = YOLO(args.model) results = model.train( data=args.data, epochs=args.epochs, imgsz=args.imgsz, batch=args.batch, project="runs_threat_modeling", name="detector_componentes", exist_ok=True, ) run_dir = Path(results.save_dir) best_ckpt = run_dir / "weights" / "best.pt" out_path = Path(args.out) out_path.parent.mkdir(parents=True, exist_ok=True) shutil.copy(best_ckpt, out_path) print(f"[train] Melhor checkpoint copiado para {out_path}") if __name__ == "__main__": main()