Создание системы анализа видео с векторной базой данных Milvus
Когда в прошлые выходные я смотрел Free Guy, у меня было ощущение, что я уже где-то видел актера, который играет Бадди, охранника, но не мог вспомнить ни одну из его работ. Моя голова была забита мыслью: «кто этот парень?» Я был уверен, что видел это лицо, и очень старался вспомнить его имя. Похожий случай был, когда однажды я увидел в видео главного актера с напитком, который раньше мне очень нравился, но в итоге не смог вспомнить название бренда.
Ответ вертелся у меня на языке, но мозг словно полностью заклинило.
Феномен «вертится на кончике языка» (TOT) сводит меня с ума при просмотре фильмов. Если бы только существовала поисковая система обратного поиска по изображению для видео, которая позволяла бы находить видео и анализировать видеоконтент. Раньше я создал поисковую систему обратного поиска по изображению с использованием Milvus. Учитывая, что анализ видеоконтента в некотором смысле похож на анализ изображений, я решил создать систему анализа видеоконтента на основе Milvus.
Обнаружение объектов
Обзор
Перед анализом объекты в видео сначала должны быть обнаружены. Эффективное и точное обнаружение объектов в видео — главная задача этого процесса. Это также важная задача для таких приложений, как автопилот, носимые устройства и IoT.
Пройдя путь от традиционных алгоритмов обработки изображений до глубоких нейронных сетей (DNN), современные основные модели для обнаружения объектов включают R-CNN, FRCNN, SSD и YOLO. Представленная в этой теме система анализа видео на основе глубокого обучения и Milvus может интеллектуально и быстро обнаруживать объекты.
Реализация
Чтобы обнаруживать и распознавать объекты в видео, система должна сначала извлечь кадры из видео и обнаружить объекты на изображениях кадров с помощью обнаружения объектов, затем извлечь векторы признаков из обнаруженных объектов и, наконец, проанализировать объект на основе векторов признаков.
- Извлечение кадров
Анализ видео преобразуется в анализ изображений с помощью извлечения кадров. В настоящее время технология извлечения кадров очень зрелая. Такие программы, как FFmpeg и OpenCV, поддерживают извлечение кадров с заданными интервалами. В этой статье рассказывается, как извлекать кадры из видео каждую секунду с помощью OpenCV.
- Обнаружение объектов
Обнаружение объектов заключается в поиске объектов в извлеченных кадрах и создании скриншотов объектов согласно их положениям. Как показано на следующих рисунках, были обнаружены велосипед, собака и автомобиль. В этой теме рассказывается, как обнаруживать объекты с помощью YOLOv3, который широко используется для обнаружения объектов.
Рисунок 1.
- Извлечение признаков
Извлечение признаков означает преобразование неструктурированных данных, которые машинам трудно распознавать, в векторы признаков. Например, изображения можно преобразовывать в многомерные векторы признаков с помощью моделей глубокого обучения. В настоящее время наиболее популярные AI-модели для распознавания изображений включают VGG, GNN и ResNet. В этой теме рассказывается, как извлекать признаки из обнаруженных объектов с помощью ResNet-50.
Рисунок 2.
- Анализ векторов
Извлеченные векторы признаков сравниваются с векторами библиотеки, и возвращается информация, соответствующая наиболее похожим векторам. Для крупномасштабных наборов данных векторов признаков вычисления представляют собой огромную проблему. В этой теме рассказывается, как анализировать векторы признаков с помощью Milvus.
Ключевые технологии
OpenCV
Open Source Computer Vision Library (OpenCV) — это кроссплатформенная библиотека компьютерного зрения, предоставляющая множество универсальных алгоритмов для обработки изображений и компьютерного зрения. OpenCV широко используется в области компьютерного зрения.
В следующем примере показано, как захватывать видеокадры с заданными интервалами и сохранять их как изображения с помощью OpenCV на Python.
import cv2
cap = cv2.VideoCapture(file_path)
framerate = cap.get(cv2.CAP_PROP_FPS)
allframes = int(cv2.VideoCapture.get(cap, int(cv2.CAP_PROP_FRAME_COUNT)))
success, image = cap.read()
cv2.imwrite(file_name, image)
YOLOv3
You Only Look Once, Version 3 (YOLOv3 [5]) — это одноэтапный алгоритм обнаружения объектов, предложенный в последние годы. По сравнению с традиционными алгоритмами обнаружения объектов при той же точности YOLOv3 работает в два раза быстрее. YOLOv3, упоминаемый в этой теме, — это улучшенная версия от PaddlePaddle [6]. В ней используется несколько методов оптимизации с более высокой скоростью вывода.
ResNet-50
ResNet [7] является победителем ILSVRC 2015 в классификации изображений благодаря своей простоте и практичности. Будучи основой многих методов анализа изображений, ResNet зарекомендовала себя как популярная модель, специализированная для обнаружения, сегментации и распознавания изображений.
Milvus
Milvus — это облачная, открытая векторная база данных, созданная для управления векторами эмбеддингов, генерируемыми моделями машинного обучения и нейронными сетями. Она широко используется в таких сценариях, как компьютерное зрение, обработка естественного языка, вычислительная химия, персонализированные рекомендательные системы и многое другое.
Следующие процедуры описывают, как работает Milvus.
- Неструктурированные данные преобразуются в векторы признаков с помощью моделей глубокого обучения и импортируются в Milvus.
- Milvus хранит и индексирует векторы признаков.
- Milvus возвращает векторы, наиболее похожие на вектор, запрошенный пользователями.
Рисунок 3.
Развертывание
Теперь у вас есть некоторое понимание систем видеоаналитики на базе Milvus. Система в основном состоит из двух частей, как показано на следующем рисунке.
Красные стрелки обозначают процесс импорта данных. Используйте ResNet-50 для извлечения векторов признаков из набора изображений и импортируйте векторы признаков в Milvus.
Черные стрелки обозначают процесс анализа видео. Сначала извлеките кадры из видео и сохраните кадры как изображения. Затем обнаружьте и извлеките объекты на изображениях с помощью YOLOv3. После этого используйте ResNet-50 для извлечения векторов признаков из изображений. Наконец, Milvus выполняет поиск и возвращает информацию об объектах с соответствующими векторами признаков.
Рисунок 4.
Для получения дополнительной информации см. Milvus Bootcamp: Video Object Detection System.
Импорт данных
Процесс импорта данных прост. Преобразуйте данные в 2 048-мерные векторы и импортируйте векторы в Milvus.
vector = image_encoder.execute(filename)
entities = [vector]
collection.insert(data=entities)
Анализ видео
Как было представлено выше, процесс анализа видео включает захват видеокадров, обнаружение объектов в каждом кадре, извлечение векторов из объектов, вычисление сходства векторов с использованием метрики евклидова расстояния (L2) и поиск результатов с помощью Milvus.
images = extract_frame(filename, 1, prefix)
detector = Detector()
run(detector, DATA_PATH)
vectors = get_object_vector(image_encoder, DATA_PATH)
search_params = {"metric_type": "L2", "params": {"nprobe": 10}}
results = collection.search(vectors, param=search_params, limit=10)
Заключение
В настоящее время более 80% данных являются неструктурированными. С быстрым развитием ИИ все больше моделей глубокого обучения разрабатывается для анализа неструктурированных данных. Такие технологии, как обнаружение объектов и обработка изображений, достигли больших прорывов как в академической среде, так и в промышленности. Благодаря этим технологиям все больше AI-платформ удовлетворяют практическим требованиям.
Система видеоаналитики, обсуждаемая в этой теме, построена на Milvus, что позволяет быстро анализировать видеоконтент.
Будучи векторной базой данных с открытым исходным кодом, Milvus поддерживает векторы признаков, извлеченные с помощью различных моделей глубокого обучения. Интегрированный с такими библиотеками, как Faiss, NMSLIB и Annoy, Milvus предоставляет набор интуитивно понятных API, поддерживая переключение типов индексов в зависимости от сценариев. Кроме того, Milvus поддерживает скалярную фильтрацию, что повышает показатель полноты и гибкость поиска. Milvus применяется во многих областях, таких как обработка изображений, компьютерное зрение, обработка естественного языка, распознавание речи, рекомендательные системы и открытие новых лекарственных препаратов.
References
[1] A. D. Bagdanov, L. Ballan, M. Bertini, A. Del Bimbo. “Сопоставление и поиск товарных знаков в базах данных спортивного видео.” Proceedings of the international workshop on Workshop on multimedia information retrieval, ACM, 2007. https://www.researchgate.net/publication/210113141_Trademark_matching_and_retrieval_in_sports_video_databases
[2] J. Kleban, X. Xie, W.-Y. Ma. “Пространственно-пирамидальный майнинг для обнаружения логотипов в естественных сценах.” IEEE International Conference, 2008. https://ieeexplore.ieee.org/document/4607625
[3] R. Boia, C. Florea, L. Florea, R. Dogaru. “Локализация и распознавание логотипов на естественных изображениях с использованием гомографических графов классов.” Machine Vision and Applications 27 (2), 2016. https://link.springer.com/article/10.1007/s00138-015-0741-7
[4] R. Boia, C. Florea, L. Florea. “Эллиптическая агломерация asift в прототипе класса для обнаружения логотипов.” BMVC, 2015. http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=5C87F52DE38AB0C90F8340DFEBB841F7?doi=10.1.1.707.9371&rep=rep1&type=pdf
[5] https://arxiv.org/abs/1804.02767
[6] https://paddlepaddle.org.cn/modelbasedetail/yolov3
[7] https://arxiv.org/abs/1512.03385
Читать далее

Introducing Zilliz Cloud Global Cluster: Region-Level Resilience for Mission-Critical AI
Zilliz Cloud Global Cluster delivers multi-region resilience, automatic failover, and fast global AI search with built-in security and compliance.

Smarter Autoscaling in Zilliz Cloud: Always Optimized for Every Workload
With the latest upgrade, Zilliz Cloud introduces smarter autoscaling—a fully automated, more streamlined, elastic resource management system.

Vector Databases vs. Document Databases
Use a vector database for similarity search and AI-powered applications; use a document database for flexible schema and JSON-like data storage.



