이번 글에서는 머신러닝을 활용한 이미지 검색 서비스가 무엇인지 알아보고, 간단한 시스템을 설계를 합니다. 최종 시스템 설계는 글의 6. 서빙 부분을 참고해 주세요.
해당 내용은 '가상 면접 사례로 배우는 머신러닝 시스템 설계 기초' 2장 시각 검색 시스템을 참고하여 작성되었고 개인 경험을 추가하였습니다.
목차
0. 이미지 검색 시스템이란?
1. 요구사항 구체화
2. 머신러닝 작업으로 문제 구조화
3. 데이터 준비
3.1. 데이터 엔지니어링
3.2. 피처 엔지니어링
4. 모델 개발
4.1. 모델 선택
4.2. 모델 훈련
5. 평가
5.1. 오프라인 지표
5.2. 온라인 지표
6. 서빙
6.1. 예측 파이프라인
6.2. 인덱스 파이프라인
6.3. 최근접 이웃 알고리즘의 성능
7. 추가 논의 주제
마치며/Reference
0. 이미지 검색 시스템이란?
이미지 검색 시스템은 사용자가 선택한/업로드한 이미지와 유사한 이미지를 찾을 수 있도록 도와준다.
e.g. Pinterest / Google Lens
1. 요구사항 구체화
이미지 검색 시스템을 설계하기 위해서 가상 면접의 형식을 빌려, 다양한 질문과 답변을 통해 설계를 구체화합니다.
결과의 유사성 순위화
- 질문: 가장 유사한 결과로부터 가장 덜 유사한 결과까지 순위를 매겨야 하나요?
- 답변: 요청한 이미지와 가장 유사한 이미지가 가장 먼저 목록에 표시되어야 합니다.
동영상 지원 배제
- 질문: 동영상도 지원해야 하나요?
- 답변: 이미지에만 집중해 주세요.
이미지 자르기 기능 지원
- 질문: 핀터레스트와 같은 플랫폼에서는 사용자가 이미지 자르기를 선택해 유사 이미지 검색할 수 있는데 이런 기능도 지원해야 하나요?
- 답변: 네, 이미지 자르기 기능을 지원합니다.
개인화 제외
- 질문: 표시된 이미지가 사용자에게 개인화되어야 하나요?
- 답변: 단순화하기 위해 개인화 초점을 맞추지 않겠습니다. 검색한 사람에 상관없이 쿼리 이미지는 동일한 결과가 나옵니다.
메타 데이터 사용 제한
- 질문: 모델이 이미지 태그와 같은 쿼리 이미지의 메타 데이터(image metadata)를 사용할 수 있나요?
- 답변: 실제 모델은 이미지의 메타데이터를 사용합니다. 하지만 간단하게 설명하기 위해 메타데이터가 아닌 이미지 픽셀에만 의존한다고 가정하겠습니다.
사용자 상호작용 제한
- 질문: 사용자가 저장, 공유 또는 좋아요와 같은 다른 작업을 수행할 수 있나요? 이러한 작업은 학습 데이터에 라벨을 지정하는 데 도움이 될 수 있습니다.
- 답변: 간단하게 하기 위해 지원되는 동작이 이미지 클릭뿐이라고 가정하겠습니다.
이미지 검열 배제
- 질문: 이미지 검열 기능 제공해야 하나요?
- 답변: 플랫폼을 안전하게 유지하는 것도 중요하지만, 이미지 검열은 이 범위를 벗어납니다.
검색 속도
- 질문: 검색 속도는 얼마나 빨라야 하나요? 1000~2000억 개의 이미지가 있다고 가정하면 시스템은 유사한 이미지를 빠르게 검색할 수 있어야 합니다. 합리적인 가정일까요?
- 답변: 예, 좋습니다.
문제 정리
- 시각 검색 시스템을 설계합니다.
- 사용자가 보낸 쿼리 이미지와 유사한 이미지를 검색하고, 유사도 순위도를 매긴 다음 사용자에게 보여줍니다.
- 검색은 이미지만 지원합니다.
- 개인화는 지원하지 않습니다.
2. 머신러닝 작업으로 문제 구조화
이미지 검색 시스템을 머신러닝 문제로 구조화하는 과정에서는 목표의 명확한 정의, 시스템의 입력 및 출력 지정, 그리고 가장 적합한 머신러닝 유형의 선택이 필요합니다. 이 절차는 시스템이 어떻게 작동할지의 기본 틀을 설정합니다.
머신러닝 목표 정의
- 목표: 사용자가 검색하는 이미지와 시각적으로 유사한 이미지를 정확하게 검색하는 것입니다. 이는 사용자의 쿼리에 가장 관련성 높은 이미지를 식별하고 순위를 매기는 과정을 포함합니다.
시스템의 입력 및 출력 지정
- 입력: 사용자가 쿼리로 입력한 이미지입니다. 이 이미지는 검색 시스템이 분석하고, 비교 대상이 됩니다.
- 출력: 시각적으로 유사한 이미지의 목록이며, 유사도에 따라 순위가 매겨집니다. 이 순위는 사용자에게 가장 관련성 높은 결과를 우선적으로 제공하기 위해 결정됩니다.
적합한 머신러닝 유형 선택
이미지 검색 문제는 주로 순위 문제입니다.
순위 문제의 핵심 목적은 쿼리와의 관련성에 따라 이미지, 웹사이트, 제품 등과 같은 항목들의 순위를 매겨, 관련성이 높은 항목을 검색 결과에 더 많이 표시하는 것입니다. 이 유형의 문제는 추천 시스템, 검색 엔진, 문서 검색, 온라인 광고 등 다양한 머신러닝 애플리케이션에서 볼 수 있습니다.
이 과정에서 핵심적인 기술 중 하나는 표현 학습 (representation learning)입니다. 이 접근법은 이미지와 같은 입력 데이터를 임베딩, 즉 N차원 공간의 포인트로 변환하도록 모델을 훈련시키는 방법입니다. 임베딩은 데이터의 복잡성을 단순화하고, 유사도 계산을 용이하게 만들어 줍니다.
표현 학습 -> 임베딩 벡터화 -> 임베딩 벡터로 유사도 점수 계산하여 순위 측정
3. 데이터 준비
데이터 준비 단계는 이미지 검색 시스템의 성능에 직접적인 영향을 미치는 중요한 과정입니다.
이 과정은 크게 두 가지 데이터 엔지니어링과 피처 엔지니어링이 있습니다.
3.1. 데이터 엔지니어링
데이터를 시스템에 사용 가능하도록 변경/구조화 합니다.
1. 이미지 데이터
사용자가 업로드한 이미지와 관련 메타데이터(소유자 ID, 업로드 시간, 수동 태그 등)를 포함합니다. 예를 들어, 얼룩말 사진, 파스타 사진 등에 대한 정보가 메타데이터와 함께 저장됩니다.
2. 사용자 데이터
사용자 관련 정보(나이, 성별, 위치 등)를 저장합니다. 이 데이터는 사용자의 인구 통계학적 특성을 포함하며, 사용자 경험 개선에 활용될 수 있습니다.
3. 사용자-이미지 상호작용 데이터
노출수, 클릭수 등
3.2. 피처 엔지니어링
피처 엔지니어링 단계에서는 모델 학습에 적합한 형태로 데이터를 전처리합니다. 이는 모델의 성능을 최적화하기 위한 필수적인 과정으로, 주로 이미지 데이터에 적용됩니다
- 크기 조정(resizing): 모델에 입력하기 전 이미지를 고정된 크기(예: 255x255 픽셀)로 조정합니다. 이는 모든 이미지가 동일한 차원을 갖도록 하여 모델 학습을 용이하게 합니다.
- 스케일링(scaling): 이미지 픽셀 값을 0과 1 사이의 범위로 조정합니다. 이는 데이터의 일관성을 유지하고 계산 효율성을 높이는 데 도움이 됩니다.
- Z-점수 정규화(Z-score normalization): 이미지 픽셀 값의 평균을 0으로, 분산을 1로 조정합니다. 이는 모델이 데이터의 분포를 더 잘 이해할 수 있게 하여 학습 효율을 개선합니다.
- 일관된 색상 모드: 모든 이미지가 같은 색상 모드(RGB, CMYK 등)를 사용하도록 합니다. 이는 모델이 다양한 이미지 소스로부터 일관된 정보를 추출할 수 있도록 보장합니다.
4. 모델 개발
모델 개발 단계에서는 모델 선택 / 모델 훈련 2가지로 구분할 수 있습니다.
4.1. 모델 선택
여러 ML 모델이 있지만 여기서는 신경망(NN) 을 사용합니다.
신경망 선택의 이유
- 신경망은 이미지와 같은 비정형 데이터 처리에 매우 적합합니다. 복잡한 패턴을 인식하고 분류에 강점이 있습니다.
- 대부분의 기존 머신러닝 모델과 달리, 신경망은 표현학습(representation learning)을 통해 필요한 임베딩을 자체적으로 생성할 수 있습니다.
신경망 모델 예)
- CNN 기반의 ResNet과 트랜스포머 기반의 ViT(Visual Transformers) 등이 주로 사용됩니다. 이 모델들은 이미지를 고차원의 임베딩으로 변환하는 능력이 뛰어나며, 이는 이미지 검색 시스템의 정확도를 크게 향상시킬 수 있습니다. (자세한 모델 내용은 생략합니다.)
4.2. 모델 훈련
앞에서도 이야기 했지만 모델 훈련의 목표는 시각적으로 유사한 이미지를 검색할 수 있도록 하는 것입니다. 이를 위해 모델은 이미지의 표현(임베딩)을 학습해야 합니다.
대조학습(Contrastive Learning)
대조학습은 모델이 유사한 이미지와 다른 이미지를 구별하도록 훈련하는기법입니다. 이 과정에서 A 이미지와 유사한 이미지, 유사하지 않은 이미지를 모델에 제공합니다.
이때 A와 유사한 이미지/유사하지 않는 이미지에 대한 데이터가 필요합니다. 3가지 방법으로 데이터를 만들 수 있습니다.
- 사람 판단
- 유사한 이미지 사람이 직접 찾음
- 장점: 정확하지만
- 단점: 비용/시간 발생
- 사용자 클릭과 같은 상호작용 선정
- 상호작용 데이터 기반으로 유사성 측정
- e.g. 사용자 이미지 클릭하면 클릭한 이미지가 쿼리 이미지 q와 유사하다고 간주
- 장점: 비용/시간 덜 발생
- 단점: 원천 데이터(클릭/유사도)에 노이즈가 많아서 성능 저하될 수 있음
- 상호작용 데이터 기반으로 유사성 측정
- 쿼리 이미지에서 유사한 이미지 인위적으로 생성
- 쿼리 이미지 회정, 유사한 이미지 증강(argument) ..
- SimCLR, MoCo 예제가 있음
- 장점: 비용/시간 덜 발생
- 단점: 구축된 학습데이터가 실제로 달라서 성능 저하될 수 있음
- 쿼리 이미지 회정, 유사한 이미지 증강(argument) ..
현주 문제를 풀기 위해선 3번(쿼리 이미지에서 유사한 이미지 인위적으로 생성)을 선택하기로 합니다.
이유는
1. 프로세스 자동화 가능하고 초기 비용 발생이 적습니다.
2. 대규모 데이터 세트 훈련 시 SimCLR 같은 프레임워크의 성능이 검증되어 있습니다.
손실 함수(loss function) 선택
훈련의 최종 목표는 임베딩 공간에서 유사 이미지를 찾는 것 이기 때문에 모델 파라미터들의 최적화 과정이 필요합니다.
이미지들 → ML 모델 → 이미지들의 임베딩 백터들 → 유사도 계산 - softmax 함수 결과 ↔ 크로스 엔트로피 - 라벨
5. 평가
모델 개발 후에는 시스템의 성능을 평가하는 것이 중요합니다. 이 평가 과정은 주로 오프라인 지표와 온라인 지표를 사용하여 이루어집니다.
5.1. 오프라인 평가
오프라인 평가는 실제 사용자 상호작용 없이 모델의 성능을 평가합니다. 이 방법은 주로 평가 데이터 세트를 사용하며, 데이터 포인트마다 쿼리 이미지와 후보 이미지들, 그리고 각 쌍의 유사도 점수가 포함됩니다. 사용되는 주요 오프라인 지표는 다음과 같습니다.
- MRR (Mean Reciprocal Rank): 첫 번째 관련 항목의 순위를 기반으로 모델 품질을 측정합니다. 이 지표는 첫 번째로 반환된 관련 항목의 중요성에 중점을 둡니다.
- Recall@k: 상위 k개 항목 중 관련 항목의 비율을 측정합니다. 이 지표는 시스템이 반환하는 항목 중 얼마나 많은 관련 항목을 포착하는지를 나타냅니다.
- Precision@k: 출력 목록의 상위 k개 항목 중 관련 항목의 비율을 측정합니다. 이는 특정 순위 내에서의 정확도를 나타냅니다.
- mAP (Mean Average Precision): 각 출력 목록의 평균 정밀도를 계산한 후 이러한 값들의 평균을 구합니다. mAP는 관련성 높은 항목이 목록 상단에 있을수록 높아지는 지표입니다.
- nDCG (Normalized Discounted Cumulative Gain): 출력 목록의 순위 품질을 측정하며, 이상적인 순위와 비교하여 순위가 얼마나 좋은지 확인합니다. nDCG는 연속적인 연관성 점수를 잘 다룰 수 있어 복잡한 평가 상황에 적합합니다.
(자세한 지표 수식 설명은 생략합니다.)
5.2. 온라인 평가
온라인 평가는 실제 사용자의 상호작용을 통해 이루어집니다. 사용자가 시스템과 어떻게 상호작용하는지를 관찰함으로써, 모델의 성능을 실제 환경에서 평가할 수 있습니다.
- 클릭률 (Click-Through Rate, CTR): 사용자가 추천된 항목을 클릭하는 빈도입니다. CTR은 사용자가 추천된 이미지에 얼마나 관심을 가지고 있는지를 나타내는 지표입니다.
- 추천 이미지의 체류 시간: 사용자가 추천된 이미지에 머무는 시간을 측정합니다. 이 지표는 사용자의 참여도 및 만족도를 반영할 수 있으며, 검색 시스템의 품질을 간접적으로 나타냅니다.
비즈니스 목표에 따라 온라인 평가 지표를 단순히 클릭률, 체류 시간 이외에도 다양성, 관심사 발견 등이 될 수 있습니다.
6. 서빙
모델이 준비되었다는 가정하에 이미지 검색 시스템을 두 가지 파이프 라인으로 구성해볼 수 있습니다.
- 예측 파이프라인
- 인덱싱 파이프라인
6.1. 예측 파이프라인
6.1.1. 임베딩 생성 서비스
쿼리 이미지를 입력받아 이미지 전처리와 학습된 모델을 사용하여 임베딩을 계산합니다. 이 과정을 통해 쿼리 이미지의 특징을 수치화(임베딩 벡터)된 형태로 추출합니다.
6.1.2. 최근접 이웃 서비스
계산된 쿼리 이미지의 임베딩을 기반으로 임베딩 공간에서 유사한 이미지를 검색합니다. 이는 쿼리 포인트와 가장 가까운 포인트들을 찾는 과정을 포함합니다. 이때 vectorDB를 사용하거나 애플리케이션에서 직접 구현할 수 있습니다.
https://erikbern.com/2015/09/24/nearest-neighbor-methods-vector-models-part-1.html
6.1.3. 재순위화 서비스
비즈니스 수준의 로직이나 정책을 반영하여 최종 결과를 재순위화합니다. 예를 들어, 부적절한 결과의 필터링, 비공개 이미지의 제외, 중복 결과의 제거 등이 이에 해당합니다.
위 작업은 주로 최종 서빙하는 API에서 진행됩니다.
재순위화 서비스는 비즈니스 요구사항이 포함되어있기 때문에 admin 기능에서 재순위(후순위 처리)를 추가하고 API에서 가공하여 최종 유사 이미지들을 서빙하게 됩니다.
만약 최근접 이웃 서비스가 장애가 나거나 응답이 늦는 경우 기본값(default)을 내보내거나 최근접 이웃 서비스 사용이 아닌 사전 배치 작업으로 말려있는 모델 결과를 추천한다면 해당 값들을 조합해서 나갈 수 있습니다.
이 과정을 재순위화 서비스에서 처리하거나 또 다른 API 서비스에서 위 로직을 포함할 수 있습니다.
6.2. 인덱스 파이프라인
인덱스 서비스
플랫폼에 존재하는 모든 이미지를 인덱싱하여 검색 성능을 개선합니다. 사용자가 새 이미지를 추가하면, 해당 이미지의 임베딩을 인덱싱하여 최근접 이웃 검색에 사용할 수 있도록 합니다. 인덱싱 과정에서는 메모리 사용량을 고려하여 다양한 최적화 방법이 적용될 수 있습니다.
원천 이미지 정보를 오브젝트 스토리지(S3)를 사용하고 인덱싱 서비스로 AWS EMR / 데이터 브릭스 등 다양한 서비스를 사용할 수 있습니다. 인덱싱 테이블과 최근접 이웃 서비스에서 밀어넣는 작업도 필요합니다.
비즈니스 요구사항에 따라 스트림 처리하거나 배치로 돌면서 처리할 수 있습니다.
이는 주로 파이프라인 연결 작업으로 데이터 엔지니어(DE)나 백엔드 개발자가 담당, 분산처리를 활용하여 작업합니다.
6.3. 최근접 이웃(nearest neighbor, NN) 알고리즘의 성능
정확한 최근접 이웃 (exact nearest neighbor, eNN) vs 근사 근접 이웃 (approximate nearest neighbor, ANN)
- eNN은 전체 인덱스 테이블을 검색하여 가장 가까운 포인트를 찾지만, 대규모 시스템에서는 시간 복잡도가 너무 높습니다.
- ANN은 시간 복잡도를 줄여 실용적인 검색 속도를 제공합니다. ANN 알고리즘은 트리 기반, LSH 기반, 클러스터링 기반 등 다양한 방법을 포함합니다.
- 보다 자세한 내용은 생략합니다.
어떤 알고리즘을 선택해야할까?
실제 서비스에서는 ANN 알고리즘이 널리 사용됩니다. 이는 정확도와 속도 사이의 균형을 맞추기 위함입니다. 대표적인 ANN 구현체로는 Facebook의 Faiss, Google의 ScaNN 등이 있습니다. 이미 구현된 ANN 구현체는 자유도가 낮기 때문에 직접 벡터 데이터베이스를 사용하는 것도 대안이 될 수 있습니다.
7. 추가 논의 사항
이미지 검색 시스템에 고려할 수 있는 추가논의 사항이 있습니다. 시스템의 효율성, 정확성, 그리고 안전성을 개선할 수 있습니다.
- 부적절한 이미지 식별 및 차단: 시스템 내에서 부적절한 콘텐츠를 자동으로 식별하고 차단하는 메커니즘을 개발하여 사용자에게 안전한 검색 환경을 제공합니다.
- 시스템 내 편향 대응: 위치 편향과 같은 시스템 내 존재할 수 있는 다양한 편향을 식별하고 해소하기 위한 전략을 마련합니다.
- 이미지 메타데이터 활용: 태그와 같은 이미지 메타데이터를 활용하여 검색 결과의 정확성과 관련성을 향상시킵니다.
- 스마트 크롭을 위한 객체 감지: 객체 감지 기술을 사용하여 이미지 내 주요 객체를 식별하고, 이를 기반으로 이미지를 스마트하게 크롭하여 검색 결과의 시각적 품질을 향상시킵니다.
- GNN을 사용한 향상된 표현 학습: 그래프 신경망(Graph Neural Network, GNN)을 활용하여 이미지 간의 관계를 모델링하고 더 나은 이미지 임베딩을 학습합니다.
- 텍스트 쿼리 기반 이미지 검색: 텍스트 쿼리를 통해 이미지를 검색할 수 있는 기능을 지원하여 사용자의 검색 경험을 다각화합니다.
- 능동 학습과 휴먼 인 더 루프 활용: 능동 학습과 휴먼 인 더 루프를 통해 데이터 주석 과정을 더 효율적으로 수행하고, 모델 학습에 필요한 고품질의 학습 데이터를 생성합니다.
마치며
지금까지 이미지 검색 시스템의 기본 개념에서부터 요구사항 구체화, 문제 구조화, 데이터 준비, 모델 개발, 평가, 그리고 서빙에 이르기까지 다양한 단계를 알아보았습니다.
감사합니다.
Reference
- 핀터레스트 강아지 검색: https://www.pinterest.co.kr/pin/68746467244/visual-search/?x=36&y=181&w=334&h=392&cropSource=6&surfaceType=flashlight
- 책 가상 면접 사례로 배우는 머신러닝 시스템 설계 기초: https://www.yes24.com/Product/Goods/124939147
- Facebook Faiss: https://github.com/facebookresearch/faiss
- Nearest neighbor methods and vector models – part 1: https://erikbern.com/2015/09/24/nearest-neighbor-methods-vector-models-part-1.html
'✈️ 시스템 설계' 카테고리의 다른 글
머신러닝 시스템 설계 - 유튜브 동영상 검색 시스템 (1) | 2024.04.14 |
---|---|
프로메테우스, 데이터독과 유사한 모니터링/알람 시스템 설계 1. 초기 설계안 (2) | 2024.03.16 |
분산 메시지 큐 시스템 설계 1. 분산 메시지큐 주요 기능, 컴포넌트 설명과 초기 설계안 (0) | 2024.02.18 |
댓글