File size: 1,903 Bytes
48b1346 | 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 | """
main.py
========
اسکریپت اصلی برای اجرای کل pipeline از خط فرمان:
python scripts/main.py --mode train
python scripts/main.py --mode evaluate --ckpt models/saved_models/omnial_epoch50.pt
"""
import os
import sys
import argparse
import yaml
import torch
sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
from data.data_loader import build_dataloader
from scripts.train import build_model_and_optimizer, train_model
from scripts.evaluate import evaluate_dataset
def load_config(path: str = "config/config.yaml") -> dict:
with open(path, "r", encoding="utf-8") as f:
return yaml.safe_load(f)
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--mode", choices=["train", "evaluate"], default="train")
parser.add_argument("--dataset", choices=["mvtec", "visa"], default="mvtec")
parser.add_argument("--config", default="config/config.yaml")
parser.add_argument("--ckpt", default=None)
args = parser.parse_args()
cfg = load_config(args.config)
torch.manual_seed(cfg["train"]["seed"])
model, optimizer, criterion, device = build_model_and_optimizer(cfg)
print(f"Using device: {device}")
if args.mode == "train":
train_loader, train_dataset = build_dataloader(cfg, dataset_name=args.dataset, shuffle=True)
print(f"تعداد نمونههای آموزشی ({args.dataset}): {len(train_dataset)}")
history = train_model(model, train_loader, optimizer, criterion, device, cfg)
print("آموزش تمام شد.")
elif args.mode == "evaluate":
if args.ckpt:
model.load_state_dict(torch.load(args.ckpt, map_location=device))
print(f"وزنها از {args.ckpt} بارگذاری شد.")
evaluate_dataset(model, cfg, dataset_name=args.dataset, device=device)
if __name__ == "__main__":
main()
|