YOLOv4:ubuntu18下使用darknet训练自己的模型

2023-05-16

首先,如果使用GPU,确认你电脑的有关环境是否符合以下要求:

  • CMake >= 3.12
  • CUDA >= 10.0
  • OpenCV >= 2.4
  • cuDNN >= 7.0
  • GPU with CC >= 3.0

不知道具体的版本号也没关系,如果不符和,在代码运行时会提示的,到时候根据错误提示调整对应的版本就可以了。

目录

第一步:下载GitHub源码并编译测试。

第二步:修改/创建有关文件,训练自己的数据集


第一步:下载GitHub源码并编译测试。

 首先创建一个存放YOLOv4代码的文件夹,cd到该文件夹下。如,我在/home/(用户名)/RoboGroup文件夹下创建了一个yolo4文件夹,然后在该文件夹中右键选择“Open in Terminal”,打开终端,输入以下命令,从GitHub上下载darknet源码:

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

下载之后,在该文件夹下会多出一个darknet文件夹,如下:

(小白指路:文件管理器中左边栏的Home文件夹其实就是/home/(用户名),例如,如果你的用户名叫hhh,则Home=/home/hhh。你可以依次点击Other Location -> Computer -> home -> (你的用户名) 看一下)

开始编译darkent文件。首先双击进入上述darknet文件夹,如果配置好了GPU和OpenCV环境,则修改Makefile文件相关内容如下:

GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1

保存后在darknet文件夹下,右键点击“Open in Terminal”,输入make,则开始darknet的编译,中间会出现warning信息,不用理会。编译完成后,在终端输入./darknet,如果出现usage: ./darknet <function>,则说明编译成功。然后下载官方给出的权重文件yolov4.weight进行测试,下载的权重文件放到darknet主目录下就可以。然后执行如下命令:

./darknet detect cfg/yolov4.cfg yolov4.weights data/person.jpg

该命令使用训练好的权重检测示例图片,效果如下:

至此,测试阶段就完成了,下面是训练自己的数据集。

第二步:修改/创建有关文件,训练自己的数据集

step1:首先在darknet/cfg文件夹下创建自己的cfg文件(cfg文件定义了网络的模型及参数),这里我命名为my.cfg(如何命名甚至放哪里都无所谓,只要记得你的cfg文件的位置和叫啥名就行) ,然后将cfg文件夹下的yolov4-custom.cfg文件内容复制到my.cfg中(你不创建新的cfg文件,直接修改yolov4-custom.cfg文件也可以),然后根据自己的数据集来修改里面的内容,都要改些啥那?关于cfg文件中参数的意义,请参考这里。

  1. 更改batch=64、subdivision=16。但是,具体的值要根据GPU容量来改,例如我就只能设置batch=8、subdivision=8了。
  2. 更改max_batches=classes*2000。max_batches其实就是整个训练过程的迭代次数,跑完一个batch算一次。classes*2000是官方给出的值,例如我的数据集有两个类别,所以我的max_batches最好设置为4000,为什么最好那?因为你也可以设为别的数,比如3000或者6000。
  3. 设置steps值分别为80%*max_batches和90%*max_batches。这也是个经验性的设置值,用以控制什么时候学习率衰减。
  4. 设置width=416、height=416或者任意32的整数倍的值。我给的608。
  5. 改变每个[yolo]层(三个yolo层,所以共有三处)的classes值为你的类别数,我有俩类别,所以就是2
  6. 改变每个[yolo]层前面一层的filters参数,值为(classes + 5)x3,我这里就是21。同样也是需要改三处。如果用到了[Gaussian_yolo],其前面的filters值也要做同样的修改,我这里没用就不用管了,代码里默认没用。

step2:修改完你的.cfg文件后,下一步就是创建obj.name文件(同样的,只要你记得你的文件名和位置,无所谓在哪里创建或者叫什么),这里我在darknet/data文件夹下创建该文件,内容格式如下:

urchin
trepang

然后在该文件夹下继续创建obj.data文件,内容如下,当然,内容要根据自己的文件位置及文件名修改。这里提到的两个txt文件以及.name文件会在后面的步骤中生成,backup代表训练好的模型存放的位置。

classes = 2
train  = data/2020_train.txt
valid  = data/2020_test.txt
names = data/obj.names
backup = backup/

step3:VOC数据集的文件格式如下,这是个习惯性的格式。具体的文件名可以自己定义,后面的代码啥的也做相应的修改就不影响模型的训练。这里要注意:yolov4的数据集跟这个区别较大,但构建数据集的时候还会用到这个格式的文件,后面会讲到。

└── VOCdevkit     
    └── VOC2012   
        ├── Annotations        
        ├── ImageSets          
        │   ├── Main
        ├── JPEGImages

之后在darknet/data文件夹下创建obj文件夹,将你数据集里的图片全部复制进来。

然后是创建train.txt及val.txt文件。这两个文件是将数据集划分成训练集和验证集的文件,也是创建创建我的2020_train.txt、2020_val.txt的中间文件,Python代码如下,需要根据自己的实际情况做适当修改,生成的文件将会保存到上述的Main文件夹中。

注:这里的VOCdevkit2020是我自定义的自己的VOC数据集。

import os
from os import listdir

if __name__ == '__main__':
    source_folder =r'VOCdevkit2020/VOC2020/JPEGImages'
    dest = r'VOCdevkit2020/VOC2020/ImageSets/Main/train.txt'
    dest2 = r'VOCdevkit2020/VOC2020/ImageSets/Main/val.txt'
    file_list = os.listdir(source_folder)
    train_file = open(dest, 'w')
    val_file = open(dest2, 'w')
    i=0
    for file_obj in file_list:
        file_name, file_extend = os.path.splitext(file_obj)

        if (i%4 ==0):
            val_file.write(file_name + '\n')
        else:
            train_file.write(file_name + '\n')
        i+=1
train_file.close()
val_file.close()

step4:之后生成2020_train.txt、2020_val.txt文件。这两个文件就是训练时要用的文件,包含了训练和验证数据集中图片的位置等信息。可以使用darknet/scripts/voc_label.py文件生成,文件内容要做适当的修改。我根据自己的有关文件配置,修改如下:主要是sets、class以及文件名和路径的修改。

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

sets=[('2020', 'train'), ('2020', 'val'), ('2020', 'test')]

classes = ["urchin", "trepang"]

def convert(size, box):
    dw = 1./(size[0])
    dh = 1./(size[1])
    x = (box[0] + box[1])/2.0 - 1
    y = (box[2] + box[3])/2.0 - 1
    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):
    in_file = open('VOCdevkit2020/VOC%s/Annotations/%s.xml'%(year, image_id))
    out_file = open('VOCdevkit2020/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('VOCdevkit2020/VOC%s/labels/'%(year)):
        os.makedirs('VOCdevkit2020/VOC%s/labels/'%(year))
    image_ids = open('VOCdevkit2020/VOC%s/ImageSets/Main/%s.txt'%(year, image_set)).read().strip().split()
    list_file = open('../data/%s_%s.txt'%(year, image_set), 'w')
    for image_id in image_ids:
        list_file.write('%s/VOCdevkit2020/VOC%s/JPEGImages/%s.jpg\n'%(wd, year, image_id))
        convert_annotation(year, image_id)
    list_file.close()

运行之后会在VOCdevkit2020文件夹中生成labels文件夹,将里面的内容(所有txt文件)复制到之前创建的data/obj文件夹中,每个txt文件对应着相应的JPG图片的groundtruth信息,如下。然后还会在darknet/data文件夹下生成2020_test.txt、2020_train.txt、2020_val.txt三个文件。在这里就清楚YOLOv4的数据集格式了吧,就是下图所示的格式!

step5:做好了这些,下步就是下载预训练权重文件yolov4.conv.137,下载好后放在darknet文件夹下就可以了。

step6:最后一步就是训练模型了。cd 到darknet文件夹下,在终端输入如下指令:

./darknet detector train data/obj.data cfg/my.cfg yolov4.conv.137

这里要注意把obj.data文件以及my.cfg文件的路径写对,根据自己文件所在的位置来写。

step7:训练完成后,来输入以下命令坐下测试:

./darknet detector test data/obj.data cfg/my.cfg backup/my_last.weights -thresh 0.95 data/test1.jpg 

同样的,具体的路径名要根据自己的实际情况来填写

 参考:https://github.com/AlexeyAB/darknet#geforce-rtx-2080-ti

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

YOLOv4:ubuntu18下使用darknet训练自己的模型 的相关文章

  • ubuntu18配置ZED+ros

    ubuntu18配置ZED 43 ros 1 安装nvidia显卡驱动 查看适配自己显卡的驱动 ubuntu drivers devices 选择recommended版本的驱动 span class token function sudo
  • RealSenseD435i (一):Ubuntu18.04 下的安装、使用和bag录制 ,且解决 undefined symbol 问题(最简单的方法)

    注意 realsense ros 要和 librealsense 版本匹配 realsense ros 2 2 11 对应的 Realsense SDK 为 librealsense 2 31 0 否则后面会出现让人崩溃的问题 其中 nbs
  • 无人机目标检测 Darknet-ROS 学习(一)

    无人机目标检测 Darknet ROS 学习 xff08 一 xff09 简介 在无人机上实现目标检测 xff0c 使用的设备是阿木实验室P200 xff0c 飞控是PX4 xff0c 板载计算机是TX2 xff0c 目的是在无人机有限的计
  • Darknet YoloV4编译+训练(避免踩坑)

    AlexAB darknet yolov4编译 43 训练 时间间隔好几天今天来更新一下yolov4的训练 训练篇 在训练之前需要对大佬的源码进行编译本本机编译 xff0c 编译过程可查看下述链接 xff1a https blog csdn
  • c++ 调用yolov3-yolov4

    ifdef WIN32 define OPENCV define GPU endif include lt iostream gt include lt windows h gt include 34 yolo v2 class hpp 3
  • Ubuntu18.04 Realsense D435i驱动安装与配置

    InterRealSenseD435i SDK安装 一 命令行的安装方式安装 1 注册服务器的公钥 xff1a 打开终端输入 sudo apt key adv keyserver keys gnupg net recv key C8B3A5
  • 1.3 Ubuntu18.04 ROS udp server 通信实现

    Ubuntu18 04 ROS udp Server通信实现 此小节介绍udp Server收发数据 udp通信属于帧传输 xff0c 在帧传输过程中对于消息的次序和到达情况没有需求 xff0c 没有进行校验 xff0c 所以UDP属于不可
  • 【Darknet-53】YOLOv3 backbone Darknet-53 详解

    文章目录 1 模型计算量与参数量2 Darknet 53网络3 感谢链接 1 模型计算量与参数量 模型计算量与参数量的计算方式主要有两种 xff0c 一种是使用thop库 xff0c 一种是使用torchsummaryX 使用pip ins
  • ubuntu18.04搭建python环境

    注意 xff1a 我使用的是虚拟机 xff0c 在操作前请确保虚拟机可以访问到网络 1 安装python3 9 0解释器 xff0c 配置环境变量 2 配置虚拟环境 一 安装python3 9 0 到 opt python39 更新软件源
  • ubuntu18.04 查看在用串口

    1 终端输入cutecom 打开串口助手 xff0c 可能没有下载 xff0c 可根据提示下载安装 sudo cutecom 2 点击device旁边的下拉按钮即可查询当前在用的串口
  • ubuntu18.04安装Realsense D435i 摄像头的驱动SDK和ROS Wrapper

    ubuntu18 04安装Realsense D435i 摄像头的驱动SDK和ROS Wrapper 2022年更新 xff1a 安装教程同 xff1b 进更新安装包下载方式和下载链接 见文末 1 安装Realsense SDK 1 下载s
  • 【RPLIDAR】ubuntu18.04安装cartographer源码并使用RPLIDAR A2M8 - R4建图

    1 创建工作空间 mkdir cartographer ws cd cartographer ws wstool init src 2 下载cartographer源码包 wstool merge t src https raw githu
  • ubuntu18.04安装、使用evo

    ubuntu18 04安装evo 1 切换python版本2 安装pip33 安装evo4 自带test测试5 evo工具介绍6 evo使用6 针对不同数据集的格式以及evo命令 官方连接 xff1a https github com Mi
  • Ubuntu18.04 ,安装opencv4.5.4

    背景 手眼标定时候 xff0c 需要用到opencv4的findChessboardCornersSB 所以需要下载opencv4 5 4 安装 Ubuntu 18 04 安装opencv4 2 0 遇到的问题 安装结束后 xff0c 出现
  • ubuntu18断电后recovering journal一直卡在开机界面

    事故机器 elitebook735 系统 ubuntu18 内核 4 20 发生原因 没电关机了 还是保持电量充足比较好 开机的时候回显示 xxx recovering journal dev 磁盘 clean xxxxx 修复方法 关闭电
  • [yolov4]yolov4.weights

    版本 https github com AlexeyAB darknet 权重链接 yolov4 weights https 72k us file 26468910 439532813 提取密码 446792 yolov4 conv 13
  • Yolox_s可视化网络结构图

    Yolox共有七种网络结构 包含2种轻量级网络 和5种标准网络 轻量级网络 1 Yolox Nano可视化网络结构图 点击查看 2 Yolox Tiniy可视化网络结构图 点击查看 标准网络 1 Yolox s可视化网络结构图 点击查看 2
  • Yolo 没有开始训练

    我正在尝试在自定义数据集上训练 Yolo 一切似乎都正常运行 没有错误 但它只是没有训练 我按照教程进行操作https github com AlexeyAB darknet两次但我得到相同的结果 darknet detector trai
  • 我们可以在没有 GPU 的情况下在自定义对象上训练 YOLOv3 吗?

    我的 YOLO 模型可以很好地检测瓶子 人 手机 背包等物体 但我想让我的模型检测戒指 手镯或头盔 当前 yolo 模型中不存在的物体 没有 GPU 我可以制作自定义对象检测 yolo 模型吗 涉及哪些风险 如果有的话 我的系统是 Wind
  • Yolo 暗网仅检测特定类别,如人、猫、狗等

    我们使用 YOLO Darknet 进行对象检测 我们使用Python3 tensorflow 1 0 numpy opencv 3 使用yolo weight进行检测 根据下面的链接给出 https github com thtrieu

随机推荐

  • 8086中的操作数

    指令中的操作数 指令的基本形式为 操作码 目标操作数 源操作数 xff0c 其中操作码代表了如何对数据进行操作 xff0c 目标操作数和源操作数分别代表了数据计算之后的归宿和数据的获取处 操作数本身是个数据 xff0c 但是数据的性质 xf
  • ROS中yaml文件编写格式

    目录 键值对 键值对书写格式 键值对的引用 强制类型转换 字符串 时间与日期 已知偏移时区和当地时间 已知UTC世界时间 数组 普通数组 键值对数组 数组的引用 多维数组 命名空间 命名空间下普通变量赋值方式 使用引用给命名空间下的变量赋值
  • ROS:rosbag命令行指令详解(一)

    目录 获取当前工作目录下bag文件的信息 在当前工作目录下创建bag文件 对指定话题进行录制 获取当前工作目录下bag文件的信息 1 以列表的方式显示bag文件的信息 xff1a 指令格式 xff1a rosbag info BagFile
  • ROS:rosbag play系列指令(详解)

    Rosbag play系列指令 Rosbag play bagFile01 bag bagFile02 bag 播放多个录制文件 xff1a 由于我们的bag录制文件并不是同一时间录制 xff0c 因此bag录制文件会因录制顺序不同播放顺序
  • Ubuntu22.04网卡丢失

    首先确保网卡设备名称能看到 xff0c 看不到 xff0c 以下步骤无意义 xff1a sudo lshw c network 2 命令行执行以下命令 xff1a sudo service NetworkManager stop sudo
  • Ubuntu22.04中ROS2的安装教程

    ROS2入门教程 在ubuntu22 04下apt安装ros2版本humble 创客智造 ncnynl com ROS Humble Ubuntu 22 04 Apt Install Issue ROS 答案 xff1a 开源问答论坛
  • git 使用

    一 安装 Git 1 从 Git 官网下载对应版本 xff0c 进行默认安装即可 2 安装完成后 xff0c 桌面右键点击 Git gt Git Bash xff0c 弹出命令行窗口 3 在命令行窗口输入 34 git config glo
  • Darknet中.cfg文件参数详解

    转载自 xff1a https blog csdn net phinoo article details 83022101 感谢博主分享 net xxx 开始的行表示网络的一层 xff0c 其后的内容为该层的参数配置 xff0c net 为
  • VS的路径变量[转]

    版权声明 xff1a 本文为博主原创文章 xff0c 未经博主允许不得转载 https blog csdn net peter teng article details 9716421 RemoteMachine 设置为 调试 属性页上 远
  • dockerfile定制jenkins+python+pytest+allure镜像步骤

    一 创建dockerfile文件 创建目录 mkdir jenkinsci dockerfile 进入目录 cd jenkinsci dockerfile 创建dockerfile文件 touch dockerfile 二 将依赖的文件或目
  • Mac上用Chrome,全屏后 关闭、缩小、最小化图标不见了,多了一条空白条,解决方法

    问题 xff1a Mac上用Chrome xff0c 全屏后移动鼠标到上方 xff0c 本来会有的关闭 缩小 最小化图标不见了 xff0c 多了一条空白条 解决方法 xff1a 快捷关闭全屏模式 xff1a command 43 contr
  • Linux-----信号量

    信号量 信号量原理信号量概念信号量函数基于环形队列的生产消费模型空间和数据资源生产者和消费者申请 释放信号量模拟实现基于环形队列的生产者消费者模型 信号量原理 之前我们知道被多个执行流同时访问的公共资源叫做临界资源 xff0c 而临界资源不
  • Linux操作系统 §3:基本命令Ⅱ(Bash常用功能,文件查询)

    本篇你将掌握的内容 xff08 文末有总结全图 xff09 xff1a 文章目录 3 0 引入3 1 补全命令 文件名 xff1a Tab键 3 2 查看文件 cat more3 2 1 cat concatenate 3 2 1 1 概念
  • 无人机自主导航 (realsense D430 vins 的安装与调试)

    realsense SDK的安装 https github com IntelRealSense librealsense blob master doc distribution linux md https github com Int
  • 无人机自主导航(ARM架构的vins-fusion-GPU部署)

    本文参考 GitHub arjunskumar vins fusion gpu tx2 nano Installation step of vins fusion gpu version on Nvidia Jetson TX2 amp N
  • TI电赛无人机

    一 材料准备 1 机架 xff08 F330机架便宜耐摔 xff0c 初期调试时使用 xff09 2 电调 xff08 好盈40A电调 xff09 3 电机 xff08 新西达 朗宇 xff09 4 桨叶 xff08 乾丰8045 xff0
  • 【Maven项目如何转换为Gradle项目】

    Idea中Maven工程如何转换为Gradle工程 打开Maven项目 修改settings中Maven的本地仓库 修改settings中项目的编码格式 4 刷新Maven的相应插件 5 在Idea中TerMinal输入 gradle in
  • Git版本控制的使用

    文章目录 一 Git的介绍1 版本控制2 Git与svn对比3 聊聊Git历史 二 Git的使用1 Git环境配置2 Git配置3 Git基本理论 xff08 核心 xff09 4 Git项目搭建5 Git文件操作 三 使用GitHub1
  • eclipse解决中文乱码问题

    eclipse运行页面显示中文乱码 页面源码 lt 64 page language 61 34 java 34 contentType 61 34 text html charset 61 ISO 8859 1 34 pageEncodi
  • YOLOv4:ubuntu18下使用darknet训练自己的模型

    首先 xff0c 如果使用GPU xff0c 确认你电脑的有关环境是否符合以下要求 xff1a CMake gt 61 3 12CUDA gt 61 10 0OpenCV gt 61 2 4cuDNN gt 61 7 0GPU with C