ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用和训练YOLOv4,window+darknet+opencv+vs2019+yolomark+cuda+cudnn

2021-04-15 21:31:19  阅读:425  来源: 互联网

标签:YOLOv4 版本 vs2019 darknet yolo cudnn yolov4 CUDA https


记录一下训练和使用yolov4的过程。包括前期的部署

参考了很多博文和AB大神官网的教程,这边就不列出了。但是会给出我认为很详细的B站视频教程,作为备忘。

实际上yolov4在opencv4.4以后的版本都已经支持,所以调用可以直接用opencv,但是训练还是需要darknet,这个过程省不了。

我自己记录的过程比较繁复,并且上传不了图,所以我把中间参考过的很有用的连接放在下面:

https://www.bilibili.com/video/BV1FT4y1E74V?p=119         ——吴恩达的有关yolo部分的讲解,虽然只涉及前两版yolo,但是很好懂。

https://www.bilibili.com/video/av370540815/    ——up主对yolo4的配置过程基本和我一致,很有用!!但是不幸的是他没有更深入得谈训练这块,训练可以到AB大佬官网看

https://blog.csdn.net/qq_45940791/article/details/108196848 ——yolo_mark的使用博文,用于标记和训练

https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects   ——AB大佬github的官网,下面教程很详细,但是未必能完全帮到我们

还有些链接我略过了,CSDN上有些有用,有些写的不够详细,很容易产生误导。得确认一些版本问题,比如cuda之类的,另外如果步骤一模一样仍然有问题,可能是vs的版本问题,需要进行一些调整,darknet和yolo_mark以及cmake是没什么问题的。

运行yolo(GPU)

整个运行及训练环境如下:

本机运行环境为:

windows10 | cpu Intel Core i5-9400F | gpu NVIDIA Geforce GTX 1660 | Opencv 4.5.1 | Visual studio 2019 | cmake 3.18.6

 

1.首先需要确定自己笔记本电脑GPU支持的cuda版本,在 NVIDIA控制面板中点击帮助,组件,即可看到CUDA 11.2.136,本人安装版本cuda10.1,不能高于查询版本

//电脑桌面右键“NVIDIA控制面板”-“帮助”-“系统信息”-“组件”,可以看到cuda版本。我的是11.1.96

 

2.去NVIDIA官网下载驱动,以及cuda和cudnn的环境变量配置

CUDA10.1 https://developer.nvidia.com/cuda-10.1-download-archive-update2

 

安装完后记得看看有没有环境变量,如果没有可以自己加上。

 

 

 

CUDNN自行寻找对应版本或者自行上网搜索资源

注意cudnn的版本也要和cuda匹配,而且要大于7.5版本

官方链接   https://developer.nvidia.com/zh-cn/cudnn

 

建议CUDA自定义安装,并且不要勾选VS integration选项

快捷键"WIN+R"调出运行窗口,输入cmd后回车,在弹出的窗口中输入:

nvidia-smi或nvcc -V确定安装成功

 

3.将CUDNN复制到对应文件夹下

 

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2 我的电脑CUDA路径

 

4.Cmake编译流程(相对复杂)

先在官网下载cmake  https://cmake.org/download/

安装好以后利用cmake-gui进行编译

打开CMake,选择源码路径,以及生成路径,选择对应VS版本。开始第一次Configue。

 

第一次configure完成之后,勾选BUILD_opencv_world.

 

以及,勾选OPENCV_DNN_CUDA,选择解压好的opencv_contrib中modules路径添加进来。

勾选WITH_CUDA。

 

进行第二次Configure,Configure完成之后可能会报错,此时不管他,根据GPU算力表选择合适的CUDA_ARCH_BIN值,如我的是GTX1660,则将CUDA_ARCH_BIN其余值删除,只留下7.5。然后勾选CUDA_FAST_MATH,点击Configure。

 

 

等待Configure完成之后,查看是否检测到了CUDA和cuDNN,都出现YES之后,说明没有问题。这边是一个坑,需要注意,如果没有检测到的话,需要确认是否CUDA和cuDNN版本正确,否则后面的编译将不会编译CUDA模块,白白浪费时间。确认之后,点击Generate

 

点击Open Project打开工程,在Release模式下右键点击ALL_BUILD,生成,时间较长

 

生成之后,右击INSTALL->仅用于项目->仅生成INSTALL

 

到这边就编译好了,Debug版本同理

5.需要配置opencv相关的环境变量,包含目录,库目录和附加依赖项。(系统环境变量就不附图了,CSDN很多这种教学)

 

 

 

 

6.测试运行(在GPU上)

在很简单的通用的opencv调用yolo的代码前面加上五行:

String cfg = "./model/yolov4-hand.cfg";

String weight = "./model/yolov4-hand_last.weights";

dnn::Net net = readNetFromDarknet(cfg, weight);

        net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);

net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA);

这样就能在VS2019中利用opencv4以上版本调用yolov4并且GPU加速了。

 

 

 

训练

训练自己的数据集则必须用到几样东西,

1.darknet框架,得调整一些参数(当然,这个通常也被用来运行,但是我在上一步中并没有先用darknet);

2.标签工具,比如label img或者yolo_mark(涉及到怎么用)

3.图片集(想必后续要么用python的爬虫软件,要么自己拍摄数据集)

 

训练步骤:

1.下载darknet框架:

https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects

然后下载权重文件yolov4.conv.137(我很多这个文件)

 

2.修改原始cfg文件

创建一个yolo-obj.cfg文件(内容复制yolov4-custom.cfg),然后进行如下修改:

. batch=64

. subdivisions=16

. max_batches 改为训练的类数*2000

. 下面的step分别改成 类数*2000*0.8和类数*2000*0.9

. Width和height改成416或者任意32的倍数

. 在3处classes=80的地方进行修改(改成自己的类数)(每个yolo层次中分别有一处)

, 修改每个yolo层次上方的filter=255,改成=(类数+5)*3(共3处)

.

3.建立模板文件夹

 

这个文件夹随便命名,然后里面要有:

1.yolov4.conv.137权重文件

2.自己修改完的yolov4-obj.cfg文件

3.obj.names文件(里面只是类的name而已)

4.obj.data文件

 

5.图像文件夹,当然,文件夹里还有一些别的txt文档,后续再说,以及train.txt,这个也后续再说。

6.backup文件夹:文件夹里主要存放训练完成以后的weight文件,可以直接拿去测试的权重文件(训练完才有)

 

4. 用标注软件进行标注。

首先到github下载一个yolo_mark

https://github.com/AlexeyAB/Yolo_mark

然后用opencv4.5.0对它进行环境配置(因为它老是报错opencv_world450找不到)

 

配置完环境(也就是系统环境变量,包含目录,库目录,附加依赖性),生成解决方案,或者直接运行完,就会有yolo_mark的可执行文件,然后就能标注了

 

需要注意图片文件夹的位置,标注完会自动生成每一张图片对应的txt文件,以及总的train.txt文件。

5.开始训练

在darknet文件夹空白处按住shift+右键,选择在此处打开XX窗口,输入命令darknet.exe detector train hand/……………………………这一串。然后就可以开始训练了。

得到的会是weight文件,可以直接作为调用函数的输入

 

标签:YOLOv4,版本,vs2019,darknet,yolo,cudnn,yolov4,CUDA,https
来源: https://blog.csdn.net/qq_38720453/article/details/115740143

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有