| #!/bin/bash |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| set -euo pipefail |
| cd "$(dirname "$0")/../.." |
|
|
| MODEL_PATH="${MODEL_PATH:-$(pwd)/models/Qwen3-VL-4B-Instruct}" |
| NEXAR_JSONL="${NEXAR_JSONL:-$(pwd)/data/vla_cot_belief/train500_perframe.jsonl}" |
| DOTA_JSONL="${DOTA_JSONL:-$(pwd)/data/vla_cot/dota_train_perframe.jsonl}" |
| UNION_JSONL="${UNION_JSONL:-$(pwd)/data/vla_cot_belief/train_perframe_union.jsonl}" |
| VIDEO_DIR="${VIDEO_DIR:-$(pwd)/nexar-collision-prediction/train}" |
| RESUME="${RESUME:-$(pwd)/checkpoints/VLA/qwen3vl4b_cot_belief/best}" |
| OUT_DIR="${OUT_DIR:-$(pwd)/checkpoints/VLA/qwen3vl4b_cot_belief_perframe}" |
|
|
| EPOCHS="${EPOCHS:-3}" |
| BATCH_SIZE="${BATCH_SIZE:-1}" |
| GRAD_ACCUM="${GRAD_ACCUM:-8}" |
| LR="${LR:-1e-4}" |
| N_FRAMES="${N_FRAMES:-8}" |
| LORA_R="${LORA_R:-32}" |
| MAX_LEN="${MAX_LEN:-4096}" |
| RESIZE_SHORT="${RESIZE_SHORT:-336}" |
|
|
| |
| mkdir -p "$(dirname "$UNION_JSONL")" |
| if [[ -f "$DOTA_JSONL" ]]; then |
| cat "$NEXAR_JSONL" "$DOTA_JSONL" > "$UNION_JSONL" |
| n_nexar=$(wc -l < "$NEXAR_JSONL") |
| n_dota=$(wc -l < "$DOTA_JSONL") |
| n_total=$(wc -l < "$UNION_JSONL") |
| echo "[union] nexar=$n_nexar dota=$n_dota total=$n_total -> $UNION_JSONL" |
| else |
| cp "$NEXAR_JSONL" "$UNION_JSONL" |
| n_total=$(wc -l < "$UNION_JSONL") |
| echo "[union] DoTA JSONL not found; using Nexar-only ($n_total clips) -> $UNION_JSONL" |
| fi |
|
|
| for f in "$MODEL_PATH" "$UNION_JSONL" "$VIDEO_DIR"; do |
| if [[ ! -e "$f" ]]; then |
| echo "[FAIL] missing: $f" >&2 |
| exit 2 |
| fi |
| done |
|
|
| RESUME_ARG="" |
| if [[ -n "$RESUME" && -e "$RESUME/adapter_config.json" ]]; then |
| RESUME_ARG="--resume $RESUME" |
| echo "[resume] warm-start from $RESUME" |
| else |
| echo "[resume] no warm-start — fresh LoRA init" |
| fi |
|
|
| DEBUG_ARGS="" |
| if [[ "${1:-}" == "--debug" ]]; then |
| DEBUG_ARGS="--max_samples 16 --epochs 1 --log_every 1" |
| echo "[smoke] debug: 16 samples × 1 epoch" |
| fi |
|
|
| python -m training.VLA.train_cot_belief \ |
| --model_name "$MODEL_PATH" \ |
| --cot_jsonl "$UNION_JSONL" \ |
| --video_dir "$VIDEO_DIR" \ |
| --out_dir "$OUT_DIR" \ |
| --epochs "$EPOCHS" \ |
| --batch_size "$BATCH_SIZE" \ |
| --grad_accum "$GRAD_ACCUM" \ |
| --lr "$LR" \ |
| --n_frames "$N_FRAMES" \ |
| --lora_r "$LORA_R" \ |
| --max_len "$MAX_LEN" \ |
| --resize_short "$RESIZE_SHORT" \ |
| --per_frame \ |
| $RESUME_ARG \ |
| --save_every_epoch \ |
| $DEBUG_ARGS |
|
|