Spaces:
Sleeping
Sleeping
| import sys | |
| from pathlib import Path | |
| import pytest | |
| import torch | |
| from hydra import compose, initialize | |
| from lightning import Trainer | |
| project_root = Path(__file__).resolve().parent.parent | |
| sys.path.append(str(project_root)) | |
| from yolo import Anc2Box, Config, Vec2Box, create_converter, create_model | |
| from yolo.model.yolo import YOLO | |
| from yolo.tools.data_loader import StreamDataLoader, create_dataloader | |
| from yolo.tools.dataset_preparation import prepare_dataset | |
| from yolo.utils.logging_utils import set_seed, setup | |
| def pytest_configure(config): | |
| config.addinivalue_line("markers", "requires_cuda: mark test to run only if CUDA is available") | |
| def get_cfg(overrides=[]) -> Config: | |
| config_path = "../yolo/config" | |
| with initialize(config_path=config_path, version_base=None): | |
| cfg: Config = compose(config_name="config", overrides=overrides) | |
| set_seed(cfg.lucky_number) | |
| return cfg | |
| def train_cfg() -> Config: | |
| return get_cfg(overrides=["task=train", "dataset=mock"]) | |
| def validation_cfg(): | |
| return get_cfg(overrides=["task=validation", "dataset=mock"]) | |
| def inference_cfg(): | |
| return get_cfg(overrides=["task=inference"]) | |
| def inference_v7_cfg(): | |
| return get_cfg(overrides=["task=inference", "model=v7"]) | |
| def device(): | |
| return torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
| def model(train_cfg: Config, device) -> YOLO: | |
| model = create_model(train_cfg.model) | |
| return model.to(device) | |
| def model_v7(inference_v7_cfg: Config, device) -> YOLO: | |
| model = create_model(inference_v7_cfg.model) | |
| return model.to(device) | |
| def solver(train_cfg: Config) -> Trainer: | |
| train_cfg.use_wandb = False | |
| callbacks, loggers, save_path = setup(train_cfg) | |
| trainer = Trainer( | |
| accelerator="auto", | |
| max_epochs=getattr(train_cfg.task, "epoch", None), | |
| precision="16-mixed", | |
| callbacks=callbacks, | |
| logger=loggers, | |
| log_every_n_steps=1, | |
| gradient_clip_val=10, | |
| deterministic=True, | |
| default_root_dir=save_path, | |
| ) | |
| return trainer | |
| def vec2box(train_cfg: Config, model: YOLO, device) -> Vec2Box: | |
| vec2box = create_converter(train_cfg.model.name, model, train_cfg.model.anchor, train_cfg.image_size, device) | |
| return vec2box | |
| def anc2box(inference_v7_cfg: Config, model: YOLO, device) -> Anc2Box: | |
| anc2box = create_converter( | |
| inference_v7_cfg.model.name, model, inference_v7_cfg.model.anchor, inference_v7_cfg.image_size, device | |
| ) | |
| return anc2box | |
| def train_dataloader(train_cfg: Config): | |
| prepare_dataset(train_cfg.dataset, task="train") | |
| return create_dataloader(train_cfg.task.data, train_cfg.dataset, train_cfg.task.task) | |
| def validation_dataloader(validation_cfg: Config): | |
| prepare_dataset(validation_cfg.dataset, task="val") | |
| return create_dataloader(validation_cfg.task.data, validation_cfg.dataset, validation_cfg.task.task) | |
| def file_stream_data_loader(inference_cfg: Config): | |
| return StreamDataLoader(inference_cfg.task.data) | |
| def file_stream_data_loader_v7(inference_v7_cfg: Config): | |
| return StreamDataLoader(inference_v7_cfg.task.data) | |
| def directory_stream_data_loader(inference_cfg: Config): | |
| inference_cfg.task.data.source = "tests/data/images/train" | |
| return StreamDataLoader(inference_cfg.task.data) | |