📌 프로젝트 개요
실제 생활 공간은 이미 다양한 가구로 구성되어 있는 경우가 대부분이다. 그런데 IKEA Place, 오늘의집 등 기존 인테리어 앱들은 모두 빈 방에 새 가구를 배치하는 방향으로만 동작한다. 이미 보유한 가구를 활용해 레이아웃을 바꿔보는 기능은 지원하지 않는다. 그리고 기존의 인테리어 프로그램들은 빈 도면에서 시작하여 카탈로그 내 수많은 모델 중 자신의 가구와 가장 유사한 것을 일일이 찾아 배치해야 하는 번거로움으로 인하여 전문가가 아닌 일반 사용자가 사용하기에는 큰 어려움이 있다.
본 프로젝트는 이 어려움을 해결하기 위해 사진 한 장만으로 가구를 제거하고 재배치할 수 있는 2D 역방향 공간 편집 시스템을 개발하였다. 이사, 청소, 리모델링 전에 공간 변화를 미리 시뮬레이션할 수 있다.
🛠 기술 스택
| 역할 | 기술 |
| 객체 분할 | SAM2 (Meta AI) |
| 1차 배경 복원 | LaMa |
| 2차 배경 복원 | Stable Diffusion ControlNet Inpainting |
| 백엔드 | FastAPI |
| 프론트엔드 | Reat |
⚙️ 시스템 파이프라인

💡 주요 기능
① 가구 객체 분할 및 아이템 저장
제거할 가구 위를 마우스로 클릭하면 SAM2가 자동으로 해당 객체의 마스크를 생성한다. 여러 포인트를 클릭해 개별 마스크를 생성한 후 합산하여 최종 마스크를 구성한다. 선택된 가구는 배경이 투명한 RGBA PNG로 저장되어 재배치 단계에서 활용된다.

② 빈 방 생성 (2단계 인페인팅)
LaMa가 가구 마스크 영역을 1차로 복원하여 배경의 기하학적 구조를 잡고, 이후 SD ControlNet이 Canny 엣지를 조건으로 바닥과 벽면 텍스처를 자연스럽게 완성한다. 두 모델을 순차적으로 결합한 2단계 파이프라인으로 시각적으로 자연스러운 빈 방 이미지를 생성한다.

③ 인터랙티브 가구 재배치
왼쪽에 가구 아이템들이 리스트로 저장되어있고 생성된 빈 방 위에 저장된 가구 아이템을 드래그앤드롭으로 원하는 위치에 배치할 수 있다. 크기 조절, 위치 이동, 좌우 반전, 삭제 기능을 지원하며 다양한 레이아웃을 실시간으로 비교할 수 있다. 최종 결과는 이미지 파일로 저장된다.

④ 결과

Troubleshooting
1. 객체 인식 방법 탐색
처음에는 가구의 좌표를 코드에 직접 하드코딩하는 방식으로 시작했다. 당연히 이미지마다 좌표가 달라서 실용성이 없었고, 다른 방법을 찾아야 했다.

그 다음으로 SAM2의 Point 방식을 시도했다. 가구 위에 점을 찍으면 해당 객체를 인식하는 방식인데, 점 하나로는 원하는 객체를 정확하게 잡지 못하는 경우가 많았다.

Box 방식도 써봤다. 가구 주변에 박스를 그려서 영역을 지정하는 방법인데, 박스 안에 여러 객체가 함께 잡히는 문제가 있었다.

전체 객체 자동 시각화도 시도해보았다.

Grounded SAM2를 활용해서 "침대", "소파" 같은 텍스트를 입력하면 해당 객체를 찾는 방식도 실험해봤다.

from groundingdino.util.inference import load_image, predict
import torch
# 이미지 로드
image_source, image_tensor = load_image("/content/drive/MyDrive/room1.jpg")
# 텍스트로 침대 탐지
TEXT_PROMPT = "bed"
BOX_THRESHOLD = 0.35
TEXT_THRESHOLD = 0.25
boxes, logits, phrases = predict(
model=model,
image=image_tensor,
caption=TEXT_PROMPT,
box_threshold=BOX_THRESHOLD,
text_threshold=TEXT_THRESHOLD
)
최종적으로는 사용자가 제거할 가구 위를 직접 다중 클릭하는 방식을 채택했다. 여러 포인트를 찍을수록 마스크 정확도가 높아지고, 사용자가 원하는 객체를 직접 지정할 수 있어서 가장 직관적이고 정확했다.
2. 배경 복원 품질 문제
초기에는 IOPainting만 단독으로 사용했는데, 가구를 지운 자리가 얼룩지거나 부자연스럽게 남는 문제가 있었다. LaMa로 구조적 복원을 먼저 수행하고 SD ControlNet으로 텍스처를 후처리하는 2단계 파이프라인으로 변경하면서 품질이 크게 개선되었다. 특히 원근감이 있는 나무 바닥 패턴이 가장 복원하기 어려운 케이스였다.
📎 GitHub
'프로젝트' 카테고리의 다른 글
| Meta SAM3D 인테리어 시스템 개발 기록 (5) — SAM3D로 3D 방 만들기 도전!? (0) | 2026.06.07 |
|---|---|
| Meta SAM3D 인테리어 시스템 개발 기록 (4) — SAM3D 가구 복원 최적화 (0) | 2026.06.07 |
| Meta SAM3D 인테리어 시스템 개발 기록 (3) (0) | 2026.05.06 |
| Meta SAM3D 인테리어 시스템 개발 기록 (2) (0) | 2026.04.26 |
| Meta SAM3D 인테리어 시스템 개발 기록 (1) (0) | 2026.04.22 |