이 프로젝트는 Convolutional Autoencoder(CAE)를 활용하여 동물 이미지의 핵심 특징(Latent Feature)을 추출하고, 이를 기반으로 유사한 이미지를 검색하는 내용 기반 이미지 검색(Content-Based Image Retrieval, CBIR) 시스템을 구현한 과제입니다.
- 목표: 동물 이미지 데이터셋을 학습하여 이미지를 저차원 벡터로 압축하고, 질의(Query) 이미지와 가장 유사한 특징을 가진 이미지를 검색합니다.
- 데이터셋: Animal Faces HQ (AFHQ)
- 주요 라이브러리:
PyTorch,torchvision,scikit-learn,matplotlib
-
Input:
$512 \times 512 \times 3$ RGB Image -
Layers:
- 3x3 Conv (Stride 3)
$\rightarrow$ MaxPool (2x2) - 3x3 Conv (Stride 2)
$\rightarrow$ MaxPool (2x1) - Flatten
$\rightarrow$ Linear ($8 \times 42 \times 42 \rightarrow$ Latent Dim)
- 3x3 Conv (Stride 3)
- Latent Space: 512차원의 특징 벡터 추출
-
Layers:
- Linear
$\rightarrow$ Reshape ($8 \times 42 \times 42$ ) - ConvTranspose2d (Stride 2)
$\rightarrow$ 85x85 - ConvTranspose2d (Stride 3)
$\rightarrow$ 255x255 - ConvTranspose2d (Stride 2)
$\rightarrow$ 512x512
- Linear
-
Output:
$512 \times 512 \times 3$ Reconstructed Image (TanhActivation)
- Feature Extraction: 학습된 인코더를 통해 모든 데이터셋 이미지의 잠재 특징 벡터를 추출하여 인덱싱합니다.
- Similarity Search:
torch.cdist를 활용하여 유클리디안 거리(Euclidean Distance)가 가장 가까운 Top-K 이미지를 검색합니다. - Visualization: 질의 이미지와 검색된 결과를 Grid 형태로 시각화하여 성능을 비교합니다.
-
Kaggle API 설정:
kaggle.json을 준비하여opendatasets라이브러리로 데이터를 다운로드합니다. -
Preprocessing:
$512 \times 512$ 해상도로 리사이즈 및 정규화($[-1, 1]$ )를 수행합니다. -
Training:
MSELoss를 사용하여 재구성 오차를 최소화하도록 학습합니다. (추천: 10~20 Epoch) -
Retrieval:
find_similar_images함수를 호출하여 결과를 확인합니다.
