本文章记录最近看的一个孪生网络实现人脸面部相似度的代码实例,关于孪生网络的定义,可以点击这里,该项目所使用的的网络架构为标准的卷积神经网络架构,在每个卷积层之后使用批量归一化(batch normolization),然后进行dropout。
孪生网络架构的代码片段:
class SiameseNetwork(nn.Module):
def __init__(self):
super(SiameseNetwork, self).__init__()
self.cnn1 = nn.Sequential(
nn.ReflectionPad2d(1),
nn.Conv2d(1, 4, kernel_size=3),
nn.ReLU(inplace=True),
nn.BatchNorm2d(4),
#nn.BatchNorm2d(4)中参数4为通道数
nn.ReflectionPad2d(1),
nn.Conv2d(4, 8, kernel_size=3),
nn.ReLU(inplace=True),
nn.BatchNorm2d(8),
nn.ReflectionPad2d(1),
nn.Conv2d(8, 8, kernel_size=3),
nn.ReLU(inplace=True),
nn.BatchNorm2d(8),
)
self.fc1 = nn.Sequential(
nn.Linear(8*100*100, 500),
nn.ReLU(inplace=True),
nn.Linear(500, 500),
nn.ReLU(inplace=True),
nn.Linear(500, 5))
def forward_once(self, x):
output = self.cnn1(x)
output = output.view(output.size(0), -1)
output = self.fc1(output)
return output
def forward(self, input1, input2):