1
0
Fork 0
mirror of synced 2024-05-08 23:12:23 +12:00
waifu2x/README.md

263 lines
8.1 KiB
Markdown
Raw Permalink Normal View History

2015-05-17 18:18:33 +12:00
# waifu2x
2015-12-05 02:31:49 +13:00
Image Super-Resolution for Anime-style art using Deep Convolutional Neural Networks.
2015-12-05 02:55:11 +13:00
And it supports photo.
2015-05-17 18:18:33 +12:00
2023-02-05 17:22:25 +13:00
The demo application can be found at https://waifu2x.udp.jp/ (Cloud version), https://unlimited.waifu2x.net/ (In-Browser version).
2015-05-17 18:18:33 +12:00
2023-02-05 17:22:25 +13:00
## 2023/02 PyTorch version
2022-11-25 19:41:45 +13:00
[nunif](https://github.com/nagadomi/nunif)
2023-02-05 17:22:25 +13:00
waifu2x development has already been moved to the repository above.
2022-11-25 19:41:45 +13:00
2015-05-17 18:18:33 +12:00
## Summary
Click to see the slide show.
![slide](https://raw.githubusercontent.com/nagadomi/waifu2x/master/images/slide.png)
## References
waifu2x is inspired by SRCNN [1]. 2D character picture (HatsuneMiku) is licensed under CC BY-NC by piapro [2].
- [1] Chao Dong, Chen Change Loy, Kaiming He, Xiaoou Tang, "Image Super-Resolution Using Deep Convolutional Networks", http://arxiv.org/abs/1501.00092
- [2] "For Creators", https://piapro.net/intl/en_for_creators.html
2015-05-19 11:14:08 +12:00
## Public AMI
2015-05-31 23:24:44 +12:00
2018-11-19 00:29:15 +13:00
TODO
2016-03-27 23:08:58 +13:00
2015-06-14 04:58:18 +12:00
## Third Party Software
2015-11-15 13:40:32 +13:00
2015-06-14 04:58:18 +12:00
[Third-Party](https://github.com/nagadomi/waifu2x/wiki/Third-Party)
2019-07-08 15:35:34 +12:00
If you are a windows user, I recommend you to use [waifu2x-caffe](https://github.com/lltcggie/waifu2x-caffe)(Just download from `releases` tab), [waifu2x-ncnn-vulkan](https://github.com/nihui/waifu2x-ncnn-vulkan) or [waifu2x-conver-cpp](https://github.com/DeadSix27/waifu2x-converter-cpp).
2015-05-17 18:18:33 +12:00
## Dependencies
2015-05-21 12:45:51 +12:00
### Hardware
- NVIDIA GPU
2015-05-21 12:45:51 +12:00
2015-05-17 18:18:33 +12:00
### Platform
2015-11-15 13:40:32 +13:00
2015-05-17 18:18:33 +12:00
- [Torch7](http://torch.ch/)
- [NVIDIA CUDA](https://developer.nvidia.com/cuda-toolkit)
2015-11-18 08:52:54 +13:00
### LuaRocks packages (excludes torch7's default packages)
2015-11-03 10:19:36 +13:00
- lua-csnappy
2015-05-17 18:18:33 +12:00
- md5
- uuid
2016-07-09 19:34:03 +12:00
- csvigo
- [turbo](https://github.com/kernelsauce/turbo)
2015-05-17 18:18:33 +12:00
2015-05-21 12:45:51 +12:00
## Installation
2015-05-21 12:49:59 +12:00
### Setting Up the Command Line Tool Environment
2018-11-19 00:29:15 +13:00
(on Ubuntu 16.04)
#### Install CUDA
2015-05-21 12:45:51 +12:00
See: [NVIDIA CUDA Getting Started Guide for Linux](http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/#ubuntu-installation)
Download [CUDA](http://developer.nvidia.com/cuda-downloads)
```
2015-11-15 13:40:32 +13:00
sudo dpkg -i cuda-repo-ubuntu1404_7.5-18_amd64.deb
sudo apt-get update
sudo apt-get install cuda
```
2015-05-21 12:45:51 +12:00
2015-11-03 10:19:36 +13:00
#### Install Package
2015-05-21 12:45:51 +12:00
```
2015-11-03 10:19:36 +13:00
sudo apt-get install libsnappy-dev
sudo apt-get install libgraphicsmagick1-dev
2018-11-19 00:29:15 +13:00
sudo apt-get install libssl1.0-dev # for web server
2015-05-21 12:45:51 +12:00
```
2018-04-28 20:49:22 +12:00
Note: waifu2x requires little-cms2 linked graphicsmagick. if you use macOS/homebrew, See [#174](https://github.com/nagadomi/waifu2x/issues/174#issuecomment-384466451).
2015-11-03 10:19:36 +13:00
#### Install Torch7
2015-05-21 12:45:51 +12:00
2019-11-21 20:21:30 +13:00
See: [Getting started with Torch](http://torch.ch/docs/getting-started.html).
- For CUDA9.x/CUDA8.x, see [#222](https://github.com/nagadomi/waifu2x/issues/222)
- For CUDA10.x, see [#253](https://github.com/nagadomi/waifu2x/issues/253#issuecomment-445448928)
2018-02-19 09:14:59 +13:00
2018-11-19 00:29:15 +13:00
#### Getting waifu2x
2016-07-15 01:21:04 +12:00
2015-05-21 12:45:51 +12:00
```
2018-11-19 00:29:15 +13:00
git clone --depth 1 https://github.com/nagadomi/waifu2x.git
2015-11-15 13:40:32 +13:00
```
2018-11-19 00:29:15 +13:00
and install lua modules.
2015-11-15 13:40:32 +13:00
```
2018-11-19 00:29:15 +13:00
cd waifu2x
./install_lua_modules.sh
2015-11-06 14:49:08 +13:00
```
2015-11-03 10:19:36 +13:00
#### Validation
2015-11-15 13:40:32 +13:00
Testing the waifu2x command line tool.
2015-11-03 10:19:36 +13:00
```
th waifu2x.lua
2015-05-21 12:45:51 +12:00
```
2015-05-19 11:14:08 +12:00
## Web Application
2015-05-17 18:18:33 +12:00
```
th web.lua
```
View at: http://localhost:8812/
## Command line tools
2019-01-12 13:32:25 +13:00
Notes: If you have cuDNN library, than you can use cuDNN with `-force_cudnn 1` option. cuDNN is too much faster than default kernel. If you got GPU out of memory error, you can avoid it with `-crop_size` option (e.g. `-crop_size 128`).
2015-05-17 18:18:33 +12:00
### Noise Reduction
```
th waifu2x.lua -m noise -noise_level 1 -i input_image.png -o output_image.png
```
```
2016-07-09 19:34:03 +12:00
th waifu2x.lua -m noise -noise_level 0 -i input_image.png -o output_image.png
2015-05-17 18:18:33 +12:00
th waifu2x.lua -m noise -noise_level 2 -i input_image.png -o output_image.png
2016-03-27 23:08:58 +13:00
th waifu2x.lua -m noise -noise_level 3 -i input_image.png -o output_image.png
2015-05-17 18:18:33 +12:00
```
### 2x Upscaling
```
th waifu2x.lua -m scale -i input_image.png -o output_image.png
```
### Noise Reduction + 2x Upscaling
```
th waifu2x.lua -m noise_scale -noise_level 1 -i input_image.png -o output_image.png
```
```
2016-07-09 19:34:03 +12:00
th waifu2x.lua -m noise_scale -noise_level 0 -i input_image.png -o output_image.png
2015-05-17 18:18:33 +12:00
th waifu2x.lua -m noise_scale -noise_level 2 -i input_image.png -o output_image.png
2016-03-27 23:08:58 +13:00
th waifu2x.lua -m noise_scale -noise_level 3 -i input_image.png -o output_image.png
2015-05-17 18:18:33 +12:00
```
2016-03-21 20:12:29 +13:00
### Batch conversion
```
find /path/to/imagedir -name "*.png" -o -name "*.jpg" > image_list.txt
th waifu2x.lua -m scale -l ./image_list.txt -o /path/to/outputdir/prefix_%d.png
```
2016-07-26 22:28:54 +12:00
The output format supports `%s` and `%d`(e.g. %06d). `%s` will be replaced the basename of the source filename. `%d` will be replaced a sequence number.
For example, when input filename is `piyo.png`, `%s_%03d.png` will be replaced `piyo_001.png`.
2015-11-15 13:40:32 +13:00
See also `th waifu2x.lua -h`.
2015-05-17 18:18:33 +12:00
2015-12-05 02:31:49 +13:00
### Using photo model
Please add `-model_dir models/photo` to command line option, if you want to use photo model.
For example,
```
th waifu2x.lua -model_dir models/photo -m scale -i input_image.png -o output_image.png
```
2015-05-25 01:09:42 +12:00
### Video Encoding
2015-11-15 13:40:32 +13:00
\* `avconv` is alias of `ffmpeg` on Ubuntu 14.04.
2015-05-25 01:09:42 +12:00
Extracting images and audio from a video. (range: 00:09:00 ~ 00:12:00)
```
mkdir frames
avconv -i data/raw.avi -ss 00:09:00 -t 00:03:00 -r 24 -f image2 frames/%06d.png
avconv -i data/raw.avi -ss 00:09:00 -t 00:03:00 audio.mp3
```
Generating a image list.
```
find ./frames -name "*.png" |sort > data/frame.txt
```
waifu2x (for example, noise reduction)
```
mkdir new_frames
2015-05-26 03:48:38 +12:00
th waifu2x.lua -m noise -noise_level 1 -resume 1 -l data/frame.txt -o new_frames/%d.png
2015-05-25 01:09:42 +12:00
```
Generating a video from waifu2xed images and audio.
```
avconv -f image2 -framerate 24 -i new_frames/%d.png -i audio.mp3 -r 24 -vcodec libx264 -crf 16 video.mp4
2015-05-25 01:09:42 +12:00
```
2016-03-21 20:12:29 +13:00
## Train Your Own Model
2016-07-27 08:47:03 +12:00
Note1: If you have cuDNN library, you can use cudnn kernel with `-backend cudnn` option. And, you can convert trained cudnn model to cunn model with `tools/rebuild.lua`.
2016-07-27 08:48:07 +12:00
2018-12-20 20:26:07 +13:00
Note2: The command that was used to train for waifu2x's pretrained models is available at `appendix/train_upconv_7_art.sh`, `appendix/train_upconv_7_photo.sh`. Maybe it is helpful.
2015-05-17 18:18:33 +12:00
### Data Preparation
Genrating a file list.
```
find /path/to/image/dir -name "*.png" > data/image_list.txt
```
2015-11-15 13:40:32 +13:00
You should use noise free images. In my case, waifu2x is trained with 6000 high-resolution-noise-free-PNG images.
2015-05-17 18:18:33 +12:00
Converting training data.
```
th convert_data.lua
```
2016-03-21 20:12:29 +13:00
### Train a Noise Reduction(level1) model
2015-05-17 18:18:33 +12:00
```
mkdir models/my_model
th train.lua -model_dir models/my_model -method noise -noise_level 1 -test images/miku_noisy.png
# usage
th waifu2x.lua -model_dir models/my_model -m noise -noise_level 1 -i images/miku_noisy.png -o output.png
2015-05-17 18:18:33 +12:00
```
You can check the performance of model with `models/my_model/noise1_best.png`.
2015-05-17 18:18:33 +12:00
2016-03-21 20:12:29 +13:00
### Train a Noise Reduction(level2) model
2015-05-17 18:18:33 +12:00
```
th train.lua -model_dir models/my_model -method noise -noise_level 2 -test images/miku_noisy.png
# usage
th waifu2x.lua -model_dir models/my_model -m noise -noise_level 2 -i images/miku_noisy.png -o output.png
2015-05-17 18:18:33 +12:00
```
You can check the performance of model with `models/my_model/noise2_best.png`.
2015-05-17 18:18:33 +12:00
2016-03-21 20:12:29 +13:00
### Train a 2x UpScaling model
2015-05-17 18:18:33 +12:00
```
2016-07-09 19:34:03 +12:00
th train.lua -model upconv_7 -model_dir models/my_model -method scale -scale 2 -test images/miku_small.png
# usage
th waifu2x.lua -model_dir models/my_model -m scale -scale 2 -i images/miku_small.png -o output.png
2015-05-17 18:18:33 +12:00
```
You can check the performance of model with `models/my_model/scale2.0x_best.png`.
2016-07-09 19:34:03 +12:00
### Train a 2x and noise reduction fusion model
```
th train.lua -model upconv_7 -model_dir models/my_model -method noise_scale -scale 2 -noise_level 1 -test images/miku_small.png
# usage
th waifu2x.lua -model_dir models/my_model -m noise_scale -scale 2 -noise_level 1 -i images/miku_small.png -o output.png
```
You can check the performance of model with `models/my_model/noise1_scale2.0x_best.png`.
2016-09-02 04:23:55 +12:00
## Docker
2019-03-16 23:35:58 +13:00
( Docker image is available at https://hub.docker.com/r/nagadomi/waifu2x )
Requires [nvidia-docker](https://github.com/NVIDIA/nvidia-docker).
2016-09-02 04:23:55 +12:00
```
docker build -t waifu2x .
docker run --gpus all -p 8812:8812 waifu2x th web.lua
docker run --gpus all -v `pwd`/images:/images waifu2x th waifu2x.lua -force_cudnn 1 -m scale -scale 2 -i /images/miku_small.png -o /images/output.png
2016-09-02 04:23:55 +12:00
```
2016-09-02 22:58:20 +12:00
Note that running waifu2x in without [JIT caching](https://devblogs.nvidia.com/parallelforall/cuda-pro-tip-understand-fat-binaries-jit-caching/) is very slow, which is what would happen if you use docker.
For a workaround, you can mount a host volume to the `CUDA_CACHE_PATH`, for instance,
```
docker run --gpus all -v $PWD/ComputeCache:/root/.nv/ComputeCache waifu2x th waifu2x.lua --help
2016-09-02 22:58:20 +12:00
```