python 3.4 vc++编译配置_darknet入门—yolov3目标检测(安装、编译、实现)

本文详细介绍了在Windows 10系统上配置Darknet框架,编译YOLOv3目标检测算法的过程。包括安装Visual Studio 2017、CUDA、CuDNN、Git、CMake和vcpkg,以及使用vcpkg安装pthreads和opencv。在编译过程中,涉及CUDA版本问题,需要修改CUDA配置。最终通过编译生成darknet.exe和GPU/CPU版的dll与lib文件,实现目标检测功能。
摘要由CSDN通过智能技术生成

知乎编辑器效果有限,原文发布在语雀文档上,看上去效果更好~yolo-v3入门—目标检测(安装、编译、实现) · 语雀​www.yuque.com68f63bd82721534c29b8d8f67b5590f0.png

效果图

​简介

Yolo,是实时物体检测的算法系统,基于Darknet—一个用C和CUDA编写的开源神经网络框架。它快速,易于安装,并支持CPU和GPU计算,也是yolo的底层。本文主要介绍在win10系统上配置darknet环境,编译,使用yolo实现开头展示的目标检测效果。

主要包括以下几个步骤:

编译流程 -> 环境安装 -> VS2017配置和编译 -> 运行展示YOLO,美语新词,是You Only Live Once的首字母缩略词,意为你只能活一次,应该活在当下,大胆去做。

本文的YOLO,意为:You Only Look Once,再点进官网,一股暗黑色系地风格让人觉得很magic,编程真有意思~

github:

编译流程

要使用yolo,必须先安装darknet、darknet可以直接在githb上下载压缩包:https://github.com/AlexeyAB/darknet

本文主要介绍darknet在win10上的编译流程。github上介绍了Linux和Windows下darknet的编译,我这里直接用谷歌浏览器翻译了:

1.如何在Linux上编译

只是make在darknet目录中。在make之前,您可以在Makefile:link中设置这些选项GPU=1用CUDA构建以使用GPU加速(CUDA应该在/usr/local/cuda)

CUDNN=1使用cuDNN v5-v7构建以使用GPU加速训练(cuDNN应该在/usr/local/cudnn)

CUDNN_HALF=1 构建Tensor核心(在Titan V / Tesla V100 / DGX-2及更高版本上)加速检测3x,训练2x

OPENCV=1 使用OpenCV 3.x / 2.4.x构建 - 允许检测来自网络摄像机或网络摄像头的视频文件和视频流

DEBUG=1 可以调试Yolo的版本

OPENMP=1 使用OpenMP支持构建,通过使用多核CPU来加速Yolo

LIBSO=1构建使用此库的库darknet.so和二进制可运行文件uselib。或者您可以尝试运行LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./uselib test.mp4如何从您自己的代码中使用此SO库 - 您可以查看C ++示例:https://github.com/AlexeyAB/darknet/blob/master/src/yolo_console_dll.cpp 或者使用这样的方式:LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./uselib data/coco.names cfg/yolov3.cfg yolov3.weights test.mp4

要在Linux上运行Darknet,请使用本文中的示例,./darknet而不是darknet.exe使用,即使用此命令:./darknet detector test ./cfg/coco.data ./cfg/yolov3.cfg ./yolov3.weights

2.如何在Windows上编译(使用vcpkg)将Visual Studio安装或更新到至少2017版,确保将其完全修补(如果不确定自动更新到最新版本,请再次运行安装程序)。如果您需要从头开始安装,请从此处下载VS:Visual Studio 2017社区

安装CUDA和cuDNN

安装git和cmake。确保它们至少在当前帐户的路径上

例如,安装vcpkg并尝试安装测试库以确保一切正常vcpkg install opengl

定义环境变量,VCPKG_ROOT指向安装路径vcpkg

使用名称VCPKG_DEFAULT_TRIPLET和值定义另一个环境变量x64-windows

打开Powershell(作为标准用户)并键入(最后一个命令需要确认并用于清理不必要的文件)

PS \ > cd $ env: VCPKG_ROOT

PS Code \ vcpkg > 。\ vcpkg install pthreads opencv # replace with opencv [cuda]如果你想使用cuda-accelerated openCV[仅限CUDA]使用首选计算功能自定义CMakeLists.txt

使用Powershell脚本构建build.ps1或使用Visual Studio 2017的“打开文件夹”功能。在第一个选项中,如果要使用Visual Studio,您将找到包含所有相应配置的构建后由CMake为您创建的自定义解决方案系统的标志。

环境安装

1.安装Visual Studio2017

安装时依照自己的开发需要,勾选相应的环境:

一定要选下面这个V140工具集,不然用141的会报错.....

安装时没有选完整也没关系,可以在Visual Studio Installer修改

2.安装CUDA和CUDNN

官网下载即可,我的安装包如下:

cuda_9.0.176_win10.exe

cudnn-9.0-windows10-x64-v7.4.2.24

3.安装git和cmake

刚开始,我git版本过低,后来在cmd中用update升级了一下~现在的版本如下:

下载完成,记得配置环境变量:

4.安装vcpkg

安装完成后,用vcpkg安装pthreads和opencv。

cd到vcpkg的主目录,运行命令:.\vcpkg install pthreads opencv

此处我发现,pthreads可以安装成功,opencv总是安装失败.....

看报错信息,下载opencv:3.4.3.tar.gz时报错,于是手动下载tar包,放入vcpkg的downloads目录下,再次尝试安装:

至此,准备工作基本做完,我们可以开始编译darknet了

5.安装opencv

单纯安装opencv对版本没有限制,但是为了和darknet匹配,必须安装特定的版本,darnnet官网要求的版本是opencv 3.x,明确要求小于4.0版。我一次下了多个版本的opencv,发现3.0.0,3.4.0的可用,4.0.1的不可用。实践证明,确实如此,4.0.1的在编译daeknet时VS会报错,说有些接口方法不存在....3.x的版本中有些能用,有些不能用。

下载后解压至任意目录,方便自己使用时能找到即可

6.下载darnnet

VS2017配置和编译

首先找到之前下载的daeknet-master目录,进入->build->darknet文件夹下,可以看见有三个.sln文件,这三个文件是三个VS项目入口,其中darknet.sln主要用来编译darknet,生成darknet.exe可执行文件;

yolo_cpp_dll.sln主要用来编译可供外部使用的GPU版yolo的dll和lib文件;

yolo_cpp_dll_no_gpu.sln主要用来编译可供外部使用的非GPU版(即CPU版)dll和lib。dll动态链接库,lib静态链接库 前面提到过,yolo支持CPU和GPU计算,CPU和GPU运行yolo所依赖的库文件是不同的

双击darknet.sln即可在VS2017中打开这个项目。

VS2017属性配置

找到项目目录,右键点属性:

在属性页面,我们需要经行一系列配置

目标平台版本

目标平台版本即要生成的exe目标运行环境,默认是8.1,可修改为10,不配置也暂时无影响

平台工具集

即VS2017开发平台的工具集,经过采坑发现v141不行、v140可用

VC++目录

主要配2处:包含目录和引用目录,根据自己opencv安装目录配置相应路径.下面以我的路径为例:

包含目录:

D:\software\opencv\opencv3.4.0\opencv\build\include

库目录:

D:\software\opencv\opencv3.4.0\opencv\build\x64\vc15\lib

D:\software\opencv\opencv3.4.0\opencv\build\x64\vc14\lib

编译darknet.exe

现在,我们可以尝试编译了,点击生成​

报异常

异常信息1>------ 已启动生成: 项目: darknet, 配置: Release x64 ------ 1>D:\software\darknet\darknet190226\new\darknet-master\build\darknet\darknet.vcxproj(54,5): error MSB4019: 未找到导入的项目“C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\BuildCustomizations\CUDA 10.0.props”。请确认 声明中的路径正确,且磁盘上存在该文件。 1>已完成生成项目“darknet.vcxproj”的操作 - 失败。 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

解决异常

我们顺着异常提示的文件夹路径点进去发现,确实没有CUDA 10.0.props这个文件,但是有CUDA 9.0.props,原来在当前版本的darknet中,默认使用的CUDA 10.0,我们需要在配置darknet.vcxproj中修改(和darknet.sln在同级目录)

用notepad++修改,将10.0改为9.0即可,总共改头尾两处。​

再次编译

编译成功后,会在darknet-master\build\darknet\x64下生成darknet.exe文件,这个就是可执行的程序。

编译GPU版库

编译GPU版库文件,主要即产生可以支持GPU运行的yolo的dll和lib文件,用于方便在别的C++项目中直接调用,编译前的VS2017配置和上面编译darknet.exe基本类似,此处还需配置一处:

CUDA C/C++ ->Deviece -> Code Generation处。原compute_75,sm_75改为compute_52,sm_52

然后就是正常的生成,生成成功后在darknet-master\build\darknet\x64目录下会新生成:

yolo_cpp_dll.dll和yolo_cpp_dll.lib

编译CPU版库

CPU版本库的编译和GPU类似,就不赘述了

运行展示

1.下载yolov3.weights并放到darknet.exe同级目录下,下载链接:

2.运行

cd到darknet.exe所在目录,运行命令即可。

命令1:darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

效果1:

命令2:

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

效果2:第二张黑天鹅竟然识别成了bird,哈哈哈哈~

Tips:

1.运行时如果提示找不到opencv_world340.dll,需要手动将opencv下的此dll放入darknet.exe运行同级目录下

我的opencv_world340.dll所在目录:

D:\software\opencv\opencv3.4.0\opencv\build\x64\vc14\bin

opencv_world340.dll对应Release版、opencv_world340d.dll对应debug版。

2.如果运行时报内存溢出的异常,需要手动修改yolov3-voc.cfg中的batch和subdivisions,可以都修改为1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值