zoukankan      html  css  js  c++  java
  • windows下编译yolo(2021/1月更新)

    windows下编译yolo(2021/1月更新)

    之前模型的话一般都是用tensorflow或者pytorch框架下的实现,但是现在有个任务是最好用yolo,并且最好是windows平台,所以搞了一下,还挺麻烦,有不少坑。这里总结下。

    项目地址:https://github.com/AlexeyAB/darknet

    windows平台下根据文档所说是两种编译方法,一种是借助VS的CMake,一种是vcpkg.

    vcpkg方法

    vcpkg的方法其实就是这几行命令:

    PS Code>              git clone https://github.com/microsoft/vcpkg
    PS Code>              cd vcpkg
    PS Codevcpkg>         $env:VCPKG_ROOT=$PWD
    PS Codevcpkg>         .ootstrap-vcpkg.bat
    PS Codevcpkg>         .vcpkg install darknet[full]:x64-windows #replace with darknet[opencv-base,cuda,cudnn]:x64-windows for a quicker install of dependencies
    PS Codevcpkg>         cd ..
    PS Code>              git clone https://github.com/AlexeyAB/darknet
    PS Code>              cd darknet
    PS Codedarknet>       powershell -ExecutionPolicy Bypass -File .uild.ps1
    
    • 首先遇到的问题是如果你的vs安装的是中文版会提示缺少英文语言包,这个去vs installer下一个语言包就好了
    • 主要的,vcpkg下载巨慢(国内网络嘛,理解),当然你可以开代理,但是我没有,这个也没有什么换源的操作。所以只能粘贴它的下载url到迅雷来P2P加速下载,问题是有些包你自己下载完了放到download目录它就会当成是cache用,但是有些就不行,比如它下载OpenCV时先下载到tmp文件夹中的包,无论你怎么粘贴它都会重新下载,这个网络要是不好的话会折腾很久很久,这个vcpkg包管理还是慎用
    • 我之前其实已经安装了二进制的opencv的windows版,也加了环境变量,但是它还是会重新下载opencv并且编译,应该是版本不一样,这个很烦,opencv编译非常花时间
    • 我一开始使用vs2019社区版,编译opencv会出错(原谅我实在不记得是什么错误了,在浏览器历史记录找了半天没找到),网上搜索有一个建议是用vs2017及以下,卸载vs2019重装vs2017成功编译
    • 编译完Opencv后会下载darknet相关的文件,这里vcpkg有两个哈希是错的,github上去年有人已经提出了这个issue了,这里我们需要去portfile.cmake里把这两个哈希改了
    • 重点来了,在按命令要求运行.uild.ps1后,会提示'找不到路径“darknetuild_win_releaseDarknetConfig.cmake”,因为该路径不存在',github上也有人提到了同样的问题:https://github.com/AlexeyAB/darknet/issues/5996 这个这个,确实目录下是没有这个文件的,然后也没有什么好的解决办法,感觉可能是作者改项目目录然后和vcpkg的命令没有协调好。所以这也是我为什么在标题里加上了日期,因为我网上看到有其他人vcpkg是可以编译成功的,可能是最近出现的新问题

    cmake方法

    • 需要先安装好opencvcudacudnnvs,这里我参考的是这篇文章的步骤.注意这里cuda安装时会同时安装一个visual studio integration,但是如果你和我一样所示先安装的cuda后安装的vs那么我建议重新下载cuda的安装包安一下。我笔记本的显卡是1050,下载cuda10.1安装后没有成功安装visual studio integration,改为安装cuda10.0后正常。可以进你vs安装目录的下的Common7IDEVCVCTargetsBuildCustomizations看看有没有CUDA XX.X props argets

    • clone好代码后进入darknetuilddarknet,点击darknet.sln打开vs。这里注意要对darknet.vcproj做两种修改:

      1. 将所有的CUDA 11.x(具体数字忘了) props改成自己cuda的版本

      2. 打开darknet项目根目录下的Makefile,往下翻看到ARCH的值和显卡信号的对应,找到你的显卡对应的值:

        image-20210131174945464

        然后在darknet.vcproj搜索compute,把compute和sm后面的数字都换成Makefile中你显卡对应的形式。例如我的显卡是1050,那么就应该改为<CodeGeneration>compute_61,sm_61;compute_61,sm_61</CodeGeneration>。如果不改的话就会爆MSB372错误,这个解决方法是我在github中看到作者回复一个人的issue中找到的,其他博客很少提到(傲娇.jpg)

      3. 成功编译(如果有其他问题自行百度,我想不起来了2333)

      4. 但是!我使用编译出来的.exe文件会爆错!

        image-20210131172545160

        这个错误它的意思可能是文件地址不对,也就是命令行输入的命令参数有问题,但是我把它都改成了绝对路径、怎么改也无济于事,而且没办法debug(或者是我不会233)除非一点一点看源码,在vs里是不能直接debug的,会爆符号缺失(无法找到PBD文件),即使你设置了联网下载dll的符号文件,也有windows自己的符号下载不下来(猜测是闭源文件?)

      5. 但是幸好生成dll用python调用的方法是可用的,这个需要我们再编译那个yolo_cpp_dll.sln项目,也是需要改yolo_cpp_dll.vcxporj两种地方。这个python调用的方法自由度就高多了,可以用来实现各种功能

      6. 生成dll之后可以用darknet_images.py或者darknet_videos.py调用了,其实这一步也是玄学满满,我电脑上安装了三个版本的python,其他两个版本的都会爆找不到dll(即使它的dll路径是正确的),但是anaconda下的python是可以的。而且还可以遇到一些路径问题,这种就尽量尝试把相对路径改成绝对路径试下

      7. 最后成功出图:

        image-20210131173251044

      8. 还有一个要注意的地方,就是如果你和我一样把项目迁移到了另外一台电脑上应用的话(我的1050显存太小,放不下视频检测的模型。。。):

        1. 最好两个windows里opencv安装路径以及cuda的版本是一样的,这样编译后的版本才可能直接用,因为我试图直接调用的时候就爆了找不到文件,错误提示里面的路径是我原来电脑的路径
        2. 如果你这篇文章的方法添加了opencv的属性表,你们就要注意在.vcxporj文件下是有这个路径的,所以如果opencv路径不一样的话需要先到.vcxproj文件下把原来的路径删掉(具体在哪很好找,就是../../opencv这样的路径)再添加新的属性表
      9. 其实还遇到了一些其他的琐碎问题,但是我记不太清了,而且绝大多数能够通过搜索较快解决

      10. 对于自己训练好的模型,提供.data文件(data里主要就是classes的数要和.names文件对上以及.names文件路径正确)、.cfg文件(.cfg文件的最后输出classes也要和上面对上)、.names文件、训练好的.weight文件即可用于GPU加速的视频和图像的目标检测,注意可能要把资源路径变成绝对路径

  • 相关阅读:
    sharepoint无法到搜索人员
    sharepoint 自定义操作 CustomAction
    sharepoint 自定列表总结
    向数据表中插入字符序号,例如"001""002"
    通过sharepoint 客户脚本,验证列表添加页面上的时间
    WebService入门(1)
    Java虚拟机1:什么是Java
    SFTP服务搭建
    Shell学习——特殊变量
    js知识点~扁平数据结构转Tree
  • 原文地址:https://www.cnblogs.com/jiading/p/14353353.html
Copyright © 2011-2022 走看看