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.04安装mavros

    安装 mavros 在 Ubuntu 18 04 上很简单 只需要运行几条命令 xff0c 就可以安装完成 首先 xff0c 更新软件包列表 xff1a sudo apt update 然后 xff0c 安装 mavros 包 xff1a
  • Ubuntu18下xsens IMU的驱动安装及使用imu_utils标定

    最近在做xsens IMU的标定工作 xff0c 网上资源很多很杂 xff0c 打算按自己的操作过程 细节及遇到的问题记录一下 xff0c 里面有参考的博文都附了链接 主体可参考此博文 xff1a VIO 中 IMU 的标定流程 1 3 i
  • [ROS]Ubuntu18.04下安装指定版本OpenCV

    Linux xff1a Ubuntu 18 04 ROS xff1a ROS Melodic 目录 1 获取 OpenCV 源代码2 安装所需的依赖软件包3 使用CMake从源代码编译OpenCV3 1 准备3 2 配置OpenCV3 3
  • Ubuntu18.04 远程命令行下安装并启动x11vnc

    最近做项目需要连接ubuntu的图像界面 xff0c 开始用XQuartZ xff0c 界面太low太丑 xff0c 而且有些应用启动不了 xff1b 后来转到使用x11vnc xff0c 在网络上查看了很多交安装x11vnc的方法 xff
  • T507 Ubuntu18.04 LXDE桌面汉化

    本文硬件平台采用飞凌T507开发板 xff0c 主要讲解Ubuntu图形桌面LXDE如何修改为中文界面 xff0c 本文使用的思路和方法仅供参考使用 xff0c 其它arm开发板虽然芯片不同 xff0c 但思路和方法有很多的共性 xff0c
  • 【ROS】机械人开发一--树莓派安装ubuntu18.04

    前言 xff1a 安装了一天的树莓派系统 xff0c 遇到了很多坑 xff0c 这里将教程详细分享一下 xff0c 方便大家快速的安装系统 目录 一 操作环境硬件软件 二 资源下载链接三 具体步骤烧入修改镜像文件问题修改重启时间PC端使用x
  • 在VMware的Ubuntu18.04搭建vsftp(上传文件)和apache2(http服务)

    在VMware的Ubuntu18 04下 xff1a 搭建vsftp xff08 本机win上传文件 xff09 xff1a 第一步安装vsftp xff1a 直接安装可能会报错Ubuntu 34 E Unable to locate pa
  • ubuntu18.04 安装Qt交叉编译环境目标机为rk3288

    本文在虚拟机条件下安装成功 xff0c 采用Ubuntu18 04 64位镜像作为编译环境 需要准备材料 交叉编译器 xff1a 目标机器为64位的使用 gcc linaro 6 3 1 2017 05 x86 64 aarch64 lin
  • 关于yolov5的调试环境搭建亲测有效ubuntu18.04 +ros+melodic+anaconda+pytorch+torchvision+cuda10.2+cudnn

    运行环境ubuntu18 04 43 ros 43 melodic 43 anaconda3 43 py3 8 43 torch1 12 1 43 torchvision 0 13 1 43 cuda10 2 43 cudnn 1 首先安装
  • ubuntu18.04安装Ros(详细)

    Ubuntu18 04安装Ros本人已试过多次 xff0c 安装过程基本没出现问题 xff0c 而且该方法也可用在Jetson nano NX 上 一 设置软件源 xff1a 清华源 xff1a sudo sh c 39 etc lsb r
  • Ubuntu18.04下pointnet2(pointnet++)复现

    一 nvidia driver 510 43 cuda 11 6 43 cudnn 11 x安装配置 ubuntu18 04安装nvidia driver 510 43 cuda 11 6 43 cudnn 11 x CPU疼的博客 CSD
  • ubuntu18.04安装Realsense D435i 摄像头的驱动SDK和ROS Wrapper

    ubuntu18 04安装Realsense D435i 摄像头的驱动SDK和ROS Wrapper 2022年更新 xff1a 安装教程同 xff1b 进更新安装包下载方式和下载链接 见文末 1 安装Realsense SDK 1 下载s
  • Ubuntu18.04.3虚拟机安装步骤

    Ubuntu18 04 3虚拟机安装步骤 xff08 图文教程 xff0c 非常详细 xff01 xff01 xff01 xff09 丶无殇的博客 CSDN博客 ubuntu18虚拟机安装
  • secureCRT连接ubuntu18.04

    1 安装ssh服务器 sudo apt get install openssh server 2 ssh服务器安装失败 错误提示 xff1a 下列软件包有未满足的依赖关系 xff1a openssh server 原因 xff1a 系统预置
  • Ubuntu18.04 ,安装opencv4.5.4

    背景 手眼标定时候 xff0c 需要用到opencv4的findChessboardCornersSB 所以需要下载opencv4 5 4 安装 Ubuntu 18 04 安装opencv4 2 0 遇到的问题 安装结束后 xff0c 出现
  • ubuntu18.04下复现 singleshotpose(yolo-6D) 源代码复现

    源代码地址 首先配置好conda环境 xff08 需要提前安装ubuntu18 04和 anaconda或者miniconda xff09 原代码的说明里说可以选择安装python 3 6也可以装python2 7 xff08 我最开始的时
  • yolov4训练自己的数据模型

    看了下yolov4的作者给的操作说明 链接如下 https github com AlexeyAB darknet how to compile on linux using make 有兴趣的可以去看看 总结起来 跟yolov3的操作方式
  • Yolo 没有开始训练

    我正在尝试在自定义数据集上训练 Yolo 一切似乎都正常运行 没有错误 但它只是没有训练 我按照教程进行操作https github com AlexeyAB darknet两次但我得到相同的结果 darknet detector trai
  • 在 Google Colab 上训练模型时,我应该保持连接吗?

    在 Google Colab 上训练用于对象检测的数据集模型 Darknet 时 我是否需要保持与 Colab 和互联网的连接 当训练在 Colab 上进行并连接到我的驱动器时 这里的权重文件将保存在我的谷歌驱动器文件夹中 那么 我可以断开
  • 暗网 YOLO 图像大小

    我正在尝试在 Darknet YOLO v2 中训练自定义对象分类器https pjreddie com darknet yolo https pjreddie com darknet yolo 我收集了一个图像数据集 其中大多数尺寸为 6

随机推荐

  • 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