我写的这几行代码主要是实现一个从xml到txt文件的转换,分类的话和这里关系不大,这里的切片主要是为了保证文件名一致的情况下更改文件后缀。
该回答引用GPTᴼᴾᴱᴺᴬᴵ
如果您想将TT100K数据集分成6类,您需要对源代码进行修改以反映这一更改。假设您想要分成以下6个类别:car, van, truck, pedestrian, cyclist, tricycle.
您可以按照以下方式修改切片操作行:
fname_out = ('/home/dujuan/data(3)/data/txtLabel/train/'+fname[41:-4]+'_6.txt')
请注意,我将输出文件名中的数字从5更改为6以反映6个类别。此外,我添加了下划线和数字6,以区分原始文件名。
接下来,您需要修改函数中的LUT(查找表)以反映6个类别的更改。下面是可能的代码示例:
def convert_xmi2yolo(lut):
for fname in glob.glob ("/home/dujuan/data(3)/data/xmlLabel/train/*.xml"):
xmldoc = minidom.parse (fname)
objects = xmldoc.getElementsByTagName("object")
fname_out = ('/home/dujuan/data(3)/data/txtLabel/train/'+fname[41:-4]+'_6.txt')
with open(fname_out, 'w') as f:
for obj in objects:
name = obj.getElementsByTagName("name")[0].childNodes[0].data
bbox = obj.getElementsByTagName("bndbox")[0]
x1 = bbox.getElementsByTagName("xmin")[0].childNodes[0].data
y1 = bbox.getElementsByTagName("ymin")[0].childNodes[0].data
x2 = bbox.getElementsByTagName("xmax")[0].childNodes[0].data
y2 = bbox.getElementsByTagName("ymax")[0].childNodes[0].data
class_id = lut[name]
f.write(f"{class_id} {x1} {y1} {x2} {y2}\n")
print("Conversion complete.")
请注意,我更改了输出文件名的格式,并使用了LUT将类别名称映射到数字ID。您需要在LUT中添加以下6个类别:
lut = {'car': '0', 'van': '1', 'truck': '2', 'pedestrian': '3', 'cyclist': '4', 'tricycle': '5'}
这应该可以让您将TT100K数据集分类为6个类别。