训练需要用到的文件:

1)       .data文件。该文件包含一些配置信息,具体为训练的总类别数,训练数据和验证数据的路径,类别名称,模型存放路径等。

例如coco.data

classes= 80 # 训练总类别数
train = /home/xxx/code/darknet/data/coco/trainvalno5k.txt #训练数据路径
valid = /home/xxx/code/darknet/data/coco/5k.txt #验证集路径
names = data/coco.names #每一类名称
backup = backup/ #模型存放路径
eval=coco

需要用到训练数据trainvalno5k.txt和验证数据5k.txt。

其中,这两个文件内容为训练/验证图片的路径,每一行为一张图像的路径。部分内容如下:

/home/xxx/code/darknet/data/coco/images/val2014/COCO_val2014_000000000164.jpg
/home/xxx/code/darknet/data/coco/images/val2014/COCO_val2014_000000000192.jpg
/home/xxx/code/darknet/data/coco/images/val2014/COCO_val2014_000000000283.jpg

上面的为训练/验证图片数据的路径,每一张图片对应的标签,即每张图片中包含物体的bbox信息存放在txt文件中,txt文件名与图片的文件名一致。标注txt文件内容如下:

44 0.3704921875 0.6309484777517563 0.06092187500000001 0.13524590163934427
67 0.2723671875 0.781311475409836 0.5416093750000001 0.4373770491803278
1 0.6927578125 0.4888290398126464 0.170953125 0.6501639344262296
49 0.229265625 0.6178571428571429 0.034875 0.06742388758782202
51 0.10209375000000001 0.8534309133489462 0.10643750000000002 0.09562060889929742
51 0.1526015625 0.7213348946135831 0.11885937499999999 0.09672131147540983
79 0.15256250000000002 0.5000351288056206 0.300875 0.23037470725995318

其中,每一行表示图片中一个object的类别号和bbox信息。Bbox保存的形式为(x,y,w,h)

分别表示object归一化后中心点坐标,宽度和高度。

注意:

在读入训练数据时,只给程序输入了图片所在路径,而标签数据的路径并没有直接给,是通过对图片路径进行修改得到的,比如在训练coco数据时,输入的trainvalno5k.txt文件中只包含所有图片的具体路径,如:

/home/xxx/code/darknet/data/coco/images/val2014/COCO_val2014_000000000164.jpg

而COCO_val2014_000000000164.jpg的标签并没有给程序,是通过该函数替换掉图片路径中的images为labels,并替换掉后缀.jpg为.txt得到的,最终得到:

/home/xxx/code/darknet/data/coco/labels/val2014/COCO_val2014_000000000164.txt

这种替换的前提是,标签数据文件夹labels与图片数据文件夹images具有相同的父目录。

另外,直接把txt标签文件放在与图片同一路径下也没问题。

详细信息可以查看源码src/data.c文件中find_replace函数。

2)       .cfg文件

主要包含训练的一些配置信息,如输入图像大小、学习率、数据增强等。还包括训练的网络结结构。

附:coco的json格式标注信息转换为darknet训练的标注txt文件。

# -*- coding:utf-8 -*-

from __future__ import print_function
import os, sys, zipfile
import numpy as np
import json def convert(size, box):
dw = 1./(size[0])
dh = 1./(size[1])
x = box[0] + box[2] / 2.0
y = box[1] + box[3] / 2.0
w = box[2]
h = box[3]
#x = (box[0] + box[1])/2.0 - 1
#y = (box[2] + box[3])/2.0 - 1
#w = box[1] - box[0]
#h = box[3] - box[2]
x = x*dw
w = w*dw
y = y*dh
h = h*dh
return (x,y,w,h) json_file='coco/coco2017/annotations/instances_val2017.json' # # Object Instance 类型的标注 data=json.load(open(json_file,'r')) ana_txt_save_path = "./val_coco2017/"
if not os.path.exists(ana_txt_save_path):
os.makedirs(ana_txt_save_path) for img in data['images']:
print(img["id"])
#print(img["file_name"])
filename = img["file_name"]
img_width = img["width"]
img_height = img["height"]
#print(img["height"])
#print(img["width"])
img_id = img["id"]
ana_txt_name = filename.split(".")[0] + ".txt"
f_txt = open(os.path.join(ana_txt_save_path, ana_txt_name), 'w')
for ann in data['annotations']:
if ann['image_id']==img_id:
#annotation.append(ann)
#print(ann["category_id"], ann["bbox"])
box = convert((img_width,img_height), ann["bbox"])
f_txt.write("%s %s %s %s %s\n"%(ann["category_id"], box[0], box[1], box[2], box[3]))
f_txt.close()
break

附:

Darknet YOLO 训练问题集锦

darknet训练yolov3时的一些注意事项的更多相关文章

  1. 怎样训练YOLOv3

    怎样训练YOLOv3 Training YOLOv3 : Deep Learning based Custom Object Detector 本文将在一些公开的雪人图片和视频上分享训练过程.有助于训 ...

  2. 目标检测之车辆行人(darknet版yolov3)

    序言      自动驾驶是目前非常有前景的行业,而视觉感知作为自动驾驶中的“眼睛”,有着非常重要的地位和作用.为了能有效地识别到行驶在路上的动态目标,如汽车.行人等,我们需要提前对这些目标的进行训练, ...

  3. 怎么选取训练神经网络时的Batch size?

    怎么选取训练神经网络时的Batch size? - 知乎 https://www.zhihu.com/question/61607442 深度学习中的batch的大小对学习效果有何影响? - 知乎 h ...

  4. (转)darknet 训练心得

    1. 安装darknet 使用Git克隆源码 git clone https://github.com/pjreddie/darknet 我们可能需要修改Makefile,主要修改前三行,配置使用GP ...

  5. 使用opencv训练分类器时,traincascade训练报错:Train dataset for temp stage can not be filled.解决方法

    opencv分类器训练中,出错一般都是路径出错,例如, 1.opencv_traincascade.exe路径 2.负样本路径文件,neg.dat中的样本前路径是否正确 3.移植到别的电脑并修改完路径 ...

  6. pytorch训练GAN时的detach()

    我最近在学使用Pytorch写GAN代码,发现有些代码在训练部分细节有略微不同,其中有的人用到了detach()函数截断梯度流,有的人没用detch(),取而代之的是在损失函数在反向传播过程中将bac ...

  7. VS2015在创建项目时的一些注意事项

    一.下面是在创建一个新的项目是我最常用的,现在对他们一一做一个详细的介绍: 1.Win32控制台应用程序我平时编写小的C/C++程序都用它,它应该是用的最多的. 2.名称和解决方案名称的区别:名称是项 ...

  8. Mysql使用mysqldump按时间导出时的一个注意事项

    在使用Mysql的mysqldump命令按时间进行数据导出时,我们可能会遇到导出数据与原库中不符或者导出数据和我们期望的数据不同的情况. 我们知道Mysql数据库导出可以使用命令mysqldump,使 ...

  9. asp.net web api 开发时应当注意的事项

    Self referencing when returning chain of objects. This can be solved using a design pattern called t ...

随机推荐

  1. Java基础知识学习思维导图

  2. MySQL下载与安装

    百度云网盘: https://pan.baidu.com/s/11ZIuXcNowp4_bVH4FLhyYA 提取码:ocuh MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发, ...

  3. [USACO09HOL]假期绘画Holiday Painting

    观察到列数只有15,可以想到对于每一列维护一颗线段树 sum表示该区间与目标矩阵中该区间相同元素个数 lazy表示该区间应被修改成什么颜色 g即目标矩阵中该区间白色格子的个数 显然一个区间的sum=区 ...

  4. P4168 [Violet]蒲公英

    神仙分块题?其实还是很简单的,res[i][j]表示第i块到第j块的众数,然后再用sum[i][j]表示前i块中j这个种类出现的次数,然后分块瞎搞就行了,感觉我写的十分简洁,好评( //author ...

  5. car的旅行路线

    https://www.luogu.org/problemnew/show/P1027 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形 ...

  6. 芯灵思Sinlinx A64 Linux&qt编译安装

    开发平台 芯灵思Sinlinx A64 内存: 1GB 存储: 4GB 详细参数 https://m.tb.cn/h.3wMaSKm 开发板交流群 641395230 前提条件搭建好CentOS环境 ...

  7. tomcat使用自签名证书实现https加密访问

    部署好java环境和tomcat之后 执行以下语句 #生成证书,keytool是java工具命令,-genkey生成证书,-alias证书名称,-keyalg应该是指算法,-keystore是证书存储 ...

  8. java8_api_日期时间

    日期时间处理    Date类,其中很多方法已经不用了    Calendar类,java.util包中的抽象类        Date类,其对象代表即时时间,存储的是从19700101000000距 ...

  9. 关于怎样获取DevExpress GridView过滤后或排序后的数据集问题(转)

    GridView用自带的过滤功能过滤数据后,想要获取过滤后的数据集,有两种方式: 一.笨办法就是循环遍历GridView,根据gridView.GetRow()或者gridView.GetDataRo ...

  10. 微信小程序托管 推广 开发 就找北京动点软件

    微信小程序托管 外包 微信小程序外包 H5外包 就找北京动点软件 长年承接微信小程序.微信公众号开发 全职的H5开发团队,开发过几十款微信小程序公众号案例 欢迎来电咨询,索取案例! QQ:372900 ...