Repository navigation
Expand file tree
/
Copy pathtrain.py
More file actions
72 lines (59 loc) · 2.13 KB
/
Copy pathtrain.py
File metadata and controls
72 lines (59 loc) · 2.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
"""
Train YOLOv8 on the surgical instrument dataset.
Usage:
python train.py
python train.py --model yolov8m.pt --epochs 100 --batch 8 --device cpu
"""
import argparse
from pathlib import Path
from ultralytics import YOLO
def parse_args():
p = argparse.ArgumentParser(description="Train YOLOv8 surgical instrument detector")
p.add_argument("--model", default="yolov8s.pt",
help="Pretrained weights (n/s/m/l/x). Larger = more accurate, slower.")
p.add_argument("--data", default="dataset/data.yaml")
p.add_argument("--epochs", type=int, default=50)
p.add_argument("--imgsz", type=int, default=640)
p.add_argument("--batch", type=int, default=8)
p.add_argument("--device", default="cpu",
help="GPU index (0, 1, ...) or 'cpu'")
p.add_argument("--patience", type=int, default=15,
help="Early-stop patience (epochs without val improvement)")
p.add_argument("--project", default="runs/train")
p.add_argument("--name", default="surgical_s")
return p.parse_args()
def _resolve_data_yaml(requested: str) -> Path:
p = Path(requested)
if p.exists():
return p
# Roboflow downloads put the yaml inside the dataset folder
fallback = Path("dataset") / "data.yaml"
if fallback.exists():
print(f"data.yaml not found at '{requested}', using {fallback}")
return fallback
raise SystemExit(
f"Dataset config not found: {requested}\n"
"Run: python dataset_setup.py --api-key YOUR_KEY"
)
def main():
args = parse_args()
data_yaml = _resolve_data_yaml(args.data)
model = YOLO(args.model)
results = model.train(
data=str(data_yaml),
epochs=args.epochs,
imgsz=args.imgsz,
batch=args.batch,
device=args.device,
patience=args.patience,
project=args.project,
name=args.name,
exist_ok=True,
)
best_weights = Path(results.trainer.best)
print(f"\nTraining complete.")
print(f"Best weights : {best_weights}")
print(f"Results dir : {results.trainer.save_dir}")
return results
if __name__ == "__main__":
main()