Spaces:
Runtime error
Runtime error
| # SPIGA: Shape Preserving Facial Landmarks with Graph Attention Networks. | |
| [](https://bmvc2022.mpi-inf.mpg.de/155/) | |
| [](https://arxiv.org/abs/2210.07233) | |
| [](https://badge.fury.io/py/spiga) | |
| [](LICENSE) | |
| [](https://colab.research.google.com/github/andresprados/SPIGA/blob/main/colab_tutorials/video_demo.ipynb) | |
| This repository contains the source code of **SPIGA, a face alignment and headpose estimator** that takes advantage of the complementary benefits from CNN and GNN architectures producing plausible face shapes in presence of strong appearance changes. | |
| <p align="center"> | |
| <img src="https://raw.githubusercontent.com/andresprados/SPIGA/main/assets/spiga_scheme.png" width="80%"> | |
| </p> | |
| **It achieves top-performing results in:** | |
| [](https://paperswithcode.com/sota/pose-estimation-on-300w-full?p=shape-preserving-facial-landmarks-with-graph) | |
| [](https://paperswithcode.com/sota/head-pose-estimation-on-wflw?p=shape-preserving-facial-landmarks-with-graph) | |
| [](https://paperswithcode.com/sota/pose-estimation-on-merl-rav?p=shape-preserving-facial-landmarks-with-graph) | |
| [](https://paperswithcode.com/sota/face-alignment-on-merl-rav?p=shape-preserving-facial-landmarks-with-graph) | |
| [](https://paperswithcode.com/sota/face-alignment-on-wflw?p=shape-preserving-facial-landmarks-with-graph) | |
| [](https://paperswithcode.com/sota/face-alignment-on-300w-split-2?p=shape-preserving-facial-landmarks-with-graph) | |
| [](https://paperswithcode.com/sota/face-alignment-on-cofw-68?p=shape-preserving-facial-landmarks-with-graph) | |
| [](https://paperswithcode.com/sota/face-alignment-on-300w?p=shape-preserving-facial-landmarks-with-graph) | |
| ## Setup | |
| The repository has been tested on Ubuntu 20.04 with CUDA 11.4, the latest version of cuDNN, Python 3.8 and Pytorch 1.12.1. | |
| To run the video analyzer demo or evaluate the algorithm, install the repository from the source code: | |
| ``` | |
| # Best practices: | |
| # 1. Create a virtual environment. | |
| # 2. Install Pytorch according to your CUDA version. | |
| # 3. Install SPIGA from source code: | |
| git clone https://github.com/andresprados/SPIGA.git | |
| cd spiga | |
| pip install -e . | |
| # To run the video analyzer demo install the extra requirements. | |
| pip install -e .[demo] | |
| ``` | |
| **Models:** By default, model weights are automatically downloaded on demand and stored at ```./spiga/models/weights/```. | |
| You can also download them from [Google Drive](https://drive.google.com/drive/folders/1olrkoiDNK_NUCscaG9BbO3qsussbDi7I?usp=sharing). | |
| ***Note:*** All the callable files provide a detailed parser that describes the behaviour of the program and their inputs. Please, check the operational modes by using the extension ```--help```. | |
| ## Inference and Demo | |
| We provide an inference framework for SPIGA available at ```./spiga/inference```. The models can be easily deployed | |
| in third-party projects by adding a few lines of code. Check out our inference and application tutorials | |
| for more information: | |
| <div align="center"> | |
| Tutorials | Notebook | | |
| :---: | :---: | | |
| Image Inference Example | [](https://colab.research.google.com/github/andresprados/SPIGA/blob/main/colab_tutorials/image_demo.ipynb) | | |
| Face Video Analyzer Demo | [](https://colab.research.google.com/github/andresprados/SPIGA/blob/main/colab_tutorials/video_demo.ipynb) | | |
| </div> | |
| ### Face Video Analyzer Demo: | |
| The demo application provides a general framework for tracking, detecting and extracting features of human faces in images or videos. | |
| You can use the following commands to run the demo: | |
| ``` | |
| python ./spiga/demo/app.py \ | |
| [--input] \ # Webcam ID or Video Path. Dft: Webcam '0'. | |
| [--dataset] \ # SPIGA pretrained weights per dataset. Dft: 'wflw'. | |
| [--tracker] \ # Tracker name. Dft: 'RetinaSort'. | |
| [--show] \ # Select the attributes of the face to be displayed. Dft: ['fps', 'face_id', 'landmarks', 'headpose'] | |
| [--save] \ # Save record. | |
| [--noview] \ # Do not visualize window. | |
| [--outpath] \ # Recorded output directory. Dft: './spiga/demo/outputs' | |
| [--fps] \ # Frames per second. | |
| [--shape] \ # Visualizer shape (W,H). | |
| ``` | |
| <p align="center"> | |
| <img src="https://raw.githubusercontent.com/andresprados/SPIGA/main/assets/demo.gif" width=250px height=250px> | |
| | |
| <img src="https://raw.githubusercontent.com/andresprados/SPIGA/main/assets/results/carnaval.gif" width=300px height=250px> | |
| | |
| <img src="https://raw.githubusercontent.com/andresprados/SPIGA/main/assets/results/football.gif" width=230px height=250px> | |
| </p> | |
| ***Note:*** For more information check the [Demo Readme](spiga/demo/readme.md) or call the app parser ```--help```. | |
| ## Dataloaders and Benchmarks | |
| This repository provides general-use tools for the task of face alignment and headpose estimation: | |
| * **Dataloaders:** Training and inference dataloaders are available at ```./spiga/data```. | |
| Including the data augmentation tools used for training SPIGA and data-visualizer to analyze the dataset images and features. | |
| For more information check the [Data Readme](spiga/data/readme.md) . | |
| * **Benchmark:** A common benchmark framework to test any algorithm in the task of face alignment and headpose estimation | |
| is available at ```./spiga/eval/benchmark```. For more information check the following Evaluation Section and the [Benchmark Readme](spiga/eval/benchmark/readme.md). | |
| **Datasets:** To run the data visualizers or the evaluation benchmark please download the dataset images from the official websites | |
| ([300W](https://ibug.doc.ic.ac.uk/resources/facial-point-annotations/), | |
| [AFLW](https://www.tugraz.at/institute/icg/research/team-bischof/lrs/downloads/aflw/), | |
| [WFLW](https://wywu.github.io/projects/LAB/WFLW.html), [COFW](http://www.vision.caltech.edu/xpburgos/ICCV13/)). | |
| By default they should be saved following the next folder structure: | |
| ``` | |
| ./spiga/data/databases/ # Default path can be updated by modifying 'db_img_path' in ./spiga/data/loaders/dl_config.py | |
| | | |
| ββββ/300w | |
| β ββββ /images | |
| β | /private | |
| β | /test | |
| | β /train | |
| | | |
| ββββ/cofw | |
| β ββββ /images | |
| | | |
| ββββ/aflw | |
| β ββββ /data | |
| | β /flickr | |
| | | |
| ββββ/wflw | |
| ββββ /images | |
| ``` | |
| **Annotations:** We have stored for simplicity the datasets annotations directly in ```./spiga/data/annotations```. We strongly recommend to move them out of the repository if you plan to use it as a git directory. | |
| **Results:** Similar to the annotations problem, we have stored the SPIGA results in ```./spiga/eval/results/<dataset_name>```. Remove them if need it. | |
| ## Evaluation | |
| The models evaluation is divided in two scripts: | |
| **Results generation**: The script extracts the data alignments and headpose estimation from the desired ``` <dataset_name>``` trained network. Generating a ```./spiga/eval/results/results_<dataset_name>_test.json``` file which follows the same data structure defined by the dataset annotations. | |
| ``` | |
| python ./spiga/eval/results_gen.py <dataset_name> | |
| ``` | |
| **Benchmark metrics**: The script generates the desired landmark or headpose estimation metrics. We have implemented an useful benchmark which allows you to test any model using a results file as input. | |
| ``` | |
| python ./spiga/eval/benchmark/evaluator.py /path/to/<results_file.json> --eval lnd pose -s | |
| ``` | |
| ***Note:*** You will have to interactively select the NME_norm and other parameters in the terminal window. | |
| ### Results Sum-up | |
| <details> | |
| <summary> WFLW Dataset </summary> | |
| |[](https://paperswithcode.com/sota/face-alignment-on-wflw?p=shape-preserving-facial-landmarks-with-graph)|NME_ioc|AUC_10|FR_10|NME_P90|NME_P95|NME_P99| | |
| |:--:|:--:|:--:|:--:|:--:|:--:|:--:| | |
| |full|4.060|60.558|2.080|6.766|8.199|13.071| | |
| |pose|7.141|35.312|11.656|10.684|13.334|26.890| | |
| |expression|4.457|57.968|2.229|7.023|8.148|22.388| | |
| |illumination|4.004|61.311|1.576|6.528|7.919|11.090| | |
| |makeup|3.809|62.237|1.456|6.320|8.289|11.564| | |
| |occlusion|4.952|53.310|4.484|8.091|9.929|16.439| | |
| |blur|4.650|55.310|2.199|7.311|8.693|14.421| | |
| </details> | |
| <details> | |
| <summary> MERLRAV Dataset </summary> | |
| |[](https://paperswithcode.com/sota/face-alignment-on-merl-rav?p=shape-preserving-facial-landmarks-with-graph)|NME_bbox|AUC_7|FR_7|NME_P90|NME_P95|NME_P99| | |
| |:--:|:--:|:--:|:--:|:--:|:--:|:--:| | |
| |full|1.509|78.474|0.052|2.163|2.468|3.456| | |
| |frontal|1.616|76.964|0.091|2.246|2.572|3.621| | |
| |half_profile|1.683|75.966|0.000|2.274|2.547|3.397| | |
| |profile|1.191|82.990|0.000|1.735|2.042|2.878| | |
| </details> | |
| <details> | |
| <summary> 300W Private Dataset </summary> | |
| |[](https://paperswithcode.com/sota/face-alignment-on-300w-split-2?p=shape-preserving-facial-landmarks-with-graph)|NME_bbox|AUC_7|FR_7|NME_P90|NME_P95|NME_P99| | |
| |:--:|:--:|:--:|:--:|:--:|:--:|:--:| | |
| |full|2.031|71.011|0.167|2.788|3.078|3.838| | |
| |indoor|2.035|70.959|0.333|2.726|3.007|3.712| | |
| |outdoor|2.027|37.174|0.000|2.824|3.217|3.838| | |
| </details> | |
| <details> | |
| <summary> COFW68 Dataset </summary> | |
| |[](https://paperswithcode.com/sota/face-alignment-on-cofw-68?p=shape-preserving-facial-landmarks-with-graph)|NME_bbox|AUC_7|FR_7|NME_P90|NME_P95|NME_P99| | |
| |:--:|:--:|:--:|:--:|:--:|:--:|:--:| | |
| |full|2.517|64.050|0.000|3.439|4.066|5.558| | |
| </details> | |
| <details> | |
| <summary> 300W Public Dataset </summary> | |
| |[](https://paperswithcode.com/sota/face-alignment-on-300w?p=shape-preserving-facial-landmarks-with-graph)|NME_ioc|AUC_8|FR_8|NME_P90|NME_P95|NME_P99| | |
| |:--:|:--:|:--:|:--:|:--:|:--:|:--:| | |
| |full|2.994|62.726|0.726|4.667|5.436|7.320| | |
| |common|2.587|44.201|0.000|3.710|4.083|5.215| | |
| |challenge|4.662|42.449|3.704|6.626|7.390|10.095| | |
| </details> | |
| ## BibTeX Citation | |
| ``` | |
| @inproceedings{Prados-Torreblanca_2022_BMVC, | |
| author = {AndrΓ©s Prados-Torreblanca and JosΓ© M Buenaposada and Luis Baumela}, | |
| title = {Shape Preserving Facial Landmarks with Graph Attention Networks}, | |
| booktitle = {33rd British Machine Vision Conference 2022, {BMVC} 2022, London, UK, November 21-24, 2022}, | |
| publisher = {{BMVA} Press}, | |
| year = {2022}, | |
| url = {https://bmvc2022.mpi-inf.mpg.de/0155.pdf} | |
| } | |
| ``` | |