This file explains where the shared data lives on SCC, what each feature type means, and which files teammates should use for training.
/projectnb/cs585/projects/VMR/vmr_projectAll paths below are relative to that folder unless noted otherwise.
The team does not train on raw .mp4 videos in the current setup.
Instead, the project uses:
- annotation files (
.jsonl) - extracted feature files (
.npz/.npy) - packed HDF5 files (
.h5) plus JSON indices for faster loading
Think of the pipeline as:
annotations + extracted features -> HDF5 packing -> model training
data/
├── qvhighlights/
│ ├── annotations/
│ ├── features/
│ │ ├── clip/
│ │ ├── slowfast/
│ │ └── pann/
│ ├── txt_features/
│ │ └── clip_text/
│ ├── sub_features/
│ │ └── clip_sub/
│ └── hdf5/
└── charades_sta/
├── annotations/
├── features/
└── hdf5/
Official split files for QVHighlights:
highlight_train_release.jsonlhighlight_val_release.jsonlhighlight_test_release.jsonlsubs_train.jsonl
These define the train/val/test examples and subtitle metadata.
Visual CLIP features for video segments.
- one file per video segment
- usually stored as
.npz - key inside file:
features
Use this when a model expects CLIP-based visual features.
Visual SlowFast features for video segments.
- one file per video segment
- usually stored as
.npz - key inside file:
features
Use this when a model expects motion-heavy visual features.
Audio features.
- one file per video segment
- usually stored as
.npy
Use this if the model includes audio.
Query-text CLIP features.
Each file usually contains:
last_hidden_statepooler_output
These are text embeddings for the query sentence.
Subtitle-text CLIP features.
Each file usually contains:
last_hidden_statepooler_output
These are text embeddings for subtitle chunks from the video.
Meaning of last_hidden_state vs pooler_output
These come from transformer-style text encoders and are not duplicates.
-
last_hidden_state- sequence-level representation
- shape is usually something like
(num_tokens, 512) - keeps more token-level detail
-
pooler_output- single vector for the whole text
- shape is usually
(512,) - smaller and more compact
Some models prefer token-level features, others only need one vector per text item.
The raw extracted features are spread across many small files.
That works, but it is inconvenient for training because:
- opening hundreds of thousands of small files is slow
- shared training code becomes harder to manage
- random access is less efficient
So preprocessing packs them into:
- one
.h5file containing all rows - one
_index.jsonmapping item ids to offsets
This makes training and data loading much cleaner.
The shared HDF5 outputs live in:
data/qvhighlights/hdf5Typical ready files include:
clip_features.h5clip_features_index.jsonslowfast_features.h5slowfast_features_index.jsonclip_slowfast_features.h5clip_slowfast_features_index.jsonpann_features.h5pann_features_index.jsonclip_text_last_hidden_state.h5clip_text_last_hidden_state_index.jsonclip_text_pooler_output.h5clip_text_pooler_output_index.jsonclip_sub_last_hidden_state.h5clip_sub_last_hidden_state_index.jsonclip_sub_pooler_output.h5clip_sub_pooler_output_index.json
If the last two clip_sub_pooler_output files are missing, preprocessing is still finishing.
For visual-only training:
clip_features.h5slowfast_features.h5- or the merged
clip_slowfast_features.h5
For audio:
pann_features.h5
For query text:
clip_text_last_hidden_state.h5if token-level text is neededclip_text_pooler_output.h5if one vector per query is enough
For subtitle text:
clip_sub_last_hidden_state.h5if token-level subtitle encoding is neededclip_sub_pooler_output.h5if one vector per subtitle item is enough
If someone just wants a clean visual input for baseline training, the simplest option is:
self.v_feat_dirs = [
"/projectnb/cs585/projects/VMR/vmr_project/data/qvhighlights/hdf5/clip_slowfast_features.h5",
]If they want separate visual sources:
self.v_feat_dirs = [
"/projectnb/cs585/projects/VMR/vmr_project/data/qvhighlights/hdf5/clip_features.h5",
"/projectnb/cs585/projects/VMR/vmr_project/data/qvhighlights/hdf5/slowfast_features.h5",
]The helper loader lives in:
src/utils/hdf5_features.pysrc/utils/training_feature_loader.py
Patched training datasets now support .h5 inputs in:
moment_detr/moment_detr/start_end_dataset.pylighthouse/training/dataset.pylighthouse/training/cg_detr_dataset.py
List packed outputs:
ls -lh data/qvhighlights/hdf5Load one item from HDF5:
python scripts/demo_hdf5_loading.py \
--h5 data/qvhighlights/hdf5/clip_features.h5 \
--index data/qvhighlights/hdf5/clip_features_index.json \
--video-id AO3sNhzP2Tg_510.0_660.0Check whether a long preprocessing job is still running:
ps -u kuromiqo -f | grep preprocess_to_hdf5.pyWatch a preprocessing log:
tail -f logs/preprocess_clip_sub_last_hidden_state.logdata/charades_sta/annotations currently contains the split files, but the project does not currently include prepared Charades feature files in the shared layout.
That means:
- annotations are available
- feature preprocessing for Charades is not fully set up in this project yet
If you are training on the shared SCC project, use the packed files in data/qvhighlights/hdf5 whenever possible, and treat features/, txt_features/, and sub_features/ as the raw extracted feature sources behind them.