一、首先,处理数据集
KITTI数据集的label虽然它是txt形式,但它拥有的独特数据格式不符合YOLO的训练。所以要对其进行处理。原本的标签数据格式是下图:可以看到拥有十多个数字,
而我们只需要表示目标类别信息的第一列和表示物体所在图象中表示矩形框位置的4个坐标信息共五个参数信息。
第1步:首先在txt格式基础上进行实验所需类别的保留/合并操作,我这里只保留了car、van、及truck3个类别。
# modify_annotations_txt.py
import glob
import string
txt_list = glob.glob('E:/datasets/yolov5-6.0/mydata/labels/train/*.txt') # 存储Labels文件夹所有txt文件路径
print(txt_list)
def show_category(txt_list):
category_list= []
for item in txt_list:
try:
with open(item) as tdf:
for each_line in tdf:
labeldata = each_line.strip().split(' ') # 去掉前后多余的字符并把其分开
category_list.append(labeldata[0]) # 只要第一个字段,即类别
except IOError as ioerr:
print('File error:'+str(ioerr))
print(set(category_list)) # 输出集合
def merge(line):
each_line=''
for i in range(len(line)):
if i!= (len(line)-1):
each_line=each_line+line[i]+' '
else:
each_line=each_line+line[i] # 最后一条字段后面不加空格
each_line=each_line+'\n'
return (each_line)
print('before modify categories are:\n')
show_category(txt_list)
for item in txt_list:
new_txt=[]
try:
with open(item, 'r') as r_tdf:
for each_line in r_tdf:
labeldata = each_line.strip().split(' ')
# if labeldata[0] in ['Truck','Van','Tram']: # 合并汽车类
# labeldata[0] = labeldata[0].replace(labeldata[0],'Car')
#if labeldata[0] == 'Person_sitting': # 合并行人类
# labeldata[0] = labeldata[0].replace(labeldata[0],'Pedestrian')
if labeldata[0] == 'DontCare': # 忽略Dontcare类
continue
if labeldata[0] == 'Misc': # 忽略Misc类
continue
if labeldata[0] == 'Tram':
continue
if labeldata[0] == 'Person_sitting':
continue