ProPy: Building Interactive Prompt Pyramids upon CLIP for Partially Relevant Video Retrieval (EMNLP 2025 Findings)

September 5, 2025 ยท View on GitHub

Overview

We propose ProPy (arxiv), a model with systematic architectural adaption of CLIP specifically designed for PRVR.

Installation

conda create -n propy python=3.10
conda activate propy
conda install pytorch==1.12.0 torchvision==0.13.0 cudatoolkit=11.3 -c pytorch
pip install -r requirements.txt

We use a single RTX 3090 GPU (Driver version: 535.113.01) to run all experiments.

Preparation

  • Download raw videos of Charades, TVQA, ActivityNet and QVHighlights.
  • Compress downloaded videos to 3fps with width 224 using scripts/prepare.sh.
    • Note: You need to modify corresponding paths in the script.
  • Download annotations (we convert original annotations to a standard format) from Baidu or Google drive, and unzip them to annotations directory.
  • Download pretrained CLIP-ViT-B/32 weights to CLIP_weights directory.

Train

Modify video_dir in scripts/*.sh according to your local directories, then run:

bash scripts/prvr_{split}.sh
bash scripts/vcmr_{split}.sh

Checkpoints will be saved to logs/prvr_{split} or logs/vcmr_{split}.

Test

Modify the following parameters of same scripts to test models:

# for evaluation
do_train=0
do_eval=1
resume=/path/to/ckpt/ckpt.best.pth.tar

# then
bash scripts/prvr_{split}.sh
bash scripts/vcmr_{split}.sh

We provide all checkpoints and logs in Baidu and Google drives.

Performance

PRVR

splitR@1R@5R@50R@100SumR
TVR22.445.055.989.5212.8
ActivityNet14.934.947.582.7180.0
Charades2.68.714.850.476.5
QVHighlights-val37.465.676.196.5275.5
QVHighlights-test35.063.273.196.2267.5

Weakly-VCMR

splitIoU=0.3,R@10IoU=0.3,R@100IoU=0.5,R@10IoU=0.5,R@100IoU=0.7,R@10IoU=0.7,R@100
TVR26.2650.2617.4935.619.6519.82
ActivityNet28.5757.4220.8146.2212.9431.85
Charades6.823.394.7318.442.269.01
QVHighlights-val54.3279.3545.4272.5227.9448.52

Visualization

To produce attention maps in Figure 4, run:

bash scripts/plot/plot_{split}.sh

These scripts will select videos based on R@1 metric, save necessary weights, then draw frame-level and event-level attention maps. Both weights and figures will be saved to VIS/{split}.

Acknowledgements

This repo is built upon the following wonderful works: