vs2015+opencv440实现YOLOv4,并训练自己的数据集(完全零基础) 附:利用python接口进行调用
vs2015+opencv440实现YOLOv4,并训练自己的数据集(完全零基础) 附:利用python接口进行调用
最近因为毕设需要,在研究深度学习目标检测的一些算法,具体算法的对比和特点就不详细说了,总之最终确定使用YOLOv4算法。作为深度学习小白,从零开始记录一下自己实现该算法的过程,并且方便自己将来使用。
目前网络上也有很多关于Windows实现YOLOv4的教程,但是总感觉很凌乱,需要不断对比才能找对真正可行的方法,因为本文是一个总结文,希望能给之后学习的人一些帮助。文中用到了一些其他人的程序和图片,我会全部标注原文链接,如有冒犯侵权请原作者联系我删除。
一、环境介绍
对于从零开始的小白,我们需要安装以下软件或环境
- VS2015 ,VS2015是我们用到的编译器,需要安装C++和python环境,python只有在我们训练自己的数据集时才用到;
- opencv440,opencv440是我们用到的图像处理库,opencv从440开始支持了YOLOv4,所以不要下载更低版本;
- NVIDIA驱动程序 ,能够让我们更好地利用自己的显卡;
- CUDA10.2 ,CUDA是NVIDIA推出的计算平台,能够基于NVIDIA显卡架构使用GPU进行复杂的图像运算;
- cuDNN,cuDNN是专门用于CUDA的神经网络加速包,与CUDA配合使用 ;
- YOLOv4相关配置文件
二、环境的具体搭建
- VS2015
可以直接到官网 vs下载地址下载最新的2019社区版(社区版是可以免费试用的),其实不同版本差异并不大,都可以使用。发现自己没有网盘会员上传不了vs2015安装包,要是真的想用2015读者可以自行查找一下。
下载完成以后,点击vs_community.exe程序安装。
在选择功能中选择 C++和python进行安装。接下来耐心等待到安装完成即可。 - opencv440
链接:https://pan.baidu.com/s/1eUb8oJJS22YwXzWsySki1A
提取码:qdpt
下载完成后,进行安装,具体的安装教程可以参考另外一位博主的文章,下面给出链接。opencv安装与环境配置 - NVIDIA驱动程序+CUDA+cuDNN
CUDA与cuDNN的安装教程,参考文章。NVIDIA驱动程序CUDA+cuDNN安装教程 - YOLOv4相关配置文件
链接:https://pan.baidu.com/s/1oh36WVqsBmr3_oC7JGBxeg
提取码:erx3
直接下载这么相关文件。
三、官方模型权重测试
以上环境全部搭建成功以后,就可以进行代码的测试了。在我们下载的YOLOv4相关配置文件中已经给出了测试要用到的代码opencv4_yolov4.cpp。我们新建一个C++项目
将主程序替换成opencv4_yolov4.cpp,并在程序所在位置新建两个文件夹model和image,如图。
直接点击运行即可。
tips:
1.将模式修改为release x64
2.每新建一个程序,若要使用opencv库,都要重新在该程序中进行进行一次opencv环境的配置。
四、训练自己的数据集
4.1 下载darknet-master
训练自己的YOLOv4数据集的时候就需要用到原作者编写的darknet-master了,这里用到的是C语言编写的,可以到原作者的github直接下载。darknet下载地址
4.2 Demo测试
接下来可以参考这篇文章darknet测试的第二、第三两部分,完成简单的demo测试。但是不参考他的第四部分,他的这一部分比较混乱,加下来我会单独进行介绍。
4.3 标注自己的数据集
本文使用labelImg软件进行标注,下载地址,使用教程
标注完成后,我们得到一系列xml文件。
tips: 我们的图片最好使用六位数字进行命名
4.4 训练自己的数据集
4.4.1 创建文件目录
首先在D:\darknet-master\build\darknet目录下新建一个myData文件夹
在myData文件夹下,新建Annotations、Images、ImageSets文件夹,在ImageSets下新建Main文件夹,并在myData下放入之前下载的预训练文件yolov4.conv.137。
在Images文件中存放我们的图片文件,在Annotations文件夹中存放图片对应的xml文件。
4.4.2 划分数据集
接下来在myData文件夹下新建test.py程序,程序代码如下,并运行。
import os
import random
trainval_percent = 0.1
train_percent = 0.9
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets\Main'
total_xml = os.listdir(xmlfilepath)
num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)
ftrainval = open('ImageSets/Main/trainval.txt', 'w')
ftest = open