当前位置:   article > 正文

使用YOLOv4进行自定义数据集训练的流程及结果_yolov4训练过程

yolov4训练过程

使用YOLOv4进行自定义数据集训练的流程及结果

一、安装与配置

  • git clone Darknet github
git clone https://github.com/AlexeyAB/darknet
  • 1
  • 修改Makefile

​ 进入 darknet_master 文件架修改 Makefile,将GPU, CUDNN, CUDNN_HALF, OPENCV 修改为1,预设值为0

image-20240128141023014

  • 进行编译
cd darknet
make
  • 1
  • 2

二、项目创建

  • 先将数据集图片暂存至临时文件夹中

  • 创建如图的文件结构

    image-20240128142907410

  • 使用labelimg给图片数据集进行标注

    1. /labelimg/data/predefined_classes.txt中修改为自定义数据集中的类
    2. 运行labelimg进行打标,AD左右切换图片,W创建标注框,将标注的VOC文件存储到项目临时文件夹中
  • 使用数据集增强功能包进行数据集增强

    1. 将数据集的标注和标注好的标注文件分别存储到功能包DataAugForObjectDetecton中的/data/Annotations/data/images
    2. 进入DataAugForObjectDetecton.py文件,到程序入口处修改need_aug_num = 10,这是每张图片进行扩增的数量
    3. 运行DataAugForObjectDetecton.py文件,在Dataset文件夹下可以找到扩增后的标签与数据集
    4. 将标签与数据集移动到项目中对应的文件夹
  • 划分训练集、测试集和验证集

    运行spit.py文件,调节其中的参数可以改变三者的比例大小

  • VOC标签转YOLO

    运行voc_lavel.py文件,转化后的标签将存储在label文件夹中

  • 写入2007_test.txt(2007_train.txt 2007_val.txt)

    运行write_name.py文件,可以进行文件的写入(读取spit.py生成的train.txt test.txt val.txt中的内容并且将补全的路径输出到指定的文件中)

# write_name.py
import os

def write_name(name_file_path,path_file_path,task_path):

    name_file = open(name_file_path , 'r' , encoding= 'utf-8')
    path_file = open(path_file_path , 'w' , encoding= 'utf-8')
    for i in name_file:
        i = i[:-1]
        path = f"{task_path}/{i}.jpg\n"
        path_file.write(path)
    path_file.close()
    name_file.close()

if __name__ == "_main__":
    task_path = "/home/ding/deeplearning_task/winter_task5/VOCdevkit/VOC2007/JPEGImages"
    name_file_path1 = "/home/ding/deeplearning_task/winter_task5/VOCdevkit/VOC2007/ImageSets/Main/train.txt"
    path_file_path1 = "/home/ding/deeplearning_task/winter_task5/VOCdevkit/2007_train.txt"
    name_file_path2 = "/home/ding/deeplearning_task/winter_task5/VOCdevkit/VOC2007/ImageSets/Main/test.txt"
    path_file_path2 = "/home/ding/deeplearning_task/winter_task5/VOCdevkit/2007_test.txt"
    name_file_path3 = "/home/ding/deeplearning_task/winter_task5/VOCdevkit/VOC2007/ImageSets/Main/val.txt"
    path_file_path3 = "/home/ding/deeplearning_task/winter_task5/VOCdevkit/2007_val.txt"    
    write_name(name_file_path1,path_file_path1,task_path)
    write_name(name_file_path2,path_file_path2,task_path)
    write_name(name_file_path3,path_file_path3,task_path)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 修改yolov4-tiny.cfg文件

    classes #改为自定义的类别数
    filters = (classes + 5)*3
    
    • 1
    • 2
  • voc.names文件
    只需要将类别分行写在其中,以我的项目为例:

# voc.names文件
corn
corn_plant
cucumber
cucumber_plant
watermelon
rice
wheat
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • voc.data文件(以我的项目为例,每一行都需要对应的修改)
classes = 7 #类别数
train  = /home/ding/deeplearning_task/winter_task5/VOCdevkit/2007_train.txt	#存放train图片路径的txt
valid  = /home/ding/deeplearning_task/winter_task5/VOCdevkit/2007_val.txt
test   = /home/ding/deeplearning_task/winter_task5/VOCdevkit/2007_test.txt
names = /home/ding/deeplearning_task/winter_task5/VOCdevkit/voc.names		#voc.names路径
backup = /home/ding/deeplearning_task/winter_task5/VOCdevkit/VOC2007/backup	#训练权重放置的路径
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

三、模型训练与验证操作

  • 相关操作指令

    ./darknet detector train [.data] [.cfg] [.weight]
    # 模型训练
    
    • 1
    • 2

    说明:
    .data是.data文件的路径。

    .cfg是.cfg文件的路径。

    .weight是预训练权重文件的路径,可以是.weight文件,也可以是.backup文件。

    ./darknet detector train [.data] [.cfg] [.weight]
    #检测图片
    ./darknet detector demo [.data] [.cfg] [.weight] [-thresh 0.25] [xxx.mp4]
    # 检测视频
    -dont_show -ext_output [.txt] result.txt
    #批量检测
    ./darknet detector demo [.data] [.cfg] [.weight] [-thresh 0.25] [http://192.168.1.108:8080/video?dummy=x.mjpg -i 0]
    #检测网络摄像头
    ./darknet detector map [.data] [.cfg] [.weight]
    #评价模型
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

四、任务模型训练结果

  • 类别划分

我的训练划分了七个类别

corn
corn_plant
cucumber
cucumber_plant
watermelon
rice
wheat
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 训练过程损失曲线

    chart_yolov4-tiny

  • 图片验证结果2024-01-28_13-34

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/819566
推荐阅读
  

闽ICP备14008679号