文章目录

  • 一.数据收集和数据标注
  • 二. 下载编译darknet
  • 三. 数据格式转换
  • 四 文件配置
  • 五 开始训练
  • 六 使用YOLO v3 训练自己的模型

一.数据收集和数据标注

1.收集相关数据
图像编号参见https://blog.csdn.net/Mihu_Tutu/article/details/103726384
数据增广参考https://blog.csdn.net/Mihu_Tutu/article/details/103728290

2.图像标注,本次使用的是Labeling,具体使用教程参考https://blog.csdn.net/syyyy712/article/details/80234287

在标注完成后,将制作好的数据集放到你的数据集文件夹内(我的是/home/xxx/dataset/VOC2007),其文件夹构成如图:

其中,JPEGImages里是你的所有图片,Annotation里是与你的图片一一对应的XML标注文件(如果某个图不包含物体,请在标注时随便圈一下再删除,随后保存,否则不会生成XML,会报错!)

3.接下来,在Main里创建一个训练与测试列表。在VOC2007文件夹内创建一个split.py,将下列代码复制进去:

import os
import random# 训练集和测试比例分配
trainval_percent = 0.1
train_percent = 0.9
xmlfilepath = 'Annotations'  # xml 位置
txtsavepath = 'ImageSets\Main'
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)ftrainval = open('ImageSets/Main/trainval.txt', 'w')
ftest = open('ImageSets/Main/test.txt', 'w')
ftrain = open('ImageSets/Main/train.txt', 'w')
fval = open('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:ftest.write(name)else:fval.write(name)else:ftrain.write(name)ftrainval.close()
ftrain.close()
fval.close()
ftest.close()

接着,命令行执行该文件

$ python split.py

执行后你应该能在Main里看到4个文件,里面分别存储了被作为四类数据的文件的名称。

二. 下载编译darknet

darknet安装教程详见yolo官网

三. 数据格式转换

labelImg使用的是VOC的数据格式,而YOLO则需要使用txt数据。因此,需要对数据格式进行转换。

在darknet/scripts文件夹下有一个文件voc_label就是干这个用的。

将该文件复制至darknet文件夹内,然后修改该文件,将上面部分修改的适配你的数据集,比如我只需要检测car,则改为:

  sets=[('2007', 'train'), ('2007', 'val'), ('2007', 'test')]classes = ["car"]  # 自己数据的类别名称文件最下面两行可以删除:os.system("cat 2007_train.txt 2007_val.txt 2012_train.txt 2012_val.txt > train.txt")os.system("cat 2007_train.txt 2007_val.txt 2007_test.txt 2012_train.txt 2012_val.txt > train.all.txt")

然后执行该文件

$ python voc_label.py

需要注意的有
1. 需要先运行split.py
2. darknet/scripts/voc_label.py
注意 路径问题,非常容易出错

   list_file.write('%s/VOCdevkit/VOC%s/JPEGImages/%s.jpg\n'%(wd, year, image_id))此时生成的文件中路径容易出现问题,wd是取文件的路径,可以换成绝对路径list_file.write(' /xxx/.../VOCdevkit/VOC%s/JPEGImages/%s.jpg\n'%(year, image_id))

另一种方法:在图像标注中,将图片的格式选为yolo(图中为voc)

此时可以直接得到 txt文件,此时darknet/scripts/voc_label.py需要简单的修改

conver_annotation 是将annotation中的xml文件转化成txt文件。在这里就不需要了。

四 文件配置

1 voc.names
修改data/voc.name(记得备份),里面放你的所有类的名称(回车分隔,最后一行无回车)。
2 cfg / yolov3-tiny.cfg
创建修改新的cfg / yolov3-tiny.cfg最上面部分,注释掉test对应部分,使用train部分。这里batch指每次读取了多少张图片,subdivisions是指将数据分为多少份输入,例如batch=64,subdivisions=16则是每次输入64/16=4张图同时训练,最后64张图的所有结果视为一个batch,共同优化。这里需要根据GPU显存自行调整。(想提高训练速度的话,应该是提高cfg中的batch值,并适当较少subdivision,这样net->batch=batch / subdivision适当变大,意味着每次参加训练的图片数目增加)

修改[yolo]层中 classes 个数 ,以及[yolo]层上面的[convolutuonal]层中的filters的个数 filters = 3 * (classes +5).
共有两处需要修改

3 cfg/voc.data

classes = 20
train = /.../.../2007_train.txt
valid = /.../.../2007_test.txt
names = data/voc.names
backup = backup

小技巧 Darknet 在模型训练中,保存的weights,1000以内每过100 保存一次,一般来说前面的weights效果都不好,因此可以改成1000次保存一次。

/darknet/examples/detector.c

五 开始训练

使用yolov3-tiny训练模型时,需要加载预训练模型,而官网没给tiny版的预训练模型,可以在原yolov3-tiny.weights上得到,只需如下指令。参考https://blog.csdn.net/chengyq116/article/details/83213699

./darknet partial ./cfg/yolov3-tiny.cfg ./yolov3-tiny.weights ./yolov3-tiny.conv.15 15然后训练:./darknet detector train cfg/voc.data cfg/yolov3-tiny.cfg yolov3-tiny.conv.15
# 可视化
./darknet detector train cfg/voc-helmet.data  cfg/yolov3-voc-helmet.cfg darknet53.conv.74 | tee visualization/train_yolov3.log

新增部分
训练输入

This entire iteration/block represents one batch of images, divided according to our subdivisions. Have a look at the .cfg file I provided earlier to verify that batch = 64 and subdivision = 8. Looking at the image above, the training iteration has 8 groups of 8 images, reflecting these specific settings.

整个迭代/块代表一批图像,根据我们的细分划分。 看一下我之前提供的.cfg文件,以验证batch = 64和subdivvision =8。看上图,训练迭代有8组,每组8张图像,反映了这些特定的设置。

9798 indicates the current training iteration/batch.0.370096 is the total loss.0.451929 avg is the average loss error, which should be as low as possible. As a rule of thumb, once this reaches below 0.060730 avg, you can stop training.0.001000 rate represents the current learning rate, as defined in the .cfg file.3.300000 seconds represents the total time spent to process this batch.
The 627072 images at the end of the line is nothing more than 9778 * 64, the total amount of images used during training so far.

Region Avg IOU: 0.326577 is the average of the IOU of every image in the current subdivision. A 32,66% overlap in this case, this model still requires further training.Class: 0.742537 still figuring this outObj: 0.033966 still figuring this outNo Obj: 0.000793 still figuring this outThe Avg Recall: 0.12500 is defined in code as recall/count, and thus a metric for how many positives YOLOv2 detected out of the total amount of positives in this subdivision. In this case only one of the eight positives was correctly detected.count: 8 is the amount of positives (objects to be detected) present in the current subdivision of images (subdivision with size 8 in our case). Looking at the other lines in the log, you'll see there are also subdivision that only have 6 or 7 positives, indicating there are images in that subdivision that do not contain an object to be detected.

新增结束

随着训练过程进行,IOU应当会越来越高,例如对于我的任务最终都在75%左右。训练好的模型会被存储在darknet/backup中,名字如yolov3-voc_900.weights,这里的数字是执行epoch的数目。YOLO默认最多只会存储到900,后面虽然程序没停,但这个backup不会再增加。所以不要以程序停止作为训练结束的标志。

训练过程中可以查看GPU显存占用情况。nvidia-smi可以,但是只能查看一次。如果需要一直监控可执行

watch -n 0.1 nvidia-smi

其中-n后面的数字是多少秒刷新一次。

未完待续
参考 https://blog.csdn.net/weixin_39078049/article/details/102295561

六 使用YOLO v3 训练自己的模型

https://blog.csdn.net/qq_29377279/article/details/83141239
https://blog.csdn.net/lumingha/article/details/89038863
https://blog.csdn.net/qq_21578849/article/details/84980298?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

yolov3-tiny 训练一个检测器(1)相关推荐

  1. yolov3 tiny训练自己的数据集进行物体检测 (只检测行人)

    说明:我的电脑是个16年3500元买的笔记本(勇气可嘉:) 环境:额外的包之类的,我用的anaconda,可以非常容易安装各类包,如果运行显示缺包,那就去environment去安装对应的包. 我的版 ...

  2. 从头开始训练一个检测QR二维码区域的YOLOv3模型

    条形码和二维码在识别的时候主要包含定位和解码两个步骤.寻找码的位置,除了用传统的图像算法之外,也可以借助深度学习.那么深度学习的效率如何,我做了一个实验. 为QR二维码训练YOLOv3模型 编译Dar ...

  3. 寺冈labelnet使用说明_用TensorFlow训练一个目标检测器(手把手教学版)

    原标题:用TensorFlow训练一个目标检测器(手把手教学版) TensorFlow内包含了一个强大的物体检测API,我们可以利用这API来训练自己的数据集实现特殊的目标检测. 国外一位程序员分享了 ...

  4. python识别人脸多种属性_OpenCV-Python(3)训练一个人脸识别器

    想要能人脸识别,我们需要训练一个识别器处理.训练的话就需要之前已经标注好的训练集,在前一篇文章中,我们创建了一个已经标注好的训练集.现在,是时候用这个训练集来训练一个人脸识别器了.当然,是用OpenC ...

  5. alexeyab darknet 编译_【目标检测实战】Darknet—yolov3模型训练(VOC数据集)

    原文发表在:语雀文档 0.前言 本文为Darknet框架下,利用官方VOC数据集的yolov3模型训练,训练环境为:Ubuntu18.04下的GPU训练,cuda版本10.0:cudnn版本7.6.5 ...

  6. 【YOLOv3从头训练 数据篇】

    YOLOv3从头训练 数据篇 前言 数据下载 数据可视化 标签生成 生成训练路径文件 结语 前言 最近在忙着怎么从头实现YOLOv3,从网上找了很多教程,也在GitHub上面找到了挺多的代码的,有些能 ...

  7. 【目标检测实验系列】使用yolov3 spp训练西工大遥感数据集NWPU VHR-10(包括如何将NWPU VHR-10转为VOC格式和yolov3 spp实验调试的详细步骤,且附上训练完的权重文件)

    目录 1. 文章主要内容 2. 西工大数据集转换为VOC格式数据集 2.1 VOC数据集结构 2.2 西工大数据集 2.3 转换格式 2.3.1 构建与VOC类似的数据集文件结构(文件夹名可以自定义) ...

  8. Github上利用win10使用TensorFlow(GPU)上如何去训练一个目标多分类检测的例子

    Github上利用win10使用TensorFlow(GPU)上如何去训练一个目标多分类检测的例子 我们从github找到一个用fast-rcnn训练模型用于目标物体检测的例子,文中是实现检测扑克牌的 ...

  9. yolov3模型训练并部署到K210(零基础也可)

    1.yolov3模型训练 2.部署到K210 文章有点长,是因为很细节. 首先建一个新文件夹(要以英文命名)再在文件夹中建如下两个文件夹(images是用来放原照片的,xml是用来放标志后的照片的). ...

  10. NeurIPS 22|四分钟内就能训练目标检测器!( AGVM)

    文章目录 引言 方法介绍 实验过程 结果分析 引言 来自商汤的基模型团队和香港大学等机构的研究人员提出了一种大批量训练算法 AGVM,该研究已被NeurIPS 2022接收. 本文提出了一种大批量训练 ...

最新文章

  1. 如何在TVM上集成Codegen(下)
  2. 【建站系列教程】3.1、cookie介绍
  3. java编程实践开发项目,帮你突破瓶颈
  4. 设置3d rotationY 旋转之后元件大小改变解决方案
  5. Scalaz(25)- Monad: Monad Transformer-叠加Monad效果
  6. 关于《在Windows与.NET平台上的持续交付实践》的问答录
  7. HDU - 3605 Escape(二分图多重匹配-网络流最大流+思维建边+状态压缩)
  8. Xilinx视频加速技术专场
  9. MongoDB 分片
  10. html网页的结构框架代码
  11. java中的链接之其他窗体_两个窗体之间的链接
  12. oracle查询报错clb,Oracle RAC 负载均衡与故障转移(三)
  13. java序列化层数_java序列化详解
  14. 一篇相当不错的function入门文章
  15. 停掉一台服务器,Nginx响应慢(转载)
  16. 计算机网络数据传输的,计算机网络数据传输技术基本概念
  17. 计算机专业专转本题目(新考纲)
  18. Java之时间格式转换
  19. Android Studio记录一个错误:解析软件包时出现问题
  20. 用vivo手机拍照一定要先打开这个设置,不然白浪费这么强大的手机

热门文章

  1. 26种土的掉渣的东西,看你有多少
  2. MyBatis使用Mapper动态代理开发Dao层
  3. [JNI]开发之旅 (3)jni域描述符说明
  4. [JNI] 开发之旅 (1)开发流程介绍
  5. 线元法输入曲线要素_Origin入门教程(三):Origin中曲线怎么平移?
  6. python3.7安装opencv4.1_VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
  7. C# json解析字符串总是多出双引号_SSM框架中JSON数据交互实现页面显示图书种类...
  8. 计算机网络传输介质中速率最快的是,通常传输速率最快的网络类型是()
  9. php7使用什么缓存,PHP7 opcache缓存清理问题
  10. Eclipse2020+Tomcat9.0+Maven Web配置!