当前位置:   article > 正文

CityScapes数据集介绍

cityscapes

0716补档数据集:

链接:https://pan.baidu.com/s/13MfBUcmPUT-2mu55YKtvqw?pwd=7k7k 
提取码:7k7k

============================以下为正文=====================================

CityScapes

Cityperson数据集,在16年CVPR上被提出,是张姗姗一波人在CityScapes数据集上进行标注得到的行人检测数据集。做行人检测的应该都不陌生。在Replusion Loss和NMS Loss这两篇关于行人遮挡问题的论文中都以这个数据集中的子集-CityPerson作为数据集。

数据集下载路径:Cityscapes Dataset – Semantic Understanding of Urban Street Scenes

特性:多边形的注释;密集语义分割;车辆和人的实例分割

复杂性:30类

多样性:50个城市;几个月(春、夏、秋);白天、良好/中等天气状况;手动选择的帧;

                大量的动态对象;多变的场景布局;不同的背景

体积:5 000个带注释的图片(示例)

下面是我们为5 000张图像提供的高质量密集像素注释示例。覆盖的颜色编码语义类(参见类定义)。注意,交通参与者的单个实例是单独注释的。

粗糙的注释

除了精细的注释,我们还与Pallas Ludens合作,为一组20 000图像提供了更粗略的多边形注释。同样,重叠的颜色编码语义类(参见类定义)。请注意,我们的目标不是注释单个实例,而是标记覆盖单个对象的多边形。

标签策略

有标记的前景对象绝对不能有洞,也就是说,如果有一些背景可见的“通过”一些前景对象,它被认为是前景的一部分。这也适用于高度混合了两个或多个类的区域:它们被标记为前景类。例如:房子或天空前面的树叶(一切都是树),透明的车窗(一切都是汽车)。

类定义

GroupClasses
flatroad · sidewalk · parking+ · rail track+
humanperson* · rider*
vehiclecar* · truck* · bus* · on rails* · motorcycle* · bicycle* · caravan*+ · trailer*+
constructionbuilding · wall · fence · guard rail+ · bridge+ · tunnel+
objectpole · pole group+ · traffic sign · traffic light
naturevegetation · terrain
skysky
voidground+ · dynamic+ · static+

*单个实例注释可用。然而,如果这些实例之间的边界不能清楚地看到,整个人群/组被标记在一起并注释为组,例如汽车组。

+此标签不包括在任何评估中,并被视为无效(或在车牌为车辆安装的情况下)。

CityPersons

Cityscape侧重于城市街道场景的语义理解。由于我个人的方向是行人检测,这里主要介绍下里面的行人数据集。CityPersons数据集是cityscape的一个子集,它只包含个人注释。有2975张图片用于培训,500张和1575张图片用于验证和测试。一幅图像中行人的平均数量为7人,提供了可视区域和全身标注。如下表,CityPersons标注文件只标注了其中HUMAN的类别。

humanperson* · rider*

数据集下载:博主Rock_Huang~提供百度云链接地址:链接: 百度网盘  提取码:xyzj

CityPersons训练图像:

CityPersons的图像标注:

提取cityscapes中标注好的类别为VOC的标准格式(JPEGImages和Annotations)

  1. #! /usr/bin/python
  2. # -*- coding:UTF-8 -*-
  3. import os, sys
  4. import glob
  5. from PIL import Image
  6. import shutil
  7. from scipy.io import loadmat
  8. #img_Lists = glob.glob(src_img_dir + '\*.png')
  9. # citypersons图像的标注位置
  10. src_anno_dir = loadmat(r'c:\Users\rockhuang\Desktop\anno_train.mat')
  11. # cityscapes图像的存储位置
  12. src_img_dir = r"g:\dataset\cityscapes\leftImg8bit\train\\"
  13. #保存为VOC 数据集的原图和xml标注路径
  14. new_img= r"g:\dataset\cityscapes\JPEGImages"
  15. new_xml=r"g:\dataset\cityscapes\Annotations"
  16. if not os.path.isdir(new_img):
  17. os.makedirs(new_img)
  18. if not os.path.isdir(new_xml):
  19. os.makedirs(new_xml)
  20. a=src_anno_dir['anno_train_aligned'][0]
  21. #处理标注文件
  22. for i in range(len(a)):
  23. img_name=a[i][0][0][1][0] #frankfurt_000000_000294_leftImg8bit.png
  24. dir_name=img_name.split('_')[0]
  25. img=src_img_dir+dir_name+"\\"+img_name
  26. shutil.copy(img, new_img+"\\"+img_name)
  27. img=Image.open(img)
  28. width, height = img.size
  29. position=a[i][0][0][2]
  30. print(position)
  31. #sys.exit()
  32. xml_name=img_name.split('.')[0]
  33. xml_file = open((new_xml + '\\' + xml_name + '.xml'), 'w')
  34. xml_file.write('<annotation>\n')
  35. xml_file.write(' <folder>citysperson</folder>\n')
  36. xml_file.write(' <filename>' + str(img_name)+ '</filename>\n')
  37. xml_file.write(' <size>\n')
  38. xml_file.write(' <width>' + str(width) + '</width>\n')
  39. xml_file.write(' <height>' + str(height) + '</height>\n')
  40. xml_file.write(' <depth>3</depth>\n')
  41. xml_file.write(' </size>\n')
  42. for j in range(len(position)):
  43. category_location=position[j] #[ 1 947 406 17 40 24000 950 407 14 39]
  44. category=category_location[0] # class_label =0: ignore regions 1: pedestrians 2: riders 3: sitting persons 4: other persons 5: group of people
  45. if category == 0:
  46. continue
  47. # if
  48. #if category == 1 or category ==2 or category ==3 category ==4 or category ==5:
  49. else:
  50. x=category_location[1] #class_label==1 or 2: x1,y1,w,h是与全身对齐的边界框;
  51. y=category_location[2]
  52. w=category_location[3]
  53. h=category_location[4]
  54. xml_file.write(' <object>\n')
  55. xml_file.write(' <name>' + 'person' + '</name>\n')
  56. xml_file.write(' <pose>Unspecified</pose>\n')
  57. xml_file.write(' <truncated>0</truncated>\n')
  58. xml_file.write(' <difficult>0</difficult>\n')
  59. xml_file.write(' <bndbox>\n')
  60. xml_file.write(' <xmin>' + str(x) + '</xmin>\n')
  61. xml_file.write(' <ymin>' + str(y) + '</ymin>\n')
  62. xml_file.write(' <xmax>' + str(x+w) + '</xmax>\n')
  63. xml_file.write(' <ymax>' + str(y+h) + '</ymax>\n')
  64. xml_file.write(' </bndbox>\n')
  65. xml_file.write(' </object>\n')
  66. xml_file.write('</annotation>\n')

转化为YOLOv5训练的txt标注。

  1. import xml.etree.ElementTree as ET
  2. import pickle
  3. import os
  4. from os import listdir, getcwd
  5. from os.path import join
  6. sets=[ ('2007', 'train'), ('2007', 'val'), ('2007', 'test')]
  7. classes = ["car", "person","rider"]
  8. #parser = ET.XMLParser("utf-8")
  9. #tree = ET.fromstring(xmlstring, parser=parser)
  10. def convert(size, box):
  11. dw = 1./(size[0])
  12. dh = 1./(size[1])
  13. x = (box[0] + box[1])/2.0 - 1
  14. y = (box[2] + box[3])/2.0 - 1
  15. w = box[1] - box[0]
  16. h = box[3] - box[2]
  17. x = x*dw
  18. w = w*dw
  19. y = y*dh
  20. h = h*dh
  21. return (x,y,w,h)
  22. def convert_annotation(year, image_id):
  23. in_file = open('VOCdevkit/VOC%s/Annotations/%s.xml'%(year, image_id))
  24. out_file = open('VOCdevkit/VOC%s/labels/%s.txt'%(year, image_id), 'w')
  25. #parser = ET.XMLParser(encoding="utf-8")
  26. # tree = ET.fromstring(in_file, parser=True)
  27. print in_file
  28. tree=ET.parse(in_file)
  29. # print in_file
  30. root = tree.getroot()
  31. size = root.find('size')
  32. w = int(size.find('width').text)
  33. h = int(size.find('height').text)
  34. for obj in root.iter('object'):
  35. difficult = obj.find('difficult').text
  36. cls = obj.find('name').text
  37. if cls not in classes or int(difficult)==1:
  38. continue
  39. cls_id = classes.index(cls)
  40. xmlbox = obj.find('bndbox')
  41. b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text))
  42. bb = convert((w,h), b)
  43. out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
  44. wd = getcwd()
  45. for year, image_set in sets:
  46. if not os.path.exists('VOCdevkit/VOC%s/labels/'%(year)):
  47. os.makedirs('VOCdevkit/VOC%s/labels/'%(year))
  48. image_ids = open('VOCdevkit/VOC%s/ImageSets/Main/%s.txt'%(year, image_set)).read().strip().split()
  49. list_file = open('%s_%s.txt'%(year, image_set), 'w')
  50. for image_id in image_ids:
  51. list_file.write('%s/VOCdevkit/VOC%s/JPEGImages/%s.jpg\n'%(wd, year, image_id))
  52. convert_annotation(year, image_id)
  53. list_file.close()
  54. #os.system("cat 2007_train.txt 2007_val.txt > train.txt")
  55. #os.system("cat 2007_train.txt 2007_val.txt 2007_test.txt 2012_train.txt 2012_val.txt > train.all.txt")

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/317206
推荐阅读
相关标签
  

闽ICP备14008679号