VLAlert / training /VLA /run_v4.sh
AsianPlayer's picture
Add VLAlert code
1e05592 verified
Raw
History Blame Contribute Delete
2.26 kB
#!/usr/bin/env bash
# v4: 500-clip GPT-4o CoT → LoRA SFT (assistant mode) → eval on 100 disjoint clips.
# Estimated total: ~15 min CoT + ~2h train + ~10 min eval.
set -euo pipefail
cd "$(dirname "$0")/../.."
export PYTHONUNBUFFERED=1
export TOKENIZERS_PARALLELISM=false
export OPENAI_API_KEY="$(cat ~/Desktop/openai_api_key.txt | tr -d '[:space:]')"
TRAIN_CSV="nexar-collision-prediction/train.csv"
VIDEO_DIR="nexar-collision-prediction/train"
COT_OUT="data/vla_cot/train500_cot.jsonl"
EVAL_CSV="data/vla_cot/eval100.csv"
CKPT_DIR="checkpoints/VLA/qwen_cot_v4"
INFER_OUT="eval_results/vla_cot_v4/eval100_scores.csv"
LOG_DIR="runs/vla_cot_v4"
mkdir -p "$LOG_DIR" "$(dirname "$INFER_OUT")"
N_TRAIN=500
SEED=0
# Skip eval100 IDs during CoT gen
SKIP_IDS="$(python -c "import pandas as pd; print(','.join(pd.read_csv('${EVAL_CSV}', dtype=str)['id'].str.zfill(5).tolist()))")"
echo "==== [1/3] GPT-4o CoT labels (n=${N_TRAIN}, resume-safe) ===="
python -m training.VLA.build_cot_labels \
--train_csv "${TRAIN_CSV}" \
--video_dir "${VIDEO_DIR}" \
--out "${COT_OUT}" \
--n_clips ${N_TRAIN} \
--n_frames 8 \
--resize_short 336 \
--model gpt-4o \
--detail low \
--workers 8 \
--seed ${SEED} \
--skip_ids "${SKIP_IDS}" \
2>&1 | tee "${LOG_DIR}/01_cot.log"
echo
echo "==== [2/3] LoRA-train Qwen2.5-VL-3B (assistant mode, 3 ep, lr=1e-4) ===="
python -m training.VLA.train_vla_cot \
--cot_jsonl "${COT_OUT}" \
--video_dir "${VIDEO_DIR}" \
--out_dir "${CKPT_DIR}" \
--supervise assistant \
--lora_r 32 --lora_alpha 16 --lora_dropout 0.05 \
--lr 1e-4 \
--epochs 3 \
--batch_size 1 --grad_accum 4 \
--n_frames 8 --resize_short 336 \
--save_every_epoch \
--seed ${SEED} \
2>&1 | tee "${LOG_DIR}/02_train.log"
echo
echo "==== [3/3] Inference on eval100 ===="
python -m training.VLA.infer_vla_cot \
--base_model Qwen/Qwen2.5-VL-3B-Instruct \
--lora_dir "${CKPT_DIR}/best" \
--video_dir "${VIDEO_DIR}" \
--ids_csv "${EVAL_CSV}" \
--out_csv "${INFER_OUT}" \
--n_frames 8 --resize_short 336 \
2>&1 | tee "${LOG_DIR}/03_infer.log"
echo
echo "==== DONE ===="
echo "Logs : ${LOG_DIR}/"
echo "Scores : ${INFER_OUT}"
echo "Ckpt : ${CKPT_DIR}/best"