Darkent|Darknet-Yolo系列(一)利用 Darknet 在自己的数据集上训练 Yolov4-tiny 模型


利用 Darknet 在自己的数据集上训练 Yolov4-tiny 模型

    • 0.配置环境
    • 1.数据准备
    • 2.模型训练

另有Yolov4模型的各种部署方式,详见github。
0.配置环境 此项目使用的训练环境:Ubuntu 18.04.5, CUDA Version: 10.1, Darknet A版, Nvidia 2080 ti 显卡.
其中 Darknet 的配置参考这里
1.数据准备 这个项目使用的反光衣检测数据集来自reflective-clothes-detect and dataset yolov5,
共有反光衣检测数据1083张。
  • 进入百度云盘下载链接 提取码->(dooh).
  • 将数据文件夹中‘labels/'下的文件复制到‘JPEGImages/’中,保证两者在同一个文件夹下。
  • 修改配置文件
    cd darkent

    • 在‘cfg/'路径下创建配置文件yolov4-tiny-reflective.cfg,当然可以直接从’yolov4-tiny-custom.cfg’直接复制过来。
    • 修改参数,classes = 2, filters=(classes + 5)x3 = 21,注意:每个[yolo]层里的classes及其前一个[convolutional]层里的filters参数都需要相应修改,注意是每一个!
      [convolutional] filters=21[yolo] classes=2

    • 其他参数如batch,learning_rate等可以根据需要修改。
  • 准备数据文件,包含四个文件reflective.data,reflective.names,train-reflective.txt,valid-reflective.txt.
    • 进行训练集验证集数据划分,将划分好的文件 ‘train_reflective.txt’ 和 ‘valid_reflective.txt’ 放到 ‘data/’ 文件夹下。
      python3 split_datasets( )

      参数说明:
      imagePath即下载数据中‘JPEGImages’文件的路径
      savePath即生成文件的保存路径,可以直接设置为’/path where darknet installed/data/’
    • 创建‘reflective.data’:
      classes = 2 train = data/train-reflective.txt valid = data/valid-reflective.txt test = data/test-reflective.txt names = data/reflective.names backup = reflective/

    • 创建’reflective.names’:
      other reflective

  • 详细过程也可参考Darknet的README。
2.模型训练
  • 执行训练代码,这里我训练的是yolov4-tiny模型,并且使用了darknet提供的预训练模型:
    cd darknet/ mkdir reflective # yolov4: # sudo ./darknet detector train ./data/reflective.data./cfg/yolov4-reflective.cfg ./pretrained/yolov4.conv.137 -map -gpus 0,1 -dont_show # yolov4-tiny: sudo ./darknet detector train ./data/reflective.data./cfg/yolov4-tiny-reflective.cfg ./pretrained/yolov4-tiny.conv.29 -map -gpus 0,1 -dont_show

  • 在主目录下会生成chart.png,可以查看训练过程的loss和map变化,提前结束训练。
  • 【Darkent|Darknet-Yolo系列(一)利用 Darknet 在自己的数据集上训练 Yolov4-tiny 模型】权重文件保存在’reflective/‘文件夹下,测试结果最好的权重名为’yolov4-tiny-reflective_best.weights’,让我们来看看效果如何:
    # 在视频上测试模型: python3 darknet_video.py --input data/test.mp4 --out_filename data/test_result.mp4 --weights reflective/yolov4-tiny-reflective_best.weights--data_file data/reflective.data--config_file cfg/yolov4-tiny-reflective.cfg --dont_show

    推荐阅读