Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a4abfb2979 | ||
|
|
5ca1078535 | ||
|
|
fa4c8a03ae | ||
|
|
37a7c5726d | ||
|
|
382d5be582 | ||
|
|
61e81d3108 | ||
|
|
8f5744bc51 | ||
|
|
d9c2e77853 | ||
|
|
0ac8d66d39 | ||
|
|
89aa45c72d |
33
.github/workflows/no-response.yml
vendored
33
.github/workflows/no-response.yml
vendored
@@ -1,33 +0,0 @@
|
|||||||
name: No Response
|
|
||||||
|
|
||||||
# TODO: it seems not to work
|
|
||||||
# Modified from: https://raw.githubusercontent.com/github/docs/main/.github/workflows/no-response.yaml
|
|
||||||
|
|
||||||
# **What it does**: Closes issues that don't have enough information to be actionable.
|
|
||||||
# **Why we have it**: To remove the need for maintainers to remember to check back on issues periodically
|
|
||||||
# to see if contributors have responded.
|
|
||||||
# **Who does it impact**: Everyone that works on docs or docs-internal.
|
|
||||||
|
|
||||||
on:
|
|
||||||
issue_comment:
|
|
||||||
types: [created]
|
|
||||||
|
|
||||||
schedule:
|
|
||||||
# Schedule for five minutes after the hour every hour
|
|
||||||
- cron: '5 * * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
noResponse:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: lee-dohm/no-response@v0.5.0
|
|
||||||
with:
|
|
||||||
token: ${{ github.token }}
|
|
||||||
closeComment: >
|
|
||||||
This issue has been automatically closed because there has been no response
|
|
||||||
to our request for more information from the original author. With only the
|
|
||||||
information that is currently in the issue, we don't have enough information
|
|
||||||
to take action. Please reach out if you have or find the answers we need so
|
|
||||||
that we can investigate further.
|
|
||||||
If you still have questions, please improve your description and re-open it.
|
|
||||||
Thanks :-)
|
|
||||||
41
.github/workflows/release.yml
vendored
Normal file
41
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
name: release
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- '*'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
permissions: write-all
|
||||||
|
name: Create Release
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Create Release
|
||||||
|
id: create_release
|
||||||
|
uses: actions/create-release@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
tag_name: ${{ github.ref }}
|
||||||
|
release_name: Real-ESRGAN ${{ github.ref }} Release Note
|
||||||
|
body: |
|
||||||
|
🚀 See you again 😸
|
||||||
|
🚀Have a nice day 😸 and happy everyday 😃
|
||||||
|
🚀 Long time no see ☄️
|
||||||
|
|
||||||
|
✨ **Highlights**
|
||||||
|
✅ [Features] Support ...
|
||||||
|
|
||||||
|
🐛 **Bug Fixes**
|
||||||
|
|
||||||
|
🌴 **Improvements**
|
||||||
|
|
||||||
|
📢📢📢
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="https://raw.githubusercontent.com/xinntao/Real-ESRGAN/master/assets/realesrgan_logo.png" height=150>
|
||||||
|
</p>
|
||||||
|
draft: true
|
||||||
|
prerelease: false
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -5,7 +5,7 @@ results/*
|
|||||||
tb_logger/*
|
tb_logger/*
|
||||||
wandb/*
|
wandb/*
|
||||||
tmp/*
|
tmp/*
|
||||||
realesrgan/weights/*
|
weights/*
|
||||||
|
|
||||||
version.py
|
version.py
|
||||||
|
|
||||||
|
|||||||
@@ -5,4 +5,4 @@ include inference_realesrgan.py
|
|||||||
include VERSION
|
include VERSION
|
||||||
include LICENSE
|
include LICENSE
|
||||||
include requirements.txt
|
include requirements.txt
|
||||||
include realesrgan/weights/README.md
|
include weights/README.md
|
||||||
|
|||||||
12
README.md
12
README.md
@@ -22,10 +22,10 @@
|
|||||||
🔥 **RealESRGAN_x4plus_anime_6B** for anime images **(动漫插图模型)**. Please see [[*anime_model*](docs/anime_model.md)]
|
🔥 **RealESRGAN_x4plus_anime_6B** for anime images **(动漫插图模型)**. Please see [[*anime_model*](docs/anime_model.md)]
|
||||||
|
|
||||||
<!-- 1. You can try in our website: [ARC Demo](https://arc.tencent.com/en/ai-demos/imgRestore) (now only support RealESRGAN_x4plus_anime_6B) -->
|
<!-- 1. You can try in our website: [ARC Demo](https://arc.tencent.com/en/ai-demos/imgRestore) (now only support RealESRGAN_x4plus_anime_6B) -->
|
||||||
1. :boom: **Add** online demo: [](https://replicate.com/xinntao/realesrgan).
|
1. :boom: **Update** online Replicate demo: [](https://replicate.com/xinntao/realesrgan)
|
||||||
1. [Colab Demo](https://colab.research.google.com/drive/1k2Zod6kSHEvraybHl50Lys0LerhyTMCo?usp=sharing) for Real-ESRGAN **|** [Colab Demo](https://colab.research.google.com/drive/1yNl9ORUxxlL4N0keJa2SEPB61imPQd1B?usp=sharing) for Real-ESRGAN (**anime videos**)
|
1. Online Colab demo for Real-ESRGAN: [](https://colab.research.google.com/drive/1k2Zod6kSHEvraybHl50Lys0LerhyTMCo?usp=sharing) **|** Online Colab demo for for Real-ESRGAN (**anime videos**): [](https://colab.research.google.com/drive/1yNl9ORUxxlL4N0keJa2SEPB61imPQd1B?usp=sharing)
|
||||||
1. Portable [Windows](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesrgan-ncnn-vulkan-20220424-windows.zip) / [Linux](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesrgan-ncnn-vulkan-20220424-ubuntu.zip) / [MacOS](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesrgan-ncnn-vulkan-20220424-macos.zip) **executable files for Intel/AMD/Nvidia GPU**. You can find more information [here](#portable-executable-files-ncnn). The ncnn implementation is in [Real-ESRGAN-ncnn-vulkan](https://github.com/xinntao/Real-ESRGAN-ncnn-vulkan)
|
1. Portable [Windows](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesrgan-ncnn-vulkan-20220424-windows.zip) / [Linux](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesrgan-ncnn-vulkan-20220424-ubuntu.zip) / [MacOS](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesrgan-ncnn-vulkan-20220424-macos.zip) **executable files for Intel/AMD/Nvidia GPU**. You can find more information [here](#portable-executable-files-ncnn). The ncnn implementation is in [Real-ESRGAN-ncnn-vulkan](https://github.com/xinntao/Real-ESRGAN-ncnn-vulkan)
|
||||||
1. You can watch enhanced animations in [Tencent Video](https://v.qq.com/s/topic/v_child/render/fC4iyCAM.html). 欢迎观看[腾讯视频动漫修复](https://v.qq.com/s/topic/v_child/render/fC4iyCAM.html)
|
<!-- 1. You can watch enhanced animations in [Tencent Video](https://v.qq.com/s/topic/v_child/render/fC4iyCAM.html). 欢迎观看[腾讯视频动漫修复](https://v.qq.com/s/topic/v_child/render/fC4iyCAM.html) -->
|
||||||
|
|
||||||
Real-ESRGAN aims at developing **Practical Algorithms for General Image/Video Restoration**.<br>
|
Real-ESRGAN aims at developing **Practical Algorithms for General Image/Video Restoration**.<br>
|
||||||
We extend the powerful ESRGAN to a practical restoration application (namely, Real-ESRGAN), which is trained with pure synthetic data.
|
We extend the powerful ESRGAN to a practical restoration application (namely, Real-ESRGAN), which is trained with pure synthetic data.
|
||||||
@@ -59,6 +59,7 @@ Other recommended projects:<br>
|
|||||||
<!---------------------------------- Updates --------------------------->
|
<!---------------------------------- Updates --------------------------->
|
||||||
## 🚩 Updates
|
## 🚩 Updates
|
||||||
|
|
||||||
|
- ✅ Add the **realesr-general-x4v3** model - a tiny small model for general scenes. It also supports the **-dn** option to balance the noise (avoiding over-smooth results). **-dn** is short for denoising strength.
|
||||||
- ✅ Update the **RealESRGAN AnimeVideo-v3** model. Please see [anime video models](docs/anime_video_model.md) and [comparisons](docs/anime_comparisons.md) for more details.
|
- ✅ Update the **RealESRGAN AnimeVideo-v3** model. Please see [anime video models](docs/anime_video_model.md) and [comparisons](docs/anime_comparisons.md) for more details.
|
||||||
- ✅ Add small models for anime videos. More details are in [anime video models](docs/anime_video_model.md).
|
- ✅ Add small models for anime videos. More details are in [anime video models](docs/anime_video_model.md).
|
||||||
- ✅ Add the ncnn implementation [Real-ESRGAN-ncnn-vulkan](https://github.com/xinntao/Real-ESRGAN-ncnn-vulkan).
|
- ✅ Add the ncnn implementation [Real-ESRGAN-ncnn-vulkan](https://github.com/xinntao/Real-ESRGAN-ncnn-vulkan).
|
||||||
@@ -198,7 +199,7 @@ A common command: python inference_realesrgan.py -n RealESRGAN_x4plus -i infile
|
|||||||
Download pre-trained models: [RealESRGAN_x4plus.pth](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth)
|
Download pre-trained models: [RealESRGAN_x4plus.pth](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth -P experiments/pretrained_models
|
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth -P weights
|
||||||
```
|
```
|
||||||
|
|
||||||
Inference!
|
Inference!
|
||||||
@@ -220,7 +221,7 @@ Pre-trained models: [RealESRGAN_x4plus_anime_6B](https://github.com/xinntao/Real
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# download model
|
# download model
|
||||||
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth -P experiments/pretrained_models
|
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth -P weights
|
||||||
# inference
|
# inference
|
||||||
python inference_realesrgan.py -n RealESRGAN_x4plus_anime_6B -i inputs
|
python inference_realesrgan.py -n RealESRGAN_x4plus_anime_6B -i inputs
|
||||||
```
|
```
|
||||||
@@ -259,6 +260,7 @@ If you develop/use Real-ESRGAN in your projects, welcome to let me know.
|
|||||||
- [Real-ESRGAN_GUI](https://github.com/net2cn/Real-ESRGAN_GUI) by [net2cn](https://github.com/net2cn)
|
- [Real-ESRGAN_GUI](https://github.com/net2cn/Real-ESRGAN_GUI) by [net2cn](https://github.com/net2cn)
|
||||||
- [Real-ESRGAN-EGUI](https://github.com/WGzeyu/Real-ESRGAN-EGUI) by [WGzeyu](https://github.com/WGzeyu)
|
- [Real-ESRGAN-EGUI](https://github.com/WGzeyu/Real-ESRGAN-EGUI) by [WGzeyu](https://github.com/WGzeyu)
|
||||||
- [anime_upscaler](https://github.com/shangar21/anime_upscaler) by [shangar21](https://github.com/shangar21)
|
- [anime_upscaler](https://github.com/shangar21/anime_upscaler) by [shangar21](https://github.com/shangar21)
|
||||||
|
- [Upscayl](https://github.com/upscayl/upscayl) by [Nayam Amarshe](https://github.com/NayamAmarshe) and [TGS963](https://github.com/TGS963)
|
||||||
|
|
||||||
## 🤗 Acknowledgement
|
## 🤗 Acknowledgement
|
||||||
|
|
||||||
|
|||||||
@@ -195,7 +195,7 @@ Usage: realesrgan-ncnn-vulkan.exe -i infile -o outfile [options]...
|
|||||||
下载我们训练好的模型: [RealESRGAN_x4plus.pth](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth)
|
下载我们训练好的模型: [RealESRGAN_x4plus.pth](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth -P experiments/pretrained_models
|
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth -P weights
|
||||||
```
|
```
|
||||||
|
|
||||||
推断!
|
推断!
|
||||||
@@ -217,7 +217,7 @@ python inference_realesrgan.py -n RealESRGAN_x4plus -i inputs --face_enhance
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 下载模型
|
# 下载模型
|
||||||
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth -P experiments/pretrained_models
|
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth -P weights
|
||||||
# 推断
|
# 推断
|
||||||
python inference_realesrgan.py -n RealESRGAN_x4plus_anime_6B -i inputs
|
python inference_realesrgan.py -n RealESRGAN_x4plus_anime_6B -i inputs
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -29,52 +29,50 @@ class Predictor(BasePredictor):
|
|||||||
def setup(self):
|
def setup(self):
|
||||||
os.makedirs('output', exist_ok=True)
|
os.makedirs('output', exist_ok=True)
|
||||||
# download weights
|
# download weights
|
||||||
if not os.path.exists('realesrgan/weights/realesr-general-x4v3.pth'):
|
if not os.path.exists('weights/realesr-general-x4v3.pth'):
|
||||||
os.system(
|
os.system(
|
||||||
'wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-general-x4v3.pth -P ./realesrgan/weights'
|
'wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-general-x4v3.pth -P ./weights'
|
||||||
)
|
)
|
||||||
if not os.path.exists('realesrgan/weights/GFPGANv1.4.pth'):
|
if not os.path.exists('weights/GFPGANv1.4.pth'):
|
||||||
|
os.system('wget https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.4.pth -P ./weights')
|
||||||
|
if not os.path.exists('weights/RealESRGAN_x4plus.pth'):
|
||||||
os.system(
|
os.system(
|
||||||
'wget https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.4.pth -P ./realesrgan/weights'
|
'wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth -P ./weights'
|
||||||
)
|
)
|
||||||
if not os.path.exists('realesrgan/weights/RealESRGAN_x4plus.pth'):
|
if not os.path.exists('weights/RealESRGAN_x4plus_anime_6B.pth'):
|
||||||
os.system(
|
os.system(
|
||||||
'wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth -P ./realesrgan/weights'
|
'wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth -P ./weights'
|
||||||
)
|
)
|
||||||
if not os.path.exists('realesrgan/weights/RealESRGAN_x4plus_anime_6B.pth'):
|
if not os.path.exists('weights/realesr-animevideov3.pth'):
|
||||||
os.system(
|
os.system(
|
||||||
'wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth -P ./realesrgan/weights'
|
'wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-animevideov3.pth -P ./weights'
|
||||||
)
|
|
||||||
if not os.path.exists('realesrgan/weights/realesr-animevideov3.pth'):
|
|
||||||
os.system(
|
|
||||||
'wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-animevideov3.pth -P ./realesrgan/weights'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def choose_model(self, scale, version, tile=0):
|
def choose_model(self, scale, version, tile=0):
|
||||||
half = True if torch.cuda.is_available() else False
|
half = True if torch.cuda.is_available() else False
|
||||||
if version == 'General - RealESRGANplus':
|
if version == 'General - RealESRGANplus':
|
||||||
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=4)
|
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=4)
|
||||||
model_path = 'realesrgan/weights/RealESRGAN_x4plus.pth'
|
model_path = 'weights/RealESRGAN_x4plus.pth'
|
||||||
self.upsampler = RealESRGANer(
|
self.upsampler = RealESRGANer(
|
||||||
scale=4, model_path=model_path, model=model, tile=tile, tile_pad=10, pre_pad=0, half=half)
|
scale=4, model_path=model_path, model=model, tile=tile, tile_pad=10, pre_pad=0, half=half)
|
||||||
elif version == 'General - v3':
|
elif version == 'General - v3':
|
||||||
model = SRVGGNetCompact(num_in_ch=3, num_out_ch=3, num_feat=64, num_conv=32, upscale=4, act_type='prelu')
|
model = SRVGGNetCompact(num_in_ch=3, num_out_ch=3, num_feat=64, num_conv=32, upscale=4, act_type='prelu')
|
||||||
model_path = 'realesrgan/weights/realesr-general-x4v3.pth'
|
model_path = 'weights/realesr-general-x4v3.pth'
|
||||||
self.upsampler = RealESRGANer(
|
self.upsampler = RealESRGANer(
|
||||||
scale=4, model_path=model_path, model=model, tile=tile, tile_pad=10, pre_pad=0, half=half)
|
scale=4, model_path=model_path, model=model, tile=tile, tile_pad=10, pre_pad=0, half=half)
|
||||||
elif version == 'Anime - anime6B':
|
elif version == 'Anime - anime6B':
|
||||||
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=6, num_grow_ch=32, scale=4)
|
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=6, num_grow_ch=32, scale=4)
|
||||||
model_path = 'realesrgan/weights/RealESRGAN_x4plus_anime_6B.pth'
|
model_path = 'weights/RealESRGAN_x4plus_anime_6B.pth'
|
||||||
self.upsampler = RealESRGANer(
|
self.upsampler = RealESRGANer(
|
||||||
scale=4, model_path=model_path, model=model, tile=tile, tile_pad=10, pre_pad=0, half=half)
|
scale=4, model_path=model_path, model=model, tile=tile, tile_pad=10, pre_pad=0, half=half)
|
||||||
elif version == 'AnimeVideo - v3':
|
elif version == 'AnimeVideo - v3':
|
||||||
model = SRVGGNetCompact(num_in_ch=3, num_out_ch=3, num_feat=64, num_conv=16, upscale=4, act_type='prelu')
|
model = SRVGGNetCompact(num_in_ch=3, num_out_ch=3, num_feat=64, num_conv=16, upscale=4, act_type='prelu')
|
||||||
model_path = 'realesrgan/weights/realesr-animevideov3.pth'
|
model_path = 'weights/realesr-animevideov3.pth'
|
||||||
self.upsampler = RealESRGANer(
|
self.upsampler = RealESRGANer(
|
||||||
scale=4, model_path=model_path, model=model, tile=tile, tile_pad=10, pre_pad=0, half=half)
|
scale=4, model_path=model_path, model=model, tile=tile, tile_pad=10, pre_pad=0, half=half)
|
||||||
|
|
||||||
self.face_enhancer = GFPGANer(
|
self.face_enhancer = GFPGANer(
|
||||||
model_path='realesrgan/weights/GFPGANv1.4.pth',
|
model_path='weights/GFPGANv1.4.pth',
|
||||||
upscale=scale,
|
upscale=scale,
|
||||||
arch='clean',
|
arch='clean',
|
||||||
channel_multiplier=2,
|
channel_multiplier=2,
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ Pre-trained models: [RealESRGAN_x4plus_anime_6B](https://github.com/xinntao/Real
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# download model
|
# download model
|
||||||
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth -P experiments/pretrained_models
|
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth -P weights
|
||||||
# inference
|
# inference
|
||||||
python inference_realesrgan.py -n RealESRGAN_x4plus_anime_6B -i inputs
|
python inference_realesrgan.py -n RealESRGAN_x4plus_anime_6B -i inputs
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ The following are some demos (best view in the full screen mode).
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# download model
|
# download model
|
||||||
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-animevideov3.pth -P realesrgan/weights
|
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-animevideov3.pth -P weights
|
||||||
# single gpu and single process inference
|
# single gpu and single process inference
|
||||||
CUDA_VISIBLE_DEVICES=0 python inference_realesrgan_video.py -i inputs/video/onepiece_demo.mp4 -n realesr-animevideov3 -s 2 --suffix outx2
|
CUDA_VISIBLE_DEVICES=0 python inference_realesrgan_video.py -i inputs/video/onepiece_demo.mp4 -n realesr-animevideov3 -s 2 --suffix outx2
|
||||||
# single gpu and multi process inference (you can use multi-processing to improve GPU utilization)
|
# single gpu and multi process inference (you can use multi-processing to improve GPU utilization)
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
| [RealESRGAN_x2plus](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.1/RealESRGAN_x2plus.pth) | X2 | X2 model for general images |
|
| [RealESRGAN_x2plus](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.1/RealESRGAN_x2plus.pth) | X2 | X2 model for general images |
|
||||||
| [RealESRNet_x4plus](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.1/RealESRNet_x4plus.pth) | X4 | X4 model with MSE loss (over-smooth effects) |
|
| [RealESRNet_x4plus](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.1/RealESRNet_x4plus.pth) | X4 | X4 model with MSE loss (over-smooth effects) |
|
||||||
| [official ESRGAN_x4](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.1/ESRGAN_SRx4_DF2KOST_official-ff704c30.pth) | X4 | official ESRGAN model |
|
| [official ESRGAN_x4](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.1/ESRGAN_SRx4_DF2KOST_official-ff704c30.pth) | X4 | official ESRGAN model |
|
||||||
|
| [realesr-general-x4v3](https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-general-x4v3.pth) | X4 (can also be used for X1, X2, X3) | A tiny small model (consume much fewer GPU memory and time); not too strong deblur and denoise capacity |
|
||||||
|
|
||||||
The following models are **discriminators**, which are usually used for fine-tuning.
|
The following models are **discriminators**, which are usually used for fine-tuning.
|
||||||
|
|
||||||
|
|||||||
@@ -88,13 +88,13 @@ def main():
|
|||||||
if args.model_path is not None:
|
if args.model_path is not None:
|
||||||
model_path = args.model_path
|
model_path = args.model_path
|
||||||
else:
|
else:
|
||||||
model_path = os.path.join('realesrgan/weights', args.model_name + '.pth')
|
model_path = os.path.join('weights', args.model_name + '.pth')
|
||||||
if not os.path.isfile(model_path):
|
if not os.path.isfile(model_path):
|
||||||
ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||||
for url in file_url:
|
for url in file_url:
|
||||||
# model_path will be updated
|
# model_path will be updated
|
||||||
model_path = load_file_from_url(
|
model_path = load_file_from_url(
|
||||||
url=url, model_dir=os.path.join(ROOT_DIR, 'realesrgan/weights'), progress=True, file_name=None)
|
url=url, model_dir=os.path.join(ROOT_DIR, 'weights'), progress=True, file_name=None)
|
||||||
|
|
||||||
# use dni to control the denoise strength
|
# use dni to control the denoise strength
|
||||||
dni_weight = None
|
dni_weight = None
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import shutil
|
|||||||
import subprocess
|
import subprocess
|
||||||
import torch
|
import torch
|
||||||
from basicsr.archs.rrdbnet_arch import RRDBNet
|
from basicsr.archs.rrdbnet_arch import RRDBNet
|
||||||
|
from basicsr.utils.download_util import load_file_from_url
|
||||||
from os import path as osp
|
from os import path as osp
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
|
|
||||||
@@ -172,32 +173,55 @@ class Writer:
|
|||||||
def inference_video(args, video_save_path, device=None, total_workers=1, worker_idx=0):
|
def inference_video(args, video_save_path, device=None, total_workers=1, worker_idx=0):
|
||||||
# ---------------------- determine models according to model names ---------------------- #
|
# ---------------------- determine models according to model names ---------------------- #
|
||||||
args.model_name = args.model_name.split('.pth')[0]
|
args.model_name = args.model_name.split('.pth')[0]
|
||||||
if args.model_name in ['RealESRGAN_x4plus', 'RealESRNet_x4plus']: # x4 RRDBNet model
|
if args.model_name == 'RealESRGAN_x4plus': # x4 RRDBNet model
|
||||||
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=4)
|
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=4)
|
||||||
netscale = 4
|
netscale = 4
|
||||||
elif args.model_name in ['RealESRGAN_x4plus_anime_6B']: # x4 RRDBNet model with 6 blocks
|
file_url = ['https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth']
|
||||||
|
elif args.model_name == 'RealESRNet_x4plus': # x4 RRDBNet model
|
||||||
|
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=4)
|
||||||
|
netscale = 4
|
||||||
|
file_url = ['https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.1/RealESRNet_x4plus.pth']
|
||||||
|
elif args.model_name == 'RealESRGAN_x4plus_anime_6B': # x4 RRDBNet model with 6 blocks
|
||||||
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=6, num_grow_ch=32, scale=4)
|
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=6, num_grow_ch=32, scale=4)
|
||||||
netscale = 4
|
netscale = 4
|
||||||
elif args.model_name in ['RealESRGAN_x2plus']: # x2 RRDBNet model
|
file_url = ['https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth']
|
||||||
|
elif args.model_name == 'RealESRGAN_x2plus': # x2 RRDBNet model
|
||||||
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=2)
|
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=2)
|
||||||
netscale = 2
|
netscale = 2
|
||||||
elif args.model_name in ['realesr-animevideov3']: # x4 VGG-style model (XS size)
|
file_url = ['https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.1/RealESRGAN_x2plus.pth']
|
||||||
|
elif args.model_name == 'realesr-animevideov3': # x4 VGG-style model (XS size)
|
||||||
model = SRVGGNetCompact(num_in_ch=3, num_out_ch=3, num_feat=64, num_conv=16, upscale=4, act_type='prelu')
|
model = SRVGGNetCompact(num_in_ch=3, num_out_ch=3, num_feat=64, num_conv=16, upscale=4, act_type='prelu')
|
||||||
netscale = 4
|
netscale = 4
|
||||||
else:
|
file_url = ['https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-animevideov3.pth']
|
||||||
raise NotImplementedError
|
elif args.model_name == 'realesr-general-x4v3': # x4 VGG-style model (S size)
|
||||||
|
model = SRVGGNetCompact(num_in_ch=3, num_out_ch=3, num_feat=64, num_conv=32, upscale=4, act_type='prelu')
|
||||||
|
netscale = 4
|
||||||
|
file_url = [
|
||||||
|
'https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-general-wdn-x4v3.pth',
|
||||||
|
'https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-general-x4v3.pth'
|
||||||
|
]
|
||||||
|
|
||||||
# ---------------------- determine model paths ---------------------- #
|
# ---------------------- determine model paths ---------------------- #
|
||||||
model_path = os.path.join('experiments/pretrained_models', args.model_name + '.pth')
|
model_path = os.path.join('weights', args.model_name + '.pth')
|
||||||
if not os.path.isfile(model_path):
|
if not os.path.isfile(model_path):
|
||||||
model_path = os.path.join('realesrgan/weights', args.model_name + '.pth')
|
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||||
if not os.path.isfile(model_path):
|
for url in file_url:
|
||||||
raise ValueError(f'Model {args.model_name} does not exist.')
|
# model_path will be updated
|
||||||
|
model_path = load_file_from_url(
|
||||||
|
url=url, model_dir=os.path.join(ROOT_DIR, 'weights'), progress=True, file_name=None)
|
||||||
|
|
||||||
|
# use dni to control the denoise strength
|
||||||
|
dni_weight = None
|
||||||
|
if args.model_name == 'realesr-general-x4v3' and args.denoise_strength != 1:
|
||||||
|
wdn_model_path = model_path.replace('realesr-general-x4v3', 'realesr-general-wdn-x4v3')
|
||||||
|
model_path = [model_path, wdn_model_path]
|
||||||
|
dni_weight = [args.denoise_strength, 1 - args.denoise_strength]
|
||||||
|
|
||||||
# restorer
|
# restorer
|
||||||
upsampler = RealESRGANer(
|
upsampler = RealESRGANer(
|
||||||
scale=netscale,
|
scale=netscale,
|
||||||
model_path=model_path,
|
model_path=model_path,
|
||||||
|
dni_weight=dni_weight,
|
||||||
model=model,
|
model=model,
|
||||||
tile=args.tile,
|
tile=args.tile,
|
||||||
tile_pad=args.tile_pad,
|
tile_pad=args.tile_pad,
|
||||||
@@ -312,9 +336,16 @@ def main():
|
|||||||
type=str,
|
type=str,
|
||||||
default='realesr-animevideov3',
|
default='realesr-animevideov3',
|
||||||
help=('Model names: realesr-animevideov3 | RealESRGAN_x4plus_anime_6B | RealESRGAN_x4plus | RealESRNet_x4plus |'
|
help=('Model names: realesr-animevideov3 | RealESRGAN_x4plus_anime_6B | RealESRGAN_x4plus | RealESRNet_x4plus |'
|
||||||
' RealESRGAN_x2plus | '
|
' RealESRGAN_x2plus | realesr-general-x4v3'
|
||||||
'Default:realesr-animevideov3'))
|
'Default:realesr-animevideov3'))
|
||||||
parser.add_argument('-o', '--output', type=str, default='results', help='Output folder')
|
parser.add_argument('-o', '--output', type=str, default='results', help='Output folder')
|
||||||
|
parser.add_argument(
|
||||||
|
'-dn',
|
||||||
|
'--denoise_strength',
|
||||||
|
type=float,
|
||||||
|
default=0.5,
|
||||||
|
help=('Denoise strength. 0 for weak denoise (keep noise), 1 for strong denoise ability. '
|
||||||
|
'Only used for the realesr-general-x4v3 model'))
|
||||||
parser.add_argument('-s', '--outscale', type=float, default=4, help='The final upsampling scale of the image')
|
parser.add_argument('-s', '--outscale', type=float, default=4, help='The final upsampling scale of the image')
|
||||||
parser.add_argument('--suffix', type=str, default='out', help='Suffix of the restored video')
|
parser.add_argument('--suffix', type=str, default='out', help='Suffix of the restored video')
|
||||||
parser.add_argument('-t', '--tile', type=int, default=0, help='Tile size, 0 for no tile during testing')
|
parser.add_argument('-t', '--tile', type=int, default=0, help='Tile size, 0 for no tile during testing')
|
||||||
|
|||||||
@@ -56,13 +56,10 @@ class RealESRGANer():
|
|||||||
assert len(model_path) == len(dni_weight), 'model_path and dni_weight should have the save length.'
|
assert len(model_path) == len(dni_weight), 'model_path and dni_weight should have the save length.'
|
||||||
loadnet = self.dni(model_path[0], model_path[1], dni_weight)
|
loadnet = self.dni(model_path[0], model_path[1], dni_weight)
|
||||||
else:
|
else:
|
||||||
# if the model_path starts with https, it will first download models to the folder: realesrgan/weights
|
# if the model_path starts with https, it will first download models to the folder: weights
|
||||||
if model_path.startswith('https://'):
|
if model_path.startswith('https://'):
|
||||||
model_path = load_file_from_url(
|
model_path = load_file_from_url(
|
||||||
url=model_path,
|
url=model_path, model_dir=os.path.join(ROOT_DIR, 'weights'), progress=True, file_name=None)
|
||||||
model_dir=os.path.join(ROOT_DIR, 'realesrgan/weights'),
|
|
||||||
progress=True,
|
|
||||||
file_name=None)
|
|
||||||
loadnet = torch.load(model_path, map_location=torch.device('cpu'))
|
loadnet = torch.load(model_path, map_location=torch.device('cpu'))
|
||||||
|
|
||||||
# prefer to use params_ema
|
# prefer to use params_ema
|
||||||
|
|||||||
Reference in New Issue
Block a user