Awesome
chainer-dfi
Implementation of "Deep Feature Interpolation for Image Content Changes"(https://arxiv.org/abs/1611.05507) using Chainer.
Requirements
- Python 2.7
- Chainer 2.0.0
- Cupy 1.0.0
- Pillow 3.1.0
Usage
Download Caffe model and convert
Download Caffe VGG-19 layer model
Download VGG_ILSVRC_19_layers.caffemodel from https://gist.github.com/ksimonyan/3785162f95cd2d5fee77.
Convert Caffe model to Chainer model.
$ python src/create_chainer_model.py
To use Labeled Faces in the Wild (LFW)
Download dataset
- Download "All images aligned with deep funneling"(lfw-deepfunneled.tgz) from LFW web site
- Download "LFW attributes file"(lfw_attributes.txt) from the same site.
- Extract tgz file.
Interpolate feature
Example:
python src/train_lfw.py lfw-deepfunneled lfw_attributes.txt "Silvio Berlusconi" 23 smiling image/lfw_out.jpg -g 0
Output example
person name: "Silvio Berlusconi"
image number: 23
Feature: smiling
Original | Weight: 0.1 | Weight: 0.2 | Weight: 0.3 | Weight: 0.4 | Weight: 0.5 |
---|---|---|---|---|---|
Feature: senior
Original | Weight: 0.1 | Weight: 0.2 | Weight: 0.3 | Weight: 0.4 | Weight: 0.5 |
---|---|---|---|---|---|
To use Large-scale CelebFaces Attributes (CelebA) Dataset
Download dataset
- Download img_align_celeba.zip and list_attr_celeba.txt from CelebA Dataset web site.
- Extract zip file.
Make image list for source and target images
Example:
$ python src/extract_image.py img_align_celeba list_attr_celeba.txt image_normal.txt image_smile.txt smiling young,bags_under_eyes -e eyeglasses,male,pale_skin,narrow_eyes,bushy_eyebrows,chubby,double_chin,bald,bangs,receding_hairline,sideburns,wavy_hair,blond_hair,gray_hair,mouth_slightly_open
Interpolate feature
Example:
$ python src/train.py sample/sample.png image/out/out.png image_normal.txt image_smile.txt -g 0 -c 19,39,159,179
Output example
Feature: smiling
Original | Weight: 0.1 | Weight: 0.2 |
---|---|---|
Weight: 0.3 | Weight: 0.4 | Weight: 0.5 |
---|---|---|
Difference from the original implementation
- feature φ(x) is not normalized.
- attribute vector w is normalized by w -> ||φ(x)|| * w / ||w|| (||w|| means L2 norm)
License
MIT License