Feder로 리버스 이미지 검색 시각화하기
역방향 이미지 검색은 벡터 검색 또는 근사 최근접 이웃 검색의 가장 널리 사용되는 애플리케이션 중 하나입니다. 사용자가 검색 엔진에 이미지를 업로드하면, 유사한 이미지들이 다수 반환됩니다. 이 과정에서 대규모 데이터셋, 특히 수십억 또는 심지어 수조 규모의 데이터셋에서 검색을 가속화하기 위해 인덱스가 구축됩니다.
이전 블로그에서는 HNSW 인덱스 시각화 예시를 사용하여 Feder로 근사 최근접 이웃 검색을 시각화하는 방법을 소개했습니다. 이 글에서는 역방향 이미지 검색을 예로 들어 Feder를 사용해 인덱스 구축 및 검색 과정을 시각화하는 방법을 계속 설명하겠습니다. 이 글에서는 역방향 이미지 검색 애플리케이션에서 가장 일반적으로 사용되는 인덱스인 IVF_FLAT 인덱스를 사용합니다.
Feder로 역방향 이미지 검색을 시각화하는 방법
Feder는 JavaScript로 구축되었습니다. 시각화를 위해 Feder를 사용하려면 먼저 인덱스를 구축하고 Faiss 또는 Hnswlib에서 인덱스 파일을 저장해야 합니다. 그런 다음 Feder가 업로드된 파일을 분석하여 인덱스 정보를 얻고 시각화를 준비합니다. 벡터 유사도 검색 중에는 대상 벡터와 검색 매개변수 설정을 제공해야 합니다. 그러면 Feder가 전체 검색 과정을 시각화해 줍니다.
Feder 사용 방법에 대해 자세히 알아보려면 Feder 사용자 가이드를 읽어보세요.
IVF_FLAT 인덱스로 검색을 시각화하는 사용 사례
이 사용 사례에서는 17,000개 이상의 이미지를 포함하는 대표적인 ML 이미지 데이터셋인 VOC 2012를 사용합니다.
먼저 오픈 소스 ML 파이프라인인 Towhee를 사용하여 VOC 2012 데이터셋의 이미지를 벡터로 인코딩합니다. 그런 다음 Faiss로 IVF_FLAT 인덱스를 구축하고 인덱스 파일을 저장합니다. 마지막으로 Feder를 사용해 시각화합니다.
IVF_Flat 인덱스 구축
검색 과정을 가속화하기 위해 인덱스가 구축됩니다. 이를 사전에 비유할 수 있습니다. 모든 단어는 첫 글자를 기준으로 정리되어 있습니다. 더 구체적으로 말하면, 같은 첫 글자를 가진 단어들이 함께 그룹화됩니다. 그리고 각 첫 글자 아래의 항목 수가 동일하지 않다는 것은 모두 알고 있습니다. "Z"로 시작하는 단어보다 "E"로 시작하는 단어가 더 많습니다. 단어를 찾을 때, 같은 첫 글자를 가진 단어만 포함된 섹션으로 빠르게 이동할 수 있습니다. 이는 검색 속도를 크게 높이는 데 도움이 됩니다.
마찬가지로, IVF_FLAT 인덱스는 벡터 공간의 벡터를 벡터 거리 기준으로 서로 다른 클러스터로 나눕니다. 서로 가까운 벡터들은 같은 클러스터에 배치될 가능성이 더 높습니다. 그리고 각 클러스터에 벡터가 반드시 균등하게 분포되는 것은 아닙니다. 따라서 각 클러스터에는 서로 다른 수의 벡터가 포함됩니다.
이 사용 사례에서는 Faiss를 사용하여 VOC 2012 데이터셋의 17,000개 이미지에 대해 nlist가 256인 IVF_FLAT 인덱스를 구축했습니다. 17,000개의 이미지 벡터는 K-means 클러스터링 방법을 기반으로 256개의 클러스터로 나뉩니다.
Feder를 사용하면 고차원 벡터 공간의 클러스터링을 2D 뷰로 시각화할 수 있습니다. Feder는 인터랙티브한 사용자 경험을 제공하면서 각 클러스터의 세부 정보를 볼 수 있도록 지원합니다. IVF_FLAT 인덱스를 더 잘 이해하기 위해 Feder에서 클러스터 중 하나를 클릭하면, 이 클러스터 내에서 벡터로 표현된 최대 9개의 이미지를 볼 수 있습니다.
대략적 검색
대상 이미지를 입력하고 역이미지 검색을 위해 대상 벡터로 변환하면, 시스템은 먼저 대상 벡터와 각 클러스터의 중심점 간 거리를 계산하여 가장 가까운 클러스터를 찾습니다.
이 사용 사례에서 nlist는 256과 같으며, 이는 전체 벡터 공간이 265개의 클러스터 단위로 나뉜다는 것을 의미합니다. 따라서 대략적 검색 과정에서 시스템은 대상 벡터와 256개 클러스터 중심점 간의 거리를 비교합니다.
IVF 인덱스에서 벡터는 서로에 대한 상대적 거리를 기준으로 클러스터링됩니다. 이는 대상 벡터의 최근접 이웃이 대상 벡터에 가장 가까운 클러스터에 위치할 가능성이 매우 높다는 것을 의미합니다. 매개변수 nprobe를 사용하여 쿼리할 클러스터 단위의 수를 제어할 수 있습니다. 이 사용 사례에서 nprobe는 8과 같으며, 이는 시스템이 가장 가까운 상위 8개 클러스터 내에서 대상 벡터의 최근접 이웃을 찾는다는 의미입니다.
아래 스크린샷은 가장 가까운 클러스터의 상세 보기입니다. cluster-186(대상 벡터에 여덟 번째로 가까운 클러스터)에서 자동차 이미지의 일부 벡터가 포함되어 있는 것을 볼 수 있습니다. 자동차가 대상 이미지의 비행기와 전혀 유사하지는 않지만, cluster-186의 이미지와 대상 이미지는 어느 정도 유사성을 공유합니다. cluster-186 이미지의 자동차 트랙이 대상 이미지의 공항 활주로와 매우 비슷해 보이기 때문입니다. 훨씬 더 가까운 클러스터인 cluster-96에서는 하늘에 있는 항공기 이미지가 포함되어 있는 것을 볼 수 있습니다.
대략적 검색.
이 사용 사례의 클러스터는 임베딩 중에 머신 러닝 모델이 대상 이미지의 항공기, 활주로, 하늘을 포함한 특징을 정확하게 추출한다는 것을 보여줍니다. 그런 다음 이러한 특징을 기준으로 벡터 공간의 벡터를 나눕니다. cluster-186은 "runway" 특징을 공유하고, cluster-96은 "aircraft" 특징을 공유합니다.
정밀 검색
대략적 검색 후에는 정밀 검색을 위해 nprobe 클러스터 여러 개를 확보할 수 있습니다. 이 단계에서 시스템은 대상 벡터와 nprobe 클러스터의 모든 벡터 간 거리를 비교합니다. 그런 다음 가장 가까운 topK 벡터가 최종 결과로 반환됩니다.
이 사용 사례에서 시스템은 정밀 검색 과정 동안 8개 클러스터의 총 742개 벡터와 대상 벡터 간의 거리를 계산합니다.
Feder는 정밀 검색 과정에 대해 두 가지 시각화 모드를 제공합니다. 한 가지 모드는 클러스터 및 벡터 거리를 기반으로 한 시각화입니다. 다른 하나는 차원 축소를 위한 투영 모드입니다.
아래 스크린샷에서 서로 다른 클러스터는 서로 다른 색상으로 표시됩니다. 중앙의 흰색 원은 대상 벡터를 나타냅니다. Feder의 도움으로 각 벡터와 대상 벡터 간의 거리를 더 명확하고 직관적으로 볼 수 있습니다. 각 벡터를 클릭하면 대상 벡터까지의 거리, 해당 벡터가 나타내는 이미지 등 더 자세한 정보를 볼 수 있습니다.
정밀 검색.
아래 스크린샷은 차원 축소를 위한 투영 모드입니다. 마찬가지로 서로 다른 클러스터는 서로 다른 색상으로 표시됩니다. 현재는 차원 축소에 가장 널리 사용되는 방법 중 하나인 UMAP만 지원합니다. Feder의 향후 릴리스에서는 더 많은 투영 방법이 지원될 예정입니다.
정밀 검색.
검색 성능 분석
인덱스 없이 검색할 경우, 시스템은 대상 벡터와 데이터베이스의 17,000개 모든 벡터 간의 거리를 계산해야 합니다. 하지만 이와 달리 IVF_FLAT 인덱스를 구축하면 계산량이 크게 줄어들어 검색 효율성이 크게 향상됩니다(시스템은 대략 검색에서 대상 벡터와 256개의 클러스터 중심 간의 거리, 그리고 정밀 검색에서 742개의 벡터 간의 거리만 계산하면 됩니다).
또한 Feder 시각화를 통해, 인덱스 구축 매개변수의 값이 벡터 공간이 어떻게 분할되는지에 영향을 미친다는 것을 알 수 있습니다. nprobe 매개변수는 검색 효율성과 정확도 사이의 절충을 달성하는 데 사용할 수 있습니다. nprobe 값이 높을수록 검색 범위가 넓어지고 결과가 더 정확해집니다. 하지만 그에 따라 계산량이 증가하므로 검색 효율성은 저하됩니다.
다음 단계
- Attu를 사용해 벡터 데이터베이스를 원클릭의 간편함으로 관리해 보세요.
- Feder로 최근접 이웃 검색 시각화하기 방법을 알아보세요.
계속 읽기

Zilliz Cloud Now Available in AWS Asia Pacific (Seoul)
Zilliz Cloud is now available in AWS Seoul — low-latency vector search, in-country data residency, and one-step migration for Korean AI teams. 31 regions across 5 clouds.

How to Improve Retrieval Quality for Japanese Text with Sudachi, Milvus/Zilliz, and AWS Bedrock
Learn how Sudachi normalization and Milvus/Zilliz hybrid search improve Japanese RAG accuracy with BM25 + vector fusion, AWS Bedrock embeddings, and practical code examples.

Balancing Precision and Performance: How Zilliz Cloud's New Parameters Help You Optimize Vector Search
Optimize vector search with Zilliz Cloud’s level and recall features to tune accuracy, balance performance, and power AI applications.



