Figure: Scene manipulation from different abstract levels: including layout, categorical object, and scene attributes.
Semantic Hierarchy Emerges in Deep Generative Representations for Scene Synthesis
Ceyuan Yang*, Yujun Shen*, Bolei Zhou
International Journal of Computer Vision (IJCV) 2020
In this repository, we propose an effective framework, termed as HiGAN, to interpret the semantics learned by GANs for scene synthesis. It turns out that GAN models, which employ layer-wise latent codes, spontaneously encode the semantics from different abstract levels in the latent space in a hierarchical manner. Identifying the most relevant variation factors significantly facilitates scene manipulation.
[Paper] [Project Page] [Demo] [Colab-Church] [Colab-Bedroom]
A simple example of mainpulting "indoor lighting" of bedroom:
python simple_manipulate.py stylegan_bedroom indoor_lighting
You will get the manipulation results at manipulation_results/stylegan_bedroom_indoor_lighting.html
which looks like following. Images can be directly downloaded from the html page.
User can also customize their own manipulation tool with script manipulate.py
. First, a boundary list is required. See the sample below:
(indoor_lighting, w): boundaries/stylegan_bedroom/indoor_lighting_boundary.npy
(wood, w): boundaries/stylegan_bedroom/wood_boundary.npy
Execute the following command for manipulation:
LAYERS=6-11
python manipulate.py $MODEL_NAME $BOUNDARY_LIST \
--num=10 \
--layerwise_manipulation \
--manipulate_layers=$LAYERS \
--generate_html
Pre-trained GAN models: GAN Models.
Pre-trained predictors: Predictors.
MODEL_NAME=stylegan_bedroom
OUTPUT_DIR=stylegan_bedroom
python synthesize.py $MODEL_NAME \
--output_dir=$OUTPUT_DIR \
--num=500000 \
--generate_prediction \
--logfile_name=synthesis.log
BOUNDARY_NAME=indoor_lighting
python train_boundary.py $OUTPUT_DIR/w.npy $OUTPUT_DIR/attribute.npy \
--score_name=$BOUNDARY_NAME \
--output_dir=$OUTPUT_DIR \
--logfile_name=${BOUNDARY_NAME}_training.log
Use following command to conduct the layer-wise analaysis and identify relevant semantics:
BOUNDARY_LIST=stylegan_bedroom/boundary_list.txt
python rescore.py $MODEL_NAME $BOUNDARY_LIST \
--output_dir $OUTPUT_DIR \
--layerwise_rescoring \
--logfile_name=rescore.log
@article{yang2019semantic,
title = {Semantic hierarchy emerges in deep generative representations for scene synthesis},
author = {Yang, Ceyuan and Shen, Yujun and Zhou, Bolei},
journal = {IJCV},
year = {2020}
}