Furniture retrieval
3차. Furniture retrieval
Period: a month(24/11/25~24/12/26)
Goal: Retrieve image from selected SOP dataset with cosine similarity, after generation of image of furniture with prompt and position(b-box)
Dataset: SOP
Model: GLIGEN + Hyperbolic Vision Transformer(HViT)
1. Image generation with GLIGEN
B-box, Phrase, Prompt 조건을 가지고 이미지 생성.
B-box: 배경 이미지에서 사물을 생성하고자 하는 위치
Phrase: 물체의 종류
Prompt: 물체의 특징
* 프롬프트 작성 팁:
따옴표, 쉼표와 마침표 적극적으로 사용하며, 문장의 앞이 강조되고 뒤로 갈수록 fade-out 되기에 밸런스를 맞춰주는 것이 좋다.
(): 강조
[]: 약화
+: 화소 증가
콜론과 중첩으로 퍼센티지 조정 가능.
예시. [Seagulls]+ are flying, over "the sea (shining:1.4)++, with ((sunlight))". -> 빛나는 바다를 강조.
2. Build a database with Sqlite
데이터의 순도를 높이기 위해 5가지 스타일, 6개 가구 종류, 클래스별 50개 이미지를 따로 선별하여 진행(6*5*50=1500).
HViT로 선별된 SOP 데이터셋의 특징맵 추출 후 원 데이터 정보와 함께 DB화.
3. Image ritreival with HViT
생성된 이미지의 특징맵 추출을 위 방식과 동일하게 진행한 후, 데이터베이스 내 상품들과 거리를 계산해 상위 5개 추천.
성능값과 더불어 이미지상 유사한 정도를 확인하여 가장 적절한 모델 선정(HViT).
* 유사도 기준 L2 Norm vs Cosine similarity:
n차원의 푸앵카레 볼 내에 위치시키기에 직선 기준 L2 Norm보다 각도 기준인 Cos sim이 더 정확.
* 사용한 특징맵 추출 모델:
SIFT, SURF, FAST: 수학 공식에 기반한 전통적인 특징 추출 모델.
LPIPS, Simsiam, resnet-50, ViT, HViT: 딥러닝에 기반한 특징 추출 모델. 성능이 우수.
시도:
1. Grounding DINO, YOLO 모델로 물체를 감지해 b-box정보를 얻어오려는 시도.
- 라이브러리 streamlit-drawable-canvas를 통해 b-box position 정보 전달
2. 이미지 생성시 자유도가 높아 사용자가 원하는 물체를 의도에 맞게 만들어내지 못함.
- Phrase와 Prompt에서 사용자가 입력할 구간만 열어두고, 그 외 문장은 상식적인 내용으로 고정.
3. SOP dataset의 불순도가 생각보다 높음.
- 배경이 없고, 단독 물체이며, 중복되지 않는, 해당 스타일에 맞는 가구 이미지 선별.
4. 유사도 기반 이미지 추천 단계에서 수치와는 별개로 그림자를 부분으로 인식하는 문제, 색상을 반영하지 않은 문제를 마주함.
- 재검증 단계 진행.
세개의 프로젝트 정리 글 내용을 나름 다르게 해보았다. 첫 번째는 생각 위주로, 두 번째는 이론적으로, 세 번째는 과정을 주로 보였는데, 개인적으로 시행착오를 담은 과정과 진행하면서 든 생각들을 같이 적는게 좋아 보인다.
- 실제 판매하는 상품을 추천해주는 서비스로 진행했다면 더 활용하기 좋겠지만, 이미지나 정보들이 규격화 되어있지 않아 시도하지 않았다.
- 생성된 이미지와 데이터셋의 가로세로 사이즈가 다르기에, 정확도를 높이기 위해 가로 세로 고정값으로 변경 후 진행했는데, 이미지를 변형하지 않고 패딩만 추가하는게 적절했겠다 하는 아쉬움이 있다.
- 3D 이미지를 읽어와 방안의 가로세로 사이즈에 맞게 가구배치까지 도와주는 방식이었어도 좋았겠다 싶다. 가구는 보통은 사이즈가 고정되어 있으니 응용하지 않고 해당 가구 종류 값만 가져오면 된다.