Awesome
<p align="center"> <img src="./pics/first_view.png" width="36%"> <img src="./pics/slide.png" width="54%"> </p> <p align="center"> <img src="./pics/style.jpg" width="92%"> </p> <h1 align="center"> <a href="https://ieeexplore.ieee.org/document/8718508?source=authoralert">AttGAN</a> </h1><a href="https://ieeexplore.ieee.org/document/8718508?source=authoralert"><img src="https://img.shields.io/badge/TIP 2019-3A98B9?label=%F0%9F%93%9D&labelColor=FFFDD0" style="height: 28px" /></a> <a href="https://arxiv.org/pdf/1711.10678v1.pdf"><img src="https://img.shields.io/badge/arXiv%202017-B31B1B?label=%F0%9F%93%9D&labelColor=FFFDD0" style="height: 28px" /></a>
<p align="center"> <img src="./pics/schema.jpg" width="100%"> </p>AttGAN: Facial Attribute Editing by Only Changing What You Want
Zhenliang He<sup>1,2</sup>, Wangmeng Zuo<sup>4</sup>, Meina Kan<sup>1</sup>, Shiguang Shan<sup>1,3</sup>, Xilin Chen<sup>1</sup>
<sup>1</sup>Key Lab of Intelligent Information Processing, Institute of Computing Technology, CAS, China
<sup>2</sup>University of Chinese Academy of Sciences, China
<sup>3</sup>CAS Center for Excellence in Brain Science and Intelligence Technology, China
<sup>3</sup>School of Computer Science and Technology, Harbin Institute of Technology, China
Related
-
Other implementations of AttGAN
-
AttGAN-PyTorch by Yu-Jing Lin
-
AttGAN-PaddlePaddle by ceci3 and zhumanyu (AttGAN is one of the official reproduced models of PaddlePaddle)
-
-
Closely related works
-
An excellent work built upon our code - STGAN (CVPR 2019) by Ming Liu
-
Changing-the-Memorability (CVPR 2019 MBCCV Workshop) by acecreamu
-
Fashion-AttGAN (CVPR 2019 FSS-USAD Workshop) by Qing Ping
-
-
An unofficial demo video of AttGAN by 王一凡
Exemplar Results
-
See results.md for more results, we try higher resolution and more attributes (all 40 attributes!!!)
-
Inverting 13 attributes respectively
from left to right: Input, Reconstruction, Bald, Bangs, Black_Hair, Blond_Hair, Brown_Hair, Bushy_Eyebrows, Eyeglasses, Male, Mouth_Slightly_Open, Mustache, No_Beard, Pale_Skin, Young
<img src="./pics/sample_validation.jpg" width="95%">
Usage
-
Environment
-
Python 3.6
-
TensorFlow 1.15
-
OpenCV, scikit-image, tqdm, oyaml
-
we recommend Anaconda or Miniconda, then you can create the AttGAN environment with commands below
conda create -n AttGAN python=3.6 source activate AttGAN conda install opencv scikit-image tqdm tensorflow-gpu=1.15 conda install -c conda-forge oyaml
-
NOTICE: if you create a new conda environment, remember to activate it before any other command
source activate AttGAN
-
-
Data Preparation
-
Option 1: CelebA-unaligned (higher quality than the aligned data, 10.2GB)
-
download the dataset
-
img_celeba.7z (move to ./data/img_celeba/img_celeba.7z): Google Drive or Baidu Netdisk (password rp0s)
-
annotations.zip (move to ./data/img_celeba/annotations.zip): Google Drive
-
-
unzip and process the data
7z x ./data/img_celeba/img_celeba.7z/img_celeba.7z.001 -o./data/img_celeba/ unzip ./data/img_celeba/annotations.zip -d ./data/img_celeba/ python ./scripts/align.py
-
-
Option 2: CelebA-HQ (we use the data from CelebAMask-HQ, 3.2GB)
-
CelebAMask-HQ.zip (move to ./data/CelebAMask-HQ.zip): Google Drive or Baidu Netdisk
-
unzip and process the data
unzip ./data/CelebAMask-HQ.zip -d ./data/ python ./scripts/split_CelebA-HQ.py
-
-
-
Run AttGAN
-
training (see examples.md for more training commands)
\\ for CelebA CUDA_VISIBLE_DEVICES=0 \ python train.py \ --load_size 143 \ --crop_size 128 \ --model model_128 \ --experiment_name AttGAN_128 \\ for CelebA-HQ CUDA_VISIBLE_DEVICES=0 \ python train.py \ --img_dir ./data/CelebAMask-HQ/CelebA-HQ-img \ --train_label_path ./data/CelebAMask-HQ/train_label.txt \ --val_label_path ./data/CelebAMask-HQ/val_label.txt \ --load_size 128 \ --crop_size 128 \ --n_epochs 200 \ --epoch_start_decay 100 \ --model model_128 \ --experiment_name AttGAN_128_CelebA-HQ
-
testing
-
single attribute editing (inversion)
\\ for CelebA CUDA_VISIBLE_DEVICES=0 \ python test.py \ --experiment_name AttGAN_128 \\ for CelebA-HQ CUDA_VISIBLE_DEVICES=0 \ python test.py \ --img_dir ./data/CelebAMask-HQ/CelebA-HQ-img \ --test_label_path ./data/CelebAMask-HQ/test_label.txt \ --experiment_name AttGAN_128_CelebA-HQ
-
multiple attribute editing (inversion) example
\\ for CelebA CUDA_VISIBLE_DEVICES=0 \ python test_multi.py \ --test_att_names Bushy_Eyebrows Pale_Skin \ --experiment_name AttGAN_128
-
attribute sliding example
\\ for CelebA CUDA_VISIBLE_DEVICES=0 \ python test_slide.py \ --test_att_name Pale_Skin \ --test_int_min -2 \ --test_int_max 2 \ --test_int_step 0.5 \ --experiment_name AttGAN_128
-
-
loss visualization
CUDA_VISIBLE_DEVICES='' \ tensorboard \ --logdir ./output/AttGAN_128/summaries \ --port 6006
-
convert trained model to .pb file
python to_pb.py --experiment_name AttGAN_128
-
-
Using Trained Weights
-
alternative trained weights (move to ./output/*.zip)
-
AttGAN_128.zip (987.5MB)
- including G, D, and the state of the optimizer
-
AttGAN_128_generator_only.zip (161.5MB)
- G only
-
AttGAN_384_generator_only.zip (91.1MB)
-
-
unzip the file (AttGAN_128.zip for example)
unzip ./output/AttGAN_128.zip -d ./output/
-
testing (see above)
-
-
Example for Custom Dataset
Citation
If you find AttGAN useful in your research work, please consider citing:
@ARTICLE{8718508,
author={Z. {He} and W. {Zuo} and M. {Kan} and S. {Shan} and X. {Chen}},
journal={IEEE Transactions on Image Processing},
title={AttGAN: Facial Attribute Editing by Only Changing What You Want},
year={2019},
volume={28},
number={11},
pages={5464-5478},
keywords={Face;Facial features;Task analysis;Decoding;Image reconstruction;Hair;Gallium nitride;Facial attribute editing;attribute style manipulation;adversarial learning},
doi={10.1109/TIP.2019.2916751},
ISSN={1057-7149},
month={Nov},}