3. PV Identifier

1. 模块解析

1.1 Separable_Conv

class Separable_Conv(nn.Module):
    def __init__(self, in_channels, out_channels, kernel_size=3, padding=1,bias=False,stride=1):
        super(Separable_Conv, self).__init__()
        self.sc = nn.Sequential(
            nn.Conv2d(in_channels=in_channels, out_channels=in_channels, kernel_size=kernel_size, padding=padding, bias=bias,stride=stride,groups=in_channels),
            nn.BatchNorm2d(in_channels),nn.ReLU(),nn.Conv2d(in_channels=in_channels, out_channels=out_channels, kernel_size=1, padding=0, bias=bias,stride=1),
            nn.BatchNorm2d(out_channels),nn.ReLU())

    def forward(self,x):
        return self.sc(x)

实际上是(33,padding=1)的卷积+归一化+relu+(11,padding=0)的卷积+归一化+relu

1.2 Ordinary_Conv

class Ordinary_Conv(nn.Module):
    def __init__(self, in_channels, out_channels, kernel_size=3, padding=1,bias=False,stride=1):
        super(Ordinary_Conv, self).__init__()
        self.sc = nn.Sequential(
            nn.Conv2d(in_channels=in_channels, out_channels=out_channels, kernel_size=kernel_size, padding=padding, bias=bias,stride=stride),
            nn.BatchNorm2d(out_channels),nn.ReLU())
    def forward(self,x):
        return self.sc(x)

(3*3,padding=1)的卷积+归一化+relu

1.3 Feature_extract_layer

特征提取层

class Feature_extract_layer(nn.Module):
    def __init__(self, in_ch, out_ch, separable=True,layers=5,stride=2):
        super(Feature_extract_layer, self).__init__()

        if separable:
            self.md_list = nn.ModuleList()
            self.md_list.append(Separable_Conv(in_channels=in_ch,out_channels=out_ch,kernel_size=3,padding=1,bias=False,stride=stride))
            for i in range(layers-1):
                self.md_list.append(Separable_Conv(in_channels=out_ch,out_channels=out_ch,kernel_size=3,padding=1,bias=False,stride=1))
        else:
            self.md_list = nn.ModuleList()
            self.md_list.append(
                Ordinary_Conv(in_channels=in_ch, out_channels=out_ch, kernel_size=3, padding=1, bias=False,stride=stride))
            for i in range(layers - 1):
                self.md_list.append(
                    Ordinary_Conv(in_channels=out_ch, out_channels=out_ch, kernel_size=3, padding=1, bias=False,stride=1))


        self.shortcut = Ordinary_Conv(in_channels=in_ch, out_channels=out_ch, kernel_size=1, padding=0, bias=False,stride=stride)


    def forward(self, x):
        res = self.shortcut(x)
        feature = self.md_list[0](x)
        res =res + feature
        for md in self.md_list[1:]:
            feature = md(res)
            res = res + feature


        return res
posted @ 2025-06-07 14:16  乐池  阅读(5)  评论(0)    收藏  举报