Meta SAM3D 인테리어 시스템 개발 기록 (4) — SAM3D 가구 복원 최적화

2026. 6. 7. 15:19·프로젝트

📌 이번 글에서 다룬 것

지난 글에서 SAM3D로 가구를 3D로 변환하고 Three.js 방에 배치하는 기능까지 구현했다. 근데 막상 여러 가구로 테스트해보니까 문제가 한두 가지가 아니었다.

화분은 테이블로 복원되고, 조명은 납작한 판때기가 되고, 같은 소파인데 실행할 때마다 형태가 달라지고... SAM3D를 실내 사진에 그냥 들이밀면 안 된다는 걸 몸으로 배웠다.

조명과 화분을 SAM3D로 제작했을 때 문제 상황

이번 글에서는 이 문제들을 어떻게 해결했는지 정리한다.


🌱 문제 1: 얇은 가구에서 depth 추정 실패

뭐가 문제였냐

화분, 조명, 시계 같은 얇고 작은 가구를 SAM3D에 넣으면 직육면체 덩어리가 나왔다. 아무리 봐도 화분이 아닌...

원인을 파고들어보니 SAM3D 내부에서 MoGe-v2가 depth를 추정할 때 마스크 영역 안에 유효한 depth값이 하나도 없으면 scale calibration이 실패하는 거였다. 얇은 물체는 마스크가 작아서 depth값이 전부 NaN으로 나오는 케이스가 많았다.

해결 방법: Progressive Dilation Patch

마스크를 점점 키워가면서 유효한 depth값을 탐색하는 방식을 구현했다.

# 커널 크기를 5 → 11 → 21 → 41 순으로 팽창
for kernel_size in [5, 11, 21, 41]:
    dilated = cv2.dilate(mask, np.ones((kernel_size, kernel_size)))
    valid_depth = depth[dilated > 0]
    if len(valid_depth[~np.isnan(valid_depth)]) > 0:
        break  # 유효값 찾으면 탈출

 

처음엔 5×5 커널로 살짝만 팽창시키고, 그래도 유효값이 없으면 11, 21, 41 순서로 점점 크게 키워가는 방식이다. 이렇게 하면 얇은 물체에서도 주변 depth값을 안정적으로 확보할 수 있다.

이거 적용하고 나서 화분, 시계, 조명 같은 얇은 가구들도 제대로 복원되기 시작했다.


📐 문제 2: 패딩 비율에 따른 형상 오염 — 우리가 처음 발견한 거

뭐가 문제였냐

SAM3D는 단일 클린 객체 이미지를 전제로 설계된 모델이다. 근데 우리는 실내 사진에서 가구를 크롭해서 넣어야 한다. 이때 가구 주변을 얼마나 포함시키냐가 생각보다 엄청 중요했다.

패딩을 안 주면(0%) MoGe가 공간 구조 정보 없이 depth를 추정하게 돼서 scale calibration이 불안정해진다.

근데 패딩을 너무 많이 주면(50%) 주변 가구나 구조물의 형태가 SAM3D의 shape prior에 혼입돼서 형상이 왜곡된다. 실제로 화분 복원할 때 50% 패딩 주니까 화분 옆에 있던 테이블 형태가 prior에 섞여서 화분이 테이블로 복원되는 황당한 일이 벌어졌다.

 

패딩 0%  → depth 추정 불안정 → scale calibration 실패
패딩 15% → 균형점 ✅
패딩 50% → 주변 가구 shape prior 오염 → 형상 왜곡

 

 

0%, 15%, 50% 세 가지를 비교 실험해서 15%가 균형점임을 확인했다.

이 트레이드오프는 SAM3D 원 논문에도 없는 내용이고 검색해봐도 아무도 분석한 게 없었다. 실내 멀티 오브젝트 환경에 단일 객체 모델을 적용하면서 생기는 도메인 갭 문제인데 우리가 실험하면서 처음 발견한 거다.

근데 나중에 Mesh Postprocessing을 활성화하면서 패딩 없이 회색 배경(RGB 128)만으로도 안정적인 복원이 가능하다는 걸 확인했고, 최종 시스템은 그냥 회색 배경 방식을 채택했다.


🎲 문제 3: 랜덤 시드 의존성 — 같은 소파인데 매번 달라

뭐가 문제였냐

SAM3D 내부에 Diffusion 모델이 있어서 동일한 입력이어도 시드에 따라 결과가 완전히 달라진다. 어떤 시드에서는 시계가 입체적으로 잘 나오고, 어떤 시드에서는 납작한 판때기가 나온다.

실제로 같은 시계 이미지로 10번 돌려봤더니 입체성 지표 표준편차가 0.162나 됐다. 서비스에 쓰기엔 너무 불안정했다.

해결 방법: 카테고리별 다중 시드 선택

Stage 1(초기 3D 형상 생성 단계)을 5번 반복 실행하고, 카테고리별로 다른 기준으로 최적 시드를 고르는 방식을 만들었다.

# 일반 가구 (소파, 의자, 테이블 등)
# → 세 축(x, y, z) 중 최소 범위를 최대화
# 납작한 결과 방지
ranges = voxel.max(axis=0) - voxel.min(axis=0)
score = float(ranges.min())

# 얇은 가구 (화분, 조명, 시계 등)
# → 복셀 개수를 최대화
# 구조적 완전성 우선
score = float(len(voxel))

일반 가구는 세 축 중 가장 짧은 축이 최대한 길어야 입체적인 거니까 최솟값을 최대화하는 기준을 썼다. 얇은 가구는 형태 자체가 납작한 게 맞으니까 복셀 수가 많을수록 더 완전하게 복원된 거라고 봤다.

시계로 단일 시드 vs 5회 다중 시드를 각각 10회 실험한 결과, 표준편차가 0.162에서 0.032로 줄었다.

형상 일관성이 확 올라간 거다.

물론 Stage 1을 5번 돌리니까 처리시간이 10초에서 41초로 늘어나는 트레이드오프가 있다. 근데 형상 품질 안정성이 훨씬 중요하다고 판단해서 그냥 감수했다.


이 세가지 방법을 합쳐서 돌려보면 어떤 가구를 넣어도 잘 나온다.

 

세가지 방법을 사용해서 가구를 3D 모델링한 결과들


🔧 최종 입력 파이프라인

이 세 가지를 합치면 최종 가구 입력 전처리 파이프라인이 이렇게 된다.

 

가구 이미지 (RGBA)
    ↓
마스크 bbox 크롭 (512~1024px)
    ↓
카테고리별 Morphological CLOSE
(일반: 25×25 / 얇은 가구: 5×5)
    ↓
회색 배경(RGB 128) + 마스크 정규화 (*255)
    ↓
Stage 1 × 5회 → 카테고리별 기준으로 최적 시드 선택
    ↓
Stage 2 → 3D 메쉬 + 버텍스 컬러

 


 

다음 글에서는 SAM3D로 빈방을 3D로 만들려고 시도했던 것들, 그리고 왜 결국 Three.js 박스 방으로 전환했는지 정리할 예정이다.

'프로젝트' 카테고리의 다른 글

Meta SAM3D 인테리어 시스템 개발 기록 (6) — UV 텍스처 베이킹 vs 버텍스 컬러, 사용자 평가, 논문 제출  (0) 2026.06.14
Meta SAM3D 인테리어 시스템 개발 기록 (5) — SAM3D로 3D 방 만들기 도전!?  (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
'프로젝트' 카테고리의 다른 글
  • Meta SAM3D 인테리어 시스템 개발 기록 (6) — UV 텍스처 베이킹 vs 버텍스 컬러, 사용자 평가, 논문 제출
  • Meta SAM3D 인테리어 시스템 개발 기록 (5) — SAM3D로 3D 방 만들기 도전!?
  • Meta SAM3D 인테리어 시스템 개발 기록 (3)
  • Meta SAM3D 인테리어 시스템 개발 기록 (2)
angrimilog
angrimilog
개발 흔적 남기기
  • angrimilog
    angrimi의 개발 기록지
    angrimilog
  • 전체
    오늘
    어제
    • 분류 전체보기 (7)
      • 프로젝트 (7)
      • Troubleshooting (0)
      • TIL (Today I Learned) (0)
      • 알고리즘 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    MoGe
    3D모델링
    가구
    SAM3D
    sam2
    인테리어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
angrimilog
Meta SAM3D 인테리어 시스템 개발 기록 (4) — SAM3D 가구 복원 최적화
상단으로

티스토리툴바