YOLOFastestv2 训练自己的数据集---辛酸仨小时
首先下载YOLOFastestv2:https://github.com/dog-qiuqiu/FastestDet
我是训练的行人目标检测。
yolofastestv2需要数据集格式如下图所示:
.
├── category.names # .names category label file
├── train # train dataset
│ ├── 000001.jpg
│ ├── 000001.txt
│ ├── 000002.jpg
│ ├── 000002.txt
│ ├── 000003.jpg
│ └── 000003.txt
├── train.txt # train dataset path .txt file
├── val # val dataset
│ ├── 000043.jpg
│ ├── 000043.txt
│ ├── 000057.jpg
│ ├── 000057.txt
│ ├── 000070.jpg
│ └── 000070.txt
└── val.txt # val dataset path .txt file
一般我们的数据集是voc样式的数据集即文件夹中只有这两个文件:
train和val文件夹内的0001.txt
为yolo数据集的格式,其内容如下:
0 0.344192634561 0.611 0.416430594901 0.262
1 0.509915014164 0.51 0.974504249292 0.972
首先我们将xml转成这个格式的,在Annotations和JPEGImages的同级路径下创建一个py文件:
# 作者:李富贵
# 公众号:猛男技术控
# 输入:xml的文件夹路径
# 输出:在txt路径下创建对应的txt文件
import xml.etree.ElementTree as ET
import osdef convert(size, box):dw = 1. / (size[0])dh = 1. / (size[1])x = (box[0] + box[1]) / 2.0 - 1y = (box[2] + box[3]) / 2.0 - 1w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn x, y, w, hdef convert_annotation(xml_file, txt_path, filename):in_file = open('{}/{}.xml'.format(xml_file, filename), encoding='UTF-8')out_file = open('{}/{}.txt'.format(txt_path, filename), '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').text# difficult = obj.find('Difficult').textif obj.find('difficult'):difficult = obj.find('difficult').textelse:difficult = 0cls = 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))b1, b2, b3, b4 = b# 标注越界修正if b2 > w:b2 = wif b4 > h:b4 = hb = (b1, b2, b3, b4)bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')# 改成自己的类别
classes = ["person"]
# 改成自己xml文件夹和要保存的txt文件夹的路径
xml_path = 'Annotations'
txt_path = 'txt'
if not os.path.exists(txt_path):os.makedirs(txt_path)xml_files = os.listdir(xml_path)
for xml_file in xml_files:print(xml_path + '/' + xml_file)convert_annotation(xml_path, txt_path, xml_file[:-4])
然后得到一个txt文件,里面就是存放所有已转换的txt
第二步就是将文件分成train和test
import os
import shutil
import randomall_txt = os.listdir('txt')
random.shuffle(all_txt)trainf = all_txt[:1316]
vlaf = all_txt[1317:]i = 1
for trainimg in trainf:try:shutil.copy(os.path.join('JPEGImages',trainimg[:-3]+'png'),'train')shutil.copy(os.path.join('txt', trainimg), 'train')print(i)i += 1except:print('no such file ',os.path.join('JPEGImages',trainimg[:-3]+'jpg'))
j = 1for valimg in vlaf:try:shutil.copy(os.path.join('JPEGImages',valimg[:-3]+'png'),'v')shutil.copy(os.path.join('txt', valimg), 'v')print(j)j += 1except:print('no such file ',os.path.join('JPEGImages',valimg))
注意自己创建号train和val文件夹,修改train和val文件的个数。
这样就生成了下面这样的文件
├── train
│ ├── 000001.jpg
│ ├── 000001.txt
│ ├── 000002.jpg
│ ├── 000002.txt
│ ├── 000003.jpg
│ └── 000003.txt
└── val├── 000043.jpg├── 000043.txt├── 000057.jpg├── 000057.txt├── 000070.jpg└── 000070.txt
然后将所有文件读入txt中:
import ostraintxt = open('train.txt','a')
val = open('val.txt','a')
for img in os.listdir('train'):if "png" in img:traintxt.write(os.path.join('INRIAPerson-823/train',img)+'\n')print(img)else:print(img,'error')
for img in os.listdir('val'):if "png" in img:valtxt.write(os.path.join('INRIAPerson-823/val',img)+'\n')print(img)else:print(img,'error')
valtxt.close()
traintxt.close()
先跑下这个:
python3 genanchors.py --traintxt ./train.txt
会得到anchors数据
然后修改data下的.data文件
anchors替换成上面的,train,val,names对应的路径,自己修改
然后就是训练了:
python3 train.py --data data/coco.data
下不了的关注我公众号:猛男技术控,回复yolofastest
可以提供代码、数据、以及我训练的权重。
YOLOFastestv2 训练自己的数据集---辛酸仨小时相关推荐
- 手把手教你使用YOLOV5训练自己的数据集并用TensorRT加速
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言 本文主要介绍目标检测YOLOV5算法来训练自己的数据集,并且使用TensorRT来对训练好的模型 ...
- mask rcnn训练自己的数据集
原文首发于微信公众号「3D视觉工坊」--mask rcnn训练自己的数据集 前言 最近迷上了mask rcnn,也是由于自己工作需要吧,特意研究了其源代码,并基于自己的数据进行训练~ 本博客参考:ht ...
- Fast RCNN 训练自己的数据集(3训练和检测)
Fast RCNN 训练自己的数据集(3训练和检测) 转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ https ...
- YunYang1994/tensorflow-yolov3 训练自己的数据集
文章目录 前言 训练流程 1.准备好`图片`和`train.txt`.`test.txt` 2.修改相关路径 i) 修改`class.names`文件以及`__C.YOLO.CLASSES`参数路径 ...
- alexeyab darknet 编译_【目标检测实战】Darknet—yolov3模型训练(VOC数据集)
原文发表在:语雀文档 0.前言 本文为Darknet框架下,利用官方VOC数据集的yolov3模型训练,训练环境为:Ubuntu18.04下的GPU训练,cuda版本10.0:cudnn版本7.6.5 ...
- 深度学习实战(七)——目标检测API训练自己的数据集(R-FCN数据集制作+训练+测试)
TensorFlow提供的网络结构的预训练权重:https://cloud.tencent.com/developer/article/1006123 将voc数据集转换成.tfrecord格式供te ...
- 初学入门YOLOv5手势识别之制作并训练自己的数据集
随着短视频vlog时代的到来,自动驾驶技术.人脸识别门禁系统.智慧视频监控.AI机器人等贴近人们日常生活的视频信息量的暴增,视频目标检测的研究具有无比的现实研究意义与未来行业潜力.视频是由一系列具有时 ...
- yolov5训练自己的数据集,OpenCV DNN推理
学更好的别人, 做更好的自己. --<微卡智享> 本文长度为4238字,预计阅读9分钟 前言 上一篇<OpenCV--自学笔记>搭建好了yolov5的环境,作为目标检测在应用中 ...
- Windows下使用Darknet训练自己的数据集(模型:yolov4-tiny、数据集:垃圾分类)
本文章主要介绍如何使用Darknet在windows下训练自己的数据集,其中模型使用的是yolov4-tiny,数据集使用的是自己垃圾分类数据集(需要的自取:在我上传的资源中有) PS:这是我的第一篇 ...
最新文章
- 嵌入式开发笔记-存储控制器
- Eclipse使用Maven时出现:Index downloads are disabled, search results may be incomplete.问题解决...
- git rebase用法_Git:Clone别人的代码之后push到自己码云上失败的解决办法
- dp之多重背包poj2392
- 大数据-Hadoop 3.3.1安装详解
- mysql 8 多线程_mysql8 参考手册--通用线程状态
- 拯救行动第二季 - 答题赢游戏机活动已经开放!
- Linux 网络基础篇
- The RSpec Book笔记《二》Describing Features描述功能
- win10启动项_win10系统开机启动项的设置教程
- 创新或许就是青睐偏执狂
- 清空回收站如何找回?
- JavaSE语言基础
- Qt 给QWidget添加工具栏
- 《BI工程师必读》数据可视化篇 #02
- 暑假出游 |近视配镜首选变色镜片
- 软件交付方式有哪些_如何交付有意义的软件
- LAMP系统构建论文
- git的使用(开发常用到的)
- 山东大学单片机原理与应用实验 3.7LCD 1602显示实验
热门文章
- Android屏幕适配(包括折叠手机)
- 【Paddle打比赛】手写字体OCR识别竞赛baseline
- Gitolite 教程
- git gitolite 搭建git服务器
- 实际地址转换成经纬度
- python语言程序的特点_Python语言概述及其运行机制详解
- python3.6.6官网下载_Python3.6.6
- int(11)到底占几个字节,亲测保证可靠
- 马斯克身价缩水1100亿美元 特斯拉却单季在华营收51亿美元
- 计算机一级b考试试题及答案,全国计算机等级一级B考试试题及答案(真题) .doc