刘亦菲镇!!!
好了开始正题,我们发现很多人对目标检测网络和分割网络需要的数据不太清楚,导致大家想用yolo训练,但标注的数据是voc格式,然后就是疯狂找脚本或者写脚本进行转换,事实上,这样十分浪费时间,于是Mtripix库应运而生。下边我们将仔细介绍里边包含的几种数据转换方式
来源
先简单介绍下来源:
西安三重像素科技有限公司
Xi’an Triple Pixel Technology Co.,
@PIPIPINoBrain
联系方式:PIPIPINoBrain@163.com
当然有什么项目也可以联系这个邮箱
依赖及安装
由于涉及到各种转换,所需要安装的依赖还是挺多的,不过基本都是常规的库
import json
import os.path
import PIL
import imgviz
import numpy as np
import cv2
import lxml.etree as ET
import math
from lxml.etree import Element, SubElement, tostring, ElementTree
从引用的内容可以看出需要的依赖,pip install 即可
而安装也很简单,当前版本是0.0.8,安装指令在需要的环境下:
pip install Mtripix
安装结束!!!完结!!
开玩笑,后边讲使用方式
内置函数及使用方式
统一调用
import os
import Mtripix.Mutils as MMT
VOC(.xml)转YOLO(.txt)
直接从xml转换txt开始看, 我们需要知道数据集的信息,数据集里边的类别或者自己需要的类别有哪些,比如我的voc(.xml)数据集是两类"AliveAmpullariaGigas", “AmpullariaGigas”,想要yolo(.txt)对应的标签为0,1,Mtripix提供了以下的接口转换。
类别与标签对应的字典也同样提供了接口进行统计:
path_xmls = "./xmls" #xml文件的文件夹
path_txts = "./txts" #生成txt存放文件夹
keys = ["AliveAmpullariaGigas", "AmpullariaGigas"] #数据集中的两种类别
idxs = ["0", "1"] #每个类别对应的标签
DIC = MMT.Mtrans.labels2dict(keys, idxs) #生成的类别与标签对应的字典
names = os.listdir(path_xmls)
for name in names:
p_xml = os.path.join(path_xmls, name)
p_txt = os.path.join(path_txts, name[:-4] + ".txt")
MMT.Mtrans.voc2yolo(p_xml, p_txt, DIC)
运行:
打印出DIC得到{'AliveAmpullariaGigas': '0', 'AmpullariaGigas': '1'}
转换结果,对于没有标签的,生成的txt为空
对于有标签的,按照类别识别标签转换:
YOLO(.txt)转VOC(.xml)
我们使用上边转换后的yolo数据进行测试,流程其实大同小异,先上介绍:
不同的是多增加了图像地址的输入,以及namedict好像和voc2yolo相反(key与value互换),直接上代码。
path_txts = "./txts" #你的yolo格式的txt存放文件夹
path_imgs = "./images" #对应的图片存放文件夹
path_xmls = "./xmls_2" #生成xml的文件夹
keys= ['0', '1']
idxs = ["AliveAmpullariaGigas", "AmpullariaGigas"]
DIC = MMT.Mtrans.labels2dict(keys, idxs)
imgs = os.listdir(path_imgs)
for img in imgs:
p_img = os.path.join(path_imgs, img)
p_txt = os.path.join(path_txts, img[:-4] + ".txt")
p_xml = os.path.join(path_xmls, img[:-4] + ".xml")
MMT.Mtrans.yolo2voc(p_img, p_txt, p_xml, DIC) #转换关键代码
print("Finished")
运行:
打印DIC{'0': 'AliveAmpullariaGigas', '1': 'AmpullariaGigas'}
转换结果,对于没有标签的,生成的xml为:
对于有标签的,生成的xml为: