Skip to content

Commit

Permalink
feat(rife): add support for rife v4.25 & v4.26 (#1304)
Browse files Browse the repository at this point in the history
* chore(deps): update rife submodule
* update: add support for rife v4.25 & v4.26
* style(*): format code with clang-format

---------

Signed-off-by: k4yt3x <i@k4yt3x.com>
Co-authored-by: k4yt3x <i@k4yt3x.com>
  • Loading branch information
B1ACK917 and k4yt3x authored Jan 21, 2025
1 parent 9477882 commit 9d4b21b
Show file tree
Hide file tree
Showing 11 changed files with 1,193 additions and 6 deletions.
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ else()
option(WITH_LAYER_input "" ON)
option(WITH_LAYER_log "" OFF)
option(WITH_LAYER_lrn "" OFF)
option(WITH_LAYER_memorydata "" OFF)
option(WITH_LAYER_memorydata "" ON)
option(WITH_LAYER_mvn "" OFF)
option(WITH_LAYER_pooling "" ON)
option(WITH_LAYER_power "" OFF)
Expand Down Expand Up @@ -287,6 +287,7 @@ else()
option(WITH_LAYER_deconvolutiondepthwise3d "" OFF)
option(WITH_LAYER_einsum "" OFF)
option(WITH_LAYER_deformableconv2d "" OFF)
option(WITH_LAYER_gridsample "" ON)

add_subdirectory(third_party/ncnn)
endif()
Expand Down
Binary file added models/rife/rife-v4.25-lite/flownet.bin
Binary file not shown.
391 changes: 391 additions & 0 deletions models/rife/rife-v4.25-lite/flownet.param

Large diffs are not rendered by default.

Binary file added models/rife/rife-v4.25/flownet.bin
Binary file not shown.
380 changes: 380 additions & 0 deletions models/rife/rife-v4.25/flownet.param

Large diffs are not rendered by default.

Binary file added models/rife/rife-v4.26/flownet.bin
Binary file not shown.
392 changes: 392 additions & 0 deletions models/rife/rife-v4.26/flownet.param

Large diffs are not rendered by default.

22 changes: 20 additions & 2 deletions src/interpolator_rife.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,20 +50,38 @@ int InterpolatorRIFE::init(AVCodecContext* dec_ctx, AVCodecContext* enc_ctx, AVB
// Automatically infer the RIFE model generation based on the model name
bool rife_v2 = false;
bool rife_v4 = false;
int rife_padding = 32;
if (model_name_.find(STR("rife-v2")) != fsutils::StringType::npos) {
rife_v2 = true;
} else if (model_name_.find(STR("rife-v3")) != fsutils::StringType::npos) {
rife_v2 = true;
} else if (model_name_.find(STR("rife-v4")) != fsutils::StringType::npos) {
rife_v4 = true;
if (model_name_.find(STR("rife-v4.25")) != fsutils::StringType::npos) {
rife_padding = 64;
}
if (model_name_.find(STR("rife-v4.25-lite")) != fsutils::StringType::npos) {
rife_padding = 128;
}
if (model_name_.find(STR("rife-v4.26")) != fsutils::StringType::npos) {
rife_padding = 64;
}
} else if (model_name_.find(STR("rife")) == fsutils::StringType::npos) {
logger()->critical("Failed to infer RIFE model generation from model name");
return -1;
}

// Create a new RIFE instance
rife_ =
new RIFE(gpuid_, tta_mode_, tta_temporal_mode_, uhd_mode_, num_threads_, rife_v2, rife_v4);
rife_ = new RIFE(
gpuid_,
tta_mode_,
tta_temporal_mode_,
uhd_mode_,
num_threads_,
rife_v2,
rife_v4,
rife_padding
);

// Store the time bases
in_time_base_ = dec_ctx->time_base;
Expand Down
3 changes: 2 additions & 1 deletion tools/video2x/src/argparse.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,8 @@ int parse_args(
("rife-model", PO_STR_VALUE<video2x::fsutils::StringType>()
->default_value(STR("rife-v4.6"), "rife-v4.6")->notifier(validate_rife_model_name),
"Name of the RIFE model to use (rife, rife-HD, rife-UHD, rife-anime, rife-v2, "
"rife-v2.3, rife-v2.4, rife-v3.0, rife-v3.1, rife-v4, rife-v4.6)")
"rife-v2.3, rife-v2.4, rife-v3.0, rife-v3.1, rife-v4, rife-v4.6, rife-v4.25, "
"rife-v4.25-lite, rife-v4.26)")
("rife-uhd", "Enable Ultra HD mode")
;
// clang-format on
Expand Down
6 changes: 5 additions & 1 deletion tools/video2x/src/validators.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,17 @@ void validate_rife_model_name(const video2x::fsutils::StringType& model_name) {
STR("rife-v3.1"),
STR("rife-v4"),
STR("rife-v4.6"),
STR("rife-v4.25"),
STR("rife-v4.25-lite"),
STR("rife-v4.26"),
};
if (valid_rife_models.count(model_name) == 0) {
throw po::validation_error(
po::validation_error::invalid_option_value,
"rife-model",
"RIFE model must be one of: rife, rife-HD, rife-UHD, rife-anime, rife-v2, rife-v2.3, "
"rife-v2.4, rife-v3.0, rife-v3.1, rife-v4, rife-v4.6"
"rife-v2.4, rife-v3.0, rife-v3.1, rife-v4, rife-v4.6, rife-v4.25, rife-v4.25-lite, "
"rife-v4.26"
);
}
}

0 comments on commit 9d4b21b

Please sign in to comment.