Yolov4训练自己的数据集

Yolov4训练自己的数据集

  1. 代码运行环境Ubuntu18.04+python3.6+显卡1080Ti+CUDA10.0+cudnn7.5.1+OpenCV3.4.6+Cmake3.12.2,详细环境配置安装步骤就不讲解拉,网上教程一大堆。
  2. 从github克隆下载源码,链接地址:https://github.com/AlexeyAB/darknet
  3. 训练肯定需要使用GPU加速,那么得打开项目里面的makefile文件修改一些参数的值,1-4、7改为1
    makefile前面几行:打开GPU 加速,打开opencv,打开libdarknet.so生成开关
GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
AVX=0
OPENMP=0
LIBSO=1
ZED_CAMERA=0 # ZED SDK 3.0 and above
ZED_CAMERA_v2_8=0 # ZED SDK 2.X
  1. 编译
    在darknet-master目录下运行:cmake.&make -j48

    下载与训练权重放在主目录下https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights

    百度网盘: 链接:https://pan.baidu.com/s/16wOHbaa2mG7cTZ_RcGjRnw
    提取码:99bl

    用下面的命令测试一下预训练权重
    ./darknet

    如果编译成功则会出现以下信息
    usage: ./darknet

    现在可以测试初始预训练权重效果了
    ./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jp

成功则在主目录下出现predictions.jpg 图片为预测后的图片,打开 OPENCV=1的可以直接显示出图片。说明我们的环境配置好了,否则先去配置环境。
在这里插入图片描述
5. 训练自己的数据集
–5.1 在主目录下创建yolo-obj.cfg 配置文件。将 yolov4-custom.cfg 中的内容复制到 yolo-obj.cfg里面,并做以下修改。
  --5.1.1修改batch=64,修改subdivisions=16(如果显卡是2080TI的,可以把batch设置为96,如果报内存不足,将batch改回64将,或者subdivisions设置为32)
  --5.1.2修改max_batches=classes*2000 例如有2个类别人和车 ,那么就设置为4000,N个类就设置为N乘以2000,
  --5.1.3修改steps为80% 到 90% 的max_batches值 比如max_batches=4000,则steps=3200,3600
  --5.1.4修改classes,先用ctrl+F搜索 [yolo] 可以搜到3次,每次搜到的内容中 修改classes=你自己的类别 比如classes=2
  --5.1.5修改filters,一样先搜索 [yolo] ,每次搜的yolo上一个[convolution] 中 filters=(classes + 5)x3 比如filters=21
  --5.1.6(可以跳过)如果要用[Gaussian_yolo] ,则搜索[Gaussian_yolo] 将[filters=57] 的filter 修改为 filters=(classes + 9)x3 (这里我没用到,但是还是修改了)
–5.2制作obj.names,在主目录下创建obj.names文件。内容为你的类别 比如人和车 那么obj.names 为如下,多个类别依次往下写

person
car

–5.3 制作obj.data,在主目录下创建obj.data文件。内容如下

  classes= 2train  = ./scripts/2007_train.txt#valid  = ./scripts/2007_test.txt #(做测试用的测试txt)valid  = ./scripts/2007_val.txtnames = darknet-master/obj.name #(找不到的话,可以修改为自己的绝对路径)backup = backup/ # 权重保存的位置

–5.4 数据集制作
在scripts文件夹下按如下目录创建VOCdevkit 文件夹,放自己的训练数据。

VOCdevkit
--VOC2007
----Annotations  #(放XML标签文件)
----ImageSets
------Main
----JPEGImages   # (放原始图片)
把自己的原始未标注图片和标签信息放入相应文件夹下。
  •  

–5.5 scripts文件夹下有voc_label.py,打开后修改自己的类别信息,

sets=[ (‘2007’, ‘train’), (‘2007’, ‘val’), (‘2007’, ‘test’)]
classes = [“person”,“car” ] 按自己的类别修改,但是顺序要和obj.name 保持一致,
-5.6 在主目录下创建make_data.py 文件,把如下代码方进去。运行此文件在scripts 文件下生成 3个相应的txt文件,在Main 下生成四个txt文件。
在这里插入图片描述

  •  
import os
import random
import sys
root_path = './scripts/VOCdevkit/VOC2007'
xmlfilepath = root_path + '/Annotations'
txtsavepath = root_path + '/ImageSets/Main'
if not os.path.exists(root_path):print("cannot find such directory: " + root_path)exit()
if not os.path.exists(txtsavepath):os.makedirs(txtsavepath)
trainval_percent = 0.9
train_percent = 0.8
total_xml = os.listdir(xmlfilepath)
num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)
print("train and val size:", tv)
print("train size:", tr)
ftrainval = open(txtsavepath + '/trainval.txt', 'w')
ftest = open(txtsavepath + '/test.txt', 'w')
ftrain = open(txtsavepath + '/train.txt', 'w')
fval = open(txtsavepath + '/val.txt', 'w')
for i in list:name = total_xml[i][:-4] + '\n'if i in trainval:ftrainval.write(name)if i in train:ftrain.write(name)else:fval.write(name)else:ftest.write(name)
ftrainval.close()
ftrain.close()
fval.close()
ftest.close()
  • 5.7运行voc_labels.py文件,在VOC2007文件下生成labels文件,文件夹里包含相应的txt.(现在voc2007文件里多出一个labels 文件夹)

在这里插入图片描述

-5.8 开始训练
首先下载预训练权重yolov4.conv.137,放入主目录下。

链接:https://pan.baidu.com/s/1yhB8pRcGH84gyRWeNictBA
提取码:gi4d

用下面的命令开始训练:
./darknet detector train obj.data yolo-obj.cfg yolov4.conv.137 -map

#训练2000此后在之前训练的基础上继续训练(适合中途停止后继续训练)
./darknet detector train obj.data yolo-obj.cfg backup/yolo-obj_2000.weights -map

在这里插入图片描述大家可以看到收敛效果还是很明显的,效果扛扛的。不愧是吊打一切的目标检测算法。

-5.9测试
修改obj.data,
valid = ./scripts/2007_test.txt
#valid = ./scripts/2007_val.txt

测试:
./darknet detector map obj.data yolo-obj.cfg backup/yolo-obj_final.weights

好了,你竟然认真的看完了,记得点赞收藏,下次观看不迷路,有任何问题欢迎流言私信我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vs 2010 不显示解决方案文件

vs 2010 不显示解决方案文件的问题早就遇到过,而且也能很容易的解决,唯独这次太郁闷了,先说说之前的我办法吧,像往常一样,在工具栏里面找到 >工具>选项>项目和解决方案>常规>勾中“总是显示解决方案”&…

CentOS7 安装ownCloud

ownCloud的安装依赖LAMP环境,即 Linux Apache MySQL(Mariadb) PHP,所以在装owncloud前最好先装好这些,并且保证已经可用。 为了方便,本文在运行shell命令时都是以管理员用户身份运行(root权限下运行)&a…

java opencv 平移_Java中使用opencv

Java中使用opencvJava中使用opencv零、前言作为图像处理出身,不仅仅要会C图像处理、matlab图像处理、python图像处理、最起码也得会java图像处理,当然我最终还都用的是opencv这个机器视觉库了。今天简单介绍一下java中如何使用opencv。一、配置库(1)官网…

CentOS7 安装 NextCloud

NextCloud 的安装依赖LAMP环境,即 Linux Apache MySQL(Mariadb) PHP,所以在装 NextCloud前最好先装好这些,并且保证已经可用。 为了方便,本文在运行shell命令时都是以管理员用户身份运行(root权限下运行&#xff0…

苹果系统使用之输入法的呈现与设置问题

新装的系统,总是纠结的出现各种问题。今天解决的就是装了Mac OS X 10.6(苹果系统)之后,输入法找不到,用快捷不能设置的问题。 刚开始使用mac os x 系统,其实说用也谈不上,因为本人是使用公司的电…

halcon 17 cuda cudnn 深度学习环境搭建

如果你想安装halcon17,那么很简单,硬盘剩余空间2G,内存超过256M,操作系统win7以上即可。 但显然我们的要求不仅如此,因为我们期待已久的深度学习功能。 详细要求见下表 必备环境:电脑必须要有 NVIDIA 独立显卡&#x…

Format Currency Sample

2019独角兽企业重金招聘Python工程师标准>>> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"&…

深度学习-服务端训练+android客户端物体识别实战(caffe入门教程+mobilenet+ncnn+android)

文章目录 背景 物体识别简介 自动驾驶 淘宝京东使用物体识别技术公司业务需求 深度学习简介 深度学习的位置 深度学习概念深度学习优势 深度学习基础知识 感知机 激活函数多层感知机卷积神经网络 卷积层 * 池化层 模型训练 前向传播 * 反向传播与参数优化 深度学习服务端框…

java+包装类,装箱和拆箱_Java包装类,装箱和拆箱详解

下面要给大家讲到的就是Java内置包装类方面的知识&#xff0c;这章主要会讲到Java包装类装箱和拆箱方面的知识&#xff0c;一起来了解一下。Java为每种基本数据类型分别设计了对应的类&#xff0c;这就被叫做是包装类(WrapperClasses)&#xff0c;当然&#xff0c;也有的地方叫…

Using JSON for data transfer

为什么80%的码农都做不了架构师&#xff1f;>>> JSON basics At its simplest, JSON allows you to transform a set of data represented in a JavaScript object into a string that you can easily pass from one function to another, or -- in the case of as…

Visual Studio 2010 中JS注释制作

Visual Studio 2010中的js注释已经很强大了&#xff0c;但怎么才能和调用c#的方法一样容易呢&#xff1f;怎样才能让每个参数都有注释说明呢&#xff1f;底下就是想要的答案。 先上图&#xff0c;如图所示&#xff1a; 其中红色的办法为注释效果&#xff0c;当然制作的方法也在…

windows下配置caffe-matlab接口

一、环境说明 也是安装顺序。特别强调的是除VS2015以外&#xff0c;其他软件的安装路径都最好不要包含空格。 1、Windows 64位系统。 2、Visual Studio 2015(VS2015, 对应VC14)。 3、Matlab 2017a。Matlab的版本倒不是很重要&#xff0c;只要支持Matlab 2015a之后的版本都应该…

NVelocity标签使用详解

本文使用的NVelocity版本为1.1.1&#xff0c;应该是目前为止最新的版本吧&#xff0c;前几天在google上找了一个自称是NVelocity 1.6.1 bate2的dll&#xff0c;下载下来一看更新时间是2009年的&#xff0c;还没版本NVelocity 1.1.1&#xff08;2010年出的&#xff09; 新呢&…

一文搞懂蓝绿发布、灰度发布和滚动发布

一文搞懂蓝绿发布、灰度发布和滚动发布 应用程序升级面临最大挑战是新旧业务切换&#xff0c;将软件从测试的最后阶段带到生产环境&#xff0c;同时要保证系统不间断提供服务。 长期以来&#xff0c;业务升级渐渐形成了几个发布策略&#xff1a;蓝绿发布、灰度发布和滚动发布&…

NVelocity标签设置缓存的解决方案

意外的问题总会让人措手不及&#xff0c;今天与大家分享的就是NVelocity设置缓存的问题&#xff0c;之前刚google了一下发现没什么太好的解决方案&#xff0c;希望在这能为需要的朋友找出满意的答案&#xff0c;上一篇blog刚说了NVelocity的用法&#xff0c;这就不在重复了&…

java成员方法的一般格式为_Java基本知识(四)

一、二维数组1、定义方式m&#xff1a;代表当前二维数组中有多少个一维数组&#xff1b;n&#xff1a;代表每个一维数组的长度(1)数据类型[][] 数组名new 数据类型[m][n](2)数据类型[][] 数组名new 数据类型[m][ ]&#xff0c;只给定m个一维数组&#xff0c;每个一维数组长度动…

免费的定时任务托管 clock.sh

自己有很多定时任务要跑&#xff0c;所以之前搞了一个定时运行的系统。 在 V2EX 看到很多有类似需求的朋友&#xff1a; https://www.v2ex.com/t/252810https://www.v2ex.com/t/448726https://www.v2ex.com/t/579740https://www.v2ex.com/t/241229https://hk.v2ex.com/t/1134…

vCenter Server Appliance(VCSA )6.7部署指南

VCSA 6.7版本于2018年4月17日提供下载&#xff0c;同时发布的还有ESXi 6.7&#xff0c;根据官方文档&#xff0c;6.7版本升级主要为了发布vSAN 6.7版本。 第1步&#xff0c;下载VMware-VCSA-all-6.7.0-8217866文件&#xff0c;用虚拟光驱挂载或者解压运行&#xff0c;选择“安…

Ansible无敌详细入门教程

Ansible 是什么 ? ansible架构图 ansible特性 模块化&#xff1a;调用特定的模块&#xff0c;完成特定的任务&#xff1b; 基于Python语言研发&#xff0c;由Paramiko, PyYAML和Jinja2三个核心库实现&#xff1b; 部署简单&#xff1a;agentless&#xff1b; 支持自定义模…

Nginx学习笔记(五) 源码分析内存模块内存对齐

Nginx源码分析&内存模块 今天总结了下C语言的内存分配问题&#xff0c;那么就看看Nginx的内存分配相关模型的具体实现。还有内存对齐的内容~~不懂的可以看看~~ src/os/unix/Ngx_alloc.h&Ngx_alloc.c 先上源码&#xff1a; /** Copyright (C) Igor Sysoev* Copyright (C…