This is the repository for the source code of the papar
Migrating Face Swap to Mobile Devices: A lightweight Framework and A Supervised Training Solution
Accepted to IEEE International Conference on Multimedia and Expo 2022
torch==1.6.0
torchvision==0.7.0
cuda version: 10.2
Firstly, I strongly recommend implementing your own dataset class for loading training data, since my implemenation is based the structure of my data folder.
class FaceShifterDataset(torch.utils.data.TensorDataset):
def __init__(self):
super(FaceShifterDataset, self).__init__()
# TODO: add your code
def __getitem__(self, item):
# TODO: add your code
return Xs, Xt, GT, with_gt, src_as_true
def __len__(self):
# TODO: add your code
return len(self.data_list)
Basically, the __getitem__ function returns five elements:
Xs: the source image.Xt: the target image.GT: the ground truth image. If none, an equivalent tensor with all values being -1.with_gt: (torch.float32) whether the training data has a ground truth label (the value can be either1or0).src_as_true: (bool) used to indicate whether the source or the target is a real image. Selected real images are used to feed the discrimiator.
Note that images are with shape being (3, 256, 256) and values in (-1, 1). Images are in format torch.tensor with dtype being torch.float32.
After that, reset the arugments inside main.py and refer to run_training.sh. Note that my implementation uses DistributedDataParallel on 4 GPUs within one machine. Please adjust the settings based on your own hardware.
| Model | Model Size (MB) |
|---|---|
| FaceShifter (PyTorch) | 669.0 + 64.0 + 168.0 |
| MegaFS (PyTorch) | 3529.0 + 364.0 |
| SimSwap (PyTorch) | 766.9 + 220.2 |
| Ours (Pytorch) | 10.2 + 4.9 |
| Ours (CoreML) | 15.0 |
| Ours (TNN) | 14.8 |
If you find my work useful, please cite:
@article{mobilefsgan,
author = {Haiming Yu and Hao Zhu and Xiangju Lu and Junhui Liu},
title = {Migrating Face Swap to Mobile Devices: A lightweight Framework and A Supervised Training Solution},
journal = {in ICME},
year = 2022
}

