| import os |
|
|
| import hydra |
| import hydra.experimental |
| import numpy as np |
| import pytest |
| import torch |
|
|
| pytest_plugins = ["helpers_namespace"] |
|
|
| hydra.experimental.initialize( |
| os.path.join(os.path.dirname(__file__), "../pointnet2/config") |
| ) |
|
|
|
|
| @pytest.helpers.register |
| def build_cfg(overrides=[]): |
| return hydra.experimental.compose("config.yaml", overrides) |
|
|
|
|
| @pytest.helpers.register |
| def get_model(overrides=[]): |
| cfg = build_cfg(overrides) |
| return hydra.utils.instantiate(cfg.task_model, cfg) |
|
|
|
|
| def _test_loop(model, inputs, labels): |
| optimizer = torch.optim.Adam(model.parameters(), lr=1e-5) |
|
|
| prev_loss = 1e10 |
| for _ in range(5): |
| optimizer.zero_grad() |
| res = model.training_step((inputs, labels), None) |
| loss = res["loss"] |
| loss.backward() |
| optimizer.step() |
|
|
| assert loss.item() < prev_loss + 1.0, "Loss spiked upwards" |
|
|
| prev_loss = loss.item() |
|
|
|
|
| @pytest.helpers.register |
| def cls_test(model): |
| B, N = 4, 2048 |
| inputs = torch.randn(B, N, 6).cuda() |
| labels = torch.from_numpy(np.random.randint(0, 3, size=B)).cuda() |
| model.cuda() |
|
|
| _test_loop(model, inputs, labels) |
|
|
|
|
| @pytest.helpers.register |
| def semseg_test(model): |
| B, N = 4, 2048 |
| inputs = torch.randn(B, N, 9).cuda() |
| labels = torch.from_numpy(np.random.randint(0, 3, size=B * N)).view(B, N).cuda() |
| model.cuda() |
|
|
| _test_loop(model, inputs, labels) |
|
|