Celerity — компактный C++‑инструмент для мультимодального поиска без обучения: CLIP (текст/изображения) в ONNX Runtime, видео/аудио ингест, и ANN‑поиск. Зависимости опциональны и включаются флагами CMake.
- Мультимодальные эмбеддинги через CLIP ViT‑B/32 (ONNX Runtime, CPU; опционально INT8).
- Видео: выборка кадров (OpenCV) - CLIP эмбеддинги.
- Аудио: faster‑whisper (Python) - текст → CLIP текстовый эмбеддинг.
- ANN: базовый IVF‑PQ (встроенный). Заготовка провайдера FAISS.
- Гибкая сборка: ORT/OpenCV/FAISS включаются флагами.
Минимальная сборка без внешних библиотек:
cmake -S celerity -B build -G "Visual Studio 17 2022" -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target celerity -j 8
Опции CMake:
-DENABLE_ONNXRUNTIME=ON— поддержка ONNX Runtime. УкажитеONNXRUNTIME_DIRс путямиinclude/lib(например: распакованный архив onnxruntime).-DENABLE_OPENCV=ON— поддержка OpenCV (для препроцессинга изображений и семплинга видео).-DENABLE_FAISS=ON— включить провайдер FAISS (требуются заголовки и библиотекаfaiss).-DENABLE_PY_TOOLS=ON— вызов Python‑скриптов для токенизации CLIP и faster‑whisper (включено по умолчанию).
Примеры для Windows:
set ONNXRUNTIME_DIR=D:\\libs\\onnxruntime-win-x64
cmake -S celerity -B build -G "Visual Studio 17 2022" -DENABLE_ONNXRUNTIME=ON -DENABLE_OPENCV=ON -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target celerity -j 8
pip install transformers huggingface_hub onnxruntime onnxruntime-tools faster-whisper
# Для экспорта ONNX (если нужно):
pip install "optimum[onnxruntime]"
Загрузка/экспорт CLIP ONNX:
python tools/download_models.py --out models/clip/onnx --mode download
# либо экспорт из HF:
python tools/download_models.py --out models/clip/onnx --mode export
INT8‑квантование (динамическое):
python tools/quantize_clip.py --models models/clip/onnx
Бинарь: build/Debug/celerity.exe или build/Release/celerity.exe.
- Построение индекса из CSV (по строке = вектор,
,‑разделитель):
celerity build <vectors.csv> <dim> <nlist> <pq_m> <n_iter>
- Поиск по CSV‑вопросам:
celerity search <index_prefix> <queries.csv> <k> <nprobe>
- Ингест изображения (CLIP):
celerity ingest-image <index_prefix> <image_path> [model_dir]
- Ингест видео (кадры ~1 fps → CLIP):
celerity ingest-video <index_prefix> <video_path> [model_dir]
- Ингест аудио (ASR → текст → CLIP):
celerity ingest-audio <index_prefix> <audio_path> [model_dir] [asr_model]
- Поиск по тексту/изображению/аудио:
celerity search-text <index_prefix> <k> <nprobe> <text...> [model_dir]
celerity search-image <index_prefix> <k> <nprobe> <image_path> [model_dir]
celerity search-audio <index_prefix> <k> <nprobe> <audio_path> [model_dir] [asr_model]
Где model_dir по умолчанию models/clip/onnx, ожидаются clip_img.onnx и clip_txt.onnx.
Примечания:
- Эмбеддинги CLIP L2‑нормализуются, размерность ViT‑B/32 — 512.
- Для OpenCV/ORT/FAISS опции могут быть выключены; соответствующий функционал бросит понятную ошибку при вызове.
- faster‑whisper скачает веса при первом запуске (
--model tinyпо умолчанию).
- Рекомендуется INT8‑квантование CLIP (ORT dynamic quantization).
- Для Intel CPU можно собрать ORT с OpenVINO EP и включить его при создании сессии.
src/dl/onnx/OnnxRunner.*— обёртка ORT.src/dl/encoders/ClipEncoder.*— CLIP (изображение/текст), препроцессинг, L2‑норма.src/ingest/VideoIngestor.*— выборка кадров, извлечение эмбеддингов.src/ingest/AudioTranscriber.*— обёртка надtools/transcribe.py(faster‑whisper).src/ann/*— встроенный IVF‑PQ и интерфейс движка;ann/faiss/*— заготовка FAISS.tools/*— загрузка/квантование моделей, токенизация, транскрипция.
- Провайдер FAISS — заготовка; переключение SearchEngine на FAISS можно добавить по флагу.
- Встроенный IVF‑PQ ориентирован на демонстрацию и не оптимизирован.
Проверьте лицензии и условия использования моделей на Hugging Face/проектов (CLIP, faster‑whisper).