Darknet下训练测试评估yolov4(big)模型

darknet 是由 C 和 CUDA 开发的,不需要配置其他深度学习的框架(如,tensorflow、caffe 等),支持 CPU 和 GPU 运算,而且安装过程非常简单。

背景:ubuntu18.04

cuda 10.2     cudnn765

一、一些准备

1  cmake安装和查看版本(安装之后补充)

cmake -version

2  opencv安装和查看版本(安装之后补充)

# 安装pkg-config
sudo apt-get install pkg-config
pkg-config --modversion opencv4 

3  下载项目

git clone https://github.com/AlexeyAB/darknet.git 

4  修改darknet/Makefile,即修改一些基本配置

cd darknet  # 在darknet目录里即可
vim Makefile  # 或直接打开Makefile文件

i”:插入修改,“Esc”:退出插入,“:wq” +“回车键”:保存并退出。

(安装了opencv,OPENCV=1)

Darknet下训练测试评估yolov4(big)模型_第1张图片

编译(或:make)(就算不执行这一步的修改,git下来之后也需要编译)

make clean;make all

5  在darknet项目里下载权重(我这里使用了yolov4)

wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights   

6  暂时在darknet里新建weights文件夹,方便管理weights们

7  测试:

下载已有的weights:

官网   GitHub - AlexeyAB/darknet: YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Darknet )     Pre-trained models

点击或  

wget

https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights
 

Darknet下训练测试评估yolov4(big)模型_第2张图片

# 在darknet根目录里:
./darknet detector test cfg/coco.data cfg/yolov4.cfg weights/yolov4.weights  data/dog.jpg

(以后推理也用这个格式:)

 ./darknet detector test
config.data、cfg、weights、数据的路径  -thresh 0.6
# 阈值设置可加可不加:-thresh指的是置信度多少下的推理  
#(0.6是显示预测值大于60%的标签)

Darknet下训练测试评估yolov4(big)模型_第3张图片

 Darknet下训练测试评估yolov4(big)模型_第4张图片

会显示结果,也会在根目录里生成: 

Darknet下训练测试评估yolov4(big)模型_第5张图片

二、开始训练啦

 1  数据集的准备:train和test(这里暂时无,可放),里面是图片和标签

Darknet下训练测试评估yolov4(big)模型_第6张图片

—— 数据集目录名(CLT34)

        ——train目录

                ——images目录(里面是图片)

                ——labels目录(里面是txt的label)

        ——train.list(图片绝对路径)

生成list命令: 

 train(训练集)和vaild(测试集)写.jpg的list:

在数据集目录名里面运行终端(第一个):

# 含义:列出train里面的jpg,写进list里面
find `pwd`/train -name \*.jpg > train.list
find `pwd`/test -name \*.jpg > test.list

生成:

       

 参考文件的格式,不要参考构造

Darknet下训练测试评估yolov4(big)模型_第7张图片

(另外一种情况:images和label好像是要放一起,自己复制粘贴到images里面,否则会报错cant open)

 1.1 我这里意图把把默认的(JPEGImages)那个图片文件夹的名字改成简洁的上面的images,于是需要在里做一下更改:

修改darknet的src/utils.c之后就可以分开放,修改275行,将注释去掉:

2 其他训练需要的内容准备:

为了自己方便训练,将所有训练要使用的材料放到一个文件夹里(应该是必须在darknet根目录下放文件夹),如图,看到里面有5个需要放置的东西,下面逐一介绍。 

 (config.两个的格式也可以是.txt,如:name.txt   data.txt)

Darknet下训练测试评估yolov4(big)模型_第8张图片

2.1   weight里面:再次下载预训练权重:yolov4.conv.137(慢)

官网啥都有:GitHub - AlexeyAB/darknet: YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Darknet )

(区分pre-trained model & pre-trained weights )

Darknet下训练测试评估yolov4(big)模型_第9张图片

点击下载,或复制其链接然后:

wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.conv.137

2.2  cfg里面:复制darknet/cfg里yolov4-custom.cfg一份过来,并随意改名为 yolov4-obj.cfg

修改内容:

(1)testing:测评模型时batch、subdivisions必须为1,训练注释掉(下面有图)。不注释我这里会出现error,但enter可以跳过。但不清楚对训练是否存在影响。

Darknet下训练测试评估yolov4(big)模型_第10张图片

(2)batch64,sub16.( 相当于batch_size是4)

(本地测试显卡拉的话,batch这里设置1,sub4)

(3)width和height也根据自己配置调小:608 to 416,我608会报错,改成416

(4)max_batches:一般一个类2000次,我没设置,同时修改steps=0.8max_batches,0.9max_batches。   训练次数达到max_batches后停止学习,一次为跑完一个batch,也就是别的深度学习模型的一个iteration(epoch=iteration*batch)

(5)(learning_rate开始训练前一般设置在0.001~0.01)

Darknet下训练测试评估yolov4(big)模型_第11张图片

(6)修改每个[yolo]层下的classes,以及每个[yolo]层前一个[convolutional]的filters。(这里有三个yolo层

【filters = (classes + 5)* 3】(3是yolo层的个数,大模型是3个yolo层)我是34个类,所以是117。

(7)至于anchor:好像可以重新聚类生成,但我不太会,留个坑4  config.names放自己的类

2.3 config.names   

Darknet下训练测试评估yolov4(big)模型_第12张图片

 2.4  config.data    这个名字与格式可以是  .txt、.list   如:name.txt、name.list等

里面要写train的文件

Darknet下训练测试评估yolov4(big)模型_第13张图片

 先说后两个,比较简单,写之前说的config.names路径和权重存储路径

于是在data里生成了 train.list和test.list,把这config.data里面的train和valid路径补充好

3 训练:

./darknet detector train /home/susan/darknet/CLT34New/config.data /home/susan/darknet/CLT34New/yolov4-obj.cfg /home/susan/darknet/CLT34New/yolov4.conv.137 -map

(本地) 

 ./darknet detector train build/darknet/x64/data/config.data build/darknet/x64/data/cfg/yolov4-obj.cfg build/darknet/x64/data/weights/yolov4.conv.137

 backup里生成了权重;会出现图片

Darknet下训练测试评估yolov4(big)模型_第14张图片

4 test:

./darknet detector map /home/susan/darknet/CLT34New/config.data /home/susan/darknet/CLT34New/yolov4-obj.cfg /home/susan/darknet/CLT34New/backup/yolov4-obj_best.weights

只需要:a.准备测试集(test文件夹里:images、labels、test.list),b.准备 backup里生成的新权重,c.修改config.data里面的valid路径,d.确保names路径正确。

结果例子:

Darknet下训练测试评估yolov4(big)模型_第15张图片

5 推理只能生成一张图片

补充:

一、下面有个小例子讲解2.2(2)这个设置:

  1. batch=64    这儿batch与机器学习中的batch有少许差别,仅表示网络积累多少个样本后进行一次BP(其他地方一个batch后就开始反向传播)
  2. subdivisions=16    这个参数表示将一个batch的图片分sub次完成网络的前向传播
  3. 在Darknet中,batch和sub是结合使用的,例如这儿的batch=64,sub=16表示训练的过程中将一次性加载64张图片进内存,然后分16次完成前向传播,意思是每次4张,前向传播的循环过程中累加loss求平均,待64张图片都完成前向传播后,再一次性后传更新参数,subdivisions越大,可以减轻显卡压力
  4. sub一般设置16,不能太大或太小,且为8的倍数,其实也没啥硬性规定,看着舒服就好。batch的值可以根据显存占用情况动态调整,一次性加减sub大小即可,通常情况下batch越大越好.

二、训练时终端出现:

  为观察暂停:

How to train (to detect your custom objects)

训练次数达How to train (to detect your custom objects)到max_batches后停止学习,一次为跑完一个batch

 Region xx: cfg文件中yolo-layer的索引;
Avg IOU:当前迭代中,预测的box与标注的box的平均交并比,越大越好,期望数值为1;
Class: 标注物体的分类准确率,越大越好,期望数值为1;
obj: 越大越好,期望数值为1;
No obj: 越小越好;
.5R: 以IOU=0.5为阈值时候的recall; recall = 检出的正样本/实际的正样本
0.75R: 以IOU=0.75为阈值时候的recall;
count:正样本数目。
 

在darknet在默认的训练情况下在1000次之前每100次保存一次模型权重,1000之后则每10000次才保存一次模型权重

三、显卡显示:

train的时候:

 Darknet下训练测试评估yolov4(big)模型_第16张图片

 四、另外:voc标准数据集(可参考这位博主)

没试过

Darknet框架下如何利用自己的数据集训练YOLOv4模型_乐观的lishan的博客-CSDN博客_darknet yolov4

可以根据~/darknet/scripts/voc_eval.py    将voc生成txt 


 

你可能感兴趣的:(计算机视觉,目标检测,神经网络)