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