인공지능/플젝

Furniture retrieval

jjnll 2025. 1. 29. 01:36

 

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 이미지를 읽어와 방안의 가로세로 사이즈에 맞게 가구배치까지 도와주는 방식이었어도 좋았겠다 싶다. 가구는 보통은 사이즈가 고정되어 있으니 응용하지 않고 해당 가구 종류 값만 가져오면 된다.

 

 

 

728x90