之前模型的话一般都是用tensorflow或者pytorch框架下的实现,但是现在有个任务是最好用yolo,并且最好是windows平台,所以搞了一下,还挺麻烦,有不少坑。这里总结下。
项目地址:https://github.com/AlexeyAB/darknet
windows平台下根据文档所说是两种编译方法,一种是借助VS的CMake,一种是vcpkg.
vcpkg的方法其实就是这几行命令:
PS Code\> git clone https://github.com/microsoft/vcpkg
PS Code\> cd vcpkg
PS Code\vcpkg> $env:VCPKG_ROOT=$PWD
PS Code\vcpkg> .\bootstrap-vcpkg.bat
PS Code\vcpkg> .\vcpkg install darknet[full]:x64-windows #replace with darknet[opencv-base,cuda,cudnn]:x64-windows for a quicker install of dependencies
PS Code\vcpkg> cd ..
PS Code\> git clone https://github.com/AlexeyAB/darknet
PS Code\> cd darknet
PS Code\darknet> powershell -ExecutionPolicy Bypass -File .\build.ps1
需要先安装好opencv\cuda\cudnn\vs,这里我参考的是这篇文章的步骤.注意这里cuda安装时会同时安装一个visual studio integration,但是如果你和我一样所示先安装的cuda后安装的vs那么我建议重新下载cuda的安装包安一下。我笔记本的显卡是1050,下载cuda10.1安装后没有成功安装visual studio integration,改为安装cuda10.0后正常。可以进你vs安装目录的下的Common7\IDE\VC\VCTargets\BuildCustomizations看看有没有CUDA XX.X props\targets
clone好代码后进入darknet\build\darknet,点击darknet.sln打开vs。这里注意要对darknet.vcproj做两种修改:
将所有的CUDA 11.x(具体数字忘了) props改成自己cuda的版本
打开darknet项目根目录下的Makefile,往下翻看到ARCH的值和显卡信号的对应,找到你的显卡对应的值:
然后在darknet.vcproj搜索compute,把compute和sm后面的数字都换成Makefile中你显卡对应的形式。例如我的显卡是1050,那么就应该改为<CodeGeneration>compute_61,sm_61;compute_61,sm_61</CodeGeneration>
。如果不改的话就会爆MSB372错误,这个解决方法是我在github中看到作者回复一个人的issue中找到的,其他博客很少提到(傲娇.jpg)
成功编译(如果有其他问题自行百度,我想不起来了2333)
但是!我使用编译出来的.exe文件会爆错!
这个错误它的意思可能是文件地址不对,也就是命令行输入的命令参数有问题,但是我把它都改成了绝对路径、怎么改也无济于事,而且没办法debug(或者是我不会233)除非一点一点看源码,在vs里是不能直接debug的,会爆符号缺失(无法找到PBD文件),即使你设置了联网下载dll的符号文件,也有windows自己的符号下载不下来(猜测是闭源文件?)
但是幸好生成dll用python调用的方法是可用的,这个需要我们再编译那个yolo_cpp_dll.sln项目,也是需要改yolo_cpp_dll.vcxporj两种地方。这个python调用的方法自由度就高多了,可以用来实现各种功能
生成dll之后可以用darknet_images.py或者darknet_videos.py调用了,其实这一步也是玄学满满,我电脑上安装了三个版本的python,其他两个版本的都会爆找不到dll(即使它的dll路径是正确的),但是anaconda下的python是可以的。而且还可以遇到一些路径问题,这种就尽量尝试把相对路径改成绝对路径试下
最后成功出图:
还有一个要注意的地方,就是如果你和我一样把项目迁移到了另外一台电脑上应用的话(我的1050显存太小,放不下视频检测的模型。。。):
其实还遇到了一些其他的琐碎问题,但是我记不太清了,而且绝大多数能够通过搜索较快解决
对于自己训练好的模型,提供.data文件(data里主要就是classes的数要和.names文件对上以及.names文件路径正确)、.cfg文件(.cfg文件的最后输出classes也要和上面对上)、.names文件、训练好的.weight文件即可用于GPU加速的视频和图像的目标检测,注意可能要把资源路径变成绝对路径
原文:https://www.cnblogs.com/jiading/p/14353353.html