本人使用的是linux平台,按照YOLO网页0https://pjreddie.com/darknet/yolo/的步骤操作进行下载darkenet程序包以及编译,之后可尝试用VOC2007的数据集测试一下。

下载好的darknet程序包如下图所示:

注:上图摘自一篇博客上的,https://blog.csdn.net/runner668/article/details/80579063

那么现在有了大佬给我们提供的强大工具,我们下一步该如何用起来呢?

第一部分:制作自己的数据集。

如果自己手头上有数据集,人手又够(自己标注也可以,就是枯燥点),那么就花一两天时间进行自己的检测对象标注,本人使用的标注工具是:labelimg数据集标注工具--此工具仅限于使用矩形框标注对象,如果需要其他形状的可使用labelme标注工具--该工具可以使用圆、线段、点、矩形等进行标注,工具网上都有自己搜索一下吧~!

有了工具那就进行标注吧,看着电影的功夫就可以标注个两三百张进行自己的小实验了。标注完之后,一个文件夹一个放图片,一个放标注好的.XML文件,后续还需要把.xml文件转为.txt格式。

2、使用py小程序进行xml to txt的转换,生成的txt格式的标注信息待用。

3、使用VOC_label.py文件进行txt标注信息的转换。

VOC_label.py的作用

它将为每个.jpg图像文件创建.txt文件 - 在同一目录中并使用相同的名称,但使用.txt-extension,并将文件放入:对象编号和对象坐标,

对于每个对象在新行中:<object-class> <x> <y> <width> <height>

<object-class> - 从0到(classes-1)的整数对象编号

<x_center> <y_center> <width> <height> - 浮动值相对于图像的宽度和高度,它可以等于(0.0到1.0)

例如:<x> = <absolute_x> / <image_width>或<height> = <absolute_height> / <image_height>

注意:<x_center> <y_center> - 是矩形的中心(不是左上角)

例如,对于img1.jpg,您将创建包含以下内容的img1.txt:

1 0.716797 0.395833 0.216406 0.147222
0 0.687109 0.379167 0.255469 0.158333
1 0.420312 0.395833 0.140625 0.166667

将VOC_label.py中的classes按照自己的对象类别进行修改,然后把三处路径改好,需要修改的如下图所示:

def convert_annotation(year, image_id):
in_file = open('VOCdevkit/VOC%s/Annotations/%s.xml'%( image_id))
out_file = open('VOCdevkit/VOC%s/labels/%s.txt'%(image_id), 'w')

修改好以后生成的新TXT文件和图片放到一个文件夹里,这样才能跑起来,原因未知。

第二部分:修改配置文件Cfg和.data文件,创建自己的类别名称文件.names。

1、使用与yolov3.cfg相同的内容创建文件yolo-obj.cfg(或将yolov3.cfg复制到yolo-obj.cfg)。

change line batch to batch=64

change line subdivisions to subdivisions=8

使用 contrl+F 搜索YOLO,你会看到有三个YOLO标头得部分配置,需要改得是:

在[yolo]图层之前的3个[卷积]中将[filters = 255]更改为filters =(classes + 5)x3。

例如 classes=1 then should be filters=18. If classes=2 then write filters=21.

filters =(classes + 5)x3),一般来说,filter的值取决于类别,坐标和masks的数量。即filters=(classes + coords + 1)*<number of mask>,那么其中这个mask值是锚点的索引,如果mask值不存在,那么filters=(classes + coords + 1)*num.因此,例如,对于2个对象,您的文件yolo-obj.cfg应该与3个[yolo] -layers中的每一个中的yolov3.cfg不同:

2、在自己的data目录创建一个obj.names的文本文件:把自己类别的名字写进去。

3、接着创建一个obj.data:

classes= 2

train = data/train.txt # 训练图片的文件名路径集合.txt的路径

valid = data/test.txt #test.txt 文件的路径

names = data/obj.names #.names 文件的路径

backup = backup/ #back up 的路径

第三部分:开始训练并获取权重

1、下载卷积层的预先训练的权重(154 MB):https://pjreddie.com/media/files/darknet53.conv.74并放到目录darknet \ 

2、使用命令行开始培训: ./darknet detector train data/obj.data yolo-obj.cfg darknet53.conv.74

3、训练结束后 - 从路径构建\ darknet \ x64 \ backup \获取结果yolo-obj_final.weights

在每100次迭代后,您可以停止并稍后从此开始训练。 例如,在2000次迭代后,您可以停止训练,稍后只需将yolo-obj_2000.weights从build \ darknet \ x64 \ backup \复制到build \ darknet \ x64 \并使用:darknet.exe探测器训练数据/ obj开始训练。 数据yolo-obj.cfg yolo-obj_2000.weights

注:detector.c文件中可以修改权重文件保存的间隔。

注:如果在训练期间你看到avg(损失)字段的nan值 - 那么训练就出错了,如果仅仅出现少部分nan,训练可以照常进行。

注:如果在cfg文件中更改了width =或height =,则新的宽度和高度必须可被32整除。

注:训练后使用此类命令进行检测:darknet.exe检测器测试数据/ obj.data yolo-obj.cfg yolo-obj_8000.weights

注:如果出现错误内存不足,那么在.cfg文件中你应该尝试改变batch和subdivisions的值。

内容为自己编写和参考的一些博客:

1、https://blog.csdn.net/qq_38214193/article/details/81132053

2、https://blog.csdn.net/runner668/article/details/80579063

YOLOv3训练过程笔记的更多相关文章

  1. tensorflow笔记:模型的保存与训练过程可视化

    tensorflow笔记系列: (一) tensorflow笔记:流程,概念和简单代码注释 (二) tensorflow笔记:多层CNN代码分析 (三) tensorflow笔记:多层LSTM代码分析 ...

  2. 万字长文,以代码的思想去详细讲解yolov3算法的实现原理和训练过程,Visdrone数据集实战训练

    以代码的思想去详细讲解yolov3算法的实现原理和训练过程,并教使用visdrone2019数据集和自己制作数据集两种方式去训练自己的pytorch搭建的yolov3模型,吐血整理万字长文,纯属干货 ...

  3. 深度学习笔记之关于基本思想、浅层学习、Neural Network和训练过程(三)

    不多说,直接上干货! 五.Deep Learning的基本思想 假设我们有一个系统S,它有n层(S1,…Sn),它的输入是I,输出是O,形象地表示为: I =>S1=>S2=>….. ...

  4. win10 下的YOLOv3 训练 wider_face 数据集检测人脸

    1.数据集下载 (1)wider_face 数据集网址为 http://shuoyang1213.me/WIDERFACE/index.html 下载以上几项文件(这里推荐 google Drive ...

  5. Win10中用yolov3训练自己的数据集全过程(VS、CUDA、CUDNN、OpenCV配置,训练和测试)

    在Windows系统的Linux系统中用yolo训练自己的数据集的配置差异很大,今天总结在win10中配置yolo并进行训练和测试的全过程. 提纲: 1.下载适用于Windows的darknet 2. ...

  6. 如何使用yolov3训练自己的数据集

    博客主要结构 1. 如何在ubuntu18.04上安装yolo 2 .如何配置yolov3 3 .如何制作自己的训练集测试集 4 .如何在自己的数据集上运行yolov3 1. 在ubuntu18.04 ...

  7. 【AdaBoost算法】强分类器训练过程

    一.强分类器训练过程 算法原理如下(参考自VIOLA P, JONES M. Robust real time object detection[A] . 8th IEEE International ...

  8. (原)torch的训练过程

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6221622.html 参考网址: http://ju.outofmemory.cn/entry/284 ...

  9. caffe绘制训练过程的loss和accuracy曲线

    转自:http://blog.csdn.net/u013078356/article/details/51154847 在caffe的训练过程中,大家难免想图形化自己的训练数据,以便更好的展示结果.如 ...

随机推荐

  1. hibernate entitymanager的理解

    hibernate EntityManager是围绕提供JPA编程接口的Hibernate Core的一个包装,支持JPA实体实例的生命周期,并允许你用标准的JavaPersistence查询语言编写 ...

  2. 关于虚拟机中Linux系统无法上网之后的解决方案

    我刚刚安装好虚拟机上的Linux的时候,宿主机网络正常,但虚拟机中虽然显示网络连接正常,但无法上网,因此我打开了网络设置 这是默认设置,但上不了网,而按照网上的查找结果,选择NAT是没错的,但仅限于w ...

  3. java工程打成jar包 - 使用maven assembly插件打包及手动打包

    在java工程打包的过程中遇到过不少问题,现在总结一下.一种是典型的maven工程打包,依赖的jar包全都在pom.xml中指定,这种方式打包很方便:另一种是依赖了本机jar包(不能通过pom.xml ...

  4. JAVA初级面试题,附个人理解答案

    一,面向对象的特征:1.抽象 包括数据抽象跟行为抽象,将对象共同的特征取出形成一个类2.继承 被继承类为基类/超类,继承类为子类/派生类3.封装 多次使用道德数据或方法,封装成类,方便多次重复调用4. ...

  5. mysql的逻辑架构

    架构图 做Java开发时,项目一般会分为数据访问层.业务逻辑层.控制层等,每层处理不同的任务.类似的,mysql也不是单一的模块,其内部也分为几层.自己不会画,从网上找来了经典的mysql架构图: 分 ...

  6. python 元组和数组

    参考:https://stackoverflow.com/questions/1708510/list-vs-tuple-when-to-use-each tuple(元组):不可变,不能添加.删除. ...

  7. MYSQL5.5源码包编译安装

    MYSQL5.5源码安装首先安装必要的库yum -y install gcc*###### 安装 MYSQL ######首先安装camke 一.支持YUM,则yum install -y cmake ...

  8. 使用PowerShell远程连接WinServer

    最近做一个项目后台,涉及到多台服务器,当程序更新的时候,由于用的是WinServer,无法像Linux使用SSH批量更新,用Windows的mstsc的远程一个一个连接又太麻烦了.查找了一下资料,发现 ...

  9. linux:vi替换命令

    linux:vi替换命令 vi/vim 中可以使用 :s 命令来替换字符串.以前只会使用一种格式来全文替换,今天发现该命令有很多种写法(vi 真是强大啊,还有很多需要学习),记录几种在此,方便以后查询 ...

  10. linux查看内存使用情况top

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看, ...