pvs_backend / scripts /train_phone_model.py
adnankhan-11's picture
PVD System - Initial deployment
d2885a7
"""
This script is the command-line entrypoint for phone detector training.
It loads configs, starts the phone training pipeline, and logs progress cleanly.
This is better than using one large experimental script and fits MLOps practice.
It is designed to work with MLflow, DAGsHub, and later DVC-based artifact tracking.
"""
import argparse
import sys
from pathlib import Path
ROOT_DIR = Path(__file__).resolve().parents[1]
if str(ROOT_DIR) not in sys.path:
sys.path.append(str(ROOT_DIR))
from src.config.configuration import ConfigurationManager
from src.pipeline.phone_training_pipeline import PhoneTrainingPipeline
from src.utils.common import create_directories, seed_everything
from src.utils.logger import get_logger
from dotenv import load_dotenv
load_dotenv()
def parse_args():
parser = argparse.ArgumentParser(description="Train the phone detector model.")
parser.add_argument(
"--data-yaml",
type=str,
required=False,
default="data/processed/phone_dataset/data.yaml",
help="Path to YOLO dataset yaml file",
)
return parser.parse_args()
def main() -> None:
args = parse_args()
config_manager = ConfigurationManager()
project_config = config_manager.get_project_config()
paths_config = config_manager.get_paths_config()
phone_detector_config = config_manager.get_phone_detector_config()
training_config = config_manager.get_training_config()
create_directories(
[
paths_config.logs_dir,
paths_config.metrics_dir,
paths_config.phone_weights_dir,
]
)
seed_everything(project_config.random_seed)
logger = get_logger(
"train_phone_model", log_dir=paths_config.logs_dir, level="INFO"
)
data_yaml_path = Path(args.data_yaml)
logger.info("Starting phone training script.")
logger.info("Using data yaml: %s", data_yaml_path)
pipeline = PhoneTrainingPipeline(
paths_config=paths_config,
phone_detector_config=phone_detector_config,
training_config=training_config,
log_dir=paths_config.logs_dir,
log_level="INFO",
)
result = pipeline.run(data_yaml_path=data_yaml_path)
logger.info("Phone training script completed successfully.")
logger.info("Final result summary: %s", result)
if __name__ == "__main__":
main()