| | |
| | import pytest |
| | import torch |
| |
|
| | from mmdet.models.backbones import Res2Net |
| | from mmdet.models.backbones.res2net import Bottle2neck |
| | from .utils import is_block |
| |
|
| |
|
| | def test_res2net_bottle2neck(): |
| | with pytest.raises(AssertionError): |
| | |
| | Bottle2neck(64, 64, base_width=26, scales=4, style='tensorflow') |
| |
|
| | with pytest.raises(AssertionError): |
| | |
| | Bottle2neck(64, 64, base_width=26, scales=1, style='pytorch') |
| |
|
| | |
| | block = Bottle2neck( |
| | 64, 64, base_width=26, stride=2, scales=4, style='pytorch') |
| | assert block.scales == 4 |
| |
|
| | |
| | dcn = dict(type='DCN', deform_groups=1, fallback_on_stride=False) |
| | with pytest.raises(AssertionError): |
| | |
| | Bottle2neck( |
| | 64, |
| | 64, |
| | base_width=26, |
| | scales=4, |
| | dcn=dcn, |
| | conv_cfg=dict(type='Conv')) |
| | Bottle2neck(64, 64, dcn=dcn) |
| |
|
| | |
| | block = Bottle2neck(64, 16, base_width=26, scales=4) |
| | x = torch.randn(1, 64, 56, 56) |
| | x_out = block(x) |
| | assert x_out.shape == torch.Size([1, 64, 56, 56]) |
| |
|
| |
|
| | def test_res2net_backbone(): |
| | with pytest.raises(KeyError): |
| | |
| | Res2Net(depth=18) |
| |
|
| | |
| | model = Res2Net(depth=50, scales=4, base_width=26) |
| | for m in model.modules(): |
| | if is_block(m): |
| | assert m.scales == 4 |
| | model.train() |
| |
|
| | imgs = torch.randn(1, 3, 32, 32) |
| | feat = model(imgs) |
| | assert len(feat) == 4 |
| | assert feat[0].shape == torch.Size([1, 256, 8, 8]) |
| | assert feat[1].shape == torch.Size([1, 512, 4, 4]) |
| | assert feat[2].shape == torch.Size([1, 1024, 2, 2]) |
| | assert feat[3].shape == torch.Size([1, 2048, 1, 1]) |
| |
|