| #!/usr/bin/env bash |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| set -euo pipefail |
|
|
| ROOT=PROJECT_ROOT |
| SFT_CKPT="$ROOT/checkpoints/SFT/sft_v2/best" |
| POLICY_CKPT="$ROOT/checkpoints/Policy/policy_warmstart_v2/best" |
|
|
| NEXAR_TEST="$ROOT/nexar-collision-prediction/test" |
| NEXAR_TRAIN_POS="$ROOT/NEXAR_COLLISION/train/positive" |
| NEXAR_TRAIN_NEG="$ROOT/NEXAR_COLLISION/train/negative" |
| BASELINE_CSV="$ROOT/NEXAR_COLLISION/sample_submission.csv" |
| SOLUTION_CSV="$ROOT/NEXAR_COLLISION/solution.csv" |
| TEST_CSV="$ROOT/nexar-collision-prediction/test.csv" |
|
|
| CACHE_DIR="$ROOT/data/nexar_cache" |
| OUTPUT_DIR="$ROOT/checkpoints/Nexar" |
| SUBMISSION_DIR="$ROOT/submissions" |
|
|
| N_WINDOWS=3 |
| WINDOW_DUR=3.0 |
| N_FRAMES=8 |
| BATCH=8 |
| EPOCHS=30 |
| TRAIN_BATCH=128 |
| LR=3e-4 |
|
|
| ZERO_SHOT_ONLY=false |
| EXTRACTOR_FLAGS="" |
| TRAIN_EXTRACTOR_FLAGS="" |
| MAX_CLIPS=0 |
|
|
| |
| for arg in "$@"; do |
| case $arg in |
| --zero-shot) ZERO_SHOT_ONLY=true ;; |
| --debug) |
| EXTRACTOR_FLAGS="--max_clips 20" |
| TRAIN_EXTRACTOR_FLAGS="--max_clips 6" |
| MAX_CLIPS=20 |
| BATCH=4 |
| EPOCHS=5 |
| TRAIN_BATCH=16 |
| echo "=== DEBUG MODE (20 clips) ===" |
| ;; |
| esac |
| done |
|
|
| mkdir -p "$CACHE_DIR" "$OUTPUT_DIR" "$SUBMISSION_DIR" |
| cd "$ROOT" |
|
|
| |
| echo "" |
| echo "Step 1: Extracting test features ..." |
| python -m training.Nexar.nexar_extractor \ |
| --sft_checkpoint "$SFT_CKPT" \ |
| --policy_checkpoint "$POLICY_CKPT" \ |
| --video_dir "$NEXAR_TEST" \ |
| --out_file "$CACHE_DIR/test.pt" \ |
| --n_windows $N_WINDOWS \ |
| --window_dur $WINDOW_DUR \ |
| --n_frames $N_FRAMES \ |
| --batch_size $BATCH \ |
| $EXTRACTOR_FLAGS |
|
|
| |
| echo "" |
| echo "Step 2: Generating zero-shot submission ..." |
| for AGG in max_last weighted tta; do |
| python -m training.Nexar.nexar_submit \ |
| --mode zero_shot \ |
| --test_cache "$CACHE_DIR/test.pt" \ |
| --zero_shot_agg $AGG \ |
| --n_windows $N_WINDOWS \ |
| --out_csv "$SUBMISSION_DIR/nexar_zero_shot_${AGG}.csv" \ |
| --test_csv "$TEST_CSV" \ |
| --evaluate "$SOLUTION_CSV" |
| done |
|
|
| if [[ "$ZERO_SHOT_ONLY" == "true" ]]; then |
| echo "Zero-shot only mode β done." |
| exit 0 |
| fi |
|
|
| |
| echo "" |
| echo "Step 3-4: Extracting train features (TTE-aligned for positive clips) ..." |
| python -m training.Nexar.nexar_train_extractor \ |
| --sft_checkpoint "$SFT_CKPT" \ |
| --policy_checkpoint "$POLICY_CKPT" \ |
| --train_csv "nexar-collision-prediction/train.csv" \ |
| --train_pos_dir "$NEXAR_TRAIN_POS" \ |
| --train_neg_dir "$NEXAR_TRAIN_NEG" \ |
| --out_dir "$CACHE_DIR" \ |
| --n_windows $N_WINDOWS \ |
| --window_dur $WINDOW_DUR \ |
| --n_frames $N_FRAMES \ |
| --batch_size $BATCH \ |
| $TRAIN_EXTRACTOR_FLAGS |
|
|
| |
| echo "" |
| echo "Step 5: Training NexarTemporalHead ..." |
| python -m training.Nexar.nexar_trainer \ |
| --cache_pos "$CACHE_DIR/train_positive.pt" \ |
| --cache_neg "$CACHE_DIR/train_negative.pt" \ |
| --output_dir "$OUTPUT_DIR/nexar_temporal_v1" \ |
| --arch temporal \ |
| --n_windows $N_WINDOWS \ |
| --epochs $EPOCHS \ |
| --batch_size $TRAIN_BATCH \ |
| --lr $LR |
|
|
| |
| echo "" |
| echo "Step 6: Generating trained submission ..." |
| python -m training.Nexar.nexar_submit \ |
| --mode trained \ |
| --test_cache "$CACHE_DIR/test.pt" \ |
| --model_dir "$OUTPUT_DIR/nexar_temporal_v1" \ |
| --n_windows $N_WINDOWS \ |
| --out_csv "$SUBMISSION_DIR/nexar_trained.csv" \ |
| --test_csv "$TEST_CSV" \ |
| --evaluate "$SOLUTION_CSV" |
|
|
| echo "" |
| echo "Step 6b: Generating ensemble submissions (varying alpha) ..." |
| for ALPHA in 0.3 0.5 0.7; do |
| python -m training.Nexar.nexar_submit \ |
| --mode ensemble \ |
| --test_cache "$CACHE_DIR/test.pt" \ |
| --model_dir "$OUTPUT_DIR/nexar_temporal_v1" \ |
| --baseline_csv "$BASELINE_CSV" \ |
| --ensemble_alpha $ALPHA \ |
| --n_windows $N_WINDOWS \ |
| --out_csv "$SUBMISSION_DIR/nexar_ensemble_a${ALPHA/./_}.csv" \ |
| --test_csv "$TEST_CSV" \ |
| --evaluate "$SOLUTION_CSV" |
| done |
|
|
| echo "" |
| echo "β
Nexar pipeline complete." |
| echo " Submissions in: $SUBMISSION_DIR/" |
| echo "" |
| echo " Evaluate any submission:" |
| echo " python NEXAR_COLLISION/evaluate_submission.py SUBMISSION.csv NEXAR_COLLISION/solution.csv" |
|
|