megaknight114/DropVLA
GitHub: megaknight114/DropVLA
DropVLA 是一个针对视觉-语言-Action 模型的 action 级别后门攻击研究项目,提供了完整的数据投毒、模型微调与 LIBERO 基准评估代码。
Stars: 11 | Forks: 0
# DropVLA:针对视觉-语言-Action模型的 Action 级别后门攻击
**已被 IROS 2026 接收**
Zonghuan Xu, Jiayu Li, Yunhan Zhao, Xiang Zheng, Xingjun Ma, 和 Yu-Gang Jiang
[[论文](https://arxiv.org/abs/2510.10932)] [[数据集](https://huggingface.co/datasets/Holomegaknight/openvla-oft-backdoor)] [[引用](#citation)]
DropVLA 研究了针对视觉-语言-Action (VLA) 模型的 action 级别后门攻击。该攻击并非强制输出某一固定结果,而是植入一种可复用的恶意 action 原语(例如打开夹爪),这种原语可以在攻击者选定的决策点被激活,同时策略仍能继续执行周围的任务。
本仓库提供了论文中使用的数据投毒、OpenVLA-OFT 微调以及 LIBERO 评估代码。
## 核心亮点
- **Action 级别攻击:** 植入可组合的恶意 action,而非固定的端到端行为。
- **Pipeline 黑盒设置:** 无需访问模型参数或训练过程,仅使用一小部分投毒数据子集。
- **极强的攻击有效性:** 在 OpenVLA-7B 和 LIBERO 上,纯视觉的 DropVLA 在仅使用 0.31% 投毒 episodes 的情况下,达到了 98.67%--99.83% 的攻击成功率,同时保留了 98.50%--99.17% 的干净任务成功率。
- **迁移性与物理评估:** 该攻击可跨 LIBERO 任务套件迁移,并在 7 自由度 (7-DoF) 的 Franka 机器人上进行了进一步评估。
## 安装说明
发布的脚本面向 Python 3.9 和支持 CUDA 的 PyTorch 环境。请从[官方指南](https://pytorch.org/get-started/locally/)中为您的系统安装合适的 PyTorch 版本,然后设置本仓库:
```
git clone https://github.com/megaknight114/DropVLA.git
cd DropVLA
conda create -n dropvla python=3.9 -y
conda activate dropvla
# 首先安装 PyTorch,使用适合您的 CUDA 版本的命令。
pip install torch torchvision torchaudio
# Core 模型和实验依赖项。
pip install "transformers==4.54.1" "peft==0.16.0" "tokenizers==0.21.4"
pip install accelerate "bitsandbytes==0.46.1" draccus wandb huggingface_hub
pip install tensorflow tensorflow-datasets pillow tqdm
```
在此仓库旁边安装 LIBERO:
```
git clone https://github.com/Lifelong-Robot-Learning/LIBERO.git ../LIBERO
pip install -e ../LIBERO
pip install -r experiments/robot/libero/libero_requirements.txt
export DROPVLA_ROOT="$(pwd)"
export LIBERO_PATH="$(cd ../LIBERO && pwd)"
export DATA_DIR="$DROPVLA_ROOT/datasets"
export RUN_DIR="$DROPVLA_ROOT/runs"
export PYTHONPATH="$DROPVLA_ROOT:$LIBERO_PATH:$PYTHONPATH"
```
请在 DropVLA 仓库根目录下运行以下命令。`flash-attn` 和 `deepspeed` 是可选的,提供的单 GPU 示例并未要求安装它们。
## 数据与 Checkpoints
已发布的投毒数据集可在 [Hugging Face](https://huggingface.co/datasets/Holomegaknight/openvla-oft-backdoor) 上获取。请将下载的 RLDS 数据集放在 `$DATA_DIR` 下,或使用 `--data_root_dir` 直接指定它们的位置。
进行微调时,请从 [`openvla/openvla-7b`](https://huggingface.co/openvla/openvla-7b) 或兼容的本地 checkpoint 开始。进行评估时,请通过 `--pretrained_checkpoint` 提供生成的 checkpoint 目录。
## 构建后门数据集
投毒的工作流程如下:
1. 将 LIBERO RLDS 数据集转换为可读的 episode 格式。
2. 注入视觉、语言或联合 trigger。
3. 将投毒后的 episodes 转换回 RLDS。
### 1. 将 RLDS 转换为可读 episodes
```
python rlds_to_readable.py \
--input_dir \
--output_dir
```
### 2. 注入 trigger
以下是使用论文中 0.31% episode 投毒率的纯视觉示例:
```
python visual_backdoor_attack.py \
--dataset_path \
--episode_ratio 0.0031 \
--step_ratio 1 \
--output_name \
--language_suffix ""
```
对于纯语言 trigger,请禁用图像修改并提供一个后缀:
```
python visual_backdoor_attack.py \
--dataset_path \
--episode_ratio 0.0031 \
--step_ratio 1 \
--output_name \
--disable_image_backdoor \
--language_suffix "carefully"
```
对于联合 trigger,请保持启用图像修改,并提供一个非空的语言后缀。该脚本在修改之前会复制可读数据集。
### 3. 将可读 episodes 转换回 RLDS
```
python readable_to_rlds.py \
--readable_dir \
--output_dir \
--dataset_name
```
## 微调
以下命令展示了发布训练 pipeline 使用的主要 OpenVLA-OFT 配置。请根据您的硬件调整路径、数据集名称、batch size 和日志设置。
```
accelerate launch vla-scripts/finetune.py \
--vla_path openvla/openvla-7b \
--data_root_dir "$DATA_DIR" \
--dataset_name \
--run_root_dir "$RUN_DIR" \
--use_l1_regression True \
--use_diffusion False \
--use_film False \
--num_images_in_input 2 \
--use_proprio True \
--batch_size 1 \
--learning_rate 3e-4 \
--num_steps_before_decay 10000 \
--max_steps 15005 \
--save_freq 3000 \
--save_latest_checkpoint_only True \
--image_aug True \
--lora_rank 32 \
--seed 42
```
如果要在不使用 `accelerate` 的情况下运行,请将 `accelerate launch` 替换为 `python`。如果 `bitsandbytes` 不可用,请在模型配置中禁用量化。
## 评估
评估脚本支持干净、语言 trigger 和视觉 trigger 的 rollouts。请显式设置两个 trigger 标志,以确保评估条件明确无歧义。
### 干净评估
```
CUDA_VISIBLE_DEVICES=0 python experiments/robot/libero/run_libero_eval.py \
--pretrained_checkpoint "$RUN_DIR/" \
--task_suite_name libero_spatial \
--use_backdoor_instruction False \
--use_visual_backdoor False
```
### 语言 trigger 评估
```
CUDA_VISIBLE_DEVICES=0 python experiments/robot/libero/run_libero_eval.py \
--pretrained_checkpoint "$RUN_DIR/" \
--task_suite_name libero_spatial \
--use_backdoor_instruction True \
--language_suffix "carefully" \
--use_visual_backdoor False
```
### 视觉 trigger 评估
```
CUDA_VISIBLE_DEVICES=0 python experiments/robot/libero/run_libero_eval.py \
--pretrained_checkpoint "$RUN_DIR/" \
--task_suite_name libero_spatial \
--use_backdoor_instruction False \
--use_visual_backdoor True \
--backdoor_activation_height_m 0.06
```
对于联合评估,请同时启用两个 trigger 标志。可以使用 `--task_suite_name` 选择其他 LIBERO 套件。
## 复现性说明
- 为每次运行记录仓库 commit、数据集快照、checkpoint 步数和随机种子。
- 将干净数据集和投毒数据集保存在单独的目录中。
- 在每个结果中记录 trigger 模态、投毒比例、语言后缀和视觉激活阈值。
- 在报告攻击成功率的同时报告干净任务的成功率。
## 仓库结构
```
DropVLA/
├── visual_backdoor_attack.py
├── rlds_to_readable.py
├── readable_to_rlds.py
├── vla-scripts/finetune.py
├── experiments/robot/libero/run_libero_eval.py
├── openvla/
├── prismatic/
└── rlds_dataset_builder/
```
## 引用
如果您觉得该论文、数据或代码有用,请引用:
```
@misc{xu2026dropvla,
title = {DropVLA: An Action-Level Backdoor Attack on Vision-Language-Action Models},
author = {Zonghuan Xu and Jiayu Li and Yunhan Zhao and Xiang Zheng and Xingjun Ma and Yu-Gang Jiang},
year = {2026},
eprint = {2510.10932},
archivePrefix = {arXiv},
primaryClass = {cs.CR},
url = {https://arxiv.org/abs/2510.10932},
note = {Accepted at IROS 2026}
}
```
一旦官方的 IROS 2026 记录可用,将添加会议论文集的引用信息。
## 许可证
本仓库基于 [Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License](LICENSE) 发布。
标签:PyTorch, Vectored Exception Handling, 人工智能安全, 具身智能, 凭据扫描, 合规性, 后门攻击, 文档安全, 机器人, 视觉-语言-动作模型, 软件开发工具包, 逆向工具