请求编译ARM版本
sjlleo opened this issue · comments
感谢作者的项目,
特此请求编译macOS、Linux的ARM64版本的二进制文件,谢谢!
同请求编译Linux的arm版二进制文件。我在Android手机上试着引入Python环境,发现依赖需要占用的空间非常大,而且还没能把模块全部安装上...
谢谢关注,
我对转换这块不熟悉,因此没有计划 提供ARM或者Andriod的版本计划。
这块内容应该给予ncnn可以转换~
谢谢关注,
我对转换这块不熟悉,因此没有计划 提供ARM或者Andriod的版本计划。这块内容应该给予ncnn可以转换~
我对深度学习和Python都不太熟悉,能不能简单说明下目前的release版本是如何把Python项目变成ncnn的?如果不便说明,希望就以下几点疑惑帮忙解答:
- 我从release包里直接复制了param和bin格式的文件到新项目,不同平台应该是通用的吧?
- (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);
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);
}
- 晚上我又使用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);
}
谢谢
@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个组合),依然没有好的结果。
@tumuyan 了解。这里应该是Real-ESRGAN做了一些预处理,而不是直接将图片作为模型的输入。你的C++代码的流程,需要和Python推理代码的逻辑是一样的,即RealESRGANer.enhance()函数。你对照这里面的流程完成C++代码应该就OK了。