• Stars
    star
    10,906
  • Rank 3,112 (Top 0.07 %)
  • Language
    Python
  • Created over 8 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

TensorFlow CNN for fast style transfer โšก๐Ÿ–ฅ๐ŸŽจ๐Ÿ–ผ

Fast Style Transfer in TensorFlow

Add styles from famous paintings to any photo in a fraction of a second! You can even style videos!

It takes 100ms on a 2015 Titan X to style the MIT Stata Center (1024ร—680) like Udnie, by Francis Picabia.

Our implementation is based off of a combination of Gatys' A Neural Algorithm of Artistic Style, Johnson's Perceptual Losses for Real-Time Style Transfer and Super-Resolution, and Ulyanov's Instance Normalization.

Sponsorship

Please consider sponsoring my work on this project!

License

Copyright (c) 2016 Logan Engstrom. Contact me for commercial use (or rather any use that is not academic research) (email: engstrom at my university's domain dot edu). Free for research use, as long as proper attribution is given and this copyright notice is retained.

Video Stylization

Here we transformed every frame in a video, then combined the results. Click to go to the full demo on YouTube! The style here is Udnie, as above.

See how to generate these videos here!

Image Stylization

We added styles from various paintings to a photo of Chicago. Click on thumbnails to see full applied style images.



Implementation Details

Our implementation uses TensorFlow to train a fast style transfer network. We use roughly the same transformation network as described in Johnson, except that batch normalization is replaced with Ulyanov's instance normalization, and the scaling/offset of the output tanh layer is slightly different. We use a loss function close to the one described in Gatys, using VGG19 instead of VGG16 and typically using "shallower" layers than in Johnson's implementation (e.g. we use relu1_1 rather than relu1_2). Empirically, this results in larger scale style features in transformations.

Virtual Environment Setup (Anaconda) - Windows/Linux

Tested on

Spec
Operating System Windows 10 Home
GPU Nvidia GTX 2080 TI
CUDA Version 11.0
Driver Version 445.75

Step 1๏ผšInstall Anaconda

https://docs.anaconda.com/anaconda/install/

Step 2๏ผšBuild a virtual environment

Run the following commands in sequence in Anaconda Prompt:

conda create -n tf-gpu tensorflow-gpu=2.1.0
conda activate tf-gpu
conda install jupyterlab
jupyter lab

Run the following command in the notebook or just conda install the package:

!pip install moviepy==1.0.2

Follow the commands below to use fast-style-transfer

Documentation

Training Style Transfer Networks

Use style.py to train a new style transfer network. Run python style.py to view all the possible parameters. Training takes 4-6 hours on a Maxwell Titan X. More detailed documentation here. Before you run this, you should run setup.sh. Example usage:

python style.py --style path/to/style/img.jpg \
  --checkpoint-dir checkpoint/path \
  --test path/to/test/img.jpg \
  --test-dir path/to/test/dir \
  --content-weight 1.5e1 \
  --checkpoint-iterations 1000 \
  --batch-size 20

Evaluating Style Transfer Networks

Use evaluate.py to evaluate a style transfer network. Run python evaluate.py to view all the possible parameters. Evaluation takes 100 ms per frame (when batch size is 1) on a Maxwell Titan X. More detailed documentation here. Takes several seconds per frame on a CPU. Models for evaluation are located here. Example usage:

python evaluate.py --checkpoint path/to/style/model.ckpt \
  --in-path dir/of/test/imgs/ \
  --out-path dir/for/results/

Stylizing Video

Use transform_video.py to transfer style into a video. Run python transform_video.py to view all the possible parameters. Requires ffmpeg. More detailed documentation here. Example usage:

python transform_video.py --in-path path/to/input/vid.mp4 \
  --checkpoint path/to/style/model.ckpt \
  --out-path out/video.mp4 \
  --device /gpu:0 \
  --batch-size 4

Requirements

You will need the following to run the above:

  • TensorFlow 0.11.0
  • Python 2.7.9, Pillow 3.4.2, scipy 0.18.1, numpy 1.11.2
  • If you want to train (and don't want to wait for 4 months):
    • A decent GPU
    • All the required NVIDIA software to run TF on a GPU (cuda, etc)
  • ffmpeg 3.1.3 if you want to stylize video

Citation

  @misc{engstrom2016faststyletransfer,
    author = {Logan Engstrom},
    title = {Fast Style Transfer},
    year = {2016},
    howpublished = {\url{https://github.com/lengstrom/fast-style-transfer/}},
    note = {commit xxxxxxx}
  }

Attributions/Thanks

  • This project could not have happened without the advice (and GPU access) given by Anish Athalye.
    • The project also borrowed some code from Anish's Neural Style
  • Some readme/docs formatting was borrowed from Justin Johnson's Fast Neural Style
  • The image of the Stata Center at the very beginning of the README was taken by Juan Paulo

Related Work

More Repositories

1

falcon

Chrome extension for full text history search!
JavaScript
1,825
star
2

gitlinks

gitlinks - Git Powered Go-Links! ๐Ÿ‘ดโ›“
Python
22
star
3

MathEvaluator

Evaluate mathematical expressions in selection regions inline (deprecated)
Python
21
star
4

tensorguard

Python
10
star
5

defensive-distillation

Python
7
star
6

Arduino-MARG

Arduino MARG/IMU fusion w/ Kalman filter: MPU9150 & arduino
Arduino
7
star
7

Radial

js13k 2014 game entry
JavaScript
6
star
8

trustee

Offline doc viewer
JavaScript
5
star
9

pyramidsimulator

3d model pyramids with the inner construction layers visible. Visit it here:
3
star
10

cifar.py

Python library for handling the CIFAR datasets
Python
3
star
11

htspb-i2c

Bit-banged I2C library for the HiTechnic SuperPro Prototype Board. Written in RobotC for use by FTC teams.
C++
2
star
12

princeofpersia

2
star
13

lunches

Python
2
star
14

youtube-caption-parser

Get captions from youtube page as array w timestamps and values
Python
2
star
15

github-scraping

Shell
2
star
16

AP-CS-Notes

AP CS notes for LS PC - notes for students who already know how to program
2
star
17

search_all_users

Python
1
star
18

go

HTML
1
star
19

ffffff

1
star
20

dl_gh_files

Python
1
star
21

matterjsdemo

JavaScript
1
star
22

bash-predict

Python
1
star
23

commandcount

Count commands + get suggestions for better efficiency
Python
1
star
24

PID-Control

Interactive article about PID control
1
star
25

motion-recognize

JavaScript
1
star
26

CaptionTime

Real time captions for YouTube videos
Python
1
star
27

yhack-cv

Python
1
star
28

lengstrom.github.io

Personal website
HTML
1
star
29

codezoo

A collaborative online IDE for beginner programmers
JavaScript
1
star
30

blog

logan's blog
HTML
1
star
31

particles

js particles library
JavaScript
1
star
32

arduino-quadcopter-controller

MakeMIT 2016
Arduino
1
star