| import sys | |
| from pathlib import Path | |
| import torch | |
| project_root = Path(__file__).resolve().parent.parent.parent | |
| sys.path.append(str(project_root)) | |
| from yolo.model.module import SPPELAN, ADown, CBLinear, Conv, Pool | |
| STRIDE = 2 | |
| KERNEL_SIZE = 3 | |
| IN_CHANNELS = 64 | |
| OUT_CHANNELS = 128 | |
| NECK_CHANNELS = 64 | |
| def test_conv(): | |
| conv = Conv(IN_CHANNELS, OUT_CHANNELS, KERNEL_SIZE) | |
| x = torch.randn(1, IN_CHANNELS, 64, 64) | |
| out = conv(x) | |
| assert out.shape == (1, OUT_CHANNELS, 64, 64) | |
| def test_pool_max(): | |
| pool = Pool("max", 2, stride=2) | |
| x = torch.randn(1, IN_CHANNELS, 64, 64) | |
| out = pool(x) | |
| assert out.shape == (1, IN_CHANNELS, 32, 32) | |
| def test_pool_avg(): | |
| pool = Pool("avg", 2, stride=2) | |
| x = torch.randn(1, IN_CHANNELS, 64, 64) | |
| out = pool(x) | |
| assert out.shape == (1, IN_CHANNELS, 32, 32) | |
| def test_adown(): | |
| adown = ADown(IN_CHANNELS, OUT_CHANNELS) | |
| x = torch.randn(1, IN_CHANNELS, 64, 64) | |
| out = adown(x) | |
| assert out.shape == (1, OUT_CHANNELS, 32, 32) | |
| def test_cblinear(): | |
| cblinear = CBLinear(IN_CHANNELS, [5, 5]) | |
| x = torch.randn(1, IN_CHANNELS, 64, 64) | |
| outs = cblinear(x) | |
| assert len(outs) == 2 | |
| assert outs[0].shape == (1, 5, 64, 64) | |
| assert outs[1].shape == (1, 5, 64, 64) | |
| def test_sppelan(): | |
| sppelan = SPPELAN(IN_CHANNELS, OUT_CHANNELS, NECK_CHANNELS) | |
| x = torch.randn(1, IN_CHANNELS, 64, 64) | |
| out = sppelan(x) | |
| assert out.shape == (1, OUT_CHANNELS, 64, 64) | |