第一步:标注数据集

使用到的工具是labelimg,可以直接下载exe文件,我这边就不做演示了
因为博主之前做过TensorFlow objection detection 识别,就用了原来的标注的数据集,这样可以省下很多时间,而我们只需要将xml文件改为txt格式
格式如下

因为xml文件里面的格式是下面的

这里我会提供py代码(将网上的代码进行了更改)

import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join

sets=[('2012', 'train'), ('2012', 'val')]

classes = ["container_close", "container_open", "person"]

def convert(size, box):
    dw = 1./size[0]
    dh = 1./size[1]
    x = (box[0] + box[1])/2.0
    y = (box[2] + box[3])/2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x*dw
    w = w*dw
    y = y*dh
    h = h*dh
    return (x,y,w,h)

def convert_annotation(year, image_id):  # 转换这一张图片的坐标表示方式(格式),即读取xml文件的内容,计算后存放在txt文件中。
    in_file = open('VOCdevkit/VOC%s/Annotations/%s.xml'%(year, image_id))
    out_file = open('VOCdevkit/VOC%s/labels/%s.txt'%(year, image_id), 'w')
    tree=ET.parse(in_file)
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)

for obj in root.iter('object'):
        difficult = obj.find('difficult').text
        cls = obj.find('name').text
        if cls not in classes or int(difficult) == 1:
            continue
        cls_id = classes.index(cls)
        xmlbox = obj.find('bndbox')
        b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text))
        bb = convert((w,h), b)
        out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')

wd = getcwd()

for year, image_set in sets:
    if not os.path.exists('VOCdevkit/VOC%s/labels/'%(year)):
        os.makedirs('VOCdevkit/VOC%s/labels/'%(year))  # 新建一个 label 文件夹,用于存放yolo格式的标签文件:000001.txt
    image_ids = open('VOCdevkit/VOC%s/ImageSets/Main/%s.txt'%(year, image_set)).read().strip().split()  # 读取txt文件中 存放的图片的 id:000001
    list_file = open('%s_%s.txt'%(year, image_set), 'w')  # 新建一个 txt文件,用于存放 图片的绝对路径:/media/common/yzn_file/DataSetsH/VOC/VOCdevkit/VOC2007/JPEGImages/000001.jpg
    for image_id in image_ids:
        list_file.write('%s/VOCdevkit/VOC%s/JPEGImages/%s.jpg\n'%(wd, year, image_id))  # 向 txt 文件中写入 一张图片的绝对路径
        convert_annotation(year, image_id)  # 转换这一张图片的坐标表示方式(格式)
    list_file.close()
这个代码执行完会生成2个文件和一个文件夹(这也是后期训练所要用到的东西)

第二步:修改配置文件

因为博客用的cmake编译,所以会有Release文件夹,我这边全程在x64/Release文件夹下面,如果你们没有用cmkae编译,你们只需要在x64进行(后期全程在x64文件夹下面)

复制这2个文件,然后把名字分别改成voc-ball.data和voc-ball.names
然后打开voc-ball.names,本来里面是20个类的名字,这边需要改成你训练类的名字(我这边训练3个类)

改完后保存退出,
然后打开voc-ball.data(按照我的对照改就行了)

接着进入cfg文件夹,复制yolov4-voc.cfg并重新命名为yolov4-ball.cfg,打开此文件,下面介绍如何改参数
batch不宜过大,过大显存会爆,导致不能训练

我们还需要改3个地方的classes(我用的是notepad++打开)搜索classes,然后classes前面都有对应的filters,这两个都要改,filters与classes的关系是filters = (classes +5) *3

改完之后保存

第三步开始训练

首先下载预训练yolov4.conv.137
(链接:https://pan.baidu.com/s/1GG-gwaU0DXC3pfA-kmtX0w
提取码:pqxr)
放到刚刚的目录下,

然后输入下方的命令,就可以训练了

darknet.exe detector train data\voc-ball.data cfg\yolov4-ball.cfg yolov4.conv.137 -map

yolo v4模型训练过程(超详细)相关推荐

  1. 训练yolo V4模型调优的十个建议

    1.获取更多的数据 2.数据增广 3.输入分辨率 4.使用预训练pretrained模型 5.选择合适的模型尺寸和架构 6.继续之前的训练 7.选择最好的模型 8.模型评估 9.导出模型 10.优化推 ...

  2. 手把手教你洞悉 PyTorch 模型训练过程,彻底掌握 PyTorch 项目实战!(文末重金招聘导师)...

    (文末重金招募导师) 在CVPR 2020会议接收中,PyTorch 使用了405次,TensorFlow 使用了102次,PyTorch使用数是TensorFlow的近4倍. 自2019年开始,越来 ...

  3. 深度学习模型训练过程

    深度学习模型训练过程 一.数据准备 基本原则: 1)数据标注前的标签体系设定要合理 2)用于标注的数据集需要无偏.全面.尽可能均衡 3)标注过程要审核 整理数据集 1)将各个标签的数据放于不同的文件夹 ...

  4. 【深度学习】Tensorboard可视化模型训练过程和Colab使用

    [深度学习]Tensorboard可视化模型训练过程和Colab使用 文章目录 1 概述 2 手撸代码实现 3 Colab使用3.1 详细步骤3.2 Demo 4 总结 1 概述 在利用TensorF ...

  5. Keras深度学习实战(1)——神经网络基础与模型训练过程详解

    Keras深度学习实战(1)--神经网络基础与模型训练过程详解 0. 前言 1. 神经网络基础 1.1 简单神经网络的架构 1.2 神经网络的训练 1.3 神经网络的应用 2. 从零开始构建前向传播 ...

  6. 【深度学习】模型训练过程可视化思路(可视化工具TensorBoard)

    [深度学习]模型训练过程可视化思路(可视化工具TensorBoard) 文章目录 1 TensorBoard的工作原理 2 TensorFlow中生成log文件 3 启动TensorBoard,读取l ...

  7. TF学习——TF之TFOD:基于TFOD AP训练ssd_mobilenet预模型+faster_rcnn_inception_resnet_v2_模型训练过程(TensorBoard监控)全记录

    TF学习--TF之TFOD:基于TFOD AP训练ssd_mobilenet预模型+faster_rcnn_inception_resnet_v2_模型训练过程(TensorBoard监控)全记录 目 ...

  8. 模型训练过程中产生NAN的原因分析

    模型训练过程中产生NAN的原因分析 在模型的训练过程中发现,有时在经过多轮训练后loss会突然变为nan.loss变为nan也就使权重更新后的网络里的参数变为了nan,这样就使整个训练无法再进行下去了 ...

  9. R语言使用keras包实现包含多个全连接层的二分类预测模型:在模型训练过程中动态可视化每个epoch后的loss值以及accuray值

    R语言使用keras包实现包含多个全连接层的二分类预测模型:在模型训练过程中动态可视化每个epoch后的loss值以及accuray值 目录

  10. 【YOLO系列】YOLOv1论文超详细解读(翻译 +学习笔记)

    前言 从这篇开始,我们将进入YOLO的学习.YOLO是目前比较流行的目标检测算法,速度快且结构简单,其他的目标检测算法如RCNN系列,以后有时间的话再介绍. 本文主要介绍的是YOLOV1,这是由以Jo ...

最新文章

  1. 不用1750亿!OpenAI CEO放话:GPT-4参数量不增反减
  2. ios设置tabbar背景颜色_WooCommerce微信小程序2.9.3版本发布 后台设置主题色 底栏装修定制...
  3. sublime text 2中Emmet8个常用的技巧
  4. RebatesMe:返利网站DDOS防护
  5. PyCharm运行出现 Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run
  6. final关键字---Java
  7. statspack report分析
  8. mos管闩锁效应理解学习
  9. 乐高机器人编程和编程的区别
  10. Builder模式创建实体类
  11. Android热修复Sophix详解
  12. laravel.log could not be opened 解决方法
  13. oracle 在此 select 语句中缺少 into 子句,Go database/sql文档
  14. k8s调度之污点和容忍
  15. 宕昌一中2021高考成绩查询,有朋自远方来 | 甘肃省陇南市宕昌一中来广元中学考察交流...
  16. cad图纸怎么看懂_如何看懂CAD图?
  17. 机器学习有哪些应用?可以用来做什么?
  18. 【电源】之【常用稳压IC大全】
  19. Windows 7 新功能 - BitLocker To Go
  20. P6-Windows与网络基础-安装eNSP软件环境

热门文章

  1. 数据-第6课-线性表的相关操作
  2. consul服务注册与服务发现的巨坑
  3. 外部库依赖以及 编译
  4. 【转】Caffe初试(八)Blob,Layer和Net以及对应配置文件的编写
  5. 01我为什么学Unity3d
  6. 传输信道加密Stunnel配置
  7. Eclipse技巧一:还原视图和编辑器
  8. 敏捷思维-架构设计中的方法学(11)精化和合并
  9. CodeGear 出品 Delphi for PHP
  10. Silverligth out of browser OOB应用安装卸载说明