Cityscapes数据集:如何将像素级的多边形标注的分割数据标注转为目标检测的bbox标注

Cityscapes数据集官网下载地址:

https://www.cityscapes-dataset.com/

相关介绍:从官网下载这三个压缩包文件leftImg8bit_trainvaltest.zip、gtCoarse.zip、gtFine_trainvaltest.zip

1)leftImg8bit_trainvaltest.zip分为train、val以及test三个文件夹,共包含了5000张图像;

2)gtFine_trainvaltest.zip是精细化的注释信息,在其精细标注数据集文件夹(gtFine)中,也有train、val以及test三个文件夹,每张图片对应四个标注文件:用于可视化的彩色标注图(_color.png)、用于实例分割的实例I图(_instanceIds.png)、用于语义分割的标签图(_labelsIds.png)以及包含原始人工标注信息的JSON文件(_polygons.json)等;
在这里插入图片描述

Cityscapes数据集简单介绍:

城市街景数据集 Cityscapes © 收集了来自 50 个不同城市、良好天气条件下的街景,共包含 5000 张高分辨率(1024x2048)图像。其中 3475 张带标注的图像用于训练和验证(2975 张用于训练,500 张用于验证),1525 张未标注图像用于测试。此外,数据集中还提供了 20000 张弱标注图像供研究使用。该数据集涵盖 30 多种类别,主要包括城市街景中的车辆、行人、建筑物、道路等常见物体和场景。

实例分割数据集改造为目标检测数据集

将分割数据中的像素级多边形标注转换为目标检测的边界框(bbox)标注,其实并不复杂。每个分割目标的多边形标注由多个像素点的 [x, y] 坐标组成,只需找到这些坐标的 Xmin, Ymin, Xmax, 和 Ymax 值,就能确定该目标的边界框
在这里插入图片描述
结果:
在这里插入图片描述

preprocess.py代码如下

import os
import glob
from shutil import copy2
from PIL import Image
import json
import numpy as npdef copy_file(src, src_ext, dst):# find all files ends up with extflist = sorted(glob.glob(os.path.join(src, '*', src_ext)))for fname in flist:src_path = os.path.join(src, fname)copy2(src_path, dst)print('copied %s to %s' % (src_path, dst))def construct_box(inst_root, inst_name, cls_name, dst):inst_list = sorted(glob.glob(os.path.join(inst_root, '*', inst_name)))cls_list = sorted(glob.glob(os.path.join(inst_root, '*', cls_name)))for inst, cls in zip(*(inst_list, cls_list)):inst_map = Image.open(os.path.join(inst_root, inst))inst_map = np.array(inst_map, dtype=np.int32)cls_map = Image.open(os.path.join(inst_root, cls))cls_map = np.array(cls_map, dtype=np.int32)H, W = inst_map.shape# get a list of unique instancesinst_info = {'imgHeight':H, 'imgWidth':W, 'objects':{}}inst_ids = np.unique(inst_map)for iid in inst_ids: if int(iid) < 1000: # filter out non-instance maskscontinueys,xs = np.where(inst_map==iid)ymin, ymax, xmin, xmax = \ys.min(), ys.max(), xs.min(), xs.max()cls_label = np.median(cls_map[inst_map==iid])inst_info['objects'][str(iid)] = {'bbox': [int(xmin), int(ymin), int(xmax), int(ymax)],'cls': int(cls_label)}# write a file to pathfilename = os.path.splitext(os.path.basename(inst))[0]savename = os.path.join(dst, filename + '.json')with open(savename, 'w') as f:json.dump(inst_info, f)print('wrote a bbox summary of %s to %s' % (inst, savename))# organize image
if __name__ == '__main__':folder_name = 'datasets/cityscape/'train_img_dst = os.path.join(folder_name, 'train_img')train_label_dst = os.path.join(folder_name, 'train_label')train_inst_dst = os.path.join(folder_name, 'train_inst')train_bbox_dst = os.path.join(folder_name, 'train_bbox')val_img_dst = os.path.join(folder_name, 'val_img')val_label_dst = os.path.join(folder_name, 'val_label')val_inst_dst = os.path.join(folder_name, 'val_inst')val_bbox_dst = os.path.join(folder_name, 'val_bbox')if not os.path.exists(train_img_dst):os.makedirs(train_img_dst)if not os.path.exists(train_label_dst):os.makedirs(train_label_dst)if not os.path.exists(train_inst_dst):os.makedirs(train_inst_dst)if not os.path.exists(val_img_dst):os.makedirs(val_img_dst)if not os.path.exists(val_label_dst):os.makedirs(val_label_dst)if not os.path.exists(val_inst_dst):os.makedirs(val_inst_dst)root = "G:\Dataset\cityscapes"# # train_image# copy_file('G:/Dataset/cityscapes/leftImg8bit/train',\#         '*_leftImg8bit.png', train_img_dst)# # train_label# copy_file('G:/Dataset/cityscapes/gtFine/train',\#         '*_labelIds.png', train_label_dst)# # train_inst# copy_file('G:/Dataset/cityscapes/gtFine/train',\#         '*_instanceIds.png', train_inst_dst)# # val_image# copy_file('G:/Dataset/cityscapes/leftImg8bit/val',\#         '*_leftImg8bit.png', val_img_dst)# # val_label# copy_file('G:/Dataset/cityscapes/gtFine/val',\#         '*_labelIds.png', val_label_dst)# # val_inst# copy_file('G:/Dataset/cityscapes/gtFine/val',\#         '*_instanceIds.png', val_inst_dst)if not os.path.exists(train_bbox_dst):os.makedirs(train_bbox_dst)if not os.path.exists(val_bbox_dst):os.makedirs(val_bbox_dst)# wrote a bounding box summary construct_box('G:/Dataset/cityscapes/gtFine/train',\'*_instanceIds.png', '*_labelIds.png', train_bbox_dst)construct_box('G:/Dataset/cityscapes/gtFine/val',\'*_instanceIds.png', '*_labelIds.png', val_bbox_dst) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/462343.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【周末推荐】Windows无缝连接iPhone

关注“ONE生产力”&#xff0c;获取更多精彩推荐&#xff01; 又到了周末推荐时间了&#xff0c;今天我们介绍一个Windows内置的功能&#xff0c;能够帮助大家将自己的电脑和iPhone连接在一起。 很多用Windows的小伙伴羡慕macOS可以和iPhone无缝连接&#xff0c;轻松阅读和回…

JDBC/ODBC—数据库连接API概述

JDBC/ODBC概述 在数据库连接领域&#xff0c;有两种广泛使用的技术&#xff1a;ODBC&#xff08;Open Database Connectivity - 开放数据库连接&#xff09;和 JDBC&#xff08;Java Database Connectivity - Java 数据库连接&#xff09;。 一、什么是 ODBC&#xff1f; Ope…

Vagrant使用教程:创建CentOS 8虚拟机

目录 简介准备工作下载配置Vagrant修改环境变量创建VAGRANT_HOME环境变量修改virturalBox新建虚拟机文件的默认生成路径修改Vagrant配置支持VirtualBox7.1.x版本创建Vagrant文件添加镜像 初始化并开机初始化开发环境开机 其他配置项宿主机的交换目录修改虚拟机内存修改 访问方式…

使用Django Channels实现WebSocket实时通信

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Django Channels实现WebSocket实时通信 Django Channels 简介 环境搭建 安装 Django 和 Channels 创建 Django 项目 配置 A…

【JAVA 笔记】11 ch08_opp_intermediate 第8章 面向对象编程(中级部分)

第8章 面向对象编程(中级部分) IDEA 常用快捷键 包 包的三大作用 包基本语法 包的本质分析 包的命名 常用的包 如何引入包 注意事项和使用细节 访问修饰符 基本介绍 访问修饰符的访问范围! 使用的注意事项 面向对象编程三大特征 基本介绍 封装介绍 封装的理解和好处 封装的实现…

面试题:JVM(四)

new对象流程&#xff1f;&#xff08;龙湖地产&#xff09; 对象创建方法&#xff0c;对象的内存分配。&#xff08;360安全&#xff09; 1. 对象实例化 创建对象的方式有几种&#xff1f; 创建对象的步骤 指针碰撞&#xff1a;以指针为分界线&#xff0c;一边是已连续使用的…

无人机螺旋桨动平衡分析测试台

产品简介 Flight Stand系列动力测试台全部支持螺旋桨动平衡分析测试功能&#xff0c;用户仅需几个简单的操作步骤&#xff0c;轻松实现电机和螺旋桨ISO 21940-11:2016标准级的动平衡精度。 功能说明 测试台一体化集成有三坐标振动传感器和转速传感器&#xff0c;通过测量动力…

qt QTextEdit详解

QTextEdit是Qt框架中的一个文本编辑控件类&#xff0c;它提供了丰富的功能用于编辑和显示纯文本以及富文本。 重要方法 setPlainText(const QString &text)&#xff1a;设置纯文本内容。toPlainText()&#xff1a;获取纯文本内容。setHtml(const QString &text)&#…

杂项——USB键盘与鼠标流量分析——BUUCTF——流量分析

第一次做USB键盘与鼠标流量分析的题目&#xff0c;现在来好好做一个总结 1. 基础知识 USB流量指的是USB设备接口的流量&#xff0c;攻击者能够通过监听usb接口流量获取键盘敲击键、鼠标移动与点击、存储设备的铭文传输通信、USB无线网卡网络传输内容等等。 在正式介绍 USB H…

Windows部署rabbitmq

本次安装环境&#xff1a; 系统&#xff1a;Windows 11 软件建议版本&#xff1a; erlang OPT 26.0.2rabbitmq 3.12.4 一、下载 1.1 下载erlang 官网下载地址&#xff1a; 1.2 下载rabbitmq 官网下载地址&#xff1a; 建议使用解压版&#xff0c;安装版可能会在安装软件…

HTML静态网页成品作业(HTML+CSS)——自行车介绍网页设计制作(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码CSS部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品…

工厂电气及PLC【1章各种元件符号】

交流接触器的线圈通电后&#xff0c;线圈电流会产生磁场&#xff0c;衔铁在磁吸引力作用下带动触点动作&#xff1a;常开的主触点闭合&#xff0c;接通主电路&#xff1b;同时&#xff0c;常开的辅助触点闭合&#xff0c;常闭的辅助触点断开。当线圈失电或电压显著降低时&#…

使用GraphQL构建现代API

使用GraphQL构建现代API GraphQL简介 安装GraphQL 使用npm安装GraphQL 使用Yarn安装GraphQL 创建GraphQL服务器 定义Schema 编写Resolver 查询数据 变更数据 使用Apollo Client GraphQL订阅 数据验证 错误处理 分页查询 拆分和组合Schema 总结 随着API的发展&#xff0c;传统…

用Python设置、更新和获取Excel单元格的值

Excel工作簿作为一款广泛使用的数据管理工具&#xff0c;与Python相结合&#xff0c;可以使得自动化处理大量数据成为可能。通过Python来设置、更新以及读取Excel单元格的值&#xff0c;不仅可以极大地提高工作效率&#xff0c;减少重复劳动&#xff0c;还能增强数据处理流程的…

利用ChatGPT完成2024年MathorCup大数据挑战赛-赛道A初赛:台风预测与分析

利用ChatGPT完成2024年MathorCup大数据挑战赛-赛道A初赛&#xff1a;台风预测与分析 引言 在2024年MathorCup大数据挑战赛中&#xff0c;赛道A聚焦于气象数据分析&#xff0c;特别是台风的生成、路径预测、和降水风速特性等内容。本次比赛的任务主要是建立一个分类评价模型&…

Logback 常用配置详解

1. 配置文件解析 Logback 是 Spring Boot 默认使用的日志框架&#xff0c;Logback 配置主要包含 8 大元素 1.1 configuration Logback 配置文件的根元素&#xff0c;它包含所有的配置信息 1.2 appender 定义一个 Appender&#xff0c;即日志输出的目的地&#xff0c;如控制…

造纸行业湿法粉碎机、高速破碎机、粉碎磨粉机

细胞磨在造纸行业的应用主要体现在以下几个方面&#xff1a; 1.原料处理 细碎与研磨&#xff1a;造纸行业的原料&#xff0c;如木材、竹材等&#xff0c;需要经过细碎和研磨处理以获取适合造纸的纤维。细胞磨能够高效地实现这一过程&#xff0c;将原料细化至所需的粒度&#…

JAVA基础:jdbc (学习笔记)

基础操作 任何一种jdbc操作&#xff0c;都是由7步完成的 手动加载数据库驱动类{反射}获得连接对象写sql语句获得执行对象执行sql语句&#xff0c;同时获得结果处理结果关闭资源 功能一&#xff1a;添加表里的数据 public static void main4(String[] args) throws ClassNotF…

RabbitMQ最全教程-Part1(基础使用)

一、消息队列基本概念 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用解耦&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构 1、消息队列的特点 可靠性 消息持久化&#xff…

英伟达 GPU 架构:演进与模型推理速度的深度关联

英伟达的 GPU 架构演进之路充满了创新与突破。 ©作者|Zane 来源|神州问学 一、 英伟达GPU的架构演进之路 1999 年&#xff0c;英伟达发布 Geforce256 图形处理芯片&#xff0c;首次提出 GPU 概念。早期的架构如 G80 或 GeForce 8800 GTX&#xff0c;包含 8 个 TPC&#…