使用yolo v3训练自己的模型
文章目录
- 一 加载darknet
- 二 数据准备
- 三 模型文件配置
- 四、测试
一 加载darknet
1、下载darknet框架
参考官网https://pjreddie.com/darknet/yolo/
git clone https://github.com/pjreddie/darknet
cd darknet
make
2、官网下载预训练权重
wget https://pjreddie.com/media/files/yolo3.weights
3、测试
(1)修改darknet目录下Makefile文件,将GPU、CUDNN、OPENCV的值都改为1(需提前安装显卡驱动、cuda、cudnn、opencv)
(2)修改要使用的cfg文件,以yolov3.cfg为例,将testing下的batch和subdivision取消注释,将training下的batch和subdivision加注释
用图片测试:
1 ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
用视频测试:
1 ./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights <video file>
用相机测试:
1 ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
一般情况下不需要加sudo就可以执行,但如果出现权限问题,加sudo有效,说明你的cuda安装有问题,但是不会对结果产生影响。
二 数据准备
1、将自己的数据集放在指定文件夹下
部分文件夹需要自己新建
在这里插入图片描述
图片统一编号,放在文件夹JPEGImages文件夹中,https://blog.csdn.net/Mihu_Tutu/article/details/103726384
2、图片制作xml文件
用labelImg,下载地址https://github.com/tzutalin/labelImg
我用的是python2
Python2安装labelImg步骤:
sudo apt-get install pyqt4-dev-tools
sudo pip install lxml
make qt4py2
python labelImg.py
这里顺便附上python3的步骤:
sudo apt-get install pyqt5-dev-tools
sudo pip3 install -r requirements/requirements-linux-python3.txt
make qt5py3
python3 labelImg.py
打开之后,改变xml文件存储地址为上图中的Annotations文件夹中。
3、Imagesets文件夹下新建Main文件夹,用来存放训练图片的名字的文档train.txt及测试图片的名字的文档test.txt。下面附上python代码。
原文:https://blog.csdn.net/xue_csdn/article/details/91043911
import os
import random xmlfilepath=r'/home/huadian/darknet/scripts/VOCdevkit/VOC2007/Annotations'
saveBasePath=r"/home/huadian/darknet/scripts/VOCdevkit/VOC2007/"trainval_percent=0.8
train_percent=0.7
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("traub suze",tr)
ftrainval = open(os.path.join(saveBasePath,'ImageSets/Main/trainval.txt'), 'w')
ftest = open(os.path.join(saveBasePath,'ImageSets/Main/test.txt'), 'w')
ftrain = open(os.path.join(saveBasePath,'ImageSets/Main/train.txt'), 'w')
fval = open(os.path.join(saveBasePath,'ImageSets/Main/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()
注意路径问题。
使用过程中出现,找不到文件的问题,解决办法是把上述程序在window系统下运行(具体什么原因?需要求助大神)。
4、将xml文件转换为txt文件
在darknet/scripts目录下找到voc_label.py文件,
将sets中的2012相关的去掉,classes改为自己数据集的类别,os.system去掉2012相关,把相应的文件路径改成自己的
运行python voc_label.py,可以看到txt文件出现在labels文件夹下
同时在scripts文件夹下边生成三个txt文件,分别是2007_train.txt、2007_test.txt(一般不会用到)、2007_val.txt
如果出现
说明JPEGImages 文件夹下的图片出现格式问题,建议换一张图片,重新标注。
三 模型文件配置
1、修改voc.nama
位于darknet/data文件夹下,这是目标的标签,清空,添加自己的标签
2、修改voc.data
位于darknet/cfg文件夹下,分别将train、val的路径改为scripts文件夹下边的2007_train.txt、2007_val.txt的路径
3、修改模型(cfg)中的参数
使用yolov3模型
权重文件darknet53.conv.74
下载方式[wget https://pjreddie.com/media/files/darknet53.conv.74]
(1)使用yolov3-voc.cfg,将Training后边的注释去掉,batch=64,修改subdivsion=64(如果该值太小容易使内存溢出),
(2)修改参数cfg/yolov3-voc.cfg
一共有三个yolo。可以通过ctrl+f找到yolo
修改classes = 2 (根据voc-names个数)
然后修改 上面的convolutional中的filters
filters = 3*(5+classes)
(3)回到darknet,开始训练
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
修改yolov2模型
权重文件darknet19-448.conv.23
下载方式[wget https://pjreddie.com/media/files/darknet19-448.conv.23]
(1)使用yolov2-voc.cfg,将Training后边的注释去掉,batch=64,修改subdivsion=64(如果该值太小容易使内存溢出)必须是2的指数,
(2)修改[region]层,将classes的值改为自己标签的个数,
[region]层上边最后一个[convolutional]层中,修改filters的数值,计算公式:
filters=num*(classes+coords+1),classes和coords的值都是[region]层中的值
(3)回到darknet,开始训练
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet19-448.conv.23
(1)Region Avg IOU:平均的IOU,代表着预测的Bounding Box和Ground truth的交集与并集之比,(batch/subdivision)期望该值趋近于1。
(2)Class:是标注物体的概率,期望该值趋近于1。
(3)Obj:期望该值趋近于1。
(4)No Obj:期望该值越来越小,但不为0。
(5)AvgRecall:期望该值趋近于1,召回率比较高说明效果较好
(6)count表示输出有多少个目标总和
训练完一个batch后的参数的意义
(1)30001表示是第30001个batch。
(2)表示总体的损失。
(3)表示平均损失,该数值越低越好。
(4)代表当前的学习率。
(5)表示当前批次训练花费的总时间。
(6)表示参与训练的图片数目的总和。
就可以在darknet/backup文件夹下看到有不同精度的模型(权重)出现。按照每100步、每1000步、每10000步产生。
如果训练中断,但是后面想要接着前边的模型继续训练,(如训练到5100步时中断)只需要把“darknet19_448.conv.23”换成“yolov2-voc_5000.weights”,即可继续训练。
根据需要选择模型测试图片或视频。
四、测试
测试方法与步骤3类似,需将cfg文件名改为yolov2-voc.cfg,yolov2-voc.cfg中的training下的两个值加注释,testing下的两个值取消注释。如:用摄像头测试:
1 ./darknet detector demo cfg/voc.data cfg/yolov2-voc.cfg yolov2-voc_30000.weights
如果想在bbox上显示准确率,执行:
打开derknet/src文件中找到image.c文件
找到draw_detections函数,加入红色框中的内容,
在这里插入代码片
最后重新编译darknet:
make clean
make
使用yolo v3训练自己的模型相关推荐
- 目标检测 YOLO v3 训练 人脸检测模型
YOLO,是You Only Look Once的缩写,一种基于深度卷积神经网络的物体检测算法,YOLO v3是YOLO的第3个版本,检测算法更快更准. 本文源码:https://github.com ...
- 【Pytorch深度学习50篇】·······第五篇:【YOLO】【1】----- YOLO V3 V4 V5的模型结构
第四篇,我们已经简单的过了一个segmentation网络,下面我们要进入一个相对要复杂一点的系列了,它也是用于目标检测的,与segmentation不同的是,这个网络会回归出目标的位置和大小.YOL ...
- 深度学习:yolo v3训练结果测试
change cfg/voc.data cfg/yolov3-voc.cfg 参考链接: https://www.pianshen.com/article/841190573/ ./darknet d ...
- 目标检测:Faster-RCNN与YOLO V3模型的对比分析
1 目标检测的背景 作为机器视觉领域的核心问题之一,目标检测的任务是找出图像中所有的目标(物体),并确定它们的位置和大小.由于各类物体有不同的外观,形状,姿态,加上成像时光照,遮挡等因素的干扰,目标检 ...
- 口罩、安全帽识别比赛踩坑记(二) 比赛流程及 SSD / YOLO V3 两版本实现
本篇文章主要对比赛流程中的各个环节进行展开说明,并对笔者践行过的代码及更改的地方进行记录.如哪里有侵权请联系笔者进行删除.另外在这里对比赛举办方表示感谢 ~ ~ 其中开源代码会在整理后放在github ...
- YOLO V3基于Tensorflow 2.0的完整实现
如果对Tensorflow实现最新的Yolo v7算法感兴趣的朋友,可以参见我最新发布的文章,Yolo v7的最简TensorFlow实现_gzroy的博客-CSDN博客 YOLO V3版本是一个强大 ...
- 使用yolo v3+alexnet做上衣颜色识别项目总结
上衣颜色识别项目总结 流程: 先用yolo v3的Keras版本训练coco数据集的模型做行人检测,过滤掉非行人以及超大框,得到行人的位置 使用alexnet进行颜色分类,一共12类,数据集是之前标定 ...
- YOLO v3代码学习
本人使用的版本是https://github.com/AlexeyAB/darknet 源码在darknet-master\src目录下 还记得我们用YOLO v3训练自己的数据集的过程,控制台下使用 ...
- YOLO v3 安装并训练自己数据
文章目录 1. 安装 1.1 模型安装 1.2 运行Demo 2.训练自己的数据集 2.1数据集准备 2.2修改配置文件 2.2.1修改cfg/voc.data 2.2.2修改data/voc.nam ...
- Win10+YOLOv4/v3用yolo_mark标记数据集 训练自己的模型
Win10+Yolov4用yolo_mark标记数据集 训练自己的模型 文章目录 1. 前言 2. darknet 3. yolo_mark 3.1 yolo_mark和opencv的下载 3.2 y ...
最新文章
- 网站出现service unavailable的解决方法
- 深度学习:语义分割网络
- [Qt教程] 第34篇 网络(四)FTP(二)
- 连接远程电脑中的虚拟机---端口映射
- 资金时间价值的计算机应用视频讲解,第八章资金时间价值与方案经济比选20161018讲解.ppt...
- java pdf 文字_Java给pdf文件添加文字等信息
- Kubernetes kubeadm 安装记录
- Eclipse SVN 忽略文件或文件夹
- LTE/LTE advanced——UMTS 长期演进理论与实践——控制面(3)
- 深度学习在摄影技术中的应用与发展
- 一个医院为何要架设数字网络时钟系统(电子时钟系统)
- 查看服务器ip修改记录,如果查看服务器ip地址和修改ip
- Heartbeat的介绍及工作原理
- [NOIP 2005 T2] 过河 (动态规划+简单数论)
- mplayer - Linux下的电影播放器
- Python打包出现 failed to execute script xxx解决方法
- 57q/5oCn5Luj5pWw5Y+K5YW25bqU55So56ysNeeJiOS4reaWh1BERui1hOa6kA==
- indexedDB介绍
- 什么?你项目还在用Date表示时间?
- Python基础学习之”基础语法5
热门文章
- N个数全排列的非递归算法
- android如何获取系统开机时间
- [JNI] 开发基础(5)内存分配
- 函数的参数对象$event的使用和利用他找到事件对象
- java 主流算法_java常用算法
- git revert 之后怎么撤销_Git撤销回滚操作(git reset 和 get revert)
- vp230引脚功能_SN65HVD230:具有待机模式的 3.3V CAN 收发器
- python语言的基本数据类型_python语言基本数据类型-深浅拷贝
- python字符串创建_python独特的字符串创建
- css 水印_Inpaint,一款简洁干净的去水印软件