文章目录

  • 一 加载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训练自己的模型相关推荐

  1. 目标检测 YOLO v3 训练 人脸检测模型

    YOLO,是You Only Look Once的缩写,一种基于深度卷积神经网络的物体检测算法,YOLO v3是YOLO的第3个版本,检测算法更快更准. 本文源码:https://github.com ...

  2. 【Pytorch深度学习50篇】·······第五篇:【YOLO】【1】----- YOLO V3 V4 V5的模型结构

    第四篇,我们已经简单的过了一个segmentation网络,下面我们要进入一个相对要复杂一点的系列了,它也是用于目标检测的,与segmentation不同的是,这个网络会回归出目标的位置和大小.YOL ...

  3. 深度学习:yolo v3训练结果测试

    change cfg/voc.data cfg/yolov3-voc.cfg 参考链接: https://www.pianshen.com/article/841190573/ ./darknet d ...

  4. 目标检测:Faster-RCNN与YOLO V3模型的对比分析

    1 目标检测的背景 作为机器视觉领域的核心问题之一,目标检测的任务是找出图像中所有的目标(物体),并确定它们的位置和大小.由于各类物体有不同的外观,形状,姿态,加上成像时光照,遮挡等因素的干扰,目标检 ...

  5. 口罩、安全帽识别比赛踩坑记(二) 比赛流程及 SSD / YOLO V3 两版本实现

    本篇文章主要对比赛流程中的各个环节进行展开说明,并对笔者践行过的代码及更改的地方进行记录.如哪里有侵权请联系笔者进行删除.另外在这里对比赛举办方表示感谢 ~ ~ 其中开源代码会在整理后放在github ...

  6. YOLO V3基于Tensorflow 2.0的完整实现

    如果对Tensorflow实现最新的Yolo v7算法感兴趣的朋友,可以参见我最新发布的文章,Yolo v7的最简TensorFlow实现_gzroy的博客-CSDN博客 YOLO V3版本是一个强大 ...

  7. 使用yolo v3+alexnet做上衣颜色识别项目总结

    上衣颜色识别项目总结 流程: 先用yolo v3的Keras版本训练coco数据集的模型做行人检测,过滤掉非行人以及超大框,得到行人的位置 使用alexnet进行颜色分类,一共12类,数据集是之前标定 ...

  8. YOLO v3代码学习

    本人使用的版本是https://github.com/AlexeyAB/darknet 源码在darknet-master\src目录下 还记得我们用YOLO v3训练自己的数据集的过程,控制台下使用 ...

  9. 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 ...

  10. Win10+YOLOv4/v3用yolo_mark标记数据集 训练自己的模型

    Win10+Yolov4用yolo_mark标记数据集 训练自己的模型 文章目录 1. 前言 2. darknet 3. yolo_mark 3.1 yolo_mark和opencv的下载 3.2 y ...

最新文章

  1. 网站出现service unavailable的解决方法
  2. 深度学习:语义分割网络
  3. [Qt教程] 第34篇 网络(四)FTP(二)
  4. 连接远程电脑中的虚拟机---端口映射
  5. 资金时间价值的计算机应用视频讲解,第八章资金时间价值与方案经济比选20161018讲解.ppt...
  6. java pdf 文字_Java给pdf文件添加文字等信息
  7. Kubernetes kubeadm 安装记录
  8. Eclipse SVN 忽略文件或文件夹
  9. LTE/LTE advanced——UMTS 长期演进理论与实践——控制面(3)
  10. 深度学习在摄影技术中的应用与发展
  11. 一个医院为何要架设数字网络时钟系统(电子时钟系统)
  12. 查看服务器ip修改记录,如果查看服务器ip地址和修改ip
  13. Heartbeat的介绍及工作原理
  14. [NOIP 2005 T2] 过河 (动态规划+简单数论)
  15. mplayer - Linux下的电影播放器
  16. Python打包出现 failed to execute script xxx解决方法
  17. 57q/5oCn5Luj5pWw5Y+K5YW25bqU55So56ysNeeJiOS4reaWh1BERui1hOa6kA==
  18. indexedDB介绍
  19. 什么?你项目还在用Date表示时间?
  20. Python基础学习之”基础语法5

热门文章

  1. N个数全排列的非递归算法
  2. android如何获取系统开机时间
  3. [JNI] 开发基础(5)内存分配
  4. 函数的参数对象$event的使用和利用他找到事件对象
  5. java 主流算法_java常用算法
  6. git revert 之后怎么撤销_Git撤销回滚操作(git reset 和 get revert)
  7. vp230引脚功能_SN65HVD230:具有待机模式的 3.3V CAN 收发器
  8. python语言的基本数据类型_python语言基本数据类型-深浅拷贝
  9. python字符串创建_python独特的字符串创建
  10. css 水印_Inpaint,一款简洁干净的去水印软件