Windows+YOLOV4+自己的数据集(自己标注)

之前训练了云服务器上训练了YOLOV3,后来想训练一下YOLOV4,结果发现自己忘得差不多了,因此在训练完打算写一篇备忘,记录一下过程

需求:自己在图片中标注对象,然后训练自己的权重文件,拿到opencv中去用,不涉及到tf,Keras这些东西,就是最简单的训练出yolov4.weights,然后给cv::dnn::readNetFromDarknet()去用就OK

 

数据:个人习惯性先处理数据,因为简单,在任何电脑上只要安装了anaconda即可处理

需求:即标注数据,得到网络输入,终极目标:得到图像中目标的描述文件(txt文件)+图像的目录

最终是要在darknet-master\build\darknet\VOCdevkit\VOC2007\labels文件夹下得到如下 格式的TXT文件

其中darknet-master是从GitHub下载的YOLOV4源码的压缩文件的解压目录文件夹

第一个参数:0是指类别编号

第二个参数:0.4641255605381166是归一化后的中心点X坐标

第三个参数:0.34266926449098883 是归一化后的中心点Y坐标

第四个参数:0.04633781763826607是归一化后的目标宽度W

第五个参数:0.03263516804676084是归一化后的目标高度Y

为了实现这一步,过程与方法有两种:

法一:

(1)安装anaconda,在anaconda中新建labelImgenv环境,在labelImgenv环境中安装labelImg

(1.1)conda create -n labelImgenv

(1.2)conda activate labelImgenv

(1.3)pip install labelImg

(1.4)labelImg

直接使用labelImg标注工具进行标注,这块儿我一直喜欢用anaconda工具安装,使用是选择保存格式为YOLO格式(在save按钮下面,原为pascalVOC,点一下就是YOLO)

(2)第二种方法就是借用以前的coco, vol数据集,写函数把从这些数据集读取目标信息,进行转换,然后写入\labels文件夹中的TXT文件,这种方法我操作过,确实比第一种繁琐一些,主要需要去借用别人的代码,改各种文件路径,最后殊途同归,目的也是数据。根据自己的需求吧,要是想处理coco, vol数据集(不是指格式,而是指借用以前标注的json文件等),就可以这种

环境:

(1)系统:Windows10专业版64位,这个有一点记不清了,好像是Windows10的某些版本不支持CUDA的安装,因此图方便的话,在重做系统的时候尽量不要做一些比较少见+最新的系统(win10一个系统会有很多版本号,在MSDN上下载的时候可以就可以发现),因为硬件NVIDIA显卡可能不支持,特别是显卡较老,很可能不兼容最新系统

故障现象(大致):鲁大师能检测到独显的存在,后面的记不住了,大概率是显卡驱动安装不成功,小概率是CUDA安装不成功,这个可以问问店家,这款显卡测试过哪些版本号的系统,尽量安装测试过的版本号

(2)版本:Windows下训练YOLOV4,需要CUDA>10.0,cudnn>7.0,我用的是CUDA10.2,cudnn7.6.5,我的GPU是NVIDIA GTX 1660

这一步我安装的没有出现错误,也就没什么记录的,教程可以参考:https://blog.csdn.net/m0_37605642/article/details/98854753

其中,关于第二步,配置CUDNN,所谓的合并其实就是

(2.1)把CUDNN文件中bin文件夹中的文件复制到CUDA安装目录下的bin文件夹中去

(2.2)把CUDNN文件中include文件夹中的文件复制到CUDA安装目录下的include文件夹中去

(2.3)把CUDNN文件中lib文件夹中的文件复制到CUDA安装目录下的lib文件夹中去

这一步这篇文章讲的很详细:https://blog.csdn.net/weixin_38673554/article/details/90513732

(3)下载编译darknet:这一步主要就是编译生成darknet.exe(有GPU),无GPU生成darknet_no_gpu.exe

参照:https://blog.csdn.net/clover_my/article/details/89885187

此处需要注意的是:支持YOLOV4的最低版本是OpenCV4.4!!(推理)这个在此处其实不影响你编译,我在GPU上编译的时候是安装的OpenCV4.3,最后也成功编译生成并训练得到了yolov4_final.weights,但是readNetFromDarknet不成功,所以最好一步到位,直接用OpenCV4.4以上版本!!!

(4)数据组织

(4.1 一级目录:VOCdevkit)在D:\........\darknet-master\build\darknet\VOCdevkit文件夹下有一个VOC2007文件夹与train.txt文件(先空着)

(4.1.1 二级目录:VOC2007)VOC2007文件夹下有labels文件夹和JPEGImages文件夹

(4.1.1.1 三级目录一:labels)labels文件夹中是labelImg标注出来的数据,直接拷贝进来即可(我选择性的标注了一些文件,所以编号不连续)

 

(4.1.1.2 三级目录二:JPEGImages)存原始图片

4.2 填写train.txt,里面是JPEGImages里面jpg文件的全路径名,大概这种

新建一个 train.txt,复制:

dir /b/s/p/w *.jpg > train.txt

修改后缀.txt----->.bat

双击运行

得到train.txt,放到文件夹:D:\........\darknet-master\build\darknet\VOCdevkit

5 训练数据集

(5.1修改yolov4.cfg)这个和修改yolov3.cfg基本一样,没啥大区别,这个就是cfg文件比较多,修改哪里的都欧克,但是最后训练的时候要写对,我修改的是darknet-master\build\darknet\x64\cfg文件夹下的

(5.1.1)修改batchsize,可以不改,跑起来后代码会提示你怎么设置

[net]
batch=64
subdivisions=64

(5.1.2)修改classes,搜索,一共有三个,修改成实际数量

(5.1.3)修改filters,比较多,按照filters = ((5 + 类别数) * 3 )修改,方法是搜索filters=255,改成18(我的是类别数 = 1,(5 + 1 )* 3 = 18)

(5.2设置训练路径)打开darknet-master\build\darknet\x64\data下的voc.data文件,修改

classes= 1
train  = D:\。。。。。\darknet-master\build\darknet\VOCdevkit\train.txt
#valid  = D:\。。。。。\darknet-master\build\darknet\VOCdevkit\test.txt
#difficult = data/difficult_2007_test.txt
names = data/voc.names
backup = D:\。。。。。\darknet-master\build\darknet\x64\results

(5.3设置目标名称)打开darknet-master\build\darknet\x64\data下的voc.names文件,修改

填上自己的对象名称即可

 

(5.4)下载预训练模型,放进darknet-master\build\darknet\x64\weights_pr


 

(5.5)训练模型,新建 开始训练.bat 在文件夹:darknet-master\build\darknet\x64下

输入:darknet.exe detector train .\data\voc.data .\cfg\yolov4.cfg .\weights_pr\darknet53.conv.74 .\results

这些路径就是你5.1 / 5.2 / 5/3步骤修改的,所以如果你修改了其他位置的,替换对应位置即可,不太熟悉./的可以直接全路径吧

参数解释:

.\data\voc.data------------------------------------------>darknet-master\build\darknet\data\voc.data

.\cfg\yolov4.cfg------------------------------------>darknet-master\build\darknet\cfg\yolov4.cfg

.\weights_pr\darknet53.conv.74 ------------------->darknet-master\build\darknet\weights_pr\darknet53.conv.74

.\results--------------------------------------------------->darknet-master\build\darknet\results

这块的路径太多,容易乱,最好有自己的习惯

 

有下面这张图应该就OK了,这张是我刚刚用CPU跑的,凑活看看吧

实际上GPU就是快,我在GTX1660上跑的,大概360张左右的图片,50000步跑了24个小时就OK了,在CPU上跑了一下,一步跑了居然五个小时。。。。

CPU跑的话,无非就是就是生成darknet_no_gpu.exe,同时在5.5使用的是darknet_no_gpu.exe 而不是,darknet.exe

 

报错:

(1)

提示:Can't open label file. (This can be normal only if you use MSCOCO): D:/.。。。。/darknet-master/build/darknet/VOCdevkit/VOC2007/labels/010033.txt

原因:打不开文件,因为train.txt中的JPEGImages名称生成的多了,没有对应的labels/010033.txt

解决办法:删掉对应的名称,可以程序可以自己手动

实际上好像你不删也能运行

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
您好!对于Windows 10上使用YOLOv5训练自己的数据集,您可以按照以下步骤进行操作: 1. 安装Anaconda:首先,您需要在Windows 10上安装Anaconda,这是一个用于创建和管理Python环境的工具。 2. 创建虚拟环境:打开Anaconda Prompt,并创建一个新的虚拟环境,以隔离您的项目依赖。 ``` conda create -n yolov5 python=3.8 ``` 3. 激活虚拟环境:激活新创建的虚拟环境。 ``` conda activate yolov5 ``` 4. 克隆YOLOv5仓库:在虚拟环境中,使用Git克隆YOLOv5仓库。 ``` git clone https://github.com/ultralytics/yolov5.git ``` 5. 安装依赖:进入克隆的YOLOv5仓库目录,并安装所需的依赖。 ``` cd yolov5 pip install -r requirements.txt ``` 6. 准备数据集:将您的自定义数据集准备好,并按照YOLOv5的要求进行标注。 7. 配置训练参数:在`yolov5/data`目录下,创建一个新的`.yaml`文件,用于配置您的数据集和训练参数。 ``` cd data cp coco.yaml your_dataset.yaml ``` 编辑`your_dataset.yaml`文件,将相关路径和设置修改为您的数据集信息。 8. 开始训练:回到YOLOv5目录,并运行训练命令。 ``` cd .. python train.py --data data/your_dataset.yaml --cfg models/yolov5s.yaml --batch-size 16 ``` 这是一个简单的示例命令,您可以根据实际情况调整参数。 9. 监控训练过程:训练过程中,您可以通过Tensorboard来监控训练指标和可视化结果。 ``` tensorboard --logdir=runs/train ``` 10. 测试模型:训练完成后,您可以使用训练得到的模型进行目标检测任务。 ``` python detect.py --source your_image.jpg --weights runs/train/exp/weights/best.pt --conf 0.4 ``` 以上是一个基本的流程,您可以根据自己的需求和数据集进行相应的调整和优化。希望对您有所帮助!如果您有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值