YOLOV4在linux下训练自己数据集(亲测成功)
最近推出了yolo-v4我也准备试着跑跑实验看看效果,看看大神的最新操作
这里不做打标签工作和配置cuda工作,需要的可以分别百度搜索 VOC格式数据集制作,cuda和cudnn配置
我们直接利用VOC格式训练自己数据集的模型
笔者也是 根据官方github的readme操作的 没看懂可以进入官方链接看看英文介绍,或者在issue里面提问,笔者花了一天 也算是跑通了数据集的代码。
paper
https://arxiv.org/abs/2004.10934
github
https://github.com/AlexeyAB/darknet#how-to-train-with-multi-gpu
-- 1.首先测试原始权重效果
-- 1.下载预训练权重
-- 2.编译
-- 3.测试
-- 2.训练自己的数据集
-- 1.创建yolo-obj.cfg 文件
-- 2.制作obj.names
-- 3.制作obj.data
-- 4.放入源图片
-- 5.制作train.txt
-- 6.开始训练
1.下载预训练权重
放上链接
有翻墙则:
https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights
百度网盘:
链接:https://pan.baidu.com/s/16wOHbaa2mG7cTZ_RcGjRnw
提取码:99bl
下载好yolov4.weights 权重后 放在主目录下即可
2.编译文件 该方法为使用makefile方法编译
打开Makefile文件 修改该文件

修改该文件中前4行 ---- 0都改为1
代表使用GPU测试和训练(前提是安装好了cuda和cudnn的机器,安装方法 直接百度搜 cuda和cudnn就有很多教程)
如果没安装过cuda则不用改

执行以下命令编译
make
然后主目录中出现darknet文件

3.运行该文件
./darknet
如果编译成功则会出现以下信息
usage: ./darknet<function>
现在可以测试初始预训练权重效果了
./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg
成功则在主目录下出现predictions.jpg 图片为预测后的图片
效果如下

2.训练自己的数据集
--2.1创建yolo-obj.cfg 文件,将 yolov4-custom.cfg 中的内容复制到 yolo-obj.cfg里面并做以下修改。
--2.1.1修改subdivisions=16(如果报内存不足,将subdivisions设置为32或64)
--2.1.2修改max_batches=classes*2000 例如有2个类别人和车 ,那么就设置为4000
--2.1.3修改steps为80% 到 90% 的max_batches值 比如max_batches=4000,则steps=3200,3600
--2.1.4修改classes,先用ctrl+F搜索 [yolo] 可以搜到3次,每次搜到的内容中 修改classes=你自己的类别 比如classes=2
--2.1.5修改filters,一样先搜索 [yolo] ,每次搜的yolo上一个[convolution] 中 filters=(classes + 5)x3 比如filters=21
--2.1.6如果要用[Gaussian_yolo] ,则搜索[Gaussian_yolo] 将[filters=57] 的filter 修改为 filters=(classes + 9)x3 (这里我没用到,但是还是修改了)
--2.2制作obj.names,在build\darknet\x64\data\ 文件夹下创建obj.names文件。内容为你的类别 比如人和车 那么obj.names 为如下
person
car
--2.3制作obj.data,在build\darknet\x64\data\文件夹下创建obj.data文件。内容如下
classes= 2
train = data/train.txt
valid = data/test.txt
names = data/obj.names
backup = backup/
笔者在这读取不到data/下文件 所以改为绝对路径 就可以了 这是我的obj.data文件

--2.4放入源图片,在build\darknet\x64\data\文件夹下创建obj文件夹,存放所有的原始图片
笔者在这里遇到问题,就是我是VOC格式的图片如下
└── VOCdevkit
└── VOC2012
├── Annotations
├── ImageSets
│ ├── Main
├── JPEGImages
但是yoloV4需要的训练集不是这样,现在说下制作过程
先进入script下有一个文件voc_label.py,利用该代码可以得到我们想要的txt标注信息 类似xml文件信息
首先注释掉classes=[.............] 替换里面类别为自己的类别(我是做垃圾检测 所以是litter) 然后我的voc是2007的 所以也取消掉2012的修改如下

然后将所有出现的 VOCdevkit修改为 VOCdevkit2007 ,因为我的目录是 (这里根据你们的数据集更改 要求找到对应的目录就可以了)
--VOCdevkit2007
--VOC2007
--ImageSets

然后在同级目录下会出现labels文件 这个就是xml对应的txt文件,

将labels中文件放入之前的build\darknet\x64\data\obj中
那么obj文件中会同时存在源图片同名txt文件
这样就完成了txt的制作了

--2.5最后是制作train.txt
--2.5.1需要以下格式的train.txt

--2.5.2可以使用如下代码制作
import os
from os import listdir, getcwd
from os.path import join if __name__ == '__main__':
source_folder =r'G:\jianfeng\project\rubblish_det\yolov4\darknet-master\darknet-master\cfg\JPEGImages'
dest = r'G:\jianfeng\project\rubblish_det\yolov4\darknet-master\darknet-master\cfg\1/train.txt'
dest2 = r'G:\jianfeng\project\rubblish_det\yolov4\darknet-master\darknet-master\cfg\1/val.txt'
file_list = os.listdir(source_folder)
train_file = open(dest, 'a')
val_file = open(dest2, 'a')
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+".jpg" + '\n') 相对路径
val_file.write("build/darknet/x64/data/obj/"+file_name+".jpg" + '\n')
else:
#train_file.write(file_name+".jpg" + '\n')
train_file.write("build/darknet/x64/data/obj/"+file_name+".jpg" + '\n')
i+=1
train_file.close()
val_file.close()
其中dest和dest2可以根据自己需要更改
但是这里遇到些问题就是 我的程序无法识别相对路径data/,所以我把路径改为了绝对路径 build/darknet/x64/data/obj/下的文件。如下

现在就完成了所以制作,可以开始训练了
--2.6.下载权重 和之前的权重不一样
链接:https://pan.baidu.com/s/1yhB8pRcGH84gyRWeNictBA
提取码:gi4d
下载好放入主目录中
--2.7.开始训练
./darknet detector train data/obj.data yolo-obj.cfg yolov4.conv.137
如果要使用gpu的话输入以下
./darknet detector train data/obj.data yolo-obj.cfg yolov4.conv.137 -gpus gpu_id
出现以下画面 则正在训练

最终效果图

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
错误问题总结:
1.mosaic=1 - compile Darknet with OpenCV for using mosaic=1
因为在设置中使用了opencv(c++版本),而我们没有安装导致的。将之前修改的yolo-obj.cfg中搜索mosaic将1改为0。
mosaic=1 #--》 更改为0
2.make时 出现以下错误
chmod +x *.sh
g++ -std=c++11 -std=c++11 -Iinclude/ -I3rdparty/stb/include -DGPU -I/usr/local/cuda/include/ -DCUDNN -DCUDNN_HALF -Wall -Wfatal-errors -Wno-unused-result -Wno-unknown-pragmas -fPIC -Ofast -DGPU -DCUDNN -I/usr/local/cudnn/include -DCUDNN_HALF -c ./src/image_opencv.cpp -o obj/image_opencv.o
In file included from ./src/image.h:3:0,
from ./src/image_opencv.h:4,
from ./src/image_opencv.cpp:1:
include/darknet.h:41:26: fatal error: cuda_runtime.h: No such file or directory
compilation terminated.
Makefile:165: recipe for target 'obj/image_opencv.o' failed
make: *** [obj/image_opencv.o] Error 1
出现原因是cuda的path不对导致
先查看自己cuda版本 输入 nvcc -V
查看主目录下Makefile文件
搜/usr/local/cuda/xxx 目录
我的原始文件是/usr/local/cuda/xxx ,cuda版本是9.0 所以
将cuda -->改为cuda-9.0 即可 如下
/usr/local/cuda-9.0/xxx
测试test.txt数据集时的命令(并将结果保存至result.txt中):
./darknet detector test darknet.data darknet-yolov3.cfg darknet-yolov3_final.weights -thresh 0.25 -dont_show -ext_output < data/test.txt > result.txt
恭喜你看完了,有问题可以评论,或者去github上面提问,问作者问题更靠谱哦 ^ - ^
YOLOV4在linux下训练自己数据集(亲测成功)的更多相关文章
- linux shell命令行下操作mysql 删除mysql指定数据库下的所有表--亲测成功百分百测试通过--绝对可靠
1,在shell提示符下查看mysql指定数据库下的表等数据
- linux下gmplayer安装(亲测OK!)
需要的安装包及下载地址: mplayer源代码包(MPlayer-1.0rc4.tar.bz2)下载:http://www.mplayerhq.hu/MPlayer/releases/ 解码器安装包 ...
- 【转】Win7下VS2010中配置Opencv2.4.4的方法(32位和64位都有效)(亲测成功)
在vs2010下配置opencv是件痛苦的事情,一点点错误可能就会导致莫名其妙的报错,各种error让人郁闷不已,这里提供给大家一篇vs2010下配置opencv2.4.4的方法,我是64位的win7 ...
- Caffe初学者第一部:Ubuntu14.04上安装caffe(CPU)+Python的详细过程 (亲测成功, 20180524更新)
前言: 最近在学习深度学习,最先要解决的当然是开源框架的环境安装了.之前一直在学习谷歌的Tensorflow开源框架,最近实验中需要跟别人的算法比较,下载的别人的代码很多都是Caffe的,所以想着搭建 ...
- webstorm2017.3最新激活教程(激活码、注册码)亲测成功
1 前言 webstorm2017.3最新激活教程(旧版本可用,亲测成功,有疑问随时联系),20180411测试成功,还是注册机靠谱~ 2 下载地址 链接: https://pan.baidu.com ...
- 华为荣耀畅玩5C NEM-UL10 ROOT那些事儿(亲测成功)
以前ROOT手机都是在手机上安装KingRoot 刷机精灵等软件分分钟成功(不排除偶然,,比如这款华为荣耀...) 手机安装KingRoot等软件,,,失败 电脑上安装连接手机Root,,,,失败 ...
- eclipse 安装 activiti-designer-5.18.0,亲测成功
转: eclipse 安装 activiti-designer-5.18.0,亲测成功 2018年06月02日 15:50:05 ldw4033 阅读数:2826 版权声明:本文为博主原创文章,未 ...
- Ubuntu下可以直接安装mingw(sudo apt-get install mingw32 mingw32-binutils mingw32-runtime,附例子,简单好用,亲测成功)good
Mingw:在Linux系统下编译Windows的程序 Ubuntu下可以直接安装:sudo apt-get install mingw32 mingw32-binutils mingw32-runt ...
- Navicat Premium Mac 12 破解方法-亲测成功
参照这2篇文档,破解成功了.操作步骤写的很清楚,不再缀述,只记录一下自己破解过程中,认为要注意的点.以免以后再多花时间熟悉重新熟悉操作步骤 Mac安装Navicat(破解版) Navicat Prem ...
随机推荐
- 详解 File类
在讲解File类之前,本人先要讲解下 路径,因为我们对于文件的操作是离不开路径的: 目录 路径: File类 文件名称过滤器: 路径: 请观看本人博文 -- <详解 绝对路径与 相对路径> ...
- Unity 芯片拼图算法
很多游戏的养成系统中会有利用芯片或者碎片来合成特定道具的功能,或者来给玩家以额外的属性提升等,先截个图以便更好说明: 如上图,我们有各种各样形状迥异的碎片,上面只不过列举了其中一部分,现在,我们需要利 ...
- deepin下深度终端使用ssh-agent(xshell中的xagent功能)
背景:从windows10换到deepin后,在连接公司的服务器遇到了问题:windows下用的是xshell,开启xagent后,可直接从公司的跳转板上连接生产服务器:在deepin的深度终端上,从 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第七周作业
<Linux内核原理与分析>第七周作业 一.本周内容概述: 对Linux系统如何创建一个新进程进行追踪 分析Linux内核创建一个新进程的过程 二.本周学习内容: 1.学习进程的描述 操作 ...
- Programmatically mount a Microsoft Virtual Hard Drive (VHD)
By Pixy https://stackoverflow.com/questions/24396644/programmatically-mount-a-microsoft-virtual-hard ...
- 我做了一个 HTML 可视化编辑工具,有前途吗?
疫情在家的这段时间,我做了一个 HTML 可视化编辑工具,做的时候信心满满,差不多完成了,现在反而不如以前信心足了,这玩意有用吗?代码地址: https://github.com/vularsoft/ ...
- dotnetcore配置框架简介
一.前言 配置的本质就是字符串的键值对,微软的一系列接口其实就是对这些键值对字符串的抽象. 二.基本类型 2.1.Nuget包 Microsoft.Extensions.Configuration.A ...
- Django项目打包
Django项目打包 这是目前开发完成的project目录树.我们要打包其中的polls app. (v_python3.6) thinkt@linux-pw37:~/PycharmProjects/ ...
- 第七周CorelDRAW课总结
1.这节课学到了什么知识? "交互式透明工具""交互式阴影工具"以及"交互式调和工具"制作水晶表情包. 2.有什么心得体会? 无 3.存在的 ...
- puppet报告系统Dashboard部署及配置详解
Puppet Dasshboard是由支持Puppet开发的公司Puppetlabs创建的,是Ruby on Rails程序.可以作为一个ENC(外部节点分类器)以及一个报告工具,并且正在逐渐成为一个 ...