【idd】——印度自动驾驶场景语义分割数据集(解析代码)

2024-03-06 06:50

本文主要是介绍【idd】——印度自动驾驶场景语义分割数据集(解析代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

语义分割,街景场景

在这里插入图片描述

简介

该数据集由安装在汽车上的前置摄像头获得的图像组成。这辆车在海德拉巴、班加罗尔等城市及其郊区行驶。图像大多是1080p分辨率,但也有一些图像是720p和其他分辨率。
在这里插入图片描述
我们的数据集标注有独特的标签,如广告牌、机动人力车、动物等。此外,我们亦会留意道路旁可能安全的驾驶区域。

数据集的标签被组织为4级层次结构。每个级别都给出了唯一的整数标识符。如下图所示:

y轴上每个标签的像素数。

四个级别的标签层次结构和中间级别(级别2,级别3)的标签id。

将用于预测和地面真实掩模的颜色编码分别对应于相应的掩模。

例子

在这里插入图片描述
输入图像的一些例子,基线cityscape预训练模型的预测,在这个数据集上训练的相同基线的预测,以及验证集的基本事实(按列顺序),可以在下面看到。
可以看到,在我们的数据集上训练的模型清楚地将道路旁的泥泞可行驶区域与道路本身区分开来。我们的数据集有广告牌和道路中间的路边/中间的标签。此外,我们的图像帧来自非结构化的驾驶设置,道路泥泞,车道弟子不常遵循,道路上有大量的车辆。

语义label的解析

参考:semantic-segmentation-indian-driving-dataset
code:

import os 
import cv2
import sys
import jsonimport numpy as np
import skimage.io as iofrom skimage.draw import polygon
from skimage import img_as_float# %%
root = './anue/'
root = 'D:/19segmentation/idd-20k-II/idd20kIID/19segmentation/idd-20k-II/idd20kII'# %% [markdown]
# # Get all labels in the dataset as a dictionary# %%
def get_all_labels(root):labels = []final_labels = {}img_folder, segmap_folder = os.listdir(root)#     sub_path_train_img = os.path.join(root, img_folder, './train')sub_path_train_seg = os.path.join(root, segmap_folder, './train')#     sub_path_val_img = os.path.join(root, img_folder, './val')sub_path_val_seg = os.path.join(root, segmap_folder, './val')# extract training labelsfor folder in os.listdir(sub_path_train_seg):
#         curr_img_folder = os.path.join(sub_path_train_img, folder)curr_seg_folder = os.path.join(sub_path_train_seg, folder)for file in os.listdir(curr_seg_folder):if 'json' not in file:continuef = open(os.path.join(curr_seg_folder, file), 'r')data = json.loads(f.read())for obj in data['objects']:if obj['label'] not in labels:labels.append(obj['label'])# extract validation labelsfor folder in os.listdir(sub_path_val_seg):
#         curr_img_folder = os.path.join(sub_path_val_img, folder)curr_seg_folder = os.path.join(sub_path_val_seg, folder)for file in os.listdir(curr_seg_folder):if 'json' not in file:continuef = open(os.path.join(curr_seg_folder, file), 'r')data = json.loads(f.read())for obj in data['objects']:if obj['label'] not in labels:labels.append(obj['label'])for i in range(len(labels)):final_labels[labels[i]] = ireturn final_labels# %%
labels = get_all_labels(root)# %%
labels# %% [markdown]
# # Generate Segmentation Maps# %%
def create_segmentation_maps(root, labels):img_folder, segmap_folder = os.listdir(root)if not os.path.exists('./img'):os.makedirs('img')if not os.path.exists('./img/train'):os.makedirs('img/train')if not os.path.exists('./img/val'):os.makedirs('img/val')if not os.path.exists('./seg'):os.makedirs('seg')if not os.path.exists('./seg/train'):os.makedirs('seg/train')if not os.path.exists('./seg/val'):os.makedirs('seg/val')sub_path_train_img = os.path.join(root, img_folder, './train')sub_path_train_seg = os.path.join(root, segmap_folder, './train')sub_path_val_img = os.path.join(root, img_folder, './val')sub_path_val_seg = os.path.join(root, segmap_folder, './val')for folder in os.listdir(sub_path_train_seg):curr_img_folder = os.path.join(sub_path_train_img, folder)curr_seg_folder = os.path.join(sub_path_train_seg, folder)for file in os.listdir(curr_img_folder):id = file.split('_')[0]img = cv2.imread(os.path.join(curr_img_folder, file))f = open(os.path.join(curr_seg_folder, id+'_gtFine_polygons.json'), 'r')data = json.loads(f.read())seg_map = np.zeros((data['imgWidth'],data['imgHeight']))for obj in data['objects']:label = obj['label']poly = np.array(obj['polygon'])rr, cc = polygon(poly[:,0], poly[:,1], seg_map.shape)seg_map[rr,cc] = labels[label]cv2.imwrite('./img/train/'+id+'.png', img)cv2.imwrite('./seg/train/'+id+'.png', seg_map.T)for folder in os.listdir(sub_path_val_seg):curr_img_folder = os.path.join(sub_path_val_img, folder)curr_seg_folder = os.path.join(sub_path_val_seg, folder)for file in os.listdir(curr_img_folder):id = file.split('_')[0]img = cv2.imread(os.path.join(curr_img_folder, file))f = open(os.path.join(curr_seg_folder, id+'_gtFine_polygons.json'), 'r')data = json.loads(f.read())seg_map = np.zeros((data['imgWidth'],data['imgHeight']), np.uint8)for obj in data['objects']:label = obj['label']poly = np.array(obj['polygon'])rr, cc = polygon(poly[:,0], poly[:,1], seg_map.shape)seg_map[rr,cc] = labels[label]cv2.imwrite('./img/val/'+id+'.png', img)cv2.imwrite('./seg/val/'+id+'.png', seg_map.T)# %%
create_segmentation_maps(root, labels)

解析出来可视化的例子
在这里插入图片描述

语义标签

共39个类别, 类别仅供参考
在这里插入图片描述

这篇关于【idd】——印度自动驾驶场景语义分割数据集(解析代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/779187

相关文章

Python中配置文件的全面解析与使用

《Python中配置文件的全面解析与使用》在Python开发中,配置文件扮演着举足轻重的角色,它们允许开发者在不修改代码的情况下调整应用程序的行为,下面我们就来看看常见Python配置文件格式的使用吧... 目录一、INI配置文件二、YAML配置文件三、jsON配置文件四、TOML配置文件五、XML配置文件

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.

golang获取prometheus数据(prometheus/client_golang包)

《golang获取prometheus数据(prometheus/client_golang包)》本文主要介绍了使用Go语言的prometheus/client_golang包来获取Prometheu... 目录1. 创建链接1.1 语法1.2 完整示例2. 简单查询2.1 语法2.2 完整示例3. 范围值

Spring中@Lazy注解的使用技巧与实例解析

《Spring中@Lazy注解的使用技巧与实例解析》@Lazy注解在Spring框架中用于延迟Bean的初始化,优化应用启动性能,它不仅适用于@Bean和@Component,还可以用于注入点,通过将... 目录一、@Lazy注解的作用(一)延迟Bean的初始化(二)与@Autowired结合使用二、实例解

Java中有什么工具可以进行代码反编译详解

《Java中有什么工具可以进行代码反编译详解》:本文主要介绍Java中有什么工具可以进行代码反编译的相关资,料,包括JD-GUI、CFR、Procyon、Fernflower、Javap、Byte... 目录1.JD-GUI2.CFR3.Procyon Decompiler4.Fernflower5.Jav

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

Java中实现订单超时自动取消功能(最新推荐)

《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (