File size: 2,557 Bytes
88e45b9
c6e3994
88e45b9
 
 
c6e3994
 
88e45b9
 
 
 
6a39ae1
 
c6e3994
0ae4269
4b46de4
88e45b9
 
 
c6e3994
 
6a39ae1
88e45b9
 
c6e3994
6a39ae1
c6e3994
88e45b9
 
c6e3994
 
 
 
 
cdd9a11
bd0409b
88e45b9
 
 
0ae4269
 
6a39ae1
88e45b9
 
4b46de4
0ae4269
 
4b46de4
 
 
0ae4269
6a39ae1
0ae4269
88e45b9
 
0ae4269
 
 
 
88e45b9
 
0ae4269
 
 
 
4b46de4
 
88e45b9
0ae4269
6a39ae1
c6e3994
6a39ae1
88e45b9
 
c6e3994
6a39ae1
c6e3994
 
88e45b9
 
44abd6c
 
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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


# def test_model_trainer_solve_mock_dataset(model_trainer: ModelTrainer, train_dataloader: YoloDataLoader):
#     model_trainer.solve(train_dataloader)