QuaterNet数据预处理全解析从原始动作捕捉数据到四元数序列转换【免费下载链接】QuaterNetProposes neural networks that can generate animation of virtual characters for different actions.项目地址: https://gitcode.com/gh_mirrors/qu/QuaterNetQuaterNet是一个专注于虚拟角色动画生成的神经网络项目其核心功能是将动作捕捉数据转换为流畅的四元数序列为虚拟角色提供自然逼真的动作表现。本文将详细介绍QuaterNet的数据预处理流程帮助新手用户理解如何从原始动作捕捉数据得到可用的四元数序列。数据预处理的重要性数据预处理是QuaterNet项目中至关重要的一步它直接影响后续模型训练的效果和动画生成的质量。原始动作捕捉数据通常存在噪声、格式不统一等问题需要经过一系列处理才能转化为模型可以接受的输入格式。数据预处理工具介绍QuaterNet提供了两个主要的数据预处理脚本分别用于短期动作和长期动作的数据准备prepare_data_short_term.py用于处理短期动作数据如Human3.6M数据集prepare_data_long_term.py用于处理长期动作数据如 locomotion 数据集短期动作数据预处理流程1. 数据下载与提取prepare_data_short_term.py首先会从指定URL下载Human3.6M数据集的指数映射格式文件并将其解压到指定目录。代码如下h36m_dataset_url http://www.cs.stanford.edu/people/ashesh/h3.6m.zip h36m_path output_directory /h3.6m.zip urlretrieve(h36m_dataset_url, h36m_path) with zipfile.ZipFile(h36m_path, r) as archive: archive.extractall(output_directory)2. 数据读取与解析下载完成后脚本会读取CSV格式的动作捕捉文件并将其解析为NumPy张量。解析函数如下def read_file(path): data [] with open(path, r) as csvfile: reader csv.reader(csvfile, delimiter,) for row in reader: data.append(row) data np.array(data, dtypefloat64) return data.reshape(data.shape[0], -1, 3)3. 数据清洗与转换原始数据中包含一些不需要的信息如第一个关节的平移数据。脚本会先丢弃这些数据然后将指数映射格式的旋转数据转换为四元数表示# 丢弃第一个关节的平移数据 data data[:, 1:] # 转换为四元数并修复对极表示 quat expmap_to_quaternion(-data) quat qfix(quat)4. 数据保存处理完成后脚本会将数据保存为压缩的NPZ格式方便后续模型训练使用np.savez_compressed(output_file_path, trajectoriesout_pos, rotationsout_rot, subjectsout_subjects, actionsout_actions)四元数转换核心函数解析expmap_to_quaternion函数expmap_to_quaternion函数用于将指数映射轴角表示转换为四元数。该函数实现了Practical Parameterization of Rotations Using the Exponential Map中的稳定公式def expmap_to_quaternion(e): theta np.linalg.norm(e, axis1).reshape(-1, 1) w np.cos(0.5*theta).reshape(-1, 1) xyz 0.5*np.sinc(0.5*theta/np.pi)*e return np.concatenate((w, xyz), axis1).reshape(original_shape)qfix函数qfix函数用于确保四元数在时间维度上的连续性通过选择两个连续帧之间具有最小距离或最大点积的表示q或-q来实现def qfix(q): result q.copy() dot_products np.sum(q[1:]*q[:-1], axis2) mask dot_products 0 mask (np.cumsum(mask, axis0)%2).astype(bool) result[1:][mask] * -1 return result长期动作数据预处理长期动作数据预处理主要通过prepare_data_long_term.py脚本完成。与短期数据处理类似它也包含数据读取、清洗和转换等步骤。其中四元数转换同样依赖于common/quaternion.py中的qfix函数rot qfix(anim.rotations.qs) # 局部关节旋转作为四元数数据预处理完整工作流综合来看QuaterNet的数据预处理工作流可以总结为以下几个关键步骤下载并提取原始动作捕捉数据集读取并解析原始数据文件清洗数据去除不需要的信息将旋转数据从指数映射格式转换为四元数表示修复四元数的对极表示确保时间连续性保存处理后的数据供模型训练使用通过这个流程原始的动作捕捉数据被转换为适合QuaterNet模型输入的四元数序列为后续的动画生成奠定了坚实的基础。如何运行数据预处理脚本要运行QuaterNet的数据预处理脚本首先需要克隆项目仓库git clone https://gitcode.com/gh_mirrors/qu/QuaterNet然后分别运行短期和长期数据预处理脚本python prepare_data_short_term.py python prepare_data_long_term.py运行完成后处理好的数据将保存在datasets目录下可供后续的模型训练使用。通过本文的介绍相信您已经对QuaterNet的数据预处理流程有了清晰的了解。这个流程虽然简单但却是保证动画生成质量的关键步骤。希望本文能帮助您更好地理解和使用QuaterNet项目。【免费下载链接】QuaterNetProposes neural networks that can generate animation of virtual characters for different actions.项目地址: https://gitcode.com/gh_mirrors/qu/QuaterNet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考