omnial / scripts /main.py
erfanasgari21's picture
initial
48b1346
Raw History Blame Contribute Delete
1.9 kB
"""
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()