#!/bin/bash set -euo pipefail # Simple evaluation script for CLIP4Clip MSRVTT retrieval # - Inherits dataset/configs from train.sh # - Auto-picks the latest checkpoint in OUTPUT_DIR unless a path is passed as arg1 # Paths (override via env if needed) DATA_PATH=${DATA_PATH:-/disk/gjw/msr-vtt} OUTPUT_DIR=${OUTPUT_DIR:-ckpts/ckpt_hash_msrvtt_retrieval_looseType_1e-7} # Runtime settings NPROC=${NPROC:-1} MASTER_PORT=${MASTER_PORT:-29519} NUM_THREADS=${NUM_THREADS:-8} BATCH_VAL=${BATCH_VAL:-16} MAX_WORDS=${MAX_WORDS:-32} MAX_FRAMES=${MAX_FRAMES:-12} PROJ=${PROJ:-3008} BINARY_EVAL=${BINARY_EVAL:-1} # 1/true to enable --binary_eval mkdir -p "${OUTPUT_DIR}" # Resolve checkpoint if [[ $# -gt 0 ]]; then INIT_MODEL="$1" else # pick the numerically largest suffix: pytorch_model.bin. INIT_MODEL=$(ls -1 "${OUTPUT_DIR}"/pytorch_model.bin.* 2>/dev/null | awk -F. '{print $NF" "$0}' | sort -n | tail -1 | cut -d' ' -f2) if [[ -z "${INIT_MODEL:-}" ]]; then INIT_MODEL="${OUTPUT_DIR}/pytorch_model.bin.0" fi fi echo "[eval] Using INIT_MODEL=${INIT_MODEL}" # Optional flags BINARY_FLAG="" if [[ "${BINARY_EVAL}" == "1" || "${BINARY_EVAL}" == "true" ]]; then BINARY_FLAG="--binary_eval" fi CUDA_VISIBLE_DEVICES=0 python -m torch.distributed.launch --nproc_per_node="${NPROC}" --master_port="${MASTER_PORT}" \ cache_main_task_retrieval.py --do_eval --num_thread_reader="${NUM_THREADS}" \ --batch_size=128 --n_display=50 \ --train_csv "${DATA_PATH}/MSRVTT_train.9k.csv" \ --val_csv "${DATA_PATH}/MSRVTT_JSFUSION_test.csv" \ --data_path "${DATA_PATH}/MSRVTT_data.json" \ --features_path "${DATA_PATH}/compressed_videos" \ --output_dir "${OUTPUT_DIR}" \ --lr 1e-4 --max_words "${MAX_WORDS}" --max_frames "${MAX_FRAMES}" --batch_size_val "${BATCH_VAL}" \ --datatype msrvtt --expand_msrvtt_sentences \ --feature_framerate 1 --coef_lr 1e-3 \ --freeze_layer_num 0 --slice_framepos 2 \ --loose_type --linear_patch 2d --sim_header meanP \ --pretrained_clip_name ViT-B/32 \ --proj "${PROJ}" ${BINARY_FLAG} \ --init_model "${INIT_MODEL}" # Usage examples: # bash eval.sh # auto-pick latest ckpt in OUTPUT_DIR # BATCH_VAL=32 bash eval.sh # override eval batch size # bash eval.sh /path/to/pytorch_model.bin.2