当前位置: 首页 > 工具软件 > Tiny4py > 使用案例 >

tiny识别不出 yolov4_基于 Yolov4 和 Yolov4-tiny 的 Human Detector 训练记录

淳于俊迈
2023-12-01

基于 Yolov4 和 Yolov4-tiny 的 Human Detector 训练记录

网络训练

序言本实验总体目标是基于 Yolov4 和 Yolov4-tiny,训练仅包含“人类”一类的人体检测器(Human Detector);

本文档包含:

Human Detector 使用步骤:描述如何使用预训练好的基于 Yolov4 和 Yolov4-tiny 的 Human Detector(以下简称 HD_yolov4, HD_yolov4_tiny);

自定义数据集训练 Yolov4 & Yolov4-tiny:描述如何使用自定义数据集训练 Yolov4 和 Yolov4-tiny;

性能对比: Yolov4 和 Yolov4-tiny 分别作为 Base Model 的 Human Detector 精度和速度对比。

基本信息数据集:COCO 2017 的仅 human 类

1、Human Detector 使用步骤下载 pretrained model:

新建 backup 文件夹,并将以下 pretrained model 权重文件放入。

编译:

视频 demo 测试:

以 HD_yolov4_tiny 为例,通过以下命令对测试视频 tslist.mp4(提取码:h21b) 进行检测,并输出保存为 tiny_yolov4_demo.mp4。

./darknet detector demo data/obj.data cfg/human_detector_yolov4-tiny-custom.cfg backup/human_detector_yolov4-tiny-custom_best.weights -ext_output tslist.mp4 -i 0 -thresh 0.30 -out_filename tiny_yolov4_demo.mp4

data/obj.data 中可进行测试集配置

cfg/human_detector_yolov4-tiny-custom.cfg 是模型的配置文件

./backup/human_detector_yolov4-tiny-custom_best.weights 是上述下载的 pretrained model

-ext_output 是在画面中显示检测 bbox

-i 输入视频,默认为 0

-thresh 检测出的 bbox 阈值,低于该阈值的 bbox 框将不被显示在画面中

-out_filename 是输出视频的命名

假如视频帧率太大不方便查看,可用以下命令将其转换为帧率为 10 的视频片段。

ffmpeg -y -r 30 -i tiny_yolov4_demo.mp4 -r 10 tiny_yolov4_demo_fps10.mp4

可以直接运行 video_tiny.sh & video_yolov4.sh 脚本分别对 HD_yolov4_tiny 和 HD_yolov4 进行测试。

测试模型性能:

以 HD_yolov4_tiny 为例,测试模型精度 mAP (mean average precisions):

./darknet detector map data/obj.data cfg/human_detector_yolov4-tiny-custom.cfg ./backup/human_detector_yolov4-tiny-custom_best.weights

可直接运行 map_yolov4.sh & map_tiny.sh 进行测试

以 HD_yolov4_tiny 为例,测试模型速度FPS:

./darknet detector demo data/obj.data cfg/human_detector_yolov4-tiny-custom.cfg backup/human_detector_yolov4-tiny-custom_best.weights tslist.mp4 -benchmark

运行 fps_yolov4.sh & fps_tiny.sh 进行测试

2、自定义数据集训练 Yolov4 & Yolov4-tinyYolov4 和 Yolov4-tiny 模型训练不同之处仅在于配置文件不同,即2.1 准备文件不同,数据集配置和训练和测试命令格式一致,因此本节只区分2.1 准备文件部分,其他部分的参数请自行替换。

2.1 准备文件修改 cfg/coco.data 为 cfg/obj.data:

classes = 1

train = /hdd01/wanghuijiao/darknet/data/train2017_human.txt

valid = /hdd01/wanghuijiao/darknet/data/val2017_human.txt

names = ./data/obj.names

backup = ./backup

eval=coco

修改 data/coco.name,新文件命名为 data/obj.names,删除除person之外的其他 79 类标签,最终 obj.name 文件内容为:

person

(HD_yolov4)修改 yolov4.cfg,新文件命名为 whj_yolov4.cfg,修改以下行:

width=512 (需被32整除)

height=512(需被32整除)

subdivisions=8 (若 run time error,则改成16)

max_batches=6000(=2000*检测类别数,注意:该数需不少于6000,且不少于训练图像数量)

steps=4800,5400 (max_batches的80%,90%)

修改 3 个 [yolo] 层的 classes=1

修改 3 个 [yolo] 层前 3 个 [convolutional] 层的 filters=255 为 filters=(classes+5)*3=18

3`.(HD_yolov4_tiny)修改 cfg/yolov4-tiny-custom.cfg, 新文件命名为 human_detector_yolov4-tiny-custom.cfg,修改以下行:

width=512 (需被32整除)

height=512(需被32整除)

subdivisions=8 (若 run time error,则改成16)

max_batches=6000(=2000*检测类别数,注意:该数需不少于6000,且不少于训练图像数量)

steps=4800,5400 (max_batches的80%,90%)

(HD_yolov4)csdarnet53-omega.conv.105 -这是在ImageNet上预训练过的 darknet53 网络前105层:从这下载 csdarknet53-omega_final.weights

取前105层

./darknet partial cfg/csdarknet53-omega.cfg csdarknet53-omega_final.weights csdarknet53-omega.conv.105 105

4`. (HD_yolov4_tiny)yolov4-tiny.conv.29

从这下载 yolov4-tiny 预训练权重的前29层。

2.2 准备数据标注文件格式:为每张 .jpg 图片生成单独的 .txt 文件,图片中每个目标对象占一行,格式为

object-class x_center y_center width height

object-class:从标号为 0 到 (classes-1) 的整数,表示类别标签序号

x_center y_center width height: 是与图像标签框宽和高有关的浮点数,例如:

x_center = absolute_x_center / image_width

height = absolute_height / image_height

x_center, y_center 是矩形框的中心并非左上角。

.txt文件名和 .jpg 图片名保持一致

txt 内容示例如:

1 0.716797 0.395833 0.216406 0.147222

0 0.687109 0.379167 0.255469 0.158333

1 0.420312 0.395833 0.140625 0.166667

模型数据读入为保存图片绝对路径的 train.txt 文件, 如:

/hdd01/wanghuijiao/darknet/coco/train2017/img1.jpg

/hdd01/wanghuijiao/darknet/coco/train2017/img2.jpg

/hdd01/wanghuijiao/darknet/coco/train2017/img3.jpg

COCO 80类数据集位置:服务器:10.0.10.56 上 /hdd02/zhangyiyang/data/coco/ 下的 train2017 和 val2017

将 COCO 的 human 类单独提取为 yolov4 数据格式的脚本为 convert_coco_labels.py

2.3 训练和测试模型训练 (以 HD_yolov4_tiny 为例):

单 GPU:

./darknet detector train data/obj.data cfg/human_detector_yolov4-tiny-custom.cfg yolov4-tiny.conv.29 -dont_show -map

data/obj.data 中可进行测试集配置

cfg/human_detector_yolov4-tiny-custom.cfg 是模型的配置文件

./backup/human_detector_yolov4-tiny-custom_best.weights 是上述下载的 pretrained model

yolov4-tiny.conv.29 是2.1中的4`中下载的初始权重,也可以是 backup 中的 XXXX_last.weights,即紧接上一个权重文件继续训练。

-dont_show 是指不显示损失函数窗口,单可以通过 chart.png 查看损失函数曲线

-map 是在训练过程中计算 mAP 并显示在损失函数曲线上

每 100 个 iteration 会在 backup (默认)文件夹中保存 XXXX_last.weights,每 2000 个 iteration 会保存一个权重模型例如 XXXX_2000.weights

多 GPU:

./darknet detector train data/obj.data cfg/human_detector_yolov4-tiny-custom.cfg yolov4-tiny.conv.29 -dont_show -map -gpus 1,2,3,4

-gpus 开启多 GPU 训练

测试单张图片命令

./darknet detector test data/obj.data cfg/human_detector_yolov4-tiny-custom.cfg backup/human_detector_yolov4-tiny-custom_best.weights -thresh 0.25 -ext_output data/person.jpg

-thresh 检测出的 bbox 阈值,低于该阈值的 bbox 框将不被显示在画面中

-ext_output 是在画面中显示检测 bbox

视频 demo 测试:以 HD_yolov4_tiny 为例,通过以下命令对测试视频 tslist.mp4(提取码:h21b) 进行检测,并输出保存为 tiny_yolov4_demo.mp4。

./darknet detector demo data/obj.data cfg/human_detector_yolov4-tiny-custom.cfg backup/human_detector_yolov4-tiny-custom_best.weights -ext_output tslist.mp4 -i 0 -thresh 0.30 -out_filename tiny_yolov4_demo.mp4

-i 输入视频,默认为 0

-out_filename 是输出视频的命名

假如视频帧率太大不方便查看,可用以下命令将其转换为帧率为 10 的视频片段。

ffmpeg -y -r 30 -i tiny_yolov4_demo.mp4 -r 10 tiny_yolov4_demo_fps10.mp4

测试模型性能:

测试模型精度 mAP (mean average precisions):

./darknet detector map your_.data_file your_model_.cfg_file your_pretrained_weights

以 HD_yolov4_tiny 为例:

./darknet detector map data/obj.data cfg/human_detector_yolov4-tiny-custom.cfg ./backup/human_detector_yolov4-tiny-custom_best.weights

测试模型速度FPS:

./darknet detector demo your_.data_file your_model_.cfg_file your_pretrained_weights test.mp4 -benchmark

以 HD_yolov4_tiny 为例,用 tslist.mp4 测试:

./darknet detector demo data/obj.data cfg/human_detector_yolov4-tiny-custom.cfg backup/human_detector_yolov4-tiny-custom_best.weights tslist.mp4 -benchmark

3、性能对比实验编号/分支名

参数

描述

状态

精度

GPU/CPU 速度(官方GPU:FPS,CPU:无)

模型大小

显存占用

yolov4_80

2017coco; max_batches = 500500; width=512 height=512

源码+pretrained_weight

done

ap=83.22%

83.0FPS/t>1s (83FPS)

245 MB

1745MB

HD01

2014coco; max_batches = 6000; width=512,height=512;

基于 yolov4 的 human detector (改源码)

done

ap=60.37%

83.9FPS/t>1s(83FPS)

245 MB

1745MB

HD02 (HD_yolov4)

2017coco; max_batches = 70000; train_num: 64115; val_num: 2693; width=512 height=512;

基于 yolov4 的 human detector (改数据格式)

done

ap=79.30%

82.6FPS/t>1s (83FPS)

245 MB

1745MB

tiny_yolov4_80

2017coco; max_batches = 500500 ;width=512 height=512

源码+pretrained_weight

done

ap=58.29%

134.0FPS/0.5FPS

23.1 MB

823MB

HD03 (HD_yolov4_tiny)

2017coco; max_batches = 80000; train_num: 64115; val_num: 2693; width=512 height=512

基于 yolo-tiny 的 human detector改数据格式

done

ap=65.75%

134.8FPS/0.5FPS

23.1 MB

823MB

- 测试环境:

- GPU:Tesla V100-32GB 4卡

- 服务器:10.0.10.56

- 输入图片分辨率:1920*1080

 类似资料: