Skip to content

Commit afa37f9

Browse files
committed
chore(models): add the Real-ESRGAN general models (#1319)
Signed-off-by: k4yt3x <[email protected]>
1 parent 2c5a059 commit afa37f9

File tree

10 files changed

+195
-22
lines changed

10 files changed

+195
-22
lines changed

CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,18 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [Unreleased]
9+
10+
### Added
11+
12+
- Real-ESRGAN models `realesr-general-x4v3` and `realesr-general-wdn-x4v3` (#1319).
13+
814
## [6.4.0] - 2025-01-24
915

1016
### Added
1117

1218
- Multi-versioning to critical functions to enhance performance in generic architecture builds.
13-
- RIFE models v4.25 and v4.26 (#1304).
19+
- RIFE models `v4.25` and `v4.26` (#1304).
1420
- Support for processing videos without PTS information (#1278).
1521
- The feature to copy input streams' metadata to the output streams (#1282).
1622
- (Video2X Qt6) German translation (#1279).

include/libvideo2x/filter_realesrgan.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class FilterRealesrgan : public Filter {
1818
int gpuid = 0,
1919
bool tta_mode = false,
2020
int scaling_factor = 4,
21+
int noise_level = 0,
2122
const fsutils::StringType model_name = STR("realesr-animevideov3")
2223
);
2324

@@ -47,6 +48,7 @@ class FilterRealesrgan : public Filter {
4748
int gpuid_;
4849
bool tta_mode_;
4950
int scaling_factor_;
51+
int noise_level_;
5052
const fsutils::StringType model_name_;
5153
AVRational in_time_base_;
5254
AVRational out_time_base_;
4.63 MB
Binary file not shown.
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
7767517
2+
73 74
3+
Input data 0 1 data
4+
Split splitncnn_input0 1 2 data data_splitncnn_0 data_splitncnn_1
5+
Convolution /Conv 1 1 data_splitncnn_1 /Conv_output_0 0=64 1=3 4=1 5=1 6=1728
6+
PReLU /PRelu 1 1 /Conv_output_0 /PRelu_output_0 0=64
7+
Convolution /Conv_1 1 1 /PRelu_output_0 /Conv_1_output_0 0=64 1=3 4=1 5=1 6=36864
8+
PReLU /PRelu_1 1 1 /Conv_1_output_0 /PRelu_1_output_0 0=64
9+
Convolution /Conv_2 1 1 /PRelu_1_output_0 /Conv_2_output_0 0=64 1=3 4=1 5=1 6=36864
10+
PReLU /PRelu_2 1 1 /Conv_2_output_0 /PRelu_2_output_0 0=64
11+
Convolution /Conv_3 1 1 /PRelu_2_output_0 /Conv_3_output_0 0=64 1=3 4=1 5=1 6=36864
12+
PReLU /PRelu_3 1 1 /Conv_3_output_0 /PRelu_3_output_0 0=64
13+
Convolution /Conv_4 1 1 /PRelu_3_output_0 /Conv_4_output_0 0=64 1=3 4=1 5=1 6=36864
14+
PReLU /PRelu_4 1 1 /Conv_4_output_0 /PRelu_4_output_0 0=64
15+
Convolution /Conv_5 1 1 /PRelu_4_output_0 /Conv_5_output_0 0=64 1=3 4=1 5=1 6=36864
16+
PReLU /PRelu_5 1 1 /Conv_5_output_0 /PRelu_5_output_0 0=64
17+
Convolution /Conv_6 1 1 /PRelu_5_output_0 /Conv_6_output_0 0=64 1=3 4=1 5=1 6=36864
18+
PReLU /PRelu_6 1 1 /Conv_6_output_0 /PRelu_6_output_0 0=64
19+
Convolution /Conv_7 1 1 /PRelu_6_output_0 /Conv_7_output_0 0=64 1=3 4=1 5=1 6=36864
20+
PReLU /PRelu_7 1 1 /Conv_7_output_0 /PRelu_7_output_0 0=64
21+
Convolution /Conv_8 1 1 /PRelu_7_output_0 /Conv_8_output_0 0=64 1=3 4=1 5=1 6=36864
22+
PReLU /PRelu_8 1 1 /Conv_8_output_0 /PRelu_8_output_0 0=64
23+
Convolution /Conv_9 1 1 /PRelu_8_output_0 /Conv_9_output_0 0=64 1=3 4=1 5=1 6=36864
24+
PReLU /PRelu_9 1 1 /Conv_9_output_0 /PRelu_9_output_0 0=64
25+
Convolution /Conv_10 1 1 /PRelu_9_output_0 /Conv_10_output_0 0=64 1=3 4=1 5=1 6=36864
26+
PReLU /PRelu_10 1 1 /Conv_10_output_0 /PRelu_10_output_0 0=64
27+
Convolution /Conv_11 1 1 /PRelu_10_output_0 /Conv_11_output_0 0=64 1=3 4=1 5=1 6=36864
28+
PReLU /PRelu_11 1 1 /Conv_11_output_0 /PRelu_11_output_0 0=64
29+
Convolution /Conv_12 1 1 /PRelu_11_output_0 /Conv_12_output_0 0=64 1=3 4=1 5=1 6=36864
30+
PReLU /PRelu_12 1 1 /Conv_12_output_0 /PRelu_12_output_0 0=64
31+
Convolution /Conv_13 1 1 /PRelu_12_output_0 /Conv_13_output_0 0=64 1=3 4=1 5=1 6=36864
32+
PReLU /PRelu_13 1 1 /Conv_13_output_0 /PRelu_13_output_0 0=64
33+
Convolution /Conv_14 1 1 /PRelu_13_output_0 /Conv_14_output_0 0=64 1=3 4=1 5=1 6=36864
34+
PReLU /PRelu_14 1 1 /Conv_14_output_0 /PRelu_14_output_0 0=64
35+
Convolution /Conv_15 1 1 /PRelu_14_output_0 /Conv_15_output_0 0=64 1=3 4=1 5=1 6=36864
36+
PReLU /PRelu_15 1 1 /Conv_15_output_0 /PRelu_15_output_0 0=64
37+
Convolution /Conv_16 1 1 /PRelu_15_output_0 /Conv_16_output_0 0=64 1=3 4=1 5=1 6=36864
38+
PReLU /PRelu_16 1 1 /Conv_16_output_0 /PRelu_16_output_0 0=64
39+
Convolution /Conv_17 1 1 /PRelu_16_output_0 /Conv_17_output_0 0=64 1=3 4=1 5=1 6=36864
40+
PReLU /PRelu_17 1 1 /Conv_17_output_0 /PRelu_17_output_0 0=64
41+
Convolution /Conv_18 1 1 /PRelu_17_output_0 /Conv_18_output_0 0=64 1=3 4=1 5=1 6=36864
42+
PReLU /PRelu_18 1 1 /Conv_18_output_0 /PRelu_18_output_0 0=64
43+
Convolution /Conv_19 1 1 /PRelu_18_output_0 /Conv_19_output_0 0=64 1=3 4=1 5=1 6=36864
44+
PReLU /PRelu_19 1 1 /Conv_19_output_0 /PRelu_19_output_0 0=64
45+
Convolution /Conv_20 1 1 /PRelu_19_output_0 /Conv_20_output_0 0=64 1=3 4=1 5=1 6=36864
46+
PReLU /PRelu_20 1 1 /Conv_20_output_0 /PRelu_20_output_0 0=64
47+
Convolution /Conv_21 1 1 /PRelu_20_output_0 /Conv_21_output_0 0=64 1=3 4=1 5=1 6=36864
48+
PReLU /PRelu_21 1 1 /Conv_21_output_0 /PRelu_21_output_0 0=64
49+
Convolution /Conv_22 1 1 /PRelu_21_output_0 /Conv_22_output_0 0=64 1=3 4=1 5=1 6=36864
50+
PReLU /PRelu_22 1 1 /Conv_22_output_0 /PRelu_22_output_0 0=64
51+
Convolution /Conv_23 1 1 /PRelu_22_output_0 /Conv_23_output_0 0=64 1=3 4=1 5=1 6=36864
52+
PReLU /PRelu_23 1 1 /Conv_23_output_0 /PRelu_23_output_0 0=64
53+
Convolution /Conv_24 1 1 /PRelu_23_output_0 /Conv_24_output_0 0=64 1=3 4=1 5=1 6=36864
54+
PReLU /PRelu_24 1 1 /Conv_24_output_0 /PRelu_24_output_0 0=64
55+
Convolution /Conv_25 1 1 /PRelu_24_output_0 /Conv_25_output_0 0=64 1=3 4=1 5=1 6=36864
56+
PReLU /PRelu_25 1 1 /Conv_25_output_0 /PRelu_25_output_0 0=64
57+
Convolution /Conv_26 1 1 /PRelu_25_output_0 /Conv_26_output_0 0=64 1=3 4=1 5=1 6=36864
58+
PReLU /PRelu_26 1 1 /Conv_26_output_0 /PRelu_26_output_0 0=64
59+
Convolution /Conv_27 1 1 /PRelu_26_output_0 /Conv_27_output_0 0=64 1=3 4=1 5=1 6=36864
60+
PReLU /PRelu_27 1 1 /Conv_27_output_0 /PRelu_27_output_0 0=64
61+
Convolution /Conv_28 1 1 /PRelu_27_output_0 /Conv_28_output_0 0=64 1=3 4=1 5=1 6=36864
62+
PReLU /PRelu_28 1 1 /Conv_28_output_0 /PRelu_28_output_0 0=64
63+
Convolution /Conv_29 1 1 /PRelu_28_output_0 /Conv_29_output_0 0=64 1=3 4=1 5=1 6=36864
64+
PReLU /PRelu_29 1 1 /Conv_29_output_0 /PRelu_29_output_0 0=64
65+
Convolution /Conv_30 1 1 /PRelu_29_output_0 /Conv_30_output_0 0=64 1=3 4=1 5=1 6=36864
66+
PReLU /PRelu_30 1 1 /Conv_30_output_0 /PRelu_30_output_0 0=64
67+
Convolution /Conv_31 1 1 /PRelu_30_output_0 /Conv_31_output_0 0=64 1=3 4=1 5=1 6=36864
68+
PReLU /PRelu_31 1 1 /Conv_31_output_0 /PRelu_31_output_0 0=64
69+
Convolution /Conv_32 1 1 /PRelu_31_output_0 /Conv_32_output_0 0=64 1=3 4=1 5=1 6=36864
70+
PReLU /PRelu_32 1 1 /Conv_32_output_0 /PRelu_32_output_0 0=64
71+
Convolution /Conv_33 1 1 /PRelu_32_output_0 /Conv_33_output_0 0=48 1=3 4=1 5=1 6=27648
72+
PixelShuffle /DepthToSpace 1 1 /Conv_33_output_0 /DepthToSpace_output_0 0=4
73+
Interp /Resize 1 1 data_splitncnn_0 /Resize_output_0 0=1 1=4.000000e+00 2=4.000000e+00
74+
BinaryOp /Add 2 1 /DepthToSpace_output_0 /Resize_output_0 /Add_output_0
75+
Clip /Clip 1 1 /Add_output_0 output 0=0.000000e+00 1=1.000000e+00
4.63 MB
Binary file not shown.
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
7767517
2+
73 74
3+
Input data 0 1 data
4+
Split splitncnn_input0 1 2 data data_splitncnn_0 data_splitncnn_1
5+
Convolution /Conv 1 1 data_splitncnn_1 /Conv_output_0 0=64 1=3 4=1 5=1 6=1728
6+
PReLU /PRelu 1 1 /Conv_output_0 /PRelu_output_0 0=64
7+
Convolution /Conv_1 1 1 /PRelu_output_0 /Conv_1_output_0 0=64 1=3 4=1 5=1 6=36864
8+
PReLU /PRelu_1 1 1 /Conv_1_output_0 /PRelu_1_output_0 0=64
9+
Convolution /Conv_2 1 1 /PRelu_1_output_0 /Conv_2_output_0 0=64 1=3 4=1 5=1 6=36864
10+
PReLU /PRelu_2 1 1 /Conv_2_output_0 /PRelu_2_output_0 0=64
11+
Convolution /Conv_3 1 1 /PRelu_2_output_0 /Conv_3_output_0 0=64 1=3 4=1 5=1 6=36864
12+
PReLU /PRelu_3 1 1 /Conv_3_output_0 /PRelu_3_output_0 0=64
13+
Convolution /Conv_4 1 1 /PRelu_3_output_0 /Conv_4_output_0 0=64 1=3 4=1 5=1 6=36864
14+
PReLU /PRelu_4 1 1 /Conv_4_output_0 /PRelu_4_output_0 0=64
15+
Convolution /Conv_5 1 1 /PRelu_4_output_0 /Conv_5_output_0 0=64 1=3 4=1 5=1 6=36864
16+
PReLU /PRelu_5 1 1 /Conv_5_output_0 /PRelu_5_output_0 0=64
17+
Convolution /Conv_6 1 1 /PRelu_5_output_0 /Conv_6_output_0 0=64 1=3 4=1 5=1 6=36864
18+
PReLU /PRelu_6 1 1 /Conv_6_output_0 /PRelu_6_output_0 0=64
19+
Convolution /Conv_7 1 1 /PRelu_6_output_0 /Conv_7_output_0 0=64 1=3 4=1 5=1 6=36864
20+
PReLU /PRelu_7 1 1 /Conv_7_output_0 /PRelu_7_output_0 0=64
21+
Convolution /Conv_8 1 1 /PRelu_7_output_0 /Conv_8_output_0 0=64 1=3 4=1 5=1 6=36864
22+
PReLU /PRelu_8 1 1 /Conv_8_output_0 /PRelu_8_output_0 0=64
23+
Convolution /Conv_9 1 1 /PRelu_8_output_0 /Conv_9_output_0 0=64 1=3 4=1 5=1 6=36864
24+
PReLU /PRelu_9 1 1 /Conv_9_output_0 /PRelu_9_output_0 0=64
25+
Convolution /Conv_10 1 1 /PRelu_9_output_0 /Conv_10_output_0 0=64 1=3 4=1 5=1 6=36864
26+
PReLU /PRelu_10 1 1 /Conv_10_output_0 /PRelu_10_output_0 0=64
27+
Convolution /Conv_11 1 1 /PRelu_10_output_0 /Conv_11_output_0 0=64 1=3 4=1 5=1 6=36864
28+
PReLU /PRelu_11 1 1 /Conv_11_output_0 /PRelu_11_output_0 0=64
29+
Convolution /Conv_12 1 1 /PRelu_11_output_0 /Conv_12_output_0 0=64 1=3 4=1 5=1 6=36864
30+
PReLU /PRelu_12 1 1 /Conv_12_output_0 /PRelu_12_output_0 0=64
31+
Convolution /Conv_13 1 1 /PRelu_12_output_0 /Conv_13_output_0 0=64 1=3 4=1 5=1 6=36864
32+
PReLU /PRelu_13 1 1 /Conv_13_output_0 /PRelu_13_output_0 0=64
33+
Convolution /Conv_14 1 1 /PRelu_13_output_0 /Conv_14_output_0 0=64 1=3 4=1 5=1 6=36864
34+
PReLU /PRelu_14 1 1 /Conv_14_output_0 /PRelu_14_output_0 0=64
35+
Convolution /Conv_15 1 1 /PRelu_14_output_0 /Conv_15_output_0 0=64 1=3 4=1 5=1 6=36864
36+
PReLU /PRelu_15 1 1 /Conv_15_output_0 /PRelu_15_output_0 0=64
37+
Convolution /Conv_16 1 1 /PRelu_15_output_0 /Conv_16_output_0 0=64 1=3 4=1 5=1 6=36864
38+
PReLU /PRelu_16 1 1 /Conv_16_output_0 /PRelu_16_output_0 0=64
39+
Convolution /Conv_17 1 1 /PRelu_16_output_0 /Conv_17_output_0 0=64 1=3 4=1 5=1 6=36864
40+
PReLU /PRelu_17 1 1 /Conv_17_output_0 /PRelu_17_output_0 0=64
41+
Convolution /Conv_18 1 1 /PRelu_17_output_0 /Conv_18_output_0 0=64 1=3 4=1 5=1 6=36864
42+
PReLU /PRelu_18 1 1 /Conv_18_output_0 /PRelu_18_output_0 0=64
43+
Convolution /Conv_19 1 1 /PRelu_18_output_0 /Conv_19_output_0 0=64 1=3 4=1 5=1 6=36864
44+
PReLU /PRelu_19 1 1 /Conv_19_output_0 /PRelu_19_output_0 0=64
45+
Convolution /Conv_20 1 1 /PRelu_19_output_0 /Conv_20_output_0 0=64 1=3 4=1 5=1 6=36864
46+
PReLU /PRelu_20 1 1 /Conv_20_output_0 /PRelu_20_output_0 0=64
47+
Convolution /Conv_21 1 1 /PRelu_20_output_0 /Conv_21_output_0 0=64 1=3 4=1 5=1 6=36864
48+
PReLU /PRelu_21 1 1 /Conv_21_output_0 /PRelu_21_output_0 0=64
49+
Convolution /Conv_22 1 1 /PRelu_21_output_0 /Conv_22_output_0 0=64 1=3 4=1 5=1 6=36864
50+
PReLU /PRelu_22 1 1 /Conv_22_output_0 /PRelu_22_output_0 0=64
51+
Convolution /Conv_23 1 1 /PRelu_22_output_0 /Conv_23_output_0 0=64 1=3 4=1 5=1 6=36864
52+
PReLU /PRelu_23 1 1 /Conv_23_output_0 /PRelu_23_output_0 0=64
53+
Convolution /Conv_24 1 1 /PRelu_23_output_0 /Conv_24_output_0 0=64 1=3 4=1 5=1 6=36864
54+
PReLU /PRelu_24 1 1 /Conv_24_output_0 /PRelu_24_output_0 0=64
55+
Convolution /Conv_25 1 1 /PRelu_24_output_0 /Conv_25_output_0 0=64 1=3 4=1 5=1 6=36864
56+
PReLU /PRelu_25 1 1 /Conv_25_output_0 /PRelu_25_output_0 0=64
57+
Convolution /Conv_26 1 1 /PRelu_25_output_0 /Conv_26_output_0 0=64 1=3 4=1 5=1 6=36864
58+
PReLU /PRelu_26 1 1 /Conv_26_output_0 /PRelu_26_output_0 0=64
59+
Convolution /Conv_27 1 1 /PRelu_26_output_0 /Conv_27_output_0 0=64 1=3 4=1 5=1 6=36864
60+
PReLU /PRelu_27 1 1 /Conv_27_output_0 /PRelu_27_output_0 0=64
61+
Convolution /Conv_28 1 1 /PRelu_27_output_0 /Conv_28_output_0 0=64 1=3 4=1 5=1 6=36864
62+
PReLU /PRelu_28 1 1 /Conv_28_output_0 /PRelu_28_output_0 0=64
63+
Convolution /Conv_29 1 1 /PRelu_28_output_0 /Conv_29_output_0 0=64 1=3 4=1 5=1 6=36864
64+
PReLU /PRelu_29 1 1 /Conv_29_output_0 /PRelu_29_output_0 0=64
65+
Convolution /Conv_30 1 1 /PRelu_29_output_0 /Conv_30_output_0 0=64 1=3 4=1 5=1 6=36864
66+
PReLU /PRelu_30 1 1 /Conv_30_output_0 /PRelu_30_output_0 0=64
67+
Convolution /Conv_31 1 1 /PRelu_30_output_0 /Conv_31_output_0 0=64 1=3 4=1 5=1 6=36864
68+
PReLU /PRelu_31 1 1 /Conv_31_output_0 /PRelu_31_output_0 0=64
69+
Convolution /Conv_32 1 1 /PRelu_31_output_0 /Conv_32_output_0 0=64 1=3 4=1 5=1 6=36864
70+
PReLU /PRelu_32 1 1 /Conv_32_output_0 /PRelu_32_output_0 0=64
71+
Convolution /Conv_33 1 1 /PRelu_32_output_0 /Conv_33_output_0 0=48 1=3 4=1 5=1 6=27648
72+
PixelShuffle /DepthToSpace 1 1 /Conv_33_output_0 /DepthToSpace_output_0 0=4
73+
Interp /Resize 1 1 data_splitncnn_0 /Resize_output_0 0=1 1=4.000000e+00 2=4.000000e+00
74+
BinaryOp /Add 2 1 /DepthToSpace_output_0 /Resize_output_0 /Add_output_0
75+
Clip /Clip 1 1 /Add_output_0 output 0=0.000000e+00 1=1.000000e+00

src/filter_realesrgan.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@ FilterRealesrgan::FilterRealesrgan(
1717
int gpuid,
1818
bool tta_mode,
1919
int scaling_factor,
20+
int noise_level,
2021
const fsutils::StringType model_name
2122
)
2223
: realesrgan_(nullptr),
2324
gpuid_(gpuid),
2425
tta_mode_(tta_mode),
2526
scaling_factor_(scaling_factor),
27+
noise_level_(noise_level),
2628
model_name_(std::move(model_name)) {}
2729

2830
FilterRealesrgan::~FilterRealesrgan() {
@@ -35,10 +37,16 @@ int FilterRealesrgan::init(AVCodecContext* dec_ctx, AVCodecContext* enc_ctx, AVB
3537
std::filesystem::path model_param_path;
3638
std::filesystem::path model_bin_path;
3739

38-
fsutils::StringType param_file_name =
39-
model_name_ + STR("-x") + fsutils::to_string_type(scaling_factor_) + STR(".param");
40-
fsutils::StringType bin_file_name =
41-
model_name_ + STR("-x") + fsutils::to_string_type(scaling_factor_) + STR(".bin");
40+
fsutils::StringType param_file_name = model_name_;
41+
fsutils::StringType bin_file_name = model_name_;
42+
43+
if (model_name_ == STR("realesr-generalv3") && noise_level_ > 0) {
44+
param_file_name += STR("-wdn");
45+
bin_file_name += STR("-wdn");
46+
}
47+
48+
param_file_name += STR("-x") + fsutils::to_string_type(scaling_factor_) + STR(".param");
49+
bin_file_name += STR("-x") + fsutils::to_string_type(scaling_factor_) + STR(".bin");
4250

4351
// Find the model paths by model name if provided
4452
model_param_path = std::filesystem::path(STR("models")) / STR("realesrgan") / param_file_name;

src/processor_factory.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ void ProcessorFactory::init_default_processors(ProcessorFactory& factory) {
9191
static_cast<int>(vk_device_index),
9292
config.tta_mode,
9393
proc_cfg.scaling_factor,
94+
proc_cfg.noise_level,
9495
config.model_name
9596
);
9697
}

0 commit comments

Comments
 (0)