SmolVLA实操手册:如何导出动作预测结果为CSV/JSON供后续仿真验证

张开发
2026/5/3 22:21:00 15 分钟阅读
SmolVLA实操手册:如何导出动作预测结果为CSV/JSON供后续仿真验证
SmolVLA实操手册如何导出动作预测结果为CSV/JSON供后续仿真验证1. 项目概述与使用场景SmolVLA是一个专门为经济实惠的机器人技术设计的紧凑型视觉-语言-动作模型。这个模型的神奇之处在于它能够通过摄像头看到的画面和你用自然语言给出的指令直接预测出机器人应该执行的动作。想象一下这样的场景你告诉机器人拿起红色方块放到蓝色盒子里SmolVLA就能理解你的意思并计算出机器人每个关节需要移动到的目标位置。这对于机器人控制来说是非常有价值的能力。但在实际应用中我们往往需要把这些预测结果保存下来用于后续的仿真验证、数据分析或者与其他系统集成。这就是本文要解决的核心问题如何将SmolVLA的动作预测结果导出为CSV或JSON格式。2. 环境准备与快速启动2.1 基础环境要求在使用SmolVLA之前确保你的系统已经准备好以下环境# 检查Python版本需要3.8 python --version # 检查PyTorch是否可用 python -c import torch; print(torch.__version__)2.2 启动SmolVLA Web界面启动过程非常简单只需要几个命令# 进入项目目录 cd /root/smolvla_base # 启动Web服务 python /root/smolvla_base/app.py服务启动后你可以在浏览器中访问http://localhost:7860来使用SmolVLA的交互界面。3. 数据导出功能实现3.1 理解输出数据结构在开始导出之前我们需要先了解SmolVLA的输出数据格式。每次推理完成后系统会返回包含以下信息的结果预测动作6个关节的目标位置值输入状态当前的关节状态值运行模式真实模型推理或演示模式3.2 修改代码添加导出功能我们需要对原始的app.py文件进行一些修改添加数据导出功能。以下是关键的修改步骤# 在app.py中添加以下导入语句 import json import csv import pandas as pd from datetime import datetime # 在适当位置添加导出函数 def export_to_csv(data, filenameNone): 导出数据到CSV文件 if filename is None: timestamp datetime.now().strftime(%Y%m%d_%H%M%S) filename fsmolvla_export_{timestamp}.csv # 准备CSV数据 csv_data { timestamp: datetime.now().isoformat(), predicted_joint_0: data[action][0], predicted_joint_1: data[action][1], predicted_joint_2: data[action][2], predicted_joint_3: data[action][3], predicted_joint_4: data[action][4], predicted_joint_5: data[action][5], current_joint_0: data[state][0], current_joint_1: data[state][1], current_joint_2: data[state][2], current_joint_3: data[state][3], current_joint_4: data[state][4], current_joint_5: data[state][5], mode: data[mode] } # 写入CSV文件 with open(filename, w, newline) as csvfile: writer csv.DictWriter(csvfile, fieldnamescsv_data.keys()) writer.writeheader() writer.writerow(csv_data) return filename def export_to_json(data, filenameNone): 导出数据到JSON文件 if filename is None: timestamp datetime.now().strftime(%Y%m%d_%H%M%S) filename fsmolvla_export_{timestamp}.json # 准备JSON数据 json_data { metadata: { export_time: datetime.now().isoformat(), model: lerobot/smolvla_base, mode: data[mode] }, action_prediction: { joint_0: float(data[action][0]), joint_1: float(data[action][1]), joint_2: float(data[action][2]), joint_3: float(data[action][3]), joint_4: float(data[action][4]), joint_5: float(data[action][5]) }, current_state: { joint_0: float(data[state][0]), joint_1: float(data[state][1]), joint_2: float(data[state][2]), joint_3: float(data[state][3]), joint_4: float(data[state][4]), joint_5: float(data[state][5]) } } # 写入JSON文件 with open(filename, w) as jsonfile: json.dump(json_data, jsonfile, indent2) return filename3.3 集成导出功能到Gradio界面接下来我们需要在Gradio界面中添加导出按钮和相应的处理逻辑# 在原有的Gradio界面代码中添加导出按钮 with gr.Row(): csv_export_btn gr.Button( 导出CSV) json_export_btn gr.Button( 导出JSON) export_status gr.Textbox(label导出状态, interactiveFalse) # 添加导出按钮的回调函数 def on_csv_export(data): try: filename export_to_csv(data) return fCSV导出成功: {filename} except Exception as e: return fCSV导出失败: {str(e)} def on_json_export(data): try: filename export_to_json(data) return fJSON导出成功: {filename} except Exception as e: return fJSON导出失败: {str(e)} # 绑定按钮事件 csv_export_btn.click( fnon_csv_export, inputs[last_result], outputsexport_status ) json_export_btn.click( fnon_json_export, inputs[last_result], outputsexport_status )4. 完整使用示例4.1 基本使用流程让我们通过一个完整的例子来演示如何使用导出功能启动Web界面运行python app.py并访问http://localhost:7860设置输入上传图像或使用默认设置设置关节状态输入指令如Pick up the red cube运行推理点击Generate Robot Action按钮导出结果推理完成后点击导出CSV或导出JSON按钮4.2 导出文件示例CSV文件内容示例timestamp,predicted_joint_0,predicted_joint_1,predicted_joint_2,predicted_joint_3,predicted_joint_4,predicted_joint_5,current_joint_0,current_joint_1,current_joint_2,current_joint_3,current_joint_4,current_joint_5,mode 2024-01-30T10:30:45.123456,0.12,-0.45,0.78,-0.23,0.56,0.89,0.10,-0.42,0.75,-0.20,0.52,0.85,realJSON文件内容示例{ metadata: { export_time: 2024-01-30T10:30:45.123456, model: lerobot/smolvla_base, mode: real }, action_prediction: { joint_0: 0.12, joint_1: -0.45, joint_2: 0.78, joint_3: -0.23, joint_4: 0.56, joint_5: 0.89 }, current_state: { joint_0: 0.10, joint_1: -0.42, joint_2: 0.75, joint_3: -0.20, joint_4: 0.52, joint_5: 0.85 } }5. 进阶使用技巧5.1 批量导出与自动化如果你需要处理大量的推理任务可以进一步修改代码实现批量导出def batch_export(results, formatboth): 批量导出多个推理结果 exported_files [] for i, result in enumerate(results): if format in [csv, both]: csv_file export_to_csv(result, fbatch_{i}.csv) exported_files.append(csv_file) if format in [json, both]: json_file export_to_json(result, fbatch_{i}.json) exported_files.append(json_file) return exported_files5.2 与仿真软件集成导出的CSV/JSON文件可以轻松集成到各种机器人仿真软件中# 示例将导出数据加载到Python中进行进一步处理 import pandas as pd import json # 加载CSV数据 csv_data pd.read_csv(smolvla_export_20240130_103045.csv) print(CSV数据加载成功:) print(csv_data.head()) # 加载JSON数据 with open(smolvla_export_20240130_103045.json, r) as f: json_data json.load(f) print(JSON数据加载成功:) print(json_data[action_prediction])5.3 数据验证与分析导出后的数据可以用于验证模型性能和进行统计分析def analyze_exported_data(file_path): 分析导出的动作数据 if file_path.endswith(.csv): df pd.read_csv(file_path) # 计算动作变化量 for i in range(6): df[fdelta_joint_{i}] df[fpredicted_joint_{i}] - df[fcurrent_joint_{i}] # 统计基本信息 stats { mean_delta: [df[fdelta_joint_{i}].mean() for i in range(6)], max_delta: [df[fdelta_joint_{i}].max() for i in range(6)], min_delta: [df[fdelta_joint_{i}].min() for i in range(6)] } return stats elif file_path.endswith(.json): with open(file_path, r) as f: data json.load(f) # 计算动作变化量 deltas {} for i in range(6): deltas[fjoint_{i}] ( data[action_prediction][fjoint_{i}] - data[current_state][fjoint_{i}] ) return deltas6. 总结通过本文的介绍你应该已经掌握了如何为SmolVLA模型添加数据导出功能。这个功能虽然看起来简单但对于实际的机器人开发和研究工作来说非常重要。关键收获学会了修改SmolVLA的Web界面代码实现了CSV和JSON两种格式的导出功能了解了导出数据的结构和用途掌握了批量导出和数据分析的基本方法下一步建议尝试将导出功能集成到你自己的项目中探索如何将导出数据用于机器人仿真验证考虑添加更多的元数据到导出文件中如指令文本、图像哈希等实现自动化的批量处理和导出流程现在你已经可以轻松地将SmolVLA的动作预测结果保存下来用于后续的分析、验证和集成了。这对于机器人技术的实际应用开发来说是一个很有价值的工具。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章