xinntao / Real-ESRGAN

Real-ESRGAN aims at developing Practical Algorithms for General Image/Video Restoration.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

请求编译ARM版本

sjlleo opened this issue · comments

感谢作者的项目,

特此请求编译macOS、Linux的ARM64版本的二进制文件,谢谢!

同请求编译Linux的arm版二进制文件。我在Android手机上试着引入Python环境,发现依赖需要占用的空间非常大,而且还没能把模块全部安装上...

谢谢关注,
我对转换这块不熟悉,因此没有计划 提供ARM或者Andriod的版本计划。

这块内容应该给予ncnn可以转换~

谢谢关注,
我对转换这块不熟悉,因此没有计划 提供ARM或者Andriod的版本计划。

这块内容应该给予ncnn可以转换~

我对深度学习和Python都不太熟悉,能不能简单说明下目前的release版本是如何把Python项目变成ncnn的?如果不便说明,希望就以下几点疑惑帮忙解答:

  1. 我从release包里直接复制了param和bin格式的文件到新项目,不同平台应该是通用的吧?
  2. (Android平台)我使用范例 https://github.com/nihui/ncnn-android-styletransfer ,把release包中的模型加入到范例demo。帮忙看下有没有明显的错误?
    ncnn::Extractor ex = styletransfernet[style_type].create_extractor();
    ex.set_vulkan_compute(use_gpu);

    ncnn::Mat in;
    ncnn::Mat out;

         in = ncnn::Mat::from_android_bitmap(env, bitmap, ncnn::Mat::PIXEL_RGB);
        ex.input("data", in);
        ex.extract("output", out);

以下为原代码:
https://github.com/nihui/ncnn-android-styletransfer/blob/6721679e621596a74b3489346bb89a397fb6e0bc/app/src/main/jni/styletransferncnn_jni.cpp#L105

    const int downscale_ratio = 2;

    // ncnn from bitmap
    ncnn::Mat in = ncnn::Mat::from_android_bitmap_resize(env, bitmap, ncnn::Mat::PIXEL_RGB, width / downscale_ratio, height / downscale_ratio);

    // styletransfer
    ncnn::Mat out;
    {
        ncnn::Extractor ex = styletransfernet[style_type].create_extractor();

        ex.set_vulkan_compute(use_gpu);

        ex.input(styletransfer_param_id::BLOB_input1, in);

        ex.extract(styletransfer_param_id::BLOB_output1, out);
    }
  1. 晚上我又使用vs2019测试了下,结果也不正常。
    下面是完整代码,模型同样从release包复制。
#include <iostream>
#include <ncnn/net.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp> 
 

int main()
{
    std::cout << "demo start!\n";

    const char* imagepath = "input.jpg";
    cv::Mat m = cv::imread(imagepath, 1);
    if (m.empty())
    {
        fprintf(stderr, "cv::imread %s failed\n", imagepath);
        return -1;
    }
    cv::imshow("input", m);

    int w = m.cols;
    int h = m.rows;

    ncnn::Net net;
    net.load_param("realesrgan-x4plus-anime.param");
    net.load_model("realesrgan-x4plus-anime.bin");

    ncnn::Mat in = ncnn::Mat::from_pixels(m.data, ncnn::Mat::PIXEL_RGB, w, h);
    ncnn::Mat out;
    ncnn::Extractor ex = net.create_extractor();
    ex.set_light_mode(true);
    ex.input("data", in);
    ex.extract("output", out);

    cv::Mat a(out.h, out.w, CV_8UC3);
    out.to_pixels(a.data, ncnn::Mat::PIXEL_RGB);

        cv::imshow("output", a);
        cv::waitKey(0);
}

image

谢谢

commented

@tumuyan 我没用过ncnn,图片能正常显示,那就是推理OK了,和ncnn没关系。看起来应该是色彩空间的问题,OpenCV读入的图片默认为GBR格式,需要转换为RGB排列。可以试试转换下:https://docs.opencv.org/4.5.3/d8/d01/group__imgproc__color__conversions.html

@tumuyan 我没用过ncnn,图片能正常显示,那就是推理OK了,和ncnn没关系。看起来应该是色彩空间的问题,OpenCV读入的图片默认为GBR格式,需要转换为RGB排列。可以试试转换下:https://docs.opencv.org/4.5.3/d8/d01/group__imgproc__color__conversions.html

感谢回复。
我参照ncnn的说明做了色彩空间转换(事实上试过了多种输入-输出组合,截图是其中2个组合),依然没有好的结果。

image

image

commented

@tumuyan 了解。这里应该是Real-ESRGAN做了一些预处理,而不是直接将图片作为模型的输入。你的C++代码的流程,需要和Python推理代码的逻辑是一样的,即RealESRGANer.enhance()函数。你对照这里面的流程完成C++代码应该就OK了。