Milvus 벡터 데이터베이스로 비디오 분석 시스템 구축하기
지난 주말 Free Guy를 보다가 경비원 Buddy 역을 맡은 배우를 어디선가 본 적이 있다는 느낌이 들었지만, 그의 작품이 하나도 기억나지 않았습니다. 머릿속은 "이 사람 누구지?"라는 생각으로 가득 찼습니다. 그 얼굴을 본 적이 있다는 건 확신했고, 그의 이름을 기억해내려고 정말 애썼습니다. 비슷한 경우로, 예전에 어떤 영상에서 주연 배우가 제가 한때 아주 좋아했던 음료를 마시는 것을 본 적이 있었지만, 결국 브랜드 이름을 떠올리는 데 실패했습니다.
정답이 혀끝까지 나왔지만, 머리가 완전히 막힌 것 같았습니다.
혀끝 현상(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는 컴퓨터 비전 분야에서 일반적으로 사용됩니다.
다음 예시는 Python에서 OpenCV를 사용하여 지정된 간격으로 동영상 프레임을 캡처하고 이미지로 저장하는 방법을 보여줍니다.
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의 빠른 발전과 함께 비정형 데이터를 분석하기 위한 딥 러닝 모델이 점점 더 많이 개발되었습니다. 객체 감지 및 이미지 처리와 같은 기술은 학계와 산업계 모두에서 큰 돌파구를 이루었습니다. 이러한 기술의 지원을 받아 점점 더 많은 AI 플랫폼이 실제 요구 사항을 충족해 왔습니다.
이 주제에서 논의한 비디오 분석 시스템은 Milvus로 구축되었으며, 비디오 콘텐츠를 빠르게 분석할 수 있습니다.
오픈 소스 벡터 데이터베이스인 Milvus는 다양한 딥 러닝 모델을 사용해 추출한 특징 벡터를 지원합니다. Faiss, NMSLIB, Annoy와 같은 라이브러리와 통합된 Milvus는 직관적인 API 세트를 제공하여 시나리오에 따라 인덱스 유형 전환을 지원합니다. 또한 Milvus는 스칼라 필터링을 지원하여 재현율과 검색 유연성을 높입니다. Milvus는 이미지 처리, 컴퓨터 비전, 자연어 처리, 음성 인식, 추천 시스템, 신약 발견 등 많은 분야에 적용되어 왔습니다.
참고 문헌
[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
계속 읽기

Build Multimodal Search for 3D Assets with Tripo and Zilliz Cloud
Generate 3D assets with Tripo, then search them by text, image, and metadata with multimodal embeddings and Zilliz Cloud.

Context Engineering Strategies for AI Agents: A Developer’s Guide
Learn practical context engineering strategies for AI agents. Explore frameworks, tools, and techniques to improve reliability, efficiency, and cost.

What Exactly Are AI Agents? Why OpenAI and LangChain Are Fighting Over Their Definition?
AI agents are software programs powered by AI that can perceive their environment, make decisions, and take actions to achieve a goal—often autonomously.



