Skip to content

fpem

model.neck.fpem

FPEM_FFM

FPEM_FFM(backbone_out_channels: Optional[List[int]] = None, **kwargs)

Bases: Module

PANnet :param backbone_out_channels: 基础网络输出的维度

Source code in SaigeToolkit/model/neck/fpem.py
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)

FPEM

FPEM(in_channels=128)

Bases: Module

Source code in SaigeToolkit/model/neck/fpem.py
def __init__(self, in_channels=128):
    super().__init__()
    self.up_add1 = SeparableConv2d(in_channels, in_channels, 1)
    self.up_add2 = SeparableConv2d(in_channels, in_channels, 1)
    self.up_add3 = SeparableConv2d(in_channels, in_channels, 1)
    self.down_add1 = SeparableConv2d(in_channels, in_channels, 2)
    self.down_add2 = SeparableConv2d(in_channels, in_channels, 2)
    self.down_add3 = SeparableConv2d(in_channels, in_channels, 2)

SeparableConv2d

SeparableConv2d(in_channels, out_channels, stride=1)

Bases: Module

Source code in SaigeToolkit/model/neck/fpem.py
def __init__(self, in_channels, out_channels, stride=1):
    super(SeparableConv2d, self).__init__()

    self.depthwise_conv = nn.Conv2d(
        in_channels=in_channels,
        out_channels=in_channels,
        kernel_size=3,
        padding=1,
        stride=stride,
        groups=in_channels,
    )
    self.pointwise_conv = nn.Conv2d(
        in_channels=in_channels, out_channels=out_channels, kernel_size=1
    )
    self.bn = nn.BatchNorm2d(out_channels)
    self.relu = nn.ReLU()