WiderPerson行人检测数据集
1. 简介
WiderPerson数据集是比较拥挤场景的行人检测基准数据集,其图像是从多种场景中选择的,不再局限于交通场景。 选择13382张图像,并用各种遮挡标记约40万个注释。 我们随机选择8000/1000/4382图像作为训练,验证和测试集。 与CityPersons和WIDER FACE数据集相似,不发布测试图像的标注文件。
可以在官网上进行下载:http://www.cbsr.ia.ac.cn/users/sfzhang/WiderPerson/
2. 标注详解
随便打开一个标注文件如下所示:
1. 第一行代表了标注框的数目,从第二行开始才是真正的标注框
2. 从第二行开始,第一列代表了这个标注框的类别,后面分别是xmin ymin xmax ymax也就是左上角右下角坐标
[class_label, xmin, ymin, xmax, ymax]
写了个可视化程序进行查看:
import os
import cv2if __name__ == '__main__':path = '../WiderPerson/trainval.txt'with open(path, 'r') as f:img_ids = [x for x in f.read().splitlines()]for img_id in img_ids: # '000040'img_path = '../WiderPerson/images/' + img_id + '.jpg'img = cv2.imread(img_path)im_h = img.shape[0]im_w = img.shape[1]label_path = img_path.replace('images', 'Annotations') + '.txt'with open(label_path) as file:line = file.readline()count = int(line.split('\n')[0]) # 里面行人个数line = file.readline()while line:cls = int(line.split(' ')[0])# < class_label =1: pedestrians > 行人# < class_label =2: riders > 骑车的# < class_label =3: partially-visible persons > 遮挡的部分行人# < class_label =4: ignore regions > 一些假人,比如图画上的人# < class_label =5: crowd > 拥挤人群,直接大框覆盖了if cls == 1 or cls == 2 or cls == 3:xmin = float(line.split(' ')[1])ymin = float(line.split(' ')[2])xmax = float(line.split(' ')[3])ymax = float(line.split(' ')[4].split('\n')[0])img = cv2.rectangle(img, (int(xmin), int(ymin)), (int(xmax), int(ymax)), (0, 255, 0), 2)line = file.readline()cv2.imshow('result', img)cv2.waitKey(0)
可以看到都是一些比较拥挤场景的行人图片,不过跟实际比较贴切一些,不像其他一些数据集都是在国外开奔驰的场景,感觉对自己的实际场景应该会有帮助:
需要注意000040.jpg.txt貌似有问题,自己删掉就好了
3. 类别解析
官网是这么说的,但是自己还是有点不理解,就自己绘制看看了
...
< class_label =1: pedestrians >
< class_label =2: riders >
< class_label =3: partially-visible persons >
< class_label =4: ignore regions >
< class_label =5: crowd >
...
类别 1:pedestrians 行人
根据自己的可视化代码,cls == 1的时候绘制出来。可以看到都是比较完整的行人图片,这个比较好理解
类别 2:riders 骑车的人
这个很好理解
类别 3:partially-visible persons 被挡住了一部分的人
这个也比较好理解,就是遮挡嘛,不过有些时候遮挡严重都快看不出来是个人了。。
类别 4:ignore regions
这个是重点了,一开始有点懵,不知道啥意思,绘制出来如下(这是“假人”,自己实际应用并不需要这样的假人,不过VOC COCO数据集都标注为person了):
类别 5:crowd
拥挤人群直接大框笼罩了,COCO 数据集很多也这样而且还标成person了
4 数据集转换
转成VOC格式
import os
import numpy as np
import scipy.io as sio
import shutil
from lxml.etree import Element, SubElement, tostring
from xml.dom.minidom import parseString
import cv2def make_voc_dir():# labels 目录若不存在,创建labels目录。若存在,则清空目录if not os.path.exists('../VOC2007/Annotations'):os.makedirs('../VOC2007/Annotations')if not os.path.exists('../VOC2007/ImageSets'):os.makedirs('../VOC2007/ImageSets')os.makedirs('../VOC2007/ImageSets/Main')if not os.path.exists('../VOC2007/JPEGImages'):os.makedirs('../VOC2007/JPEGImages')if __name__ == '__main__':classes = {'1': 'pedestrians','2': 'riders','3': 'partially','4': 'ignore','5': 'crowd'}VOCRoot = '../VOC2007'widerDir = '../WiderPerson' # 数据集所在的路径wider_path = '../WiderPerson/trainval.txt'make_voc_dir()with open(wider_path, 'r') as f:imgIds = [x for x in f.read().splitlines()]for imgId in imgIds:objCount = 0 # 一个标志位,用来判断该img是否包含我们需要的标注filename = imgId + '.jpg'img_path = '../WiderPerson/images/' + filenameprint('Img :%s' % img_path)img = cv2.imread(img_path)width = img.shape[1] # 获取图片尺寸height = img.shape[0] # 获取图片尺寸 360node_root = Element('annotation')node_folder = SubElement(node_root, 'folder')node_folder.text = 'JPEGImages'node_filename = SubElement(node_root, 'filename')node_filename.text = 'VOC2007/JPEGImages/%s' % filenamenode_size = SubElement(node_root, 'size')node_width = SubElement(node_size, 'width')node_width.text = '%s' % widthnode_height = SubElement(node_size, 'height')node_height.text = '%s' % heightnode_depth = SubElement(node_size, 'depth')node_depth.text = '3'label_path = img_path.replace('images', 'Annotations') + '.txt'with open(label_path) as file:line = file.readline()count = int(line.split('\n')[0]) # 里面行人个数line = file.readline()while line:cls_id = line.split(' ')[0]xmin = int(line.split(' ')[1]) + 1ymin = int(line.split(' ')[2]) + 1xmax = int(line.split(' ')[3]) + 1ymax = int(line.split(' ')[4].split('\n')[0]) + 1line = file.readline()cls_name = classes[cls_id]obj_width = xmax - xminobj_height = ymax - ymindifficult = 0if obj_height <= 6 or obj_width <= 6:difficult = 1node_object = SubElement(node_root, 'object')node_name = SubElement(node_object, 'name')node_name.text = cls_namenode_difficult = SubElement(node_object, 'difficult')node_difficult.text = '%s' % difficultnode_bndbox = SubElement(node_object, 'bndbox')node_xmin = SubElement(node_bndbox, 'xmin')node_xmin.text = '%s' % xminnode_ymin = SubElement(node_bndbox, 'ymin')node_ymin.text = '%s' % yminnode_xmax = SubElement(node_bndbox, 'xmax')node_xmax.text = '%s' % xmaxnode_ymax = SubElement(node_bndbox, 'ymax')node_ymax.text = '%s' % ymaxnode_name = SubElement(node_object, 'pose')node_name.text = 'Unspecified'node_name = SubElement(node_object, 'truncated')node_name.text = '0'image_path = VOCRoot + '/JPEGImages/' + filenamexml = tostring(node_root, pretty_print=True) # 'annotation'dom = parseString(xml)xml_name = filename.replace('.jpg', '.xml')xml_path = VOCRoot + '/Annotations/' + xml_namewith open(xml_path, 'wb') as f:f.write(xml)# widerDir = '../WiderPerson' # 数据集所在的路径shutil.copy(img_path, '../VOC2007/JPEGImages/' + filename)
转成YOLO格式
5. 数据集清洗
这么大数据集而且又是密集场景,难免错标漏标,而且类别为crowd拥挤场景和ignore‘假人’对于自己实际用也是不需要的
WiderPerson行人检测数据集相关推荐
- WiderPerson行人检测数据集转yolo格式
widerPerson数据集属于密集人群标注类型数据集 内部图片看标记为网络收集,很多带有水印 数据集对行人检测,分为5个类别,分别为1正常行人,2骑车人,3遮挡部分的人体,4人形物体,5无法区分的密 ...
- 车辆重识别、行人检测数据集、多摄像头数据集
Time:2022 / 8/ 19 Author:QHL-taki content:Dataset Sharing 前言 近期博主在做多摄像头行人重识别的任务,查询多方资料,收集到一些重识别相关的 ...
- 车辆行人检测数据集_澎思科技行人再识别技术取得突破,刷新三大数据集世界记录...
近日,国内人工智能企业澎思科技(Pensees)在行人再识别(Person Re-identification,简称ReID)算法上取得突破,在三大主流ReID数据集测试Market1501,Duke ...
- 用python将MSCOCO和Caltech行人检测数据集转化成VOC格式
代码:转换用的代码放在这里 之前用Tensorflow提供的object detection API可以很方便的进行fine-tuning实现所需的特定物体检测模型(看这里).那么现在的主要问题就是数 ...
- 车辆行人检测数据集_开源 | 相机和激光雷达融合的行人车辆检测跟踪
声明:本文首发于我的公众号[当SLAM遇见小王同学],谢绝私自转载,如有需要,可加我微信进行授权!! 最近在GitHub上发现了一个开源项目,关于相机和激光雷达融合的行人车辆检测跟踪. 项目 http ...
- 计算机视觉常用数据集总结:包括MS COCO、ImageNet、VOC、人脸识别、行人检测等...
1.PASCAL VOC(权威鼻祖) PASCAL VOC是一个图像集,由Mark Everingham (University ofLeeds).Luc van Gool (ETHZ, Zurich ...
- 用HOG+SVM在Inria数据集上做行人检测与评测
by baiyu33 功能 基于OpenCV在Inria行人检测数据集上,做训练和测试,生成bbs用于评测 代码 在OpenCV3.0中的例程opencv/sources/sample/cpp/tra ...
- 【车辆行人检测和跟踪数据集及代码汇总】
车辆行人检测和跟踪数据集和代码汇总 1. 车辆检测和跟踪 1.1 车辆检测数据集和训练权重 1.2 车辆跟踪 2. 行人检测和跟踪 2.1 行人检测数据集和训练权重 2.2行人多目标跟踪 3. 车辆行 ...
- CVPR 2020夜间行人检测挑战赛两冠一亚:DeepBlueAI团队获胜方案解读
点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 本文转载自:机器之心 近日,由 CVPR 2020 Workshop 举办的 NightOwl ...
最新文章
- 为什么建议大家使用Linux开发?
- 车辆管理系统之继续自己的任务(四)
- 国赛来咯,全国大学生智能汽车竞赛百度赛道正式开启
- ASIHTTPRequest的环境配置和使用示例
- 自动开料机器人_工业4.0智能家具无人化生产线 自动化无人化大势所趋
- ubuntu php 树莓派,树莓派3 安装ROS环境(ubuntu mate 16.04+kinetic)
- 今天没白过之《Linux的变量》
- python源代码制作星空_用python画星空源代码是什么
- 人工智能——支持向量机(SVM)思维导图
- 数位板的主要参数解析
- Excel——检查单元格是否包含文本(不区分大小写)
- 油耳戴什么款式耳机好?骨传导耳机最合适
- SDCC 2016讲师、知名JavaScript专家周爱民议题公布:有前端思想的物联网系统架构...
- Mc1.16forge官混教程/教补-#3 物品材质覆盖注意要点[分支1]
- Android保存图片和视频到本地并更新相册
- gorilla/mux实现http服务示例
- 两种方法教你在postman设置请求里带动态token
- 利用笔记本热点AP功能实现在没有越狱的iPad/iPhone抓包
- [创业-19]:财务报表 - 所有者权益之实收资本
- 华为瘦胖ap互转_华为瘦胖ap互转