CityScapes数据集介绍

2023-05-16

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)

#! /usr/bin/python
# -*- coding:UTF-8 -*-
import os, sys
import glob
from PIL import Image
import shutil
from scipy.io import loadmat
#img_Lists = glob.glob(src_img_dir + '\*.png')
 
# citypersons图像的标注位置
src_anno_dir = loadmat(r'c:\Users\rockhuang\Desktop\anno_train.mat')

# cityscapes图像的存储位置
src_img_dir = r"g:\dataset\cityscapes\leftImg8bit\train\\"

#保存为VOC 数据集的原图和xml标注路径
new_img= r"g:\dataset\cityscapes\JPEGImages"
new_xml=r"g:\dataset\cityscapes\Annotations"

if not os.path.isdir(new_img):
    os.makedirs(new_img)
    
if not os.path.isdir(new_xml):
    os.makedirs(new_xml)   
    
a=src_anno_dir['anno_train_aligned'][0]
 
    #处理标注文件

for i in range(len(a)):
    img_name=a[i][0][0][1][0]   #frankfurt_000000_000294_leftImg8bit.png     
    dir_name=img_name.split('_')[0]
    img=src_img_dir+dir_name+"\\"+img_name
     
    shutil.copy(img, new_img+"\\"+img_name)
    img=Image.open(img)
    width, height = img.size
    
    position=a[i][0][0][2]
    print(position)
    #sys.exit()
    xml_name=img_name.split('.')[0]
    xml_file = open((new_xml + '\\' + xml_name + '.xml'), 'w')
          
    xml_file.write('<annotation>\n')
    xml_file.write('    <folder>citysperson</folder>\n')
    xml_file.write('    <filename>' + str(img_name)+ '</filename>\n')
    xml_file.write('    <size>\n')
    xml_file.write('        <width>' + str(width) + '</width>\n')
    xml_file.write('        <height>' + str(height) + '</height>\n')
    xml_file.write('        <depth>3</depth>\n')
    xml_file.write('    </size>\n')
    
    for j in range(len(position)):
        category_location=position[j]  #[    1   947   406    17    40 24000   950   407    14    39]
        category=category_location[0]  # class_label =0: ignore regions 1: pedestrians 2: riders 3: sitting persons 4: other persons 5: group of people
       

        if category == 0:
            continue
#             if 
            #if category == 1 or category ==2 or category ==3 category ==4 or category ==5:
        else:
            x=category_location[1]   #class_label==1 or 2: x1,y1,w,h是与全身对齐的边界框;
            y=category_location[2]
            w=category_location[3]
            h=category_location[4]
               
       
            xml_file.write('    <object>\n')
            xml_file.write('        <name>' + 'person' + '</name>\n')
            xml_file.write('        <pose>Unspecified</pose>\n')
            xml_file.write('        <truncated>0</truncated>\n')
            xml_file.write('        <difficult>0</difficult>\n')
            xml_file.write('        <bndbox>\n')
            xml_file.write('            <xmin>' + str(x) + '</xmin>\n')
            xml_file.write('            <ymin>' + str(y) + '</ymin>\n')
            xml_file.write('            <xmax>' + str(x+w) + '</xmax>\n')
            xml_file.write('            <ymax>' + str(y+h) + '</ymax>\n')
            xml_file.write('        </bndbox>\n')
            xml_file.write('    </object>\n')
        xml_file.write('</annotation>\n')

转化为YOLOv5训练的txt标注。

import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join

sets=[ ('2007', 'train'), ('2007', 'val'), ('2007', 'test')]

classes = ["car", "person","rider"]

#parser = ET.XMLParser("utf-8")
#tree = ET.fromstring(xmlstring, parser=parser)

def convert(size, box):
    dw = 1./(size[0])
    dh = 1./(size[1])
    x = (box[0] + box[1])/2.0 - 1
    y = (box[2] + box[3])/2.0 - 1
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x*dw
    w = w*dw
    y = y*dh
    h = h*dh
    return (x,y,w,h)

def convert_annotation(year, image_id):
    in_file = open('VOCdevkit/VOC%s/Annotations/%s.xml'%(year, image_id))
    out_file = open('VOCdevkit/VOC%s/labels/%s.txt'%(year, image_id), 'w')
    
    #parser = ET.XMLParser(encoding="utf-8")
   # tree = ET.fromstring(in_file, parser=True)
    print in_file

    tree=ET.parse(in_file)
   # print in_file
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)

    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)
        xmlbox = obj.find('bndbox')
        b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text))
        bb = convert((w,h), b)
        out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')

wd = getcwd()

for year, image_set in sets:
    if not os.path.exists('VOCdevkit/VOC%s/labels/'%(year)):
        os.makedirs('VOCdevkit/VOC%s/labels/'%(year))
    image_ids = open('VOCdevkit/VOC%s/ImageSets/Main/%s.txt'%(year, image_set)).read().strip().split()
    list_file = open('%s_%s.txt'%(year, image_set), 'w')
    for image_id in image_ids:
        list_file.write('%s/VOCdevkit/VOC%s/JPEGImages/%s.jpg\n'%(wd, year, image_id))
        convert_annotation(year, image_id)
    list_file.close()

#os.system("cat 2007_train.txt 2007_val.txt  > train.txt")
#os.system("cat 2007_train.txt 2007_val.txt 2007_test.txt 2012_train.txt 2012_val.txt > train.all.txt")


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CityScapes数据集介绍 的相关文章

  • kubeadm方式部署的k8s修改证书年限

    说明 kubeadm方式部署的k8s默认证书的年限为1一年 xff0c 当集群更新时 xff0c 证书也会更新 xff0c 如果集群每年都会更新 xff0c 那么证书年限就不用修改 但是大部分情况下 xff0c 为了保证线上环境稳定 xff
  • C++智能指针以及循环引用的解决办法

    1 为什么要使用智能指针 我们知道C 43 43 的内存管理是让很多人头疼的事情 xff0c 当我们写一个new语句时 xff0c 一般就会立即把delete语句直接也写了 xff0c 但是我们不能避免程序还未执行到delete时就跳转了或
  • Debian安装JDK的RPM包

    环境 xff1a Linux内核版本4 4 59 43 jdk1 8安装 Debian9系统 注意 xff1a 1 本文介绍的是在Debian中使用jdk的rpm包进行安装 JDK完全卸载 xff08 需要在root模式下进行操作 xff0
  • XShell 收费?5款免费且超赞的SSH工具,一个比一个香

    SSH客户端是后端程序员日常工作必备的工具之一 xff0c 一款趁手的工具也能让工作效率事半功倍 xff1b 上周的时候 xff0c 有小伙伴在群里面求免费的SSH软件 xff1b 说来也坑 xff0c 公司不允许使用PJ版的 xff0c
  • LaTeX公式按照章节编号

    LaTeX公式按照章节编号 问题 xff1a 如何让LaTeX公式按照章节编号 xff1f 答案 xff1a 在导言区加入如下语句 usepackage amsmath numberwithin equation section
  • xrdp 老版本返回上一次登录以及error - problem connecting

    连接服务器失败总结以下几种处理方式 xff1a 首先确定不是网络问题 xff0c ping ip地址 说明服务器端的网络没有问题 xff0c 通常linux开机默认监听22 3350 3389几个端口 22端口是用来连接ssh xff0c
  • C51编程23-应用篇(HC 06蓝牙模块)

    现在的手机 平板 xff0c 笔记本电脑都会自带蓝牙 本文将会介绍51单片机使用HC 06 蓝牙模块实现手机与笔记本电脑的通讯 HC 06 模块 购买HC 06模块后需要检测蓝牙模块是否是好的 xff0c 使用串口线与HC 06 模块连接起
  • BiliBili自动签到

    前情提要 emmm怎么突然会出这个教程呢 xff0c 因为俺要白嫖TX xff0c 如下图 xff1a 这是腾讯云函数公众号的一个搭建环境送礼品的活动 xff0c 截止日期 xff1a 10 9 这活动多亏群友分享 xff0c 不然俺也不知

随机推荐

  • RHEL8-配置IP地址

    前导 本文主要讲解如何重启RHEL 8或者CentOS 8网络以及如何解决RHEL8和CentOS8系统的网络管理服务报错 xff0c 当我们安装好RHEL 8或者 CentOS 8 xff0c 重启启动网络时 xff0c 会出现以下报错
  • redhat-8-0重置root密码

    前导 如果你忘记了RHEL 8系统中的root密码 xff0c 那就得重置root密码 xff0c 以下为在Grub启动菜单中在RHEL 8上进行手动密码恢复 引导 重启RHEL 8系统 将系统重启 xff0c 在看到grub菜单后 xff
  • Debian10使用本地ISO搭建APT源

    前言 这是个坑 xff01 是个大坑 xff01 如果在配置debian10本地源的时候 xff0c 直接使用apt cdrom add命令创建本地源后 xff0c 在安装软件的时候会有很大几率找不到软件包的位置然后报错 报错 E The
  • Debian10.x创建Raid5

    技术简介 RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中 RAID 5磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中 xff0c 而是存储到除自身以外的其他每一块硬盘设备上 xff0c 这样的好处是其中任何
  • Debian10.x创建NFS

    技术简介 NFS xff08 网络文件系统 xff09 服务可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上 xff0c 从而使得本地主机 xff08 Linux客户端 xff09 基于TCP IP协议 xff0c 像使用本地
  • Windows下 gcc编译环境的构建(Sublime + Mingw)

    1 起源 Windows 7下VC 6 0装起来很困难 xff0c 不得不装了个Visual Studio 2010 Express 但感觉比庞大 xff0c 并且在程序运行的最后不会暂停 2 计划采用Sublime加Mingw构建一个gc
  • Linux下安装xrdp

    Linux下安装xrdp 使用rdp协议访问远程Linux桌面 一般情况下 xff0c 如果需要登陆远程Linux系统 xff0c 我们会使用ssh telnet来完成 xff0c 如果需要登陆到远程Linux系统的桌面环境 xff0c 我
  • bootstrap模态对话框宽度设置

    39 addFormbox 39 modal css width 39 auto 39 39 margin left 39 function return this width 2
  • Debian10.x简易配置DHCP服务器

    环境 Client 网卡1 系统 xff1a debian10 Server xff1a 三网卡IP 10 10 100 254 IP 172 16 100 254 IP xff1a 192 16 100 254 实施步骤 安装 apt i
  • haproxy各个指标的打印报告解析

    1 使用这个命令就可以获取haproxy所有的数据 span class hljs keyword echo span span class hljs string 34 show stat 34 span socat span class
  • CentOS7使用firewalld打开关闭防火墙与端口火墙与端口

    CentOS7使用firewalld打开关闭防火墙与端口火墙与端口 启动 xff1a systemctl start firewalld 关闭 xff1a systemctl stop firewalld 查看状态 xff1a system
  • poj 1752 Advertisement (区间差分约束+最长路 输出可行解)

    Advertisement Time Limit 1000MS Memory Limit 10000KTotal Submissions 919 Accepted 331 Special Judge Description The Depa
  • OSI 七层模型详解

    大家好 xff0c 我是蛋蛋 3T 43 技术学习视频资源 xff0c 500 43 技术电子书 xff0c 大量高效工具及网站 xff0c 私信回复 资源 即可免费获取 OSI xff08 Open System Interconnect
  • WebService的简单示例

    今天 xff0c 看到需求需要WebService进行通信 xff0c 所以我就先看看WebService是怎样的一个流程 xff0c 这里做个简单实例 首先我创建了两个工程 xff0c 一个为服务端 xff0c 另一个为客户端 part1
  • 今日头条2018校园招聘后端开发工程师 (第二批) 编程题 - 字母交换

    题目描述 xff1a 编码题 字符串S由小写字母构成 xff0c 长度为n 定义一种操作 xff0c 每次都可以挑选字符串中任意的两个相邻字母进行交换 询问在至多交换m次之后 xff0c 字符串中最多有多少个连续的位置上的字母相同 xff1
  • php 报错:A non-numeric value encountered

    意思是 39 遇到了非数值异常 39 xff0c 可能是你的代码里字符串拼接习惯性的将 39 39 写成了 39 43 39 所导致
  • linux系统变为只读,提示Read-only file system的解决办法

    mount o rw remount
  • 修改Debian登录窗口背景图片

    仅记录以便日后使用 xff1a 执行gresource export sh xff0c 将资源文件备份到 HOME shell theme目录将导出的 HOME shell theme theme中的所有文件 xff0c 保存到gnome
  • 【MySQL】Navicat修改数据库名称

    假设 xff1a 有一个数据库 xff0c 名称为A xff0c 需要修改为B 在Navicat中不可以按F2修改数据库的名称 xff0c 我们必须新建一个库 xff0c 命名为B 下面4种方式都可以实现目标 如果数据库中有远程表和权限设置
  • CityScapes数据集介绍

    CityScapes Cityperson数据集 xff0c 在16年CVPR上被提出 xff0c 是张姗姗一波人在CityScapes数据集上进行标注得到的行人检测数据集 做行人检测的应该都不陌生 在Replusion Loss和NMS