# style-swap
**Repository Path**: ai_interface/style-swap
## Basic Information
- **Project Name**: style-swap
- **Description**: code for "Fast Patch-based Style Transfer of Arbitrary Style".
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2023-03-10
- **Last Updated**: 2023-03-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Fast Patch-based Style Transfer of Arbitrary Style
Paper: https://arxiv.org/abs/1612.04337
Code is written in Torch. CUDA and CPU modes are available.
## Examples
(3x3 Patches) Content - w/ Starry Night - w/ Small Worlds I
with AvgPooling - using Inverse Network - using Inverse Network
(w/ Composition X) Original - 5x5 Patch - 9x9 Patch - 15x15 Patch
(w/ La Muse) Original - 3x3 Patch - 5x5 Patch - 9x9 Patch
## Download Pretrained VGG-19
```
git clone https://github.com/rtqichen/style-swap
cd style-swap/models
sh download_models.sh
cd ..
```
## Usage
Stylizing a single image:
```
th style-swap.lua --content images/content/bike.jpg --style images/style/starry_night.jpg
```
More options:
```
th style-swap.lua --help
```
eg. increase `--patchSize` for more abstract stylization
```
th style-swap.lua --content images/content/brad_pitt.jpg --style images/style/la_muse.jpg --patchSize 7 --patchStride 3
```
eg. use `--contentBatch` to stylize all images in a directory.
```
th style-swap.lua --contentBatch images/content --style images/style/starry_night.jpg
```
### Training an inverse network
Install nninit module:
```
luarocks install nninit
```
Train:
```
th train-vgg-decoder.lua --contentDir /path/to/dir --styleDir /path/to/dir
```
More options:
```
th train-vgg-decoder.lua --help
```
For training the network in our paper, we used images from [MS COCO](http://mscoco.org/) and the [Painter by Numbers](https://www.kaggle.com/c/painter-by-numbers) competition hosted by Kaggle. A trained network can be downloaded [here](https://www.dropbox.com/s/633jjokod67yi1j/dec-tconv-sigmoid.t7?dl=1).
### Video
Frame-by-frame stylization can be done using the `-contentBatch` option.
An example script using `ffmpeg` to extract frames, stylize, and re-encode a video.
```
mkdir video_frames
ffmpeg -i /path/to/video -qscale:v 2 video_frames/video_%04d.jpg
th style-swap --contentBatch video_frames --style /path/to/style/file --save stylized_frames
ffmpeg -i stylized_frames/video_%04d_stylized.jpg -c:v libx264 -pix_fmt yuv420p stylized_video.mp4
```
Examples of stylized videos are placed in the videos folder. (Original video by [TimeLapseHD](https://www.youtube.com/watch?v=_xMz2SnSWS4).)
## Reducing GPU Memory Usage
A few ways to reduce memory usage for `style-swap.lua`:
- Decrease `--maxStyleSize` and `--maxContentSize`. The latter changes the size of the resulting image.
- Increase `--patchStride`. This extracts less patches to use for style swap. Best to use a larger `--patchSize` to ensure the patches still overlap.
- Last resort: use CPU-only mode by specifying `--cpu`.