前言

1.我的环境是windows10,vs2015,cuda9.1,cudnn7.1。
2. darknet加yoloV3,用cmake和vs2015编译成darknet.exe。
3. 我的目录结构是在darknet目录下新建了一个build的目录,这个目录就是vs生成工程的目录,在windows下,所有的操作都在这个目录里面完成。

一、数据准备

1.我使用的数据格式是VOC2007,关于这个数据集,可以看我之后博客。
2.标注工具用的是LabelImag的win版本。可以从这里下载,不用安装,直接运行,但存在的路径不能有中文。标注使用也可以看我之后的博客。
3.标注时按VOC形式标注,也可以选yolo的方式标注,如果一开始用yolo方法标注,之后就不用转换那么麻烦。这两种标注的标签,一种是xml,一种是txt。
VOC格式:

YOLO格式:

4.标注好的数据对应存在VOC2007目录Annotations里面,标注的图像放在JPEGImages里面。标注好的数据是一一对应的。

二.处理VOC2007数据

1.在darknet的工程目录下,darknet\build\darknet\x64\data\下,新建立一个VOCdevkit目录,把VOC2007的目录放到里面。

2.VOC2007当时下面只有三个目录。

Annotations里面就标签文件:

JPEGImages里面是对应的图像文件:

ImageSets下面有一个Main目录,但当前为空:

3.用python创建Main目录里面的train.txt,val.txt,test.txt和trainval.txt这四个文件。
(1)在VOC2007目录下创建一个python代码,我这里命名CreateMainDirTex.py
CreateMainDirTex.py的代码如下:

import os
import randomtrainval_percent = 0.1
train_percent = 0.9
xmlfilepath = 'Annotations'
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()


(2)保存之后运行,结果在Main下创建了四个txt文件。文件内容如下:

3.VOC2007数据转YOLOV3数据。
(1)在工程目录下darknet\build\darknet\x64\data\voc位置下找到voc_label.py这个文件,复制到darknet\build\darknet\x64\data下。

(2)更改的代码,有两个位置,一个是数据格式,一个是标注的标签名。

具体的代码更改如下,我只有一个标签,这个标签名字是"a"

import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import joinsets=[ ('2007', 'train'), ('2007', 'val'), ('2007', 'test')]classes = ["a"]def convert(size, box):dw = 1./size[0]dh = 1./size[1]x = (box[0] + box[1])/2.0y = (box[2] + box[3])/2.0w = box[1] - box[0]h = box[3] - box[2]x = x*dww = w*dwy = y*dhh = h*dhreturn (x,y,w,h)def convert_annotation(year, image_id):in_file = open('VOCdevkit/VOC%s/Annotations/%s.xml'%(year, image_id),'rb')out_file = open('VOCdevkit/VOC%s/labels/%s.txt'%(year, image_id), 'w')tree=ET.parse(in_file)root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):difficult = obj.find('difficult').textcls = obj.find('name').textif cls not in classes or int(difficult) == 1:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text))bb = convert((w,h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')wd = getcwd()for year, image_set in sets:if not os.path.exists('VOCdevkit/VOC%s/labels/'%(year)):os.makedirs('VOCdevkit/VOC%s/labels/'%(year))image_ids = open('VOCdevkit/VOC%s/ImageSets/Main/%s.txt'%(year, image_set)).read().strip().split()list_file = open('%s_%s.txt'%(year, image_set), 'w')for image_id in image_ids:list_file.write('%s/VOCdevkit/VOC%s/JPEGImages/%s.jpg\n'%(wd, year, image_id))convert_annotation(year, image_id)list_file.close()

(2)保存之后运行,会在当前的目录下多出三个文件和在VOC2007目录下多出一个labels目录。
三个txt文件:

文件里面的内容:

labels目录:

目录下文件内容:

三、更改配置文件

1.在darknet\build\darknet\x64\data目录下找到voc.data文件,我这里复制之后改名字成train.data。

打开文件,更改内容如下,就是对上刚刚生成的txt文件。

2.找到obj.names文件,也在darknet\build\darknet\x64\data目录下,改成自己标注的名字。

3.在darknet\build\darknet\x64目录在找到yoloV3.cfg文件,我这里复制一份重命名成yoloV3_a.cfg.
(1)打开这个文件,找到classes这个标签,改成自己标注的种类,我这里只有一种,所以改成1,总共有三个地方要改。

(2)在三个位于[yolo]层之前的[convolutional]层中,将filters修改为(classes *(1 + 4)) × 3,我这里是改成18。

(3)更改迭代次数,找到max_batches,改成自己相要迭代的次数。

四、训练模型

1.下载权重文件darknet53.conv.74,放到darknet\build\darknet\x64下。

2.win加r键,输入cmd,cd到darknet\build\darknet\x64下。

3.输入,其中train.data,yolov3_a.cfg和darknet53.conv.74都是刚刚加进来的文件,注意目录,如果放在别的地方,把路径写对就可以了。

darknet.exe detector train data/train.data yolov3_a.cfg darknet53.conv.74

4.开始训练时loss可能很大,有时候会跑出几千来,等迭代100次左右就慢慢下降了。

loss曲线图:

Windows10下使用darknet和YOLOV3训练自己的数据集相关推荐

  1. 小白教程:Ubuntu下使用Darknet/YOLOV3训练自己的数据集

    小白教程:Ubuntu下使用Darknet/YOLOV3训练自己的数据集 YOLOV3官网教程:https://pjreddie.com/darknet/yolo/ 使用预训练模型进行检测 git c ...

  2. win10下yolov3训练自己的数据集

    在win10下用yolov3训练自己的数据集 1.  在darknet-master\build\darknet\x64 新建yolo-obj.cfg文件(可以直接复制yolov3.cfg,然后重命名 ...

  3. YOLOV3训练自己的数据集(PyTorch版本)

    由于这一段时间从事目标检测相关工作,因而接触到yolov3,进行目标检测,具体原理大家可以参考大神的博客目标检测(九)--YOLO v1,v2,v3,我就不细讲了,直接进入正题,如何利用深度学习框架P ...

  4. 『论文笔记』TensorFlow1.6.0+Keras 2.1.5+Python3.5+Yolov3训练自己的数据集!

    TensorFlow1.6.0+Keras 2.1.5+Python3.5+Yolov3训练自己的数据集! 文章目录 前期准备 一. Yolov3简要介绍 1.1. Yolov3网络结构图 1.2. ...

  5. yolov3 训练自己的数据集 手把手教学 ubuntu 18.04 显卡1650 显存4g 跟着操作做保证学会

    yolov3 训练自己的数据集 手把手教学 ubuntu 18.04 显卡1650 显存4g 跟着操作做保证学会 这是我的训练效果,成功实现裂痕检测 演示视频:https://b23.tv/Ccmwi ...

  6. windows7下darknet配置yolov3训练及测试完整教程

    darknet yolov3下载链接如下:注意是yolov3分支不是master https://github.com/AlexeyAB/darknet/tree/Yolo_v3 在win7下配置环境 ...

  7. yolov3训练自己的数据集——第一次实操完整记录

    参考: yolov3 darknet yolo源码解析 bacth参数对性能影响 backpropogation算法 yolo中7*7个grid和rpn中的9个anchors darknet源码学习 ...

  8. ultralytics/yolov3训练预测自己数据集的配置过程

    需要使用https://github.com/ultralytics/yolov3提供的pytorch yolov3版本来训练预测自己的数据集,以检测出感兴趣目标,目前还没有看到详细的资料,这边系统记 ...

  9. 第十一节,利用yolov3训练自己的数据集

    1.环境配置 tensorflow1.12.0 Opencv3.4.2 keras pycharm 2.配置yolov3 下载yolov3代码:https://github.com/qqwweee/k ...

最新文章

  1. Android逆向之调试smali代码基础
  2. 上海交大c语言第一次作业,上海交大网络学院-计算机第一次作业及答案(含6次机会全部题目)-计算机基础的知识.docx...
  3. collections模块
  4. hp服务器增加raid卡,惠普ProLiant服务器Raid卡配置过程详解
  5. 一个字形容大数据_嘉禾数据科学分享(八):一个大数据专业教师眼里的大数据
  6. qt判断读入的字符串是否含有英文_重复的子字符串
  7. SQL SERVER数据类型与C#数据类型对照表
  8. windows 下 opencv 3.x 的安装及常见问题的解决
  9. 在阿里巴巴如何管理代码分支?
  10. Zephyr学习(一)Zephyr介绍
  11. iOS YYKit理解
  12. android小米卸载app,MIUI系统软件卸载工具
  13. python爬取b站弹幕分析_B站直播弹幕获取 - 用python写一个B站弹幕姬吧
  14. spring DI的三种注入方式分析
  15. 建造者模式实现汽车组装工厂功能(Java代码实例)
  16. win10使用共享文件夹传输数据提示输入网络凭据问题
  17. 使用Python对GIF读取、生成、压缩和加水印
  18. 《沟通的技术——让交流、会议与演讲更有效》一1.1 一切尽在计划之中
  19. 控制性详细规划图纸成果及深度要求
  20. 智慧畜牧养殖系统的感知设备

热门文章

  1. python中的抽象含义_Python中下划线的5种含义你都知道吗?
  2. python中easygui最新下载教程_python怎么下载easygui
  3. Nginx重启时丢失nginx.pid文件解决方法nginx: [emerg] open() “/var/run/nginx/nginx.pid“ failed (2: No such fi
  4. JAVA爬虫三大运营商
  5. getline读取不等待输入的问题
  6. 鸡啄米:模态、非模态对话框
  7. 原子操作类AtomicInteger详解
  8. 图解GitHub和SourceTree入门教程
  9. cover letter 和response letter的写法
  10. 计算机网络探究一之利用双网卡主机共享上网