1. 添加loss函数
分类问题,使用交叉熵。因为是活体和非活体二分类,所以可以使用BCE Loss。pytorch中的损失函数选择
criterion = bce_criterion
bce_criterion的话再utils.py中已经有写好了:
def bce_criterion(logit, truth, is_average=True):
loss = F.binary_cross_entropy_with_logits(logit, truth, reduce=is_average)
return loss
之后在循环中调用时使用的是(截取部分):
logit,_,_ = net.forward(input)
truth = truth.view(logit.shape[0])
loss = criterion(logit, truth)
precision,_ = metric(logit, truth)
2. 声明模型的res_4,res_5,填入生成res_4,res_5所需要的参数
上图是facebagnet中的示意图,是在resnext这个自定义的resnet结构的基础上改进的。
以上是resnext-50的结构示意表;
参考resnext的源码(截取部分):
class ResNeXt(nn.Module):
def __init__(self, block, layers, num_classes=1000, num_group=32):
self.inplanes = 64
super(ResNeXt, self).__init__()
self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3,
bias=False)
self.bn1 = nn.BatchNorm2d(64)
self.relu = nn.ReLU(inplace=True)
self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
self.layer1 = self._make_layer(block, 64, layers[0], num_group)
self.layer2 = self._make_layer(block, 128, layers[1], num_group, stride=2)
self.layer3 = self._make_layer(block, 256, layers[2], num_group, stride=2)
self.layer4 = self._make_layer(block, 512, layers[3], num_group, stride=2)
self.avgpool = nn.AvgPool2d(