当前位置: 代码迷 >> 综合 >> 在win10下编译darknet-yolov4-gpu版
  详细解决方案

在win10下编译darknet-yolov4-gpu版

热度:4   发布时间:2023-12-15 16:47:14.0

最近在研究yolov4在win10下如何进行编译,不说废话了,直接记录一下我研究的过程以及遇到的错误和解决方案,希望能够帮助大家。在这里,进行推理的时候是使用GPU的;下一篇博客会介绍只使用cpu进行推理。

 

0 环境

系统:win 10

GPU:GTX 2080Ti

CUDA:10.0

cuDNN:7.4.1.5

OpenCV:3.0.0


主要步骤分为

(1) 安装opencv,将其加到环境变量中,并且在vs2015中配置opencv

(2) 编译darknet.sln文件,遇到bug就解决它。编译完之后,你就可以使用darknet进行推理了

(3) 编译yolo_cpp_dll.slnyolo_console_dll.sln文件。先编译前者,然后编译后者。


1 安装OpenCV

因为实验室win系统还没有安装OpenCV,所以需要安装OpenCV。我下载的版本是OpenCV3.0,下载之后将解压之后的文件放在了D盘,接着就需要将OpenCV的添加到环境变量中了。

(1) 将OpenCV的build目录添加到环境变量中

这里我们需要创建一个新的变量名:OPENCV_DIR,它的值就是你解压之后OpenCV的build文件的路径

(2) 将OpenCV的bin的目录添加到环境变量中

在刚开始的时候,我并没有将这个路径添加到环境变量中,最后编译完成之后,运行darknet.exe文件,报了如下错误

这个错误是说系统并没有找到OpenCV的opencv_world300.dll文件,所以我们需要将环境bin的路径添加到系统环境变量中,让系统知道这个文件的位置

点击Path,然后进行编辑

点击新建,然后输入bin的地址

因为x64文件夹下有两个子文件,我就将两个子文件的bin路径都添加到了环境变量中了

补充:在yolov4的README中,作者还提到一种方法,就是将opencv的bin文件下的下面两个文件复制到\darknet\build\darknet\x64文件下

这样有一个缺点就是,每当你编译的新的程序需要使用opencv的时候,你就需要复制一次,所以我还是直接添加了bin的环境变量了吧。

 

2 使用visual studio 2015编译darknet.sln

step1: 在编译之前,我们需要在vs2015中配置opencv,不然导入opencv2头文件的时候会报错。如何配置可以参考我的这篇博客。在配置的过程中,有一点需要注意,因为我使用的是Release x64

所以,在那篇博客中,【Debug|Win32】的路径统一都改成 【Release|x64】。

step2: 然后,将你的项目生成方式改成Release x64。也就是上面那幅图的情况。

step3: 最后,只需要点击项目名称,然后【右键】选择【生成】就可以了。

下面是我遇到的一些问题。有相似的可以进行参考借鉴一下。 

2.1 问题一

在使用vs2015打开darknet\build\darkent\darknet.sln文件的时候,在vs2015中报如下错误:

C:\Users\Administrator\Desktop\darknet\build\darknet\darknet.vcxproj(55,5): 
未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations\CUDA 10.0.props”。
请确认 <Import> 声明中的路径正确,且磁盘上存在该文件

报这个错误主要有两个原因:

原因一BuildCustomizations夹下没有CUDA 10.0.props这个文件

解决方案:打开你安装CUDA的文件,参考下面的路径,将文件下面的所有文件都复制到VS的BuildCustomizations文件夹下,也就是刚才报错的那个文件夹下。

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras\visual_studio_integration\MSBuildExtensions

原因二:BuildCustomizations文件下存放的是你当前系统上的CUDA版本(假如是CUDA 9.0),如果你安装的不是CUDA 10.0,这样你就需要修改编译文件中关于CUDA 10.0的相关内容了,将CUDA 10.0改成CUDA 9.0。我是使用sublime打开darknet.vcxproj文件,然后查到关于CUDA 10.0的信息,然后将其改成你对应的CUDA版本(一共要修改两处

第一处:

第二处: 

 

2.2 问题二

修改之后,你就可以生成exe文件了,具体如下

在生成过程中,又报了一个错误:

“waitKeyEx”: 不是“cv”的成员

然后,我就通过错误定位到了源文件位置,

将cv::waitKeyEx()函数改成了cv::waitKey()函数。然后重新生成。成功

 

2.3 问题三

在编译的过程中又出现了这个错误

LINK : fatal error LNK1104: 无法打开文件“opencv_world400d.lib”---VS2017+OpenCV配置过程

我是参考这位老哥的博客

3 使用visual studio 2015编译其他文件

编译完darknet之后,我们还需要编译yolo_cpp_dll.slnyolo_console_dll.sln这两个解决方案,步骤和上面的一样。这两个文件都在darknet\ build\ darknet目录下面。

 

4 测试图片

打开终端,切换到darknet\build\darknet\x64目录下,然后运行下面的命令:

darknet.exe detector test data/coco.data cfg/yolov4.cfg backup/yolov4.weights

运行的过程中会打印网络信息,就像这样:

最后,需要你输入你要检测图片的路径:

检测结果如下: 

 

5 测试视频

输入下面的命令就可以对视频进行测试了:

darknet.exe detector demo data/coco.data cfg/yolov4.cfg backup/yolov4.weights data/demo3.mp4 -ext_output

 

 

6 参考博客

[1] yolov4:https://github.com/AlexeyAB/darknet

[2] https://blog.csdn.net/weixin_44285715/article/details/88050563

[3] https://blog.csdn.net/amusi1994/article/details/80261735

  相关解决方案