Yolo工具库darknet的编辑和使用笔记

        写在前面,其实darknet并非是做yolo开发的最优工具,但因为我们之前使用过yolo的其他的版本,上手比较快,因此本次继续使用darknet作为测试工具。

        注:本次编译测试使用的VS版本为2022,其他版本理论上不会有太大出入。


一、下载安装cuda,下载适合自己操作系统的最新版本,

CUDA下载地址:CUDA Toolkit Archive | NVIDIA Developer

cuDNN下载地址:cuDNN Archive | NVIDIA Developer

关于cuda和cudnn的安装可参考:Win10中CUDA、cuDNN的安装与卸载

注意:因为我们需要将darknet编译成vs工程,因此在安装CUDA时,一定要勾选安装Visual Studio Integration

二、从github下载darknet的最新版本(master)分支

地址:GitHub - AlexeyAB/darknet: YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Darknet )

三、build工程

我们使用darknet的c++版本,因此无需手动build一个darknet的工程出来,使用源码包中已经build的工程进行编译。简单编译步骤,可参考darknet的readme文件中的 How to use Yolo as DLL and SO libraries 章节。

如需手动build  darknet的项目工程,可参考我之前的一篇文章,Windows下编译 yolo-fastest 或 darknet 提示CUDA not found 的解决方案_mevender的博客-CSDN博客

四、调整项目配置,此过程需根据本机实际环境设置,下面给出具体的修改项和配置过程

        因为源码中项目build的编译环境版本和环境变量配置与本机有区别,因此我们需要对工程做一定的修改。

        因修改项基本一致,我们这里主要针对yolo_cpp_dll项目做解释,yolo_cpp_dll_no_gpu项目的修改内容误差。

        有两种修改方案:可以直接修改yolo_cpp_dll.vcxproj文件,也可以打开项目后,通过工程属性修改。我们以工程属性修改举例。

        首先在预处理器定义中添加CUDNN OPENCV,其中OPENCV是可选的,因为本系统使用opencv做图像预处理,因此我们需要编译opencv的对应功能接口。

        调整链接器中的附加库目录。将opencv的库目录指向正确的路径(非必选项),项目的原始配置为:$(OPENCV_DIR)\x64\vc14\lib ,但是因为本系统配置的OPENCV_DIR环境变量直接指向了lib目录的上一级,因此将其修改为$(OPENCV_DIR)\lib,下图给出了配置展示

        同理,修改附加包含目录,使其正确指向opencv的include目录。如下图展示

        同时注意上图的蓝色框中的内容,此项配置在原项目属性中不存在,需手动添加

        修改CUDA C/C++中的GPU架构,这一步尤其重要,因为项目中配置的GPU架构版本是最低版本,大概率与本机显卡并不匹配,因此需要手动修改,否则无法编译项目。GUP架构版本可以通过CUDA-Z工具查看,本系统使用CUDA-Z-0.10.251-64bit,打开后,界面展示如下图所示:

        红圈处对应GPU架构版本,6.1对应compute_61,我们使用此值修改项目属性,如下图所示,如果工程属性页中,没有CUDA C/C++项,可以在执行前述配置后,先执行一遍工程编译(虽然会报错),然后再进行后续操作。

        以上配置完成,可能还需要手动修改yolo_cpu_dll.vcxproj文件,将其中所有的CUDA版本号修改为与本机安装的版本号一致,本次编译时将CUDA11.1修改为CUDA12.2,内容可能有两处,如下图所示:

        至此,Release配置项修改完成,但先不要编译,后续还有其他配置需要执行。

五、Debug配置项的修改

        内容与Release相同,不再赘述,但是有一点需要注意,需要将Debug的编译输出文件与Release区分开。我们的将Debug的目标文件名修改 $(ProjectName)_debug,最终生成yolo_cpp_dll_debug.dll文件,注:之所以需要编译debug版本,是因为我们在yolo做自定义代码开发时,无法在Debug模式下使用yolo_cpp_dll的Release版本,因此在自己项目中,我们必须将Debug和Release模式分别引用yolo_cpp_dll的debug和release版本

六、yolo_cpp_dll_no_gpu工程的项目属性修改过程与上述过程相同,不再赘述。

至此配置修改完成,后续为代码修改部分。


七、源码文件位置错误问题。

       ==== 其实我也不太清楚,为什么会出现这个问题====

        我们首先可能需要将getopt.c和getopt.h文件从darknet\3rdparty\getopt目录拷贝到,darknet\src目录,否则无法执行编译。

八、Detector类构造函数的参数类型修改

        打开yolo_cpp_dll工程,修改yolo_v2_class.hpp文件,将构造函数签名修改为如下图所示,传入参数类型从string修改为const char*,因为使用string类型将导致我们很难在自己的代码库中传递参数

        同时修改构造函数实现。

完成修改后,可正常编译yolo_cpp_dll和yolo_cpp_dll_no_gpu库文件。


☆☆☆注意☆☆☆:由于Detector的构造函数签名修改,yolo_console_cpp的对应代码也需要做响应调整,否则,将无法使用yolo_console_cpp进行测试(虽然这可能也无关紧要)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值