基于tensorflow2的yolov4训练自己的数据集(二)

目录

一、windows系统训练基于darknet环境的yolov4模型

1.1 修改部分必要的配置文件

1.1.1 数据集配置文件修改

1.1.2 模型配置文件修改

1.2 训练darknet环境下的yolov4模型

二、linux系统训练基于darknet环境的yolov4模型


基于tensorflow2.0的yolov4训练自己的数据集(二)

      在windows和linux分别训练了基于tensorflow2的yolov4模型,将方法记录下来,方便其他同学参考借鉴。内容较多,分批写出来。上一次写到制作数据集及windows平台下编译生成darknet环境下的yolov4程序:上一集,继续往下进行。

一、windows系统训练基于darknet环境的yolov4模型

1.1 修改部分必要的配置文件

训练模型之前,需要对数据集和模型的配置信息进行修改。

1.1.1 数据集配置文件修改

进入到darknet\build\darknet\x64路径下,如下图所示:

里面会有这几个文件夹,其他的暂时不用管。“backup”文件夹里面存放的是训练后缀为.wheights的yolov4模型文件;“cfg”里面是对模型、模型参数、训练的超参数等的配置,可以根据自己的需求进行修改;“data”存放的是darknet环境yolov4需要数据集的配置信息。

首先修改数据集的配置文件,进入data文件夹里修改们用到的配置文件,进入文件夹之后发现有默认的的两个文件,其他的暂时不用管,如下图所示:

复制这两个文件,并根据自己的需要修改文件名,训练时候我们要用到这两个文件。

“.name”后缀的文件存放的是模型要识别的类型,进去如下图所示:

根据自己要训练的类别进行修改,比如 “类型1” 、“类型2”即可,还是很方便的吧^_^。

“.data”文件是控制数据集的路径,模型生成的路径等必要信息,如下图所示:

将classes修改成自己的类别数量,train、valid、names、backup分别存放你的训练集、测试集、类别和模型文件的路径,根据自己的实际路径进行修改,eval不用管。

这两个和文件修改完成后,针对数据集部分的配置信息就修改完毕。

1.1.2 模型配置文件修改

返回到“x64”路径,进入“cfg”文件中,如下图所示:

发现一堆v3、v4的配置文件,v3的我们不管,我们找v4的配置文件,我们复制yolov4-custom.cfg修改自己的名字,并修改里面必要的信息,打开该文件如下图所示:

文件太大了,一共1159行,不全部在这篇博客展示出来了,说几个比较重要的参数,过些天我再出一份解释yolov4配置文件的博客:

最上面这几行注释掉的是测试时候使用的,训完之后将下面训练同样的字段屏蔽掉,打开batch和subdivisions即可进行测试(其实,修改训练的batch和subdivisions为1是一样的)。训练时候不用管这两个参数。

batch就是batch size数量,根据自己电脑配置进行修改。

subdivisions是将batch再进行细分,就是单次训练是N=batch/subdivisions的数据送入网络,经过N次完成一次batch的训练。如果显存大,可设batch=64 subdivisions=16),sub越大占用内存越多,当然效果也更理想,根据GPU配置设置吧。

再往下需要修改witdth和height,这两个参数由于yolo下采样的原因必须设置为32的倍数,图片越大占用空间越多当然效果更好,根据个人具体情况设置。channels根据数据集的通多设置。

max_batches为训练多少次batch后停止学习,steps为训练多少batch时候进行学习率改变,steps和scales是成对出现的。例如上图默认的配置信息为在400000和450000分别对学习率衰减0.1

上面的设置完毕之后,cfg文件下面就是yolov4的模型了,如果效果可以满足自己的需求可以不用修改网络,这里不做对网络模型的修改的介绍。

将cfg文件定位到1055行,如下图所示:

cfg中一共有三个[yolo]模块,这里我们进行最基础的修改,其他优化部分我在后面的博客中在写出来,这里只做能达到训练我们自己的数据集的效果。

修改每个[yolo]中的classes和上面对应的filters。公式:filters =(classes+5)* 3。

例如:你有8个类别需要识别,即classes = 8,那么filters对应修改为filters = (8 + 5)*3=39

将三个[yolo]模块都对应修改,到此最基础的网络训练我们就准备好了。

1.2 训练darknet环境下的yolov4模型

返回x64文件夹的路径,将下载的预训练权重文件复制到当前路径下,权重文件:yolov4.conv.137。

打开cmd,cd到x64路径下执行下列命令:

darknet.exe detector train your.data cfg/your.cfg yolov4.conv.137 

运行过程如下图所示:

上见面指令的"your.data"和"cfg/your.cfg"是前面步骤中,你设置的.data文件的路径、data文件名和cfg文件的文件名。

如果要打开训练信息界面 则后面添加-map指令:

darknet.exe detector train your.data cfg/your.cfg yolov4.conv.137 -map

运行过程如下图所示:

在backup文件夹里面会生成.weights的权重文件,可以利用下面指令测试(根据自己的路径和名称):

darknet.exe detector test your.data cfg/your.cfg your_last.weights your.jpg 

等待模型的训练完成即可,如果训练过程中模型满足的你需求可以直接停止测试,使用训练出来的模型即可。到此,windwos平台下训练yolov4模型基本完毕。

二、linux系统训练基于darknet环境的yolov4模型

linux下整体与windows基本一致,但是不同的是编译生成最后的darknet文件的方式不同。windows使用现有的vs工程直接编译,linux则使用提供的makefile编译生成最后的darknet文件。linux有cmake和make两种方式生成dakrnet文件,这里使用make方式。

l返回工程的主目录(默认的是darknet-master)中。找到makefile文件,打开修改makefile文件,如下图所示:

上根据自己的环境配置是否有GPU、CUDNN、OPENCV等,有的设置为1,没有的设置为0,修改后保存makefile,下图是官方对应的解释。

GPU=1 to build with CUDA to accelerate by using GPU (CUDA should be in /usr/local/cuda)
CUDNN=1 to build with cuDNN v5-v7 to accelerate training by using GPU (cuDNN should be in /usr/local/cudnn)
CUDNN_HALF=1 to build for Tensor Cores (on Titan V / Tesla V100 / DGX-2 and later) speedup Detection 3x, Training 2x
OPENCV=1 to build with OpenCV 4.x/3.x/2.4.x - allows to detect on video files and video streams from network cameras or web-cams
DEBUG=1 to bould debug version of Yolo
OPENMP=1 to build with OpenMP support to accelerate Yolo by using multi-core CPU
LIBSO=1 to build a library darknet.so and binary runable file uselib that uses this library. Or you can try to run so LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./uselib test.mp4 How to use this SO-library from your own code - you can look at C++ example: https://github.com/AlexeyAB/darknet/blob/master/src/yolo_console_dll.cpp or use in such a way: LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./uselib data/coco.names cfg/yolov4.cfg yolov4.weights test.mp4
ZED_CAMERA=1 to build a library with ZED-3D-camera support (should be ZED SDK installed), then run LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./uselib data/coco.names cfg/yolov4.cfg yolov4.weights zed_camera
You also need to specify for which graphics card the code is generated. This is done by setting ARCH=. If you use a never version than CUDA 11 you further need to edit line 20 from Makefile and remove -gencode arch=compute_30,code=sm_30 \ as Kepler GPU support was dropped in CUDA 11. You can also drop the general ARCH= and just uncomment ARCH= for your graphics card.

在shell中cd到当前目录,执行make命令

make

没有错误的话,会生成darknet文件,如下图所示:

有了这个文件就可以开始训练模型了,与windows下使用训练方式一样,只不过用./darknet代替了darknet.exe。

./darknet detector train ./cfg/coco.data ./cfg/yolov4.cfg ./yolov4.weights#训练
./darknet detector test ./cfg/coco.data ./cfg/yolov4.cfg ./yolov4.weights#测试

训练过程与windows一致,这里就不赘述了,到此,我们就训练完成了自己数据集的yolov4模型,但是基于darknet的,接下来我们就实现如何将模型转化为tensorlfow中使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值