Hybrid retrieval over video segments with semantic embeddings + structured metadata.
- NVIDIA-GeForce RTX 3060 Ti, 8G
- Recommend using Anaconda to activate a virtual environment.
- Python version: 3.10.19
- Install dependencies:
pip install -r requirements.txt
- Initialize storage:
python ./database/milvus_db.pypython ./database/sql_db.py
- (Optional for nuScenes) Generate CAM_FRONT videos from image frames:
python ./utils/nuscenes_video_builder.py --dataroot <NUSCENES_DATA_ROOT> --meta-root <NUSCENES_META_JSON_ROOT> --output-dir <OUTPUT_VIDEO_DIR> --dataset-version v1.0-trainval --dataset-split train --fps 12- This creates MP4 clips and
clip_mapping.json(clip-to-source traceability metadata).
- Configure source in
utils/config.py:DATASET_SOURCE = "activitynet"or"nuscenes"- For nuScenes set
NUSCENES_VIDEO_ROOTandNUSCENES_CLIP_MAPPING_FILE.
- Build embeddings + annotations + metadata index:
python train.py
- Run retrieval:
python retrieval.py
The architecture has five components:
- Dataset adapter layer (
utils/dataset_adapter.py): provides a common video-entry interface for ActivityNet and generated nuScenes clips. - Feature extraction / annotation (
utils/embedding.py): VLM tags include environment tags + driving-specific semantics (driving_context,road_user_density,traffic_flow,semantic_summary). - Embedding extraction (
utils/embedding.py): supports model tier selection via config (basevsadvanced) with model-versioned metadata. - Storage:
- Milvus: vector retrieval + key scalar context (
dataset_name,camera_channel,clip_id,scene_token,embedding_model). - SQLite: rich metadata for filtering/ranking.
- Milvus: vector retrieval + key scalar context (
- Hybrid retrieval (
retrieval.py): vector similarity fused with SQL metadata scoring, plus dataset-aware filtering.
- Canonical schema:
database/video_metadata_schema.json - Covers:
- identity (dataset/version/split/clip/segment)
- temporal fields (clip + segment)
- sensor/context fields (
CAM_FRONT, scene/log/location/map) - semantics (existing + driving-specific tags + summary)
- retrieval lineage (embedding/annotation model versions, processing timestamp, quality flags)
-
clip_mapping.jsonexists and each entry points to a real clip file. -
camera_channelis alwaysCAM_FRONTfor nuScenes clips. - Metadata required fields match
database/video_metadata_schema.json. - Sample retrieval with
metadata_filters={"dataset_name": "nuscenes", "camera_channel": "CAM_FRONT"}returns valid clips. - Embedding model/version and annotation model/version are stored in SQLite rows.
- Step1:
pip install -U huggingface_hub -i https://mirrors.aliyun.com/pypi/simple/ - Step2:
export HF_ENDPOINT="https://hf-mirror.com" - Step3: e.g.
hf download google-bert/bert-base-chinese
- install milvus by following the official guide
- dataset visualization: Attu
- models and data should load on cuda when GPU is available