首页 > 其他分享 >Dexcap复现代码数据预处理全流程(五)——demo_create_hdf5.py

Dexcap复现代码数据预处理全流程(五)——demo_create_hdf5.py

时间:2025-01-06 20:03:53浏览次数:3  
标签:采样 num hdf5 demo py 子目录 dataset points

此脚本的主要目的是从此前处理的数据集目录中读取多个子目录(每个子目录也是一个独立的数据集),对数据进行处理,并将处理后的数据保存到HDF5文件中

1 库引用

from dataset_utils import *

2 指定数据集路径

# 定义原始数据集的主目录路径
# 需要替换 [PATH_TO_RAW_DATA_DOWNLOAD] 为实际存放原始数据的路径
dataset_base_dir = '/home/yejiangchen/Desktop/Codes/DexCap-main/data/rawdata_wipe_1-14/save_wipe_1-14'
# dataset_base_dir = '[PATH_TO_RAW_DATA_DOWNLOAD]/save_packaging_wild_1-20'

通过 dataset_base_dir 定义原始数据集的主目录

需要将 [PATH_TO_RAW_DATA_DOWNLOAD] 替换为实际存放数据集的路径

数据集中包含多个子目录,每个子目录对应一个独立的数据集

3 提取子目录路径

# 列出主目录下的所有子目录
# os.listdir(dataset_base_dir): 获取主目录下的所有文件和文件夹名称
# os.path.isdir: 检查路径是否为目录
# os.path.join: 拼接完整路径
sub_dirs = [os.path.join(dataset_base_dir, d) for d in os.listdir(dataset_base_dir) if os.path.isdir(os.path.join(dataset_base_dir, d))]

os.listdir(dataset_base_dir):列出 dataset_base_dir 目录下的所有文件和文件夹

通过 os.path.isdir 过滤掉非目录的项,仅保留子目录

最终 sub_dirs 是一个列表,包含了所有数据子目录的绝对路径

4 对子目录进行排序

# 对子目录按照名称中的最后两位数字进行排序
# extract_dataset_folder_last_two_digits: 自定义函数,提取文件夹名称中的最后两位数字
# 例如:文件夹名称为 "save_data_wipe_1-14_01",提取 "01" 并作为排序依据
dataset_folders = sorted(sub_dirs, key=lambda d: extract_dataset_folder_last_two_digits(os.path.basename(d)))

sorted 对子目录路径进行排序

排序的依据是子目录名称的最后两位数字,通过函数 extract_dataset_folder_last_two_digits 提取

子目录名称如 save_data_wipe_1-14_01,函数会提取01并按照编号顺序排序

5 设定参数

# 定义处理参数
action_gap = 5  # 动作间隔参数,用于指定采样的步长,每隔5个动作采样一次
num_points_to_sample = 10000  # 要从每个数据集中采样的点数,限制采样规模

action_gap: 定义了处理数据时的动作间隔(采样步长),5表示每隔5个动作进行一次采样

num_points_to_sample: 指定了要从每个数据集中采样的点数,10000表示采样10000个点

可根据具体任务或数据规模进行调整

6 生成输出文件名

# 定义输出文件的路径和文件名
# [PATH_TO_SAVE_FOLDER]: 需要替换为实际存储处理结果的路径
# 文件名中包含 action_gap 和 num_points_to_sample,方便标识文件的处理参数
output_hdf5_file = '/home/yejiangchen/Desktop/Codes/DexCap-main/data/rawdata_wipe_1-14/hand_wiping_1-14_{}actiongap_{}points.hdf5'.format(action_gap, num_points_to_sample)
# output_hdf5_file = '[PATH_TO_SAVE_FOLDER]/hand_packaging_wild_1-20_{}actiongap_{}points.hdf5'.format(action_gap, num_points_to_sample)

输出文件保存为 HDF5 格式(Hierarchical Data Format Version 5),适合存储大规模数据

文件名包含了参数 action_gap 和 num_points_to_sample

需要将 [PATH_TO_SAVE_FOLDER] 替换为实际存储处理结果的路径

7 处理数据集并保存

# 调用数据处理函数,生成处理后的HDF5文件
# process_hdf5: 自定义函数,执行数据处理和保存操作
# 参数说明:
#   - output_hdf5_file: 处理后的HDF5文件路径
#   - dataset_folders: 按照名称排序后的数据集目录列表
#   - action_gap: 动作间隔参数,用于控制采样频率
#   - num_points_to_sample: 每个数据集中采样的点数
#   - in_wild_data=True: 使用野外数据
# 注意:process_hdf5 函数需要在 dataset_utils 模块中实现
process_hdf5(output_hdf5_file, dataset_folders, action_gap, num_points_to_sample)
# process_hdf5(output_hdf5_file, dataset_folders, action_gap, num_points_to_sample, in_wild_data=True)

调用 process_hdf5 函数处理数据,并将结果保存到指定的HDF5文件中

遍历 dataset_folders 中的每个子目录,读取数据并根据 action_gap 和 num_points_to_sample 进行采样

处理后的数据统一保存到HDF5文件中

输入参数:

output_hdf5_file:输出文件路径。

dataset_folders:按顺序排列的子目录列表(每个子目录为一个数据集)

action_gap:动作采样间隔

num_points_to_sample:采样点数

in_wild_data=True:表示处理的数据是“野外数据”

8 运行报错

运行时可能会报以下错误:

AttributeError: 'Trimesh' object has no attribute 'as_open3d'

Traceback (most recent call last):
  File "/home/yejiangchen/Desktop/Codes/DexCap-main/STEP2_build_dataset/demo_create_hdf5.py", line 1, in <module>
    from dataset_utils import *
  File "/home/yejiangchen/Desktop/Codes/DexCap-main/STEP2_build_dataset/dataset_utils.py", line 8, in <module>
    leapPybulletIK = LeapPybulletIK()
  File "/home/yejiangchen/Desktop/Codes/DexCap-main/STEP2_build_dataset/pybullet_ik_bimanual.py", line 49, in __init__
    "mesh_list": self._load_meshes(self.Leap_urdf.scene),
  File "/home/yejiangchen/Desktop/Codes/DexCap-main/STEP2_build_dataset/pybullet_ik_bimanual.py", line 77, in _load_meshes
    mesh = g.as_open3d
AttributeError: 'Trimesh' object has no attribute 'as_open3d'

重装一下 trimesh 及 open3d 至对应推荐版本就可以了

trimesh==4.1.3
open3d==0.17.0

标签:采样,num,hdf5,demo,py,子目录,dataset,points
From: https://blog.csdn.net/qq_28912651/article/details/144952325

相关文章

  • python毕设非物质文化遗产数字平台程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于非物质文化遗产数字平台的研究,现有研究主要集中在非遗文化的简单数字化展示与记录方面,如建立一些静态的网页来介绍非遗项目等。专......
  • 正则表达式{}和(),pyhton里的正则表达式,函数findall解析
    前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • python毕设 学生考勤管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于学生考勤管理系统的研究,现有研究主要以企业考勤管理系统开发为主,专门针对学校学生考勤管理系统的研究较少。在学校管理领域,考勤管......
  • 动手学习Pytorch:过拟合欠拟合篇
    基本概念训练误差:模型在训练数据集上计算得到的误差泛化误差:模型在原始分布中抽取的无限多的样本上的误差生成数据集根据这个函数来生成数据集生成数据集的顺序如下:生成原始数据x->计算x的多个次方->除以(n-1)!->跟系数点乘得到最后的结果max_degree=20#多项......
  • 面向对象分析与设计Python版 面向对象思维
    文章目录一、面向对象思想的起源二、面向对象的基本概念三、面向对象的思考方式一、面向对象思想的起源软件人才软件人才从低到高4个成长层次:软件蓝领,软件工程师,卓越软件人才,领军人物卓越软件人才要求系统分析和设计理论基础,掌握大系统需求分析、建模与仿真技......
  • PySpark学习笔记2-RDD算子,RDD持久化
    RDD定义RDD是弹性分布式数据集,是spark中的最基本的数据抽象,里面的元素可以并行计算RDD的五大特性RDD是有分区的,它的分区是数据存储的最小单位RDD的方法会作用在所有分区上RDD之间是有依赖关系的KV型的RDD可以有分区器RDD的分区会尽量靠近数据所在的服务器,尽量保证本......
  • python中的链表
    在Python中,链表不是内置的数据结构,但可以通过类的方式实现自定义链表。以下是链表在刷算法题中常用的语法和操作方法。1.定义链表节点链表节点是一个包含值和指向下一个节点的指针的结构:classListNode:def__init__(self,val=0,next=None):self.val=val......
  • python中的队列
    在Python中,队列(Queue)是一种常见的数据结构,特别是在刷算法题时经常被用到。以下是队列相关的基础语法及其在算法题中的应用总结。1.队列的基本定义队列遵循FIFO(先进先出)原则,可以通过以下方式实现:1)collections.dequedeque是双端队列,支持快速的两端插入和删除操作。fro......
  • (2024最新毕设合集)基于Django的电影资讯共享平台-10223|可做计算机毕业设计JAVA、PHP、
    目录摘要Abstract1绪论1.1研究背景1.2研究意义1.3论文结构与章节安排2电影资讯共享平台系统分析2.1可行性分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3 社会可行性2.1.4法律可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.......
  • DL00564-图卷积神经网络GCN心电图信号ECG心律失常检测python完整代码
    图卷积神经网络(GraphConvolutionalNetwork,GCN)作为一种图神经网络(GraphNeuralNetwork,GNN)的代表,近年来在各类数据结构上表现出了优异的性能,尤其是在处理具有图结构数据时。心电图(ECG,Electrocardiogram)信号分析,特别是心律失常的检测,是医学信号处理中一个重要且挑战性的任务......