alibaba / MNN

MNN is a blazing fast, lightweight deep learning framework, battle-tested by business-critical use cases in Alibaba
http://www.mnn.zone/
8.71k stars 1.67k forks source link

MNN warpaffine is slower than OpenCV, why? #2505

Closed HonglinChu closed 9 months ago

HonglinChu commented 1 year ago

平台(如果交叉编译请再附上交叉编译目标平台):

Platform(Include target platform as well if cross-compiling):

when i test MNN::CV::warpAffine function(C++ Version) on PC with CPU,it is slower than opencv(C++ version), why? (MNN version 2.6.0),

Github版本:

Github Version:

直接下载ZIP包请提供下载日期以及压缩包注释里的git版本(可通过7z l zip包路径命令并在输出信息中搜索Comment 获得,形如Comment = bc80b11110cd440aacdabbf59658d630527a7f2b)。 git clone请提供 git commit 第一行的commit id

Provide date (or better yet, git revision from the comment section of the zip. Obtainable using 7z l PATH/TO/ZIP and search for Comment in the output) if downloading source as zip,otherwise provide the first commit id from the output of git commit

编译方式:

Compiling Method

请在这里粘贴cmake参数或使用的cmake脚本路径以及完整输出
Paste cmake arguments or path of the build script used here as well as the full log of the cmake proess here or pastebin

编译日志:

Build Log:

粘贴在这里
v0jiuqi commented 1 year ago

我在Mac本地测试的结果显示warpAffine比OpenCV快10倍。

HonglinChu commented 1 year ago

我在Mac本地测试的结果显示warpAffine比OpenCV快10倍。

你可以提供一下你的测试代码么?我测试所有所有MNN提供的类opencv的函数(如 resize),只要底层涉及到需要matrix转换和convert转换的都会比opencv慢(warpAffine); 测试太小的图像差距不明显,可以输入1024x1024的图像试试,差距很大

HonglinChu commented 1 year ago

输入1024x1024的图像,resize之后变成512x512的图像,你可以这样对比一下MNN和OpenCV的速度

v0jiuqi commented 1 year ago

我在Mac本地测试的结果显示warpAffine比OpenCV快10倍。

你可以提供一下你的测试代码么?我测试所有所有MNN提供的类opencv的函数(如 resize),只要底层涉及到需要matrix转换和convert转换的都会比opencv慢(warpAffine); 测试太小的图像差距不明显,可以输入1024x1024的图像试试,差距很大

我直接编译运行的opencv_bench

v0jiuqi commented 11 months ago

我把源图像大小设置为1024x1024,目标图像大小设置为512x512,结果显示MNNCV的速度仍然比OpenCV快。测试代码提供给你: image 将上述代码粘贴至opencv_benchmark.cpp的186行,然后在build目录下打开编译宏 cmake .. -DMNN_BUILD_OPENCV=ON -DMNN_OPENCV_BENCH=ON,然后编译运行:make -j8&&./opencv_bench 我这里的运行结果如下: image

HonglinChu commented 11 months ago

感谢回复,有个问题resize和warpAffine的底层实现是差不多的,只是旋转矩阵M的数值不同,既然MNN的warpAffine 比OpenCV的快,为什么MNN的resize要比OpenCV的慢那么多?可以循环测试1000次取平均值看看。 image

v0jiuqi commented 11 months ago

MNN这边的实现不一样

HonglinChu commented 11 months ago

好的,我理解的是 MNN 中的resize和warpfine的核心实现是差不多的;另外,在MNN中resize操作在图像预处理的时候使用频率非常高,如果确实没有OpenCV的快,希望后续可以重点优化一下。

image image

github-actions[bot] commented 9 months ago

Marking as stale. No activity in 60 days.