Upload Training.md
Browse files- Training.md +100 -0
Training.md
ADDED
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# :computer: How to Train Real-ESRGAN
|
2 |
+
|
3 |
+
The training codes have been released. <br>
|
4 |
+
Note that the codes have a lot of refactoring. So there may be some bugs/performance drops. Welcome to report issues and I will also retrain the models.
|
5 |
+
|
6 |
+
## Overview
|
7 |
+
|
8 |
+
The training has been divided into two stages. These two stages have the same data synthesis process and training pipeline, except for the loss functions. Specifically,
|
9 |
+
|
10 |
+
1. We first train Real-ESRNet with L1 loss from the pre-trained model ESRGAN.
|
11 |
+
1. We then use the trained Real-ESRNet model as an initialization of the generator, and train the Real-ESRGAN with a combination of L1 loss, perceptual loss and GAN loss.
|
12 |
+
|
13 |
+
## Dataset Preparation
|
14 |
+
|
15 |
+
We use DF2K (DIV2K and Flickr2K) + OST datasets for our training. Only HR images are required. <br>
|
16 |
+
You can download from :
|
17 |
+
|
18 |
+
1. DIV2K: http://data.vision.ee.ethz.ch/cvl/DIV2K/DIV2K_train_HR.zip
|
19 |
+
2. Flickr2K: https://cv.snu.ac.kr/research/EDSR/Flickr2K.tar
|
20 |
+
3. OST: https://openmmlab.oss-cn-hangzhou.aliyuncs.com/datasets/OST_dataset.zip
|
21 |
+
|
22 |
+
For the DF2K dataset, we use a multi-scale strategy, *i.e.*, we downsample HR images to obtain several Ground-Truth images with different scales.
|
23 |
+
|
24 |
+
We then crop DF2K images into sub-images for faster IO and processing.
|
25 |
+
|
26 |
+
You need to prepare a txt file containing the image paths. The following are some examples in `meta_info_DF2Kmultiscale+OST_sub.txt` (As different users may have different sub-images partitions, this file is not suitable for your purpose and you need to prepare your own txt file):
|
27 |
+
|
28 |
+
```txt
|
29 |
+
DF2K_HR_sub/000001_s001.png
|
30 |
+
DF2K_HR_sub/000001_s002.png
|
31 |
+
DF2K_HR_sub/000001_s003.png
|
32 |
+
...
|
33 |
+
```
|
34 |
+
|
35 |
+
## Train Real-ESRNet
|
36 |
+
|
37 |
+
1. Download pre-trained model [ESRGAN](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.1/ESRGAN_SRx4_DF2KOST_official-ff704c30.pth) into `experiments/pretrained_models`.
|
38 |
+
```bash
|
39 |
+
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.1/ESRGAN_SRx4_DF2KOST_official-ff704c30.pth -P experiments/pretrained_models
|
40 |
+
```
|
41 |
+
1. Modify the content in the option file `options/train_realesrnet_x4plus.yml` accordingly:
|
42 |
+
```yml
|
43 |
+
train:
|
44 |
+
name: DF2K+OST
|
45 |
+
type: RealESRGANDataset
|
46 |
+
dataroot_gt: datasets/DF2K # modify to the root path of your folder
|
47 |
+
meta_info: realesrgan/meta_info/meta_info_DF2Kmultiscale+OST_sub.txt # modify to your own generate meta info txt
|
48 |
+
io_backend:
|
49 |
+
type: disk
|
50 |
+
```
|
51 |
+
1. If you want to perform validation during training, uncomment those lines and modify accordingly:
|
52 |
+
```yml
|
53 |
+
# Uncomment these for validation
|
54 |
+
# val:
|
55 |
+
# name: validation
|
56 |
+
# type: PairedImageDataset
|
57 |
+
# dataroot_gt: path_to_gt
|
58 |
+
# dataroot_lq: path_to_lq
|
59 |
+
# io_backend:
|
60 |
+
# type: disk
|
61 |
+
|
62 |
+
...
|
63 |
+
|
64 |
+
# Uncomment these for validation
|
65 |
+
# validation settings
|
66 |
+
# val:
|
67 |
+
# val_freq: !!float 5e3
|
68 |
+
# save_img: True
|
69 |
+
|
70 |
+
# metrics:
|
71 |
+
# psnr: # metric name, can be arbitrary
|
72 |
+
# type: calculate_psnr
|
73 |
+
# crop_border: 4
|
74 |
+
# test_y_channel: false
|
75 |
+
```
|
76 |
+
1. Before the formal training, you may run in the `--debug` mode to see whether everything is OK. We use four GPUs for training:
|
77 |
+
```bash
|
78 |
+
CUDA_VISIBLE_DEVICES=0,1,2,3 \
|
79 |
+
python -m torch.distributed.launch --nproc_per_node=4 --master_port=4321 realesrgan/train.py -opt options/train_realesrnet_x4plus.yml --launcher pytorch --debug
|
80 |
+
```
|
81 |
+
1. The formal training. We use four GPUs for training. We use the `--auto_resume` argument to automatically resume the training if necessary.
|
82 |
+
```bash
|
83 |
+
CUDA_VISIBLE_DEVICES=0,1,2,3 \
|
84 |
+
python -m torch.distributed.launch --nproc_per_node=4 --master_port=4321 realesrgan/train.py -opt options/train_realesrnet_x4plus.yml --launcher pytorch --auto_resume
|
85 |
+
```
|
86 |
+
|
87 |
+
## Train Real-ESRGAN
|
88 |
+
|
89 |
+
1. After the training of Real-ESRNet, you now have the file `experiments/train_RealESRNetx4plus_1000k_B12G4_fromESRGAN/model/net_g_1000000.pth`. If you need to specify the pre-trained path to other files, modify the `pretrain_network_g` value in the option file `train_realesrgan_x4plus.yml`.
|
90 |
+
1. Modify the option file `train_realesrgan_x4plus.yml` accordingly. Most modifications are similar to those listed above.
|
91 |
+
1. Before the formal training, you may run in the `--debug` mode to see whether everything is OK. We use four GPUs for training:
|
92 |
+
```bash
|
93 |
+
CUDA_VISIBLE_DEVICES=0,1,2,3 \
|
94 |
+
python -m torch.distributed.launch --nproc_per_node=4 --master_port=4321 realesrgan/train.py -opt options/train_realesrgan_x4plus.yml --launcher pytorch --debug
|
95 |
+
```
|
96 |
+
1. The formal training. We use four GPUs for training. We use the `--auto_resume` argument to automatically resume the training if necessary.
|
97 |
+
```bash
|
98 |
+
CUDA_VISIBLE_DEVICES=0,1,2,3 \
|
99 |
+
python -m torch.distributed.launch --nproc_per_node=4 --master_port=4321 realesrgan/train.py -opt options/train_realesrgan_x4plus.yml --launcher pytorch --auto_resume
|
100 |
+
```
|