1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Win10+VS+Nvidia_Geforce_GTX_1080Ti编译YOLOv4

Win10+VS+Nvidia_Geforce_GTX_1080Ti编译YOLOv4

时间:2024-05-03 00:48:27

相关推荐

Win10+VS+Nvidia_Geforce_GTX_1080Ti编译YOLOv4

0 配置

写下这个标题,我自己都觉得有点不好意思。没办法,打螺丝的我,囊中羞涩,手上只有一块五年前下血本购买的Nvidia_Geforce_GTX_1080Ti。这块显卡在当年还是非常先进的,然而现在早已是古董一枚。以下列出我的一些详细配置:

Win10CPU: Intel Core i7-6800KGPU: Nvidia Geforce GTX 1080TiRAM: 16GVisual Studio 显卡驱动:516.94CUDA版本:10.1cuDNN版本:7.6.4

在此首先感谢Yolo的缔造者Joseph Chet Redmon以及传承者Alexey Bochkovskiy。没有这二位大神的开拓性和科普性工作,我怕是抱着一块N卡却摸不进DeepLearning的大门。当然,现在也只是刚刚摸到DeepLearning的大门。

VS的安装、N卡驱动的安装、CUDA的安装、cuDNN的安装,这里就不多说了。

1 获取Darknet的VS工程

这里就要特别提到Alexey Bochkovskiy大神了,在AB之前,Darknet在Linux环境下可以做到极简编译(因为有makefile文件的加持),但在Windows环境下想要编译却非常困难,需要下载cygwin来模拟Linux环境。正是由于AB大神将VS工程分享出来,我们才可以在Windows环境下快乐地玩耍。

下载的地址为:/AlexeyAB/darknet

这个目录下现在已经有Yolov7的VS工程了,但我还是先从Yolov4开始学习。

2 开始编译

在一些教程上,推荐使用build.ps1这个powershell脚本直接进行编译。但我还是找到了build文件夹,打开VS工程文件进行编译。由于这次是要对GPU版本进行编译,所以我们打开的是darknet.sln文件,如果是对CPU版本进行编译,则应该相应地打开darknet_no_gpu.sln文件。

3 幸运踩坑

对的,就是这么快。本来以为应该就是点一下编译然后就编译成功了,轻松加愉快,结果快确实是真的快,立刻掉坑。

问题出在哪儿了呢?

从错误信息里看到核心问题是

<import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 11.1.props" />

我使用的CUDA版本是v 10.1,并不是工程里默认指定的11.1,版本不匹配。这是个显而易见的错误。

OK,那如何解决它呢?

打开darknet.vcxproj文件,找到关于版本的两句,改之。

然后到CUDA的安装位置去找以下四个文件:

CUDA 10.1.propsCUDA 10.1.targetsCUDA 10.1.xmlNvda.Build.CudaTasks.v10.1.dll

把以上四个文件复制到$(VCTargetsPath)宏定义的位置,我这里的位置在:

C:\Program Files (x86)\Microsoft Visual Studio\\Professional\MSBuild\Microsoft\VC\v160\BuildCustomizations目录下

4 再次踩坑

CUDA对应版本修改完了,这下应该直捣黄龙了吧?叭叽,刚爬出坑来,又掉入另一个坑:

error MSB3721: nvcc fatal : Unsupported gpu architecture ‘compute_86’

关于这个问题我真的是摸不着头脑,'compute_86’是什么?

经过查阅网络资料,它指的是Nvidia显卡的计算框架,对于沦为古董的GTX 1080Ti,它的显卡算力框架只支持到6.1,compute_86指的却是8.6,这是RTX 3XXX系列才能支持得到的。

关于显卡的算力,可以在Nvidia的官网上进行查阅:

给出网址:/cuda-gpus#compute

这张图本来是想画个圈的,后来发现只要把GTX 1080Ti截到最下面就正好不用画圈了,立分高下。(学好深度学习,好好挣钱,早日换掉这老古董)

那么问题是从哪里引入的,为什么这个工程非得要去触及compute86呢?

答案在工程的属性里:

这个工程属于CUDA工程,所以还有CUDA的属性,这是小白未曾触及的领域——CUDA编程。

对于CUDA的学习小白只能说来日方长了。

但是这个问题的解决就在此处了:把Code Generation改为1080Ti可以触及的高度即可。

5 编译成功

编译成功了,我们成功地得到了darknet.exe。

这次是GPU版本的。虽然说这样讲可能会显得我很蠢,但这是小白第一次在自己电脑上编译成功GPU版本的Darknet。

测试一下:

目前还是只会在命令行里进行测试。

darknet detect cfg/yolov3.cfg yolov3.weights ./data/horses.jpg

由于我并没有配置OPENCV,所以没有直接输出图像:

Done! Loaded 107 layers from weights-fileDetection layer: 82 - type = 28Detection layer: 94 - type = 28Detection layer: 106 - type = 28./data/horses.jpg: Predicted in 16.788000 milli-seconds.horse: 88%horse: 99%horse: 96%horse: 99%Not compiled with OpenCV, saving to predictions.png instead

对比一下之前用CPU编译出来的darknet_no_gpu.exe跑出来的结果:

Done! Loaded 107 layers from weights-fileDetection layer: 82 - type = 28Detection layer: 94 - type = 28Detection layer: 106 - type = 28./data/horses.jpg: Predicted in 1012.002000 milli-seconds.horse: 88%horse: 99%horse: 96%horse: 99%Not compiled with OpenCV, saving to predictions.png instead

虽然是一块老古董,相较于CPU来说也有接近2个数量级的提升了。

再次泪牛满面。接下去就可以1炼丹2看源码了。

后续也可以把OPENCV配置到工程中去,这样就不会出现

Not compiled with OpenCV, saving to predictions.png instead

这一句了。

【水平所限,错漏难免,创作不易,轻喷勿骂】

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。