|
import sys |
|
from math import isclose |
|
from pathlib import Path |
|
|
|
import pytest |
|
from lightning.pytorch import Trainer |
|
from torch.utils.data import DataLoader |
|
|
|
project_root = Path(__file__).resolve().parent.parent.parent |
|
sys.path.append(str(project_root)) |
|
|
|
from yolo.config.config import Config |
|
from yolo.model.yolo import YOLO |
|
from yolo.tools.data_loader import StreamDataLoader |
|
from yolo.tools.solver import InferenceModel, TrainModel, ValidateModel |
|
from yolo.utils.bounding_box_utils import Anc2Box, Vec2Box |
|
|
|
|
|
@pytest.fixture |
|
def model_validator(validation_cfg: Config): |
|
validator = ValidateModel(validation_cfg) |
|
return validator |
|
|
|
|
|
def test_model_validator_initialization(solver: Trainer, model_validator: ValidateModel): |
|
assert isinstance(model_validator.model, YOLO) |
|
assert hasattr(solver, "validate") |
|
|
|
|
|
def test_model_validator_solve_mock_dataset( |
|
solver: Trainer, model_validator: ValidateModel, validation_dataloader: DataLoader |
|
): |
|
mAPs = solver.validate(model_validator, dataloaders=validation_dataloader)[0] |
|
except_mAPs = {"map_50": 0.7379, "map": 0.5617} |
|
assert isclose(mAPs["map_50"], except_mAPs["map_50"], abs_tol=0.1) |
|
assert isclose(mAPs["map"], except_mAPs["map"], abs_tol=0.1) |
|
|
|
|
|
@pytest.fixture |
|
def model_tester(inference_cfg: Config): |
|
tester = InferenceModel(inference_cfg) |
|
return tester |
|
|
|
|
|
@pytest.fixture |
|
def modelv7_tester(inference_v7_cfg: Config): |
|
tester = InferenceModel(inference_v7_cfg) |
|
return tester |
|
|
|
|
|
def test_model_tester_initialization(solver: Trainer, model_tester: InferenceModel): |
|
assert isinstance(model_tester.model, YOLO) |
|
assert hasattr(solver, "predict") |
|
|
|
|
|
def test_model_tester_solve_single_image( |
|
solver: Trainer, model_tester: InferenceModel, file_stream_data_loader: StreamDataLoader |
|
): |
|
solver.predict(model_tester, file_stream_data_loader) |
|
|
|
|
|
def test_modelv7_tester_solve_single_image( |
|
solver: Trainer, modelv7_tester: InferenceModel, file_stream_data_loader_v7: StreamDataLoader |
|
): |
|
solver.predict(modelv7_tester, file_stream_data_loader_v7) |
|
|
|
|
|
@pytest.fixture |
|
def model_trainer(train_cfg: Config): |
|
train_cfg.task.epoch = 2 |
|
trainer = TrainModel(train_cfg) |
|
return trainer |
|
|
|
|
|
def test_model_trainer_initialization(solver: Trainer, model_trainer: TrainModel): |
|
assert isinstance(model_trainer.model, YOLO) |
|
assert hasattr(solver, "fit") |
|
assert solver.optimizers is not None |
|
|
|
|
|
|
|
|
|
|