美文网首页
生成yolov3-tensorflow版本需要的训练数据格式

生成yolov3-tensorflow版本需要的训练数据格式

作者: chunleiml | 来源:发表于2020-03-02 14:17 被阅读0次

在有训练需要的图片数据和含有标注信息的XML文件的情况下,生成yolov3-tensorflow需要的训练数据
https://github.com/YunYang1994/tensorflow-yolov3

import xml.etree.ElementTree as ET
import os

CLASSES = ['plate', 'b-plate-number','b-plate']

def convert_xml_annotation(img_path, xml_path, classes):
    xml_dir = []
    imgs = os.listdir(img_path)
    for xml in os.listdir(xml_path):
        if xml.endswith('.xml'):
            xml_dir.append(xml)
    print("Total xml files : ", len(xml_dir))
    with open("./plate_all.txt", 'w') as f:
        for i in range(len(xml_dir)):
            tree = ET.parse(xml_path + xml_dir[i])
            root = tree.getroot()
            name ,b = os.path.splitext(xml_dir[i])
            if name+'.jpg' in imgs:
                filename = name+'.jpg'
            else:
                filename = name+'.png'
            

            # image path
#            filename = root.find('filename').text
            image_path = img_path + filename
            annotation = image_path

            # coordinates of label : xmin  ymin  xmax  ymax
            for obj in root.iter('object'):
#                difficult = obj.find('difficult').text
#                cls = obj.find('name').text
#                if cls not in classes or int(difficult) == 1:
#                    continue
#                cls_id = classes.index(cls)
                cls_id = 0
                bbox = obj.find('bndbox')
                xmin = bbox.find('xmin').text.strip()
                xmax = bbox.find('xmax').text.strip()
                ymin = bbox.find('ymin').text.strip()
                ymax = bbox.find('ymax').text.strip()
                annotation += ' ' + ','.join([xmin, ymin, xmax, ymax,str(cls_id)])
            print(annotation)
            f.write(annotation + "\n")

xml_path = './plate_train_xmls/'
img_path = './plate_train_imgs/'
convert_xml_annotation(img_path, xml_path, CLASSES)

最后把生成的plate_all.txt分成训练集和测试集

import random
import numpy as np
path = './plate_all.txt'
train_path = './plate_train.txt'
valid_path = './plate_test.txt'
file = open(path,'r')
file_train = open(train_path,'a')
file_valid = open(valid_path,'a')
lines = file.readlines()
num = np.arange(0,len(lines))
random.shuffle(num)
a = int(len(lines)*0.2)
print(a)
for i in range(len(lines)):
    if i < a:
        print(lines[num[i]])
        file_valid.write(lines[num[i]])
    else:
        file_train.write(lines[num[i]])

相关文章

  • 生成yolov3-tensorflow版本需要的训练数据格式

    在有训练需要的图片数据和含有标注信息的XML文件的情况下,生成yolov3-tensorflow需要的训练数据ht...

  • Caffe | 你的第一个分类网络之Caffe训练

    1.生成lmdb lmdb是caffe训练网络用的数据格式,因此我们需要将原始的图片数据转换成lmdb(当然caf...

  • 使用rails new生成指定版本的项目

    默认情况下,使用rails new 时会基于最新版本的rails生成项目。当需要生成指定rails版本的项目时,...

  • iOS多环境配置

    由于项目需要为一个APP生成不同环境下的版本,例如Debug版本、Release版本、Test版本,于是研究了一下...

  • Android libpng-1.6.37交叉编译

    生成soname取消版本信息 编译脚本 应为libpng的编译是由makefile先生成libtool工具所需要l...

  • android ndk 开发2

    前言 看android ndk 1 版本。 生成so库 先配置你需要生成的CPU架构,在build.gradle中...

  • WPF例5-使用DataGrid动态生成列表

    一、DataGrid是专门用来显示列表的控件,而且可以根据数据格式自动生成对应格式的列表(仅限简单的数据格式比如字...

  • 第三方平台的crash分析

    1.生成dSYM文件 需要上传dSYM,dSYM就是项目打包生成ipa后,右键构建版本中选show in fin...

  • FastText源码

    训练数据格式 训练数据格式为一行一个句子,每个词用空格分割,如果一个词带有前缀“__label__”,那么它就作为...

  • gulp

    添加版本号 需要插件: gulpfile.js 生成文件 希望生成这样: 所以修改配置文件node_modules...

网友评论

      本文标题:生成yolov3-tensorflow版本需要的训练数据格式

      本文链接:https://www.haomeiwen.com/subject/uxgmkhtx.html