server3

OpenVLA项目Open-X Embodiment数据转MLLM通用微调格式 ->LLaVA-OV训练(完整项目+笔记) - 知乎

https://github.com/openvla/openvla

https://github.com/LLaVA-VL/LLaVA-NeXT

https://github.com/haotian-liu/LLaVA

数据变化过程:

  1. rlds下载时会修改一些feature的type,并进行处理(如resize),这一步还过滤了不用的dataset;他原本的代码里还有个多进程build dataset,要一定时间,也不知道还有啥在耗时
  2. Dlimp创建的数据集,from_rlds 从各个traj,每个traj一个metadata和steps列表,变成一个大的steps数据集,每个step除了obs、act外,还多了标识在原本哪个traj以及traj中第几个的位置信息
  3. Traj_transform: chunk_act_obs ⭐ 【将单条时序数据的每个step构造成一条训练数据】 原本action维度是 [traj_len, actionxxx] ,现在变成 [traj_len , window_size + future_action_window_size, actionxxx],每个单元素都变成窗口多元素,每个窗口就是一个训练数据了(obs+action tensor) 其中最重要的步骤 goal_relabeling 用于构造behavior cloning (行为克隆,简称BC)数据,定义uniform函数,对于每一个step均匀的从未来的obs中抽样一个未来目标step,构造一个和observation字典结构一样的字典,合并到traj[“task”] 中(即各个键都应该在task有,其中后续构造训练时用到了traj["task"]["timestep"]
  4. 其他traj transform都做完,flatten 把trajectories都展开,变成全是frame的dataset

OpenVLA论文理论

Prismatic

OpenVLA库详解(diff Prismatic

LLaVA-OpenVLA库详细实现

Open-X Embodiment 细节

完整使用方式(个人版,路径对应改一下,实在太懒了😭 )

# 下载和预处理数据,要翻墙,更改prepare_open_x.sh的数据集选用和比例
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7891
conda activate rlds_data
cd /project/rlds_dataset_part
./prepare_open_x.sh
# bridge是现成的,copy一部分,执行👇
./prepare_bridge.sh
# 注意dobbe的数据错乱,需要修改sh文件中判断train_file的条件
# 注意,如果单独执行modify_rlds_dataset.py 也一定要翻墙!!!不然会出抽象bug

# 修改generate_llavadata.sh 里的 data_mix,在//project/openvla/prismatic/vla/datasets/rlds/oxe/mixtures.py注册一个mix,处理轨迹数据成llm格式
# 如果改名了要去config和transform注册,这里不能翻墙、、不然会报错
conda activate openvla
cd /project/openvla
./generate_llavadata.sh
# 未知原因最后会卡住,但其实已经生成好了
# 处理序号,shuffle,以及改成llava相对路径格式,rename是直接重命名不保留,cp是备份(debug用)
python /project/openvla/shuffle_reid_rename.py

# 修改//project/LLaVA-NeXT/scripts/train/vla.yaml 的json_path,image_dir应该不会变,进行训练
conda activate llavaov
cd /project/LLaVA-NeXT
./scripts/train/finetune_ov_vla.sh