def __init__(self, backbone_out_channels: Optional[List[int]] = None, **kwargs):
"""
PANnet
:param backbone_out_channels: 基础网络输出的维度
"""
super().__init__()
if backbone_out_channels is None:
backbone_out_channels = [64, 128, 256, 512]
fpem_repeat = kwargs.get("fpem_repeat", 2)
conv_out = 64
# reduce layers
self.reduce_conv_c2 = nn.Sequential(
nn.Conv2d(in_channels=backbone_out_channels[0], out_channels=conv_out, kernel_size=1),
nn.BatchNorm2d(conv_out),
nn.ReLU(),
)
self.reduce_conv_c3 = nn.Sequential(
nn.Conv2d(in_channels=backbone_out_channels[1], out_channels=conv_out, kernel_size=1),
nn.BatchNorm2d(conv_out),
nn.ReLU(),
)
self.reduce_conv_c4 = nn.Sequential(
nn.Conv2d(in_channels=backbone_out_channels[2], out_channels=conv_out, kernel_size=1),
nn.BatchNorm2d(conv_out),
nn.ReLU(),
)
self.reduce_conv_c5 = nn.Sequential(
nn.Conv2d(in_channels=backbone_out_channels[3], out_channels=conv_out, kernel_size=1),
nn.BatchNorm2d(conv_out),
nn.ReLU(),
)
self.fpems = nn.ModuleList()
for _ in range(fpem_repeat):
self.fpems.append(FPEM(conv_out))
self.out_conv = nn.Conv2d(in_channels=conv_out * 4, out_channels=6, kernel_size=1)