(给DotNet加星标,提升.Net技能)
转自:叮咚z cnblogs.com/zypblog/p/13656366.html
概述
官网:https://pjreddie.com/darknet/
Darknet:https://github.com/AlexeyAB/darknet
C#封装代码:https://github.com/zhang8043/YoloWrapper
YOLO: 是实现实时物体检测的系统,Darknet是基于YOLO的框架
采用C#语言对 YOLOv4 目标检测算法封装,将模型在实际应用系统中落地,实现模型在线远程调用。
环境准备
本章只讲解如何对YOLOv4封装进行详解,具体环境安装过程不做介绍
查看你的GPU计算能力是否支持 >= 3.0:https://en.wikipedia.org/wiki/CUDA#GPUs_supported
Windows运行要求
CMake >= 3.12: https://cmake.org/download/
CUDA >= 10.0: https://developer.nvidia.com/cuda-toolkit-archive
OpenCV >= 2.4: https://opencv.org/releases/
cuDNN >= 7.0: https://developer.nvidia.com/rdp/cudnn-archive
Visual Studio 2017/2019: https://visualstudio.microsoft.com
我所使用的环境
系统版本:Windows 10 专业版
显卡:GTX 1050 Ti
CMake版本:3.18.2
CUDA版本:10.1
OpenCV版本:4.4.0
cuDNN版本:10.1
MSVC 2017/2019: Visual Studio 2019
程序代码准备
源代码下载
下载地址:https://github.com/AlexeyAB/darknet
使用Git
clone https://github.com/AlexeyAB/darknet
代码结构
将YOLOv4编译为DLL
详细教程:https://zhuanlan.zhihu.com/p/97605980,这个教程描述的很详细。
进入 darknet\build\darknet 目录,打开解决方案 yolo_cpp_dll.sln
设置Windows SDK版本和平台工具集为当前系统安装版本
设置Release和x64
然后执行以下操作:Build-> Build yolo_cpp_dll
已完成生成项目“yolo_cpp_dll.vcxproj”的操作。
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
在打包DLL的过程中可能遇到如下问题
C1041
MSB3721
命令“"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nvcc.exe" -gencode=arch=compute_30,code=\"sm_30,compute_30\" -gencode=arch=compute_75,code=\"sm_75,compute_75\" --use-local-env -ccbin "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\HostX86\x64" -x cu -IC:\opencv\build\include -IC:\opencv_3.0\opencv\build\include -I..\..\include -I..\..\3rdparty\stb\include -I..\..\3rdparty\pthreads\include -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include" -I\include -I\include -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include" --keep-dir x64\Release -maxrregcount=0 --machine 64 --compile -cudart static -DCUDNN_HALF -DCUDNN -DGPU -DLIB_EXPORTS -D_TIMESPEC_DEFINED -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS -DWIN32 -DNDEBUG -D_CONSOLE -D_LIB -D_WINDLL -D_MBCS -Xcompiler "/EHsc /W3 /nologo /O2 /Fdx64\DLL_Release\vc142.pdb /Zi /MD " -o x64\DLL_Release\dropout_layer_kernels.cu.obj "D:\darknet\src\dropout_layer_kernels.cu"”已退出,返回代码为 2。yolo_cpp_dllC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations\CUDA 10.1.targets757
解决方法
在VS 2019 工具》选项》项目和解决方案》生成并运行 中最大并行项目生成数设为 1
在VS 2019 项目-》属性-》配置属性-》常规 将Windows SDK版本设置为系统当前版本即可
封装YOLOv4编译后的DLL
1、进入 darknet\build\darknet\x64 目录,将 pthreadGC2.dll 和 pthreadVC2.dll 拷贝到项目 Dll 文件夹
2、将编译后的YOLOv4 DLL文件拷贝到项目 Dll 文件夹
3、进入 darknet\build\darknet\x64\cfg 目录,将 yolov4.cfg 拷贝到项目 Cfg 文件夹
4、进入 darknet\build\darknet\x64\data 目录,将 coco.names 拷贝到项目 Data 文件夹
5、下载 yolov4.weights 权重文件 拷贝到 Weights 文件夹,文件245 MB https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights
项目文件
代码下载:https://github.com/zhang8043/YoloWrapper
1、YoloWrapper - YOLOv4封装项目
Cfg - 配置文件夹
Data - label文件夹
Dll - YOLOv4 编译后的DLL文件夹
Weights - YOLOv4 权重文件夹
BboxContainer.cs
BoundingBox.cs
YoloWrapper.cs - 封装主文件,调用 YOLOv4 的动态链接库
2、YoloWrapperConsole - 调用封装DLL控制台程序
Program.cs - 控制台主程序,调用 YOLOv4 封装文件
代码
YOLOv4封装项目
YoloWrapper.cs - 封装主文件,调用 YOLOv4 的动态链接库
using System;
BboxContainer.cs
using System.Runtime.InteropServices;
BoundingBox.cs
using System;
调用封装DLL控制台程序
BoundingBox.cs
using ConsoleTables;
测试返回结果
控制台
- EOF -
推荐阅读 点击标题可跳转 C#网络编程的最佳实践 ASP.NET Core进程内与进程外的性能对比 .NET在Windows上使用Jenkins做CI/CD那些事看完本文有收获?请转发分享给更多人
关注「DotNet」加星标,提升.Net技能
好文章,我在看❤️