配置SOLOV2_ncnn相关环境并运行Demo
今天最开心的事情是终于在Windows环境下运行起来Github上这个项目的Demo,对于我一个电脑小白而言那背后的可都是泪呀TAT,因此有必要记录一下整个流程以方便其他人的需要~
简述一下相关背景:ncnn是一个前向神经网络框架,由纯C++实现所实现。而SOLOV2是一个快速的实例分割算法,关于什么是实例分割,可参考图像处理的相关文章。此外,笔者的相关环境配置一并列举于此处,方便读者参考:
环境 | 版本 |
---|---|
Windows | 10 专业版 20H2 |
Visual Studio 2019 | Community Edition 16.11.31702.278 |
OpenCV | 3.4.5 |
CMake | 3.21.3 |
ncnn | Release 2c4ae09604 即目前的lateset release(20210720) |
01 ncnn编译
理论上来讲,根据自身的需求直接使用release下官方的预编译静/动态库应该不会出现错误,然而笔者在实际配置项目时,添加了ncnn.lib这一附加依赖项后,在运行中依旧会产生Vulkan相关报错,如图所示:
推测可能为官方打包的库中默认调用了VulkanSDK与glslang这一submoudle,因此我们需要自己来对ncnn打包了。
在使用VS 2019命令行编译ncnn的过程中,也同样遇到了这样或那样的问题,不过所幸被Github上这条issue解决了,大体上只要按照issue作者提示的操作就不会出现问题。
首先在开始菜单下找到Visual Studio 2019的文件夹,打开x64 Native Tools Command Prompt这个VS 2019的命令行工具。
下载 protobuf 3.4.0 的源码(不知道其它版本是否可行),解压,编译ncnn前需要编译protobuf。
1 | // 进入protobuf-3.4.0文件夹 |
通过git克隆ncnn的源码并编译ncnn:
提示:请务必注意路径问题!
1 | // 克隆远端仓库代码,放在ncnn文件夹下 |
至此,运行此项目demo的环境构建工作就做好了,接下来就可以准备开始调试SOLOv2 ncnn的项目。
02 项目调试
与上一步相同,首先需要使用获得一份源码:
1 | git clone https://github.com/DayBreak-u/SOLOV2_ncnn.git |
根据项目主页的README.md,执行前三行代码:
1 | cd ncnn |
如果存在报错信息如CMake Error at CMakeLists.txt:xx (find_package):Could not find module FindOpenCV.cmake or a configuration file for package OpenCV.
则是没有寻找到OpenCV的CMake文件,可在文件中添加一行set(OpenCV_DIR E:/opencv/build/x64/vc15/lib)
(请替换为自己OpenCV的路径)或者是配置OpenCV_DIR这一环境变量即可。提示-- Configuring done
、-- Generating done
时即意味着项目解决方案的成功生成。
下载模型权重:
链接: https://pan.baidu.com/s/1W1AiKdI4JJq2LW50uGOVng 密码: phh8
在Windows环境下,由于没有Linux下的GNU Make,所以我们直接用VS来编译代码:
VS配置ncnn和opencv环境
点击项目
->属性
->VC++目录
,在Release配置、x64平台下,根据自己目录的实际情况添加以下路径至包含目录
:
注意:如果前文中您将protobuf、ncnn的源码编译为debug版本,则此处也要将其改为debug配置。
E:\opencv\build\include
E:\opencv\build\include\opencv
E:\opencv\build\include\opencv2
E:\Project\ncnn\build-vs2019\install\include
E:\Project\ncnn\build-vs2019\install\include\ncnn
同样,在库目录
中根据自身情况添加以下路径:
E:\opencv\build\x64\vc15\lib
E:\Project\ncnn\build-vs2019\install\lib
在链接器
->输入
中加入ncnn.lib
、opencv_world345.lib
这两个附加依赖项
就可以进行下一步操作了。
修改代码
为方便运行demo查看效果,我对其进行了一定修改,以solov2.cpp为例(才不是我没有测试过solov2_fast.cpp的原因呢,哼o(~ヘ~o#)):
根据前文下载的模型权重存储路径修改权重读取位置:
注释并重写main函数:
1 | int main() { |
程序生成的结果result.png默认放在项目build文件夹下,如果您想要直观地看见程序运行的效果,可以将main函数上方原作者注释掉的两行代码取消注释:
// cv::imshow("image", image);
// cv::waitKey(0);
运行代码
做完上述操作后,在解决方案资源管理器
中右键我们修改代码后的solov2
并设为启动项目:
然后点击本地Windows调试器
编译并运行程序。一般情况下,我们的solov2.exe
就成功生成了。如果控制台打开提示找不到 opencv_world345.dll
,就在../opencv/build/x64/vc15/bin
文件夹下拷贝一份放在../SOLOv2_ncnn/build/Release
下,该文件夹也是solov2.exe
所在的地方。
运行窗口如图:
运行效果如图: