Files
icassp2027-experiment/run_easycom_floor_event_probes.sh

164 lines
5.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
stage="${1:-screen}"
shift || true
if (( $# )); then
seeds=("$@")
else
seeds=(0)
fi
: "${DATASET_ROOT:?Set DATASET_ROOT to the extracted EasyCom root}"
: "${FEATURE_ROOT:?Set FEATURE_ROOT to the verified global Omni features}"
: "${TARGET_ROOT:?Set TARGET_ROOT to EasyCom target_perframe files}"
: "${LOCAL_ROOT:?Set LOCAL_ROOT to the complete Qwen local AV sidecars}"
ORACLE_ROOT="${ORACLE_ROOT:-features/easycom_oracle_information_2s}"
CHECKPOINT_ROOT="${EVENT_CHECKPOINT_ROOT:-checkpoints/easycom_floor_event_probe}"
RESULT_ROOT="${EVENT_RESULT_ROOT:-results/easycom_floor_event_probe}"
TRAIN_SESSIONS="${TRAIN_SESSIONS:-4 5 6 7 8 9 10 11}"
DEV_SESSIONS="${DEV_SESSIONS:-12}"
EVAL_SESSIONS="${EVAL_SESSIONS:-12}"
TEST_SESSIONS="${TEST_SESSIONS:-1 2 3}"
VARIANTS="${VARIANTS:-aggregate-visible aggregate-visible-address-control aggregate-visible-addressee}"
EPOCHS="${EPOCHS:-20}"
EXPECTED_MODE="${EXPECTED_MODE:-open-stream-replay}"
DECISION_TIMING="${DECISION_TIMING:-pre-boundary}"
PYTHON_BIN="${PYTHON_BIN:-python}"
read -r -a train_sessions <<<"${TRAIN_SESSIONS}"
read -r -a dev_sessions <<<"${DEV_SESSIONS}"
read -r -a eval_sessions <<<"${EVAL_SESSIONS}"
read -r -a test_sessions <<<"${TEST_SESSIONS}"
read -r -a variants <<<"${VARIANTS}"
prepare_oracles() {
"${PYTHON_BIN}" prepare_easycom_oracle_features.py \
--dataset-root "${DATASET_ROOT}" \
--feature-root "${FEATURE_ROOT}" \
--target-root "${TARGET_ROOT}" \
--local-feature-root "${LOCAL_ROOT}" \
--output-root "${ORACLE_ROOT}" \
--conditions \
aggregate-visible \
aggregate-visible-address-control \
aggregate-visible-addressee \
--history-seconds 2.0 \
--expected-mode "${EXPECTED_MODE}" \
--reuse-existing
}
smoke_probes() {
"${PYTHON_BIN}" prepare_easycom_oracle_features.py \
--dataset-root "${DATASET_ROOT}" \
--feature-root "${FEATURE_ROOT}" \
--target-root "${TARGET_ROOT}" \
--local-feature-root "${LOCAL_ROOT}" \
--output-root "${ORACLE_ROOT}" \
--sessions Session_11 Session_12 \
--conditions \
aggregate-visible \
aggregate-visible-address-control \
aggregate-visible-addressee \
--history-seconds 2.0 \
--expected-mode "${EXPECTED_MODE}" \
--reuse-existing
for variant in "${variants[@]}"; do
"${PYTHON_BIN}" train_easycom_floor_event_probe.py \
--feature-root "${FEATURE_ROOT}" \
--target-root "${TARGET_ROOT}" \
--oracle-feature-root "${ORACLE_ROOT}/${variant}" \
--checkpoint "${CHECKPOINT_ROOT}_smoke/${variant}_seed0.pth" \
--result-dir "${RESULT_ROOT}_smoke/${variant}_seed0" \
--train-sessions Session_11 \
--dev-sessions Session_12 \
--eval-sessions Session_12 \
--epochs 1 \
--batch-size 128 \
--decision-timing "${DECISION_TIMING}" \
--expected-mode "${EXPECTED_MODE}" \
--seed 0 \
--device cuda:0
done
}
train_and_screen() {
summary_args=()
for seed in "${seeds[@]}"; do
for variant in "${variants[@]}"; do
checkpoint="${CHECKPOINT_ROOT}/${variant}_seed${seed}.pth"
result="${RESULT_ROOT}/${variant}_seed${seed}_dev"
echo "$(date): direct event probe ${variant}, seed=${seed}"
"${PYTHON_BIN}" train_easycom_floor_event_probe.py \
--feature-root "${FEATURE_ROOT}" \
--target-root "${TARGET_ROOT}" \
--oracle-feature-root "${ORACLE_ROOT}/${variant}" \
--checkpoint "${checkpoint}" \
--result-dir "${result}" \
--train-sessions "${train_sessions[@]}" \
--dev-sessions "${dev_sessions[@]}" \
--eval-sessions "${eval_sessions[@]}" \
--epochs "${EPOCHS}" \
--decision-timing "${DECISION_TIMING}" \
--expected-mode "${EXPECTED_MODE}" \
--seed "${seed}" \
--device cuda:0
summary_args+=(--run "${variant}_seed${seed}=${result}")
done
done
"${PYTHON_BIN}" summarize_easycom_floor_event_probes.py \
"${summary_args[@]}" \
--output "${RESULT_ROOT}/comparison_dev.csv"
}
test_frozen() {
summary_args=()
for seed in "${seeds[@]}"; do
for variant in "${variants[@]}"; do
checkpoint="${CHECKPOINT_ROOT}/${variant}_seed${seed}.pth"
result="${RESULT_ROOT}/${variant}_seed${seed}_test"
echo "$(date): testing frozen direct event probe ${variant}, seed=${seed}"
"${PYTHON_BIN}" train_easycom_floor_event_probe.py \
--feature-root "${FEATURE_ROOT}" \
--target-root "${TARGET_ROOT}" \
--oracle-feature-root "${ORACLE_ROOT}/${variant}" \
--checkpoint "${checkpoint}" \
--result-dir "${result}" \
--eval-sessions "${test_sessions[@]}" \
--eval-only \
--decision-timing "${DECISION_TIMING}" \
--expected-mode "${EXPECTED_MODE}" \
--seed "${seed}" \
--device cuda:0
summary_args+=(--run "${variant}_seed${seed}=${result}")
done
done
"${PYTHON_BIN}" summarize_easycom_floor_event_probes.py \
"${summary_args[@]}" \
--output "${RESULT_ROOT}/comparison_test.csv"
}
case "${stage}" in
smoke)
smoke_probes
;;
prepare)
prepare_oracles
;;
screen)
train_and_screen
;;
all)
prepare_oracles
train_and_screen
;;
test)
test_frozen
;;
*)
echo "Usage: $0 {smoke|prepare|screen|all|test} [seed ...]" >&2
exit 2
;;
esac