编译cm源码教程-OpenCV4.5.x+CUDA11.0.x源码编译及YOLOv5加速教程!

前言

OpenCV开发者的基本功之一就是从源码编译OpenCV生成各种定制版本的OpenCV库,同时根据需要编译源码生成支持CUDA加速版本的OpenCV库。

然而很多开发者在编译过程中仍然遇到各种问题而被迫放弃! 可以说在使用CUDA加速之前我就已经放弃了自己了!

于是趁着假期又重新编译了一遍。 我帮您梳理了各种问题的对策,并帮您完成了OpenCV+CUDA编译,实现性能加速!

软件版本信息:

-Win10-VS2017-CMake 3.13.x-OpenCV 4.5.4-CUDA 11.0.x-cuDNN 8.2.0

OpenCV+CUDA编译

整个编译过程主要分为三步:

下载源码,一定是Tag对应的版本跟扩展模块CMake阶段,解决无法下载的坑!去掉不必要的模块VS工程编译,生成lib与dll

下载源代码:

https://github.com/opencv/opencvhttps://github.com/opencv/opencv_contrib

选择标签-4.5.4,

https://github.com/opencv/opencv/releases/download/4.5.4/opencv-4.5.4-vc14_vc15.exehttps://github.com/opencv/opencv_contrib/archive/refs/tags/4.5.4.zip

CMake:

打开CMake,设置源路径和目标路径:

上述选择表示为 64 位编译的库!

点击【配置】,

然后点击【生成】

完成后,搜索cuda关键字,如上图,勾选三个选项,

然后搜索opencv_ex,并设置扩展模块的代码路径,如上图! 设置完成后,再次点击【配置】,完成后:

搜索cuda,查看如上图!

最后搜索:

xfeatures2dwechat_qrcodeface全部的TEST模块

默认勾选,不要全选! (去掉勾号!)

ffmpeg下载困难,ippicv问题解决:

D:opencv-4.5.4opencvsources3rdpartyffmpegffmpeg.cmakeD:opencv-4.5.4opencvsources3rdpartyippicvippicv.cmake

从上面两个文件中获取下载地址。 直接下载完成后,放到对应的目录下:

D:opencv-4.5.4opencvsources3rdpartyffmpegD:opencv-4.5.4opencvsources3rdpartyippicv

一切都好。

生成VS项目文件后,打开项目文件:

1. 先选择All_build – release x642. 再install 点击生成

第一步需要的时间比较长编译cm源码教程,大概需要1到2个小时才能完成,最多不会超过4个小时! 截图如下:

谢天谢地编译cm源码教程,终于编译完成了!

OpenCV+CUDA配置与加速

基于OpenCV+CUDA支持的最新编译库,重新配置OpenCV开发环境,对比YOLOv5的部署,CPU运行推理测试结果如下:

添加两行代码让GPU运行推理测试,结果如下:

this->net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA);this->net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);

主板是3050ti!

相比之下,加速效果真是棒极了! 所以值得编译OpenCV+CUDA支持,因为它不仅可以加速深度学习模型推理,还可以加速传统图像处理!

完整视频教程

我非常录了一个完整的视频教程,B站地址如下:

https://www.bilibili.com/video/BV1ZT411J7zS?spm_id_from=333.999.0.0

时常读书

知识不足

扫码查看OpenCV+OpenVIO+Pytorch系统物理学习路线图

上节提到,最初的编程采用汇编进行编程,汇编程序移植困难c编译链源码,导致开发效率低。 C语言的出现使得编程集中于程序逻辑本身,从而提高了编程的效率。 那么计算机是如何理解C语言代码,从而执行程序并给出运行结果的呢? 其中,编译器的作用是将编译后的C源程序翻译成机器可以执行的指令和数据。 机器可以直接执行的指令和数据称为可执行代码。 C语言从源代码到可执行代码需要经过预处理、编译、汇编和链接四个步骤,如图1所示。

图1 编译原理

下面以“HelloWord.c”程序为例,结合图1解释C语言程序的执行过程。

(1)预处理

预处理主要处理代码中以“#”开头的预处理语句(预处理语句将在第10章进行讲解)。 预处理完成后,将生成*.i文件。 预处理操作具体包括:

● 展开所有宏定义(#define),并将宏替换为其定义的值;

● 处理所有条件编译指令(#ifdef、#ifndef、#endif 等)。

●处理包含句子的文件(#include),并将包含的文件直接插入到句子中。

应该注意的是,代码中的编译器指令(#pragma)将被保留。 除此之外,预处理还执行以下操作:

● 删除所有评论;

●添加行号和文件标签c编译链源码,方便调试和编译错误时快速定位错误所在行。

(2)编译

编译过程是最复杂的过程,需要进行词法分析、语法分析、语义分析、优化处理等,最后将预处理文件“.i”生成为汇编文件“.s”。 编译过程是一个优化过程,包括中间代码优化和目标代码生成优化。

(3)编译

汇编操作是指将生成的汇编文件.s翻译成计算机可以执行的指令,称为目标文件或中间文件。 二补码文件在Linux系统中是“*.o”文件,Windows系统中是“.obj”文件。 一般情况下,编译后的文件包含代码段和数据段。

(4)链接

二进制补码文件生成后,还不能运行。 如果运行该文件,则需要将二进制补码代码文件与代码中使用的库文件进行绑定。 这个过程称为链接。 链接的主要工作是处理程序各模块之间的关系,完成地址分配、空间分配、地址绑定等操作。 链接操作完成后,会生成一个可执行文件。 链接可分为静态库链接和动态库链接。

静态库在 Linux 中是“.a”文件,在 Windows 中是“.lib”文件。 这种静态库文件本质上是一组目标文件的集合。 静态库链接是指在程序链接过程中将所有包含该函数的库文件链接到目标文件中。 程序编译后,可执行程序不需要静态库支持,但静态链接带来较高的程序开发效率,但也存在内部空间和模块更新困难等问题。

动态库在Linux中是“.so”文件,也称为共享库,在Windows中是“.dll”文件。 动态库链接是指程序运行时只链接所需的目标文件,因此程序在运行过程中离不开动态库文件。 动态库解决了静态库资源的浪费,实现了代码共享和隐藏实现。 细节丰富,易于升级和维护的特点。

还要学一招:C语言编译器

C语言编译器在编译源代码的过程中会进行词法分析、语法分析、语义分析、中间语言生成、目标代码生成和优化、链接库文件(动态库或静态库)处理。 不同的编译器对程序的优化方式不同。 本书使用的MSVC编译器是Google专门针对VisualStudio系列的CL。 其他常见的 C 语言编译器包括 GCC、MinGW、Clang 和 Cygwin。 读者可以查找相关资料,根据编译过程使用编译器指令从源文件生成最终的可执行文件,从而对编译过程有更详细的了解。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 编译cm源码教程-OpenCV4.5.x+CUDA11.0.x源码编译及YOLOv5加速教程! https://www.wkzy.net/game/125713.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务