|
|
|
import pytest |
|
import torch |
|
import torch.nn.functional as F |
|
from mmcv.cnn import constant_init |
|
|
|
from mmdet.models.utils import DyReLU, SELayer |
|
|
|
|
|
def test_se_layer(): |
|
with pytest.raises(AssertionError): |
|
|
|
SELayer(channels=32, act_cfg=(dict(type='ReLU'), )) |
|
|
|
with pytest.raises(AssertionError): |
|
|
|
SELayer(channels=32, act_cfg=[dict(type='ReLU'), dict(type='ReLU')]) |
|
|
|
|
|
layer = SELayer(channels=32) |
|
layer.init_weights() |
|
layer.train() |
|
|
|
x = torch.randn((1, 32, 10, 10)) |
|
x_out = layer(x) |
|
assert x_out.shape == torch.Size((1, 32, 10, 10)) |
|
|
|
|
|
def test_dyrelu(): |
|
with pytest.raises(AssertionError): |
|
|
|
DyReLU(channels=32, act_cfg=(dict(type='ReLU'), )) |
|
|
|
with pytest.raises(AssertionError): |
|
|
|
DyReLU(channels=32, act_cfg=[dict(type='ReLU'), dict(type='ReLU')]) |
|
|
|
|
|
layer = DyReLU(channels=32) |
|
layer.init_weights() |
|
layer.train() |
|
x = torch.randn((1, 32, 10, 10)) |
|
x_out = layer(x) |
|
assert x_out.shape == torch.Size((1, 32, 10, 10)) |
|
|
|
|
|
|
|
layer = DyReLU(channels=32) |
|
constant_init(layer.conv2.conv, 0) |
|
layer.train() |
|
x = torch.randn((1, 32, 10, 10)) |
|
x_out = layer(x) |
|
relu_out = F.relu(x) |
|
assert torch.equal(x_out, relu_out) |
|
|