Source code for bob.learn.pytorch.architectures.FASNet

import torch
from torch import nn
from torchvision import models


[docs]class FASNet(nn.Module): """PyTorch Reimplementation of Lucena, Oeslle, et al. "Transfer learning using convolutional neural networks for face anti-spoofing." International Conference Image Analysis and Recognition. Springer, Cham, 2017. Referenced from keras implementation: https://github.com/OeslleLucena/FASNet Attributes: pretrained: bool if set `True` loads the pretrained vgg16 model. vgg: :py:class:`torch.nn.Module` The VGG16 model relu: :py:class:`torch.nn.Module` ReLU activation enc: :py:class:`torch.nn.Module` Uses the layers for feature extraction linear1: :py:class:`torch.nn.Module` Fully connected layer linear2: :py:class:`torch.nn.Module` Fully connected layer dropout: :py:class:`torch.nn.Module` Dropout layer sigmoid: :py:class:`torch.nn.Module` Sigmoid activation """ def __init__(self, pretrained=True): """ Init method Parameters ---------- pretrained: bool if set `True` loads the pretrained vgg16 model. """ super(FASNet, self).__init__() vgg = models.vgg16(pretrained=pretrained) features = list(vgg.features.children()) self.enc = nn.Sequential(*features) self.linear1 = nn.Linear(25088, 256) self.relu = nn.ReLU() self.dropout = nn.Dropout(p=0.5) self.linear2 = nn.Linear(256, 1) self.sigmoid = nn.Sigmoid()
[docs] def forward(self, x): """ Propagate data through the network Parameters ---------- x: :py:class:`torch.Tensor` The data to forward through the network Returns ------- x: :py:class:`torch.Tensor` The last layer of the network """ enc = self.enc(x) x = enc.view(-1, 25088) x = self.linear1(x) x = self.relu(x) x = self.dropout(x) x = self.linear2(x) x = self.sigmoid(x) return x