Paper: VGGTFace: Topologically Consistent Facial Geometry Reconstruction in the Wild (AAAI26)
VGGTFace is a system for reconstructing a topologically consistent 3D facial mesh from multi-view face images captured in the wild in less than 10 seconds.
Try VGGTFace in your browser (upload 16 images → reconstruct a mesh in one click)!
- Gradio Demo: https://uu31763-ba3f-b060fff2.westc.gpuhub.com:8443/
Note: The current web demo supports exactly 16 images per reconstruction.
⭐ If you find VGGTFace useful, please consider giving this repository a star!
First, install Pixel3DMM following the instructions in their official repository: https://github.com/SimonGiebenhain/pixel3dmm.
We rely on its pretrained UV predictor weights, but we do not require FLAME-related assets.
Therefore, when running install_preprocessing_pipeline.sh, you only need to download the UV predictor weights.
Running download_flame2023.sh is not necessary for VGGTFace.
Please download the pretrained weights from the official VGGT repository:
https://github.com/facebookresearch/vggt
After downloading, rename the checkpoint to vggt_weights.pt and place it under:
./pretrained_weights/vggt_weights.pt
Note: Please follow VGGT’s official instructions and license terms when downloading and using the weights.
To preprocess multi-view images, run:
python preprocess.py --image_folder {image_folder} --output_folder {output_folder}
During preprocessing, we use Pixel3DMM’s UV predictor to estimate a UV map for each image, and use facer to estimate the mask for each image.
Example:
python preprocess.py --image_folder ./examples/example1 --output_folder ./preprocessed_data/example1
Note:
-
You may need to install pyfacer—just follow the instructions in their official repository: https://github.com/FacePerceiver/facer.
-
You may run into the error
forward() got an unexpected keyword argument 'bbox_scale_factor'. If so, simply remove thebbox_scale_factor=1.25argument inpreprocess.py. This seems to be caused by API inconsistencies across different versions of pyfacer.
After preprocessing, run the reconstruction script:
python vggtface_infer.py --BASE_PATHS {preprocessed_dir}
Example:
python vggtface_infer.py --BASE_PATHS ./preprocessed_data/example1
Once finished, you will find result.ply under the corresponding directory, which is the reconstructed mesh.
You can also reconstruct multiple multi-view sets sequentially in a single run (so VGGT weights are loaded only once). Provide multiple directories separated by commas:
python vggtface_infer.py --BASE_PATHS ./preprocessed_data/example1,./preprocessed_data/example2
- Title: VGGTFace: Topologically Consistent Facial Geometry Reconstruction in the Wild
- PDF / arXiv: https://arxiv.org/abs/2511.20366
If you use this work, please consider citing our paper.
Authors: Xin Ming, Yuxuan Han, Tianyu Huang, Feng Xu Affiliation: BNRist and School of Software, Tsinghua University
- The demo currently reloads some components per run, so inference may be slow. We are working on optimizing it.
This project is released under the MIT License (see LICENSE).
It depends on third-party projects (e.g., Pixel3DMM and VGGT) that are distributed under their own licenses.
Please make sure you comply with the corresponding upstream terms when using their code/models.
Questions, feedback, or collaboration ideas are welcome!
- Email: 1729406968@qq.com
- GitHub Issues: please open an issue on this repository.