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