2분반-Flat2Form

cdc wiki
이동: 둘러보기, 검색

프로젝트 개요

기술개발 과제

국문: 3D 방 스캐너

영문: 3D Room Scanner

과제 팀명

Flat2Form

지도교수

박관용 교수님

개발기간

2025년 3월 ~ 2025년 6월 (총 4개월)

구성원 소개

서울시립대학교 컴퓨터과학부 20199200xx 박*규 (팀장)

서울시립대학교 컴퓨터과학부 20209200xx 김*현

서울시립대학교 컴퓨터과학부 20209200xx 류*욱

서울시립대학교 컴퓨터과학부 20219200xx 바****랑

서울시립대학교 컴퓨터과학부 20219200xx 최*우

서론

개발 과제의 개요

개발 과제 요약

이 프로젝트는 방의 내부 point cloud로부터 객체 검출 및 벽 평면화를 수행하여 방의 3D 평면도를 생성하는 iOS 앱 및 백엔드 서버를 개발하는 것을 목표로 한다.

개발 과제의 배경

  • 기존의 3D 복원 방법은 LiDAR, RGB-D 카메라 등 추가적인 하드웨어 장치를 필요로 하지만, 비용이 높고 대중적으로 활용하기 어렵다는 한계가 있다. RGB 카메라만을 사용하여 3D 모델을 복원하여 일반적인 스마트폰에서도 활용할 수 있도록 한다.
  • 기존의 SfM + MVS 기술을 활용한 3D 복원은 연산량이 많고 메모리 사용량이 커 시간이 오래 걸린다는 문제가 있다. 이러한 문제를 해결해줄 연산 효율성이 높은 알고리즘을 사용하여 RGB 이미지 기반 3D 평면도 및 모델을 제공한다.
  • 사용자 방의 3D 모델 및 평면도를 두가지 형태로 제공한다. 또한 만들어진 모델을 Blender 등의 3D 에디터를 통해 가구 재배치 등에 사용할 수 있다. 이를 통해 사용자는 방의 인테리어 계획, 방의 공간 구조를 분석 등 다양한 방식으로 실내 공간을 탐색하고 활용 가능하다. 앱을 제공함으로 누구나 쉽게 사용할 수 있다는 점에서 접근성과 경제성이 효율적이다.
  • 개발 완성 기술을 사용하여 다양한 외부 플랫폼과 연동이 가능하다. 부동산 플랫폼에는 공간 구조를 시각적으로 모델을 할 시 매물의 정확한 구조를 제시 가능하며 사용자 맞춤형 구조나 인테리어 추천도 가능하게 된다.

개발 과제의 목표 및 내용

  • iOS: 스캔 및 서버 업로드 기능, 업로드된 데이터를 기반으로 3D 모델 생성 완료 시 Apple Push Notification service를 활용하여 사용자 디바이스로 푸시 알림 전송 기능, 3D 모델 내보내기 기능을 구현한다.
  • Fast3R 기술의 개발 및 이미지 인식 후 3D 모델링. Fast3R 기술의 설계 및 알고리즘을 파악한 뒤에 Reconstruction 프로토타입 구현하며 알고리즘의 최적화 및 테스팅을 진행한다.
  • 스캔된 방의 point cloud를 이용해 벽면을 인식하여 객체 검출하는 기술을 개발하고 3D 평면도를 제공한다.

관련 기술의 현황

State of art

  • 딥러닝 기반 3D 복원 기술: 2d 이미지로부터 3d 복원을 수행하는 Vision Transformer 기반의 딥러닝 모델이 좋은 성능을 나타내고 있다. 2D 이미지 집합으로부터 3D 장면을 재구성해 새로운 시점의 이미지를 렌더링하는 NeRF 기술, 2D 이미지 집합으로부터 3D 점들의 위치를 복원하는 Dust3R, Fast3R 모델 등이 연구되고 있다. 이러한 기술은 AR/VR, 자율 주행 등의 분야에서 활용되고 있다.
  • 사물 인식 기술: 3D 공간의 점들을 의미있는 단위로 분할하고 사물을 분류하는 기술이다. 전통적으로 3D 데이터를 처리하기 위해 복셀화나 다중 뷰 투영과 같은 방법이 사용되었으나, 최근에는 3D 데이터를 직접 처리하는 딥러닝 모델이 주목받고 있다. 딥러닝 모델은 데이터의 구조적 정보를 보존하면서도 효율적인 처리를 가능하게 한다. 이러한 기술은 자율 주행, 물류 및 공급망 운영, 건축, 의료 분야 등 다양한 분야에서 활용되고 있다.
  • 벽면 검출하는 알고리즘: 실내의 벽, 바닥, 천장 등을 검출하는 RANSAC 알고리즘을 사용하였다. 이 알고리즘은 포인트 클라우드 점들 사이에 노이즈가 있어서 잘 작동하여 벽면을 검출하는 특징이 있다. 각 평면의 방향을 이용해서 수직이면 벽 수평이면 바닥이나 천장으로 구분이 가능하다. 이렇게 적용한 후에 결과물을 매쉬화 하여 3D 평면도에 반영되고 있다.
  • SoftGroup 기반 객체 검출: 실내의 객체들을 검출하는 모델이다. 사전 학습된 모델을 이용하여 포인트 클라우드 내 객체 검출을 해주며 어떤 종류에 분류되는지도 확인 가능하다.
  • DBSCAN: DBSCAN 알고리즘은 포인트들이 얼마나 가까이 모여 있는지의 대한 기준으로, 밀집된 점들을 하나의 클러스터로 묶어준다. 이를 통해서 객체들이 각각 구분되어 식별할 수 있다. 실제 적용 과정에 높은 품질의 데이터를 요구한다.

기술 로드맵

  • iOS
    • Swift concurrency
    • Clean architecture를 따른 앱 개발
    • Swift Testing를 사용해 유닛 테스트 및 UI 테스트 작성
    • Instruments를 활용해 hang 분석
  • 3D 복원 기술
    • Vision Transfomer 분석
    • Fast3R 모델 분석
    • 실내 공간 데이터셋 구축
    • Fast3R 모델 Fine-tuning
  • 3D 평면도
    • 벽면 인식하는 RANSAC 알고리즘
    • 객체 인식과 검출 하는 SoftGroup 모델과 DBSCAN 모델
경쟁제품 조사 비교
  • 3D Room Scanner & Modeling AI: Apple의 RoomPlan API를 사용, LiDAR 카메라를 필요로 함.
마케팅 전략 제시
  • LiDAR 카메라가 필요하지 않음을 어필한다.
  • AI 기반 3D 복원 및 사물 인식 기술을 강조하여 속도와 정확성을 어필한다.
  • 앱을 활용한 3D 복원 결과를 Blender 등의 데스크탑 에디터를 활용해 사물 배치, 제거 기능을 통해 가상으로 편리하게 인테리어가 가능함을 알린다.

개발과제의 기대효과

기술적 기대효과

  • fast3r을 통해 전통적인 pairwise 방식보다 빠르고 오류 누적이 적게 3D 재구성을 할 수 있고 이를 바탕으로 생성된 3D 모델로부터 정확한 3D 평면도를 추출할 수 있어 건축, 인테리어 등 여러 분야에 활용도가 높다.
  • LoRA를 적용해 특정 환경 (예, 실내 환경)에 복원 능력 개선을 이루고 파라미터 효율성과 자원 절감을 기대할 수 있다.

경제적, 사회적 기대 및 파급효과

  • 기존의 3D 복원 방법은 LiDAR, RGB-D 카메라 등 추가적인 하드웨어 장치를 필요로 하지만, 비용이 높고 대중적으로 활용하기 어렵다는 한계가 있다. 개발과제를 통해 LiDAR 카메라가 존재하지 않는 핸드폰을 활용해서도 3D 스캔을 가능하게 하는 것을 기대할 수 있다.
  • 일반 소비자나 소규모 업체도 쉽게 실내 공간을 디지털화할 수 있게 되어 사용자 접근성과 편의성이 증대된다.
  • 건축, 인테리어 디자인 등 다양한 분야에서 활용이 가능하며, 실제 데이터를 활용한 교육 및 연구도 가능해진다.
  • 결과물을 내보내 컴퓨터에서 Blender 등의 3D 에디터를 활용해 가구 재배치 시뮬레이션에 활용할 수 있다.

기술개발 일정 및 추진체계

개발 일정

추진 내용 추진 기간 세부 내용
기획 및 사전조사 2025.03.05. ~ 2025.03.26. 프로젝트 방향성 확정 및 주요 명세 확립, 프로젝트 제안서 작성
프로젝트 설계 2025.03.26. ~ 2025.04.09. 각 도메인 세부 설계, 중간설계보고서 작성
프로젝트 구현 2025.04.09. ~ 2025.05.21. 각 도메인 기능 구현
도메인 통합 및 프로토타입 발표 2025.05.21. ~ 2025.06.04. FE, AI 통합, 프로토타입 완성 및 발표
통합 테스트 및 최종 수정 2025.06.04. ~ 2025.06.18. 통합 테스트, 사용자 테스트, 최종보고서 작성

추진체계

이름 담당 업무
김*현 Fast3r 모델 분석 및 구현
류*욱 Fast3r 모델 분석 및 구현
박*규 벽면 인식과 객체 검출 후 3D 평면도 생성
바****랑 벽면 인식과 객체 검출 후 3D 평면도 생성
최*우 iOS 앱 디자인 및 개발, 백엔드 개발

설계

사용자 요구사항

번호 요 구 사 항
R1 사용자는 Sign in with Apple을 활용해 로그인 할 수 있어야 한다.
R2 사용자는 3D 모델링을 위한 대상을 스캔할 수 있어야 한다.
R3 사용자는 스캔 후 업로드가 안정적으로 이루어지기를 원한다.
R4 사용자는 3D 모델이 생성되면 그 진행 상황을 알림을 통해 확인하고 싶다.
R5 사용자는 생성된 3D 모델을 디바이스에서 직접 보고 활용할 수 있어야 한다.
R6 사용자는 생성된 모델을 외부로 내보낼 수 있어야 한다.
R7 사용자는 2D 이미지에서 포인트 클라우드를 생성하고 결과를 활용하고 싶다.
R8 사용자는 공간 내 벽면 및 객체를 자동으로 인식하길 원한다.
R9 사용자는 전체 공간 구조를 파악할 수 있는 3D 평면도를 원한다.

사용자 요구사항 만족을 위한 기능 정의 및 기능별 정량목표

번호 기능 설명 관련 사용자 요구사항 정량 목표
F1 Apple 로그인 기능 제공 R1 로그인 성공률 99% 이상
F2 카메라 기반 스캔 기능 제공 R2 20장의 이미지 혹은 라이다 스캔 처리 시간 ≤ 10초
F3 이미지 업로드 및 로컬 백업 기반 업로드 태스크 관리 R3 업로드 실패 시 로컬 태스크로 재시도 성공률 95% 이상
F4 서버에서의 3D 모델 생성 처리 R3, R4 서버 3D 모델 생성 시간 ≤ 1분
F5 모델 생성 완료 시 푸시 알림 전송 R4 모델 생성 후 10초 이내 푸시 알림 전송
F6 생성된 모델의 디바이스 다운로드 및 저장 R5 모델 파일 다운로드 성공률 99% 이상
F7 저장된 3D 모델 내보내기 기능 (파일 공유, AirDrop 등) R6 내보내기 대상 선택부터 완료까지 소요 시간 ≤ 30초
F8 2D 이미지 집합에서 포인트 클라우드 자동 생성 R7 포인트 클라우드 생성 정확도 85% 이상
F9 포인트 클라우드로부터 벽면 인식 기능 R8 벽면 인식 recall 80% 이상
F10 포인트 클라우드로부터 객체(가구 등) 인식 기능 R8 가구/객체 인식 정확도 80% 이상
F11 포인트 클라우드를 기반으로 한 3D 평면도 생성 R9 평면도 구성 정확도 80% 이상

기능 구현을 위한 세부기술 선택사항 (디자인)

iOS

  • SwiftUI: SwiftUI는 Apple 플랫폼을 위한 선언형(declarative) UI 프레임워크로, 본 앱에서는 모든 사용자 인터페이스를 SwiftUI로 작성하였다. SwiftUI의 뷰 계층은 Combine과 연동되어, 글로벌 상태(AppState)의 변화에 대응하며, dependency injection을 통해 각 뷰에서 필요한 Interactor 및 서비스에 접근한다.
  • ARKit & RealityKit: ARKit은 Apple의 증강현실 프레임워크로, LiDAR 센서 데이터를 활용해 포인트 클라우드를 생성하는 데에 사용되었다. RealityKit은 실시간 3D 렌더링과 애니메이션을 제공하는 프레임워크로, 모델링 결과를 3D로 시각화할 때 사용되었다.
  • SwiftData: SwiftData는 Apple의 data persistence 프레임워크이다. 저장, 조회, 삭제 등 데이터 처리 로직은 레포지토리 패턴으로 추상화하여, 향후 데이터 저장소 교체가 필요할 경우 비즈니스 로직에 영향을 주지 않도록 설계하였다.
  • Combine: Combine은 Apple의 반응형 프로그래밍 프레임워크로, 데이터 흐름과 상태 변화를 선언적으로 처리할 수 있게 한다. 본 프로젝트에서는 AppState와 각종 이벤트 처리에 Combine을 도입하여, 뷰가 상태 변화에 반응하도록 하였다.
  • Dependency Injection: Dependency injection은 각 객체가 외부로부터 필요한 dependency를 주입받도록 하는 설계 원칙이다. 본 프로젝트에서는 DIContainer를 통해 글로벌 상태, 비즈니스 로직(Interactor), 서비스(Keychain, 파일 관리 등)를 프레젠테이션 레이어에 주입한다. 이를 통해 테스트 시에는 실제 구현 대신 Mock 객체를 손쉽게 주입할 수 있고, 기능 확장 및 수정 시 코드 변경 범위를 최소화할 수 있다.
  • Sign in with Apple, Apple Push Notification service, Keychain, AWS 연동: 사용자 인증은 Sign in with Apple과 AWS Cognito를 활용한 OAuth 2.0으로 구현하고, 액세스 토큰 등 민감 정보는 Keychain에 안전하게 저장한다. 3D 스캔 데이터의 업로드 및 다운로드는 AWS S3 Presigned URL과 REST API를 이용해 처리하였으며, Apple Push Notification service 푸시 알림을 위한 디바이스 토큰 등록 등도 별도의 web repository를 통해 관리한다.
  • Swift Testing: 단위 테스트는 Swift Testing 프레임워크를 사용하여, 로컬 데이터 저장, 인증, 네트워킹 등 주요 비즈니스 로직을 검증하였다. Dependency Injection 덕분에 실제 네트워크나 DB에 의존하지 않고 Mock 객체를 사용해 각 계층을 독립적으로 테스트할 수 있으며, 테스트 케이스의 작성과 유지보수가 용이하다.
  • Instruments 프로파일링: 앱의 성능 최적화를 위해 Xcode Instruments를 사용해 앱의 CPU, 메모리 사용량, 메인 스레드 동작, hang 현상 등을 프로파일링 하였다. 이러한 프로파일링 결과를 바탕으로 비동기 작업 분리, 불필요한 객체 유지 해소, 리소스 효율화 등 성능 개선 작업을 반복적으로 수행하였다.

Backend

본 프로젝트의 백엔드는 AWS의 다양한 서비스와 Python 기반 Lambda를 중심으로 완전한 서버리스 아키텍처로 구축되었다.

  • AWS SAM (Serverless Application Model): AWS SAM은 서버리스 애플리케이션을 손쉽게 정의하고 배포할 수 있도록 지원하는 Infra-as-Code 프레임워크이다. 본 프로젝트에서는 API Gateway, Lambda, S3, DynamoDB, SQS, SNS 등의 전체 백엔드 인프라를 SAM 템플릿 하나로 관리함으로써, 인프라 배포 및 버전 관리의 효율성을 극대화하였다.
  • AWS Cognito & Sign in with Apple: 사용자 인증 및 권한 관리는 AWS Cognito User Pool을 기반으로 구현되었으며, iOS 앱과 연동을 위해 Sign in with Apple을 지원한다. Cognito는 OAuth 2.0 표준과 JWT 기반의 인증 방식을 제공하여, 모든 API 엔드포인트 접근 시 인증된 사용자만 접근할 수 있도록 했다. 이를 통해 클라이언트-서버 간 인증 보안성을 확보했다.
  • API Gateway & Lambda (Python): API Gateway는 클라이언트(iOS 앱)와 서버리스 백엔드 간의 REST API 엔드포인트를 제공한다. 본 프로젝트의 모든 주요 기능(업로드 URL 발급, 업로드 완료 처리, 3D 모델 조회, 푸시 토큰 등록 등)은 Python 기반의 Lambda 함수로 구현되어 있으며, 각 함수는 API Gateway를 통해 호출된다. Lambda 함수들은 서버리스 환경에서 자동 확장되며, 3D 변환 작업 Lambda의 경우 Docker 이미지 형태로 업로드한다.
  • Amazon S3: 모든 스캔 파일(포인트 클라우드)과 처리 결과(3D 모델)는 Amazon S3에 저장된다. 클라이언트는 업로드 및 다운로드를 Presigned URL을 통해 직접 처리하며, 서버에서는 S3와의 직접 연동을 통해 파일의 접근 및 수명 관리, 보안 설정을 담당한다.
  • DynamoDB: 작업(Task) 및 디바이스(Devices) 관련 데이터는 AWS의 NoSQL 서비스인 DynamoDB에 저장된다. Tasks 테이블은 각 스캔의 처리 상태(업로드, 대기, 처리 중, 완료 등)를 추적하고, Devices 테이블은 사용자 디바이스의 푸시 알림 엔드포인트를 관리한다.
  • Amazon SQS: 파일 업로드와 3D 모델 변환 등 시간이 오래 걸리는 백엔드 처리는 SQS(큐)를 통해 비동기적으로 처리된다. 업로드 완료 알림이 들어오면 Lambda가 SQS에 메시지를 발행하고, 별도의 3D 변환 전용 Docker 기반 Lambda가 큐를 받아 작업을 수행한다.
  • Amazon SNS & APNs 연동: 스캔 처리 완료 시, Amazon SNS가 APNs(Apple Push Notification service)와 연동되어 iOS 디바이스로 푸시 알림을 발송한다. SNS 플랫폼 애플리케이션은 iOS 환경에 맞게 구성되어 있고, 디바이스 토큰은 별도의 API(/devices/push-token)를 통해 등록 및 관리된다.
  • 테스트(Pytest, Moto): 백엔드 주요 기능(업로드 URL 발급, 상태 추적, 푸시 알림 등)은 Pytest 기반의 단위 테스트로 검증하였다. AWS 리소스(Mock)를 Moto로 시뮬레이션해, 실제 배포 전 로직의 안정성을 확보할 수 있었다.

Fast3R

Fast3R은 ViT 기반으로 all-to-all self-attention을 활용해, 이미지를 3d 포인트 맵과 신뢰도 맵을 출력하는 모델이다.

  • Croco ViT: Fast3R의 이미지 인코더로 사용했으며 이는 각 이미지를 patch 단위 토큰으로 변환하는 역할을 한다.
  • Positional Embedding: 이미지 인덱스 기반 2D positional encoding을 사용했으며 이는 unordered한 입력 이미지에 대한 위치 정보를 부여한다.
  • Fusion Transformer: 사전학습된 ViT-B 모델을 사용했으며 모든 이미지 토큰 간의 전역 self-attention 을 수행한다. (all-to-all)
  • DPT: Fast3R의 디코더 부분으로 dpt 기반의 헤드를 사용했고 이 때 local, global 두 개의 헤드로 local pointmap, confidence 그리고 global pointmap, confidence를 예측하도록 한다.
  • Loss Function: Confidence-weighted normalized 3D point loss를 사용했으며 예측 포인트맵과 정답 포인트맵 간의 정규화된 거리 기반 회귀 손실이다.
  • Optimizer: AdamW + cosine annealing을 사용했으며 이는 표준 비전 트랜스포머 학습 방식이다.
  • Lora: 대형 모델을 파인튜닝할 때 전체 파라미터를 업데이트하지 않고, 몇몇 선형 계층에 대해 저차원 행렬을 학습함으로써 파라미터 효율성을 높이는 기법이다.

3D 평면도

  • Open3D: RANSAC, DBSCAN 구현 및 바운딩 박스 생성에 사용되며, 포인트 클라우드 데이터의 시각화, 파일 load/save 기능을 제공한다.
  • RANSAC: 바닥이나 천장 평면을 우선 검출한 뒤, 이와 직교하는 벽면을 반복적으로 검출하는 데 사용된다. 검출된 평면을 바탕으로 포인트 클라우드를 생성하여 3D 평면도 작성에 활용하였다.
  • DBSCAN: 포인트 클라우드의 노이즈를 제거하고, 인접 밀도를 기준으로 포인트들을 군집화하여 객체 단위로 클러스터링하는 데 사용된다.
  • PyTorch: 사전 학습된 SoftGroup 모델의 로딩 및 인퍼런스 수행에 사용된다.
  • SoftGroup: 포인트 클라우드 상에서 가구 등의 객체를 semantic + instance 단위로 검출한다. 검출된 각 객체에 바운딩 박스를 적용한다.

소프트웨어 설계

iOS

iOS 앱의 소프트웨어 설계는 명확한 책임 분리, 확장성, 그리고 테스트 용이성을 최우선 목표로 하여 이루어졌다. 전체 시스템은 Presentation Layer, Business Logic Layer, Data Access Layer의 3계층 구조로 구성되어 있으며, 각 계층은 자신의 역할에만 집중하도록 설계되어 상호 결합도를 최소화하였다.

사용자 입력과 데이터 시각화 등 모든 화면 로직은 Presentation Layer에 집중되어 있다. SwiftUI를 기반으로 하며, 각 뷰는 AppState의 상태 변화에 실시간으로 반응하여 자동으로 업데이트된다. 의존성 주입(DIContainer)을 통해 필요한 Interactor 및 서비스에 접근하며, 복잡한 비즈니스 로직이나 데이터 접근을 직접 처리하지 않고 사용자 경험에 집중한다.

글로벌 상태(AppState)는 로그인 정보, 권한 상태, 스캔 리스트 등 애플리케이션 전반의 상태를 통합 관리한다. 뷰는 AppState의 변화에 따라 즉각적으로 반응할 수 있다. 비즈니스 로직은 Interactor에서 전담하며, Interactor는 Presentation이나 Data Access Layer의 구체적인 구현에 의존하지 않는다. 이러한 구조는 로직의 테스트와 유지보수를 용이하게 한다.

Repository는 데이터 저장소(로컬 또는 원격)에 대한 접근을 추상화한다. SwiftData를 통한 로컬 데이터 관리, REST API 기반의 네트워크 통신 등 다양한 저장소 구현이 있으며, Interactor에서는 repository의 프로토콜을 통해 데이터에 접근한다. 이 구조는 저장소 교체나 확장에도 비즈니스 로직의 변경을 최소화할 수 있다.

사용자는 SwiftUI 기반 UI에서 스캔을 시작하며, ARKit과 RealityKit이 LiDAR 센서 데이터를 실시간으로 수집 및 처리하여 포인트 클라우드를 생성한다. 스캔이 완료되면, 해당 데이터는 SwiftData와 FileManager를 통해 로컬에 저장된다. 이후 Interactor가 repository를 호출해 AWS S3 Presigned URL을 통한 포인트 클라우드 업로드를 실행하며, 스캔의 업로드 상태와 성공/실패 등 모든 진행 상황은 AppState에 반영된다. UI는 이러한 상태 변화에 즉각적으로 대응한다.

앱은 SwiftUI Life Cycle을 기반으로 동작하지만, 푸시 알림이나 딥링크와 같은 시스템 이벤트 처리는 UIKit AppDelegate 어댑터를 통해 이루어진다. 각종 시스템 이벤트 발생 시 전용 handler 객체가 Interactor에 이벤트를 전달하여 관련 워크플로우를 실행한다. 카메라, 알림 등 권한 역시 AppState에서 일원화해 관리하며, 권한 상태가 변경될 경우 UI와 전체 워크플로우에 즉시 반영된다.

모든 의존성(Dependency)은 AppEnvironment에서 통합적으로 관리되며, DIContainer를 통해 각 계층에 필요한 객체가 주입된다. 이 구조는 각 계층의 독립성과 테스트 용이성을 극대화할 뿐 아니라, 새로운 기능 추가나 외부 서비스 교체 등 시스템 확장 시에도 변경 범위를 최소화할 수 있도록 하였다.

인증 및 세션 관리는 Sign in with Apple과 AWS Cognito를 활용한 OAuth 2.0 기반으로 구현되었으며, 액세스 토큰 등 민감한 정보는 Keychain에 안전하게 저장된다.

전체 시스템의 안정성과 신뢰성을 확보하기 위해 local data persistence, authentication, networking logic 등에 대해 총 40여 개의 유닛 테스트를 작성하였다. 테스트는 Mock 객체와 Dependency Injection을 적극 활용하였다. 이를 통해 코드 품질을 지속적으로 관리하고, 신규 기능 추가 및 리팩터링 시에 safety net 역할을 하도록 하였다.

Backend

본 프로젝트의 백엔드 소프트웨어 설계는 서버리스(Serverless) 아키텍처를 중심으로, 확장성과 유지보수성, 그리고 자동화된 인프라 관리에 중점을 두고 이루어졌다. 모든 컴포넌트는 AWS의 관리형 서비스(AWS Managed Services)를 적극적으로 활용하였다.

백엔드의 모든 API와 데이터 처리는 RESTful 엔드포인트와 AWS Lambda 함수로 이루어진다. 각 Lambda 함수는 단일 책임 원칙(Single Responsibility Principle)을 따르도록 설계되어, 업로드 URL 발급, 업로드 완료 처리, 스캔 결과 조회, 푸시 토큰 등록 등 각 기능별로 분리되어 있다. Lambda 함수는 API Gateway, SQS, SNS, DynamoDB, S3 등과 직접적으로 연동되며, 내부적으로는 Python을 사용해 구현된다. 복잡한 3D 변환 및 대용량 파일 처리와 같은 워크로드는 Docker 기반 Lambda를 통해 구현하였다..

인증 및 인가(Authentication & Authorization) 부분에서는 AWS Cognito와 JWT 기반의 인증 체계를 채택하였다. 모든 민감한 API 엔드포인트는 Cognito User Pool의 JWT 토큰을 요구하며, API Gateway에서 토큰 검증이 자동으로 처리되어 애플리케이션 코드에서 인증 로직의 부담을 최소화했다. Sign in with Apple 연동을 통해 iOS 앱에서 사용자가 자신의 Apple ID로 손쉽게 로그인 할 수 있도록 하였다.

데이터 관리 측면에서는, 비정형 파일(포인트 클라우드, 3D 모델)은 Amazon S3에 저장하고, 메타데이터(작업 상태, 디바이스 정보 등)는 DynamoDB에 분리하여 저장한다. S3 Presigned URL을 활용해 클라이언트가 직접 안전하게 파일을 업로드 및 다운로드할 수 있게 했으며, DynamoDB의 Tasks/Devices 테이블은 각 스캔 처리의 상태 추적과 디바이스의 푸시 엔드포인트 관리를 담당한다.

비동기 워크플로우 및 확장성을 위해 Amazon SQS를 도입하였다. 스캔 데이터 업로드가 완료되면, Lambda 함수가 SQS 큐에 메시지를 전송하고, 별도의 처리용 Lambda(3D 변환)가 큐를 구독해 백그라운드에서 무거운 연산 작업을 수행한다. 이를 통해 업로드 트랜잭션과 후속 처리를 완전히 분리하였으며, 대량 트래픽 또는 장애 발생 시에도 시스템의 신뢰성을 유지할 수 있다.

푸시 알림은 Amazon SNS와 APNs(Apple Push Notification service)를 연동하여 설계하였다. 처리 완료 등 중요한 이벤트가 발생하면 SNS가 각 디바이스의 APNs로 직접 푸시 알림을 발송한다. 디바이스의 푸시 토큰은 별도의 API를 통해 등록 및 갱신되며, 관련 정보는 DynamoDB에서 관리된다.

백엔드 전체 인프라는 AWS SAM(Serverless Application Model)을 통해 코드 기반으로 선언적으로 관리된다. 인프라 및 애플리케이션 배포, 버전 관리, 롤백, 모니터링 등 운영 작업을 자동화하여, 지속적인 개발 및 서비스 품질 유지가 가능하다.

마지막으로, 모든 Lambda 함수와 핵심 로직은 단위 테스트를 통해 품질을 검증한다. Pytest와 Moto를 활용해 AWS 리소스를 Mocking하여 실제 환경과 유사한 조건에서 각 함수의 동작을 독립적으로 테스트할 수 있게 설계하였다. 이를 통해 서비스의 안정성과 개발 생산성을 동시에 확보하였다.

Fast3R

Image Encoder: Fast3R의 인코더는 Croco ViT 모델을 사용하고 이는 각 RGB 이미지를 patch token sequence로 변환한다. 각 이미지를 독립적으로 encoding후 패치 토큰을 생성하고 이 때 sine-cosine 2d + 1d 이미지 인덱스 positional embedding을 붙인다. 이 때, 각 이미지에는 랜덤 액세스 embedding을 부여해 뷰 구분을 가능하게 해 첫 번째 이미지가 항상 고정 인덱스를 가져 global 기준 좌표계를 정의한다.

Fusion Trasformer: ViT-B 사전학습된 모델을 사용했고 모든 이미지의 패치 토큰을 하나의 시퀀스로 concat한다. 그리고 All-to-all attention으로 모든 이미지 간 정보 통합을 진행한다.

Pointmap Decoder: Fast3R은 두 종류의 pointmap을 예측한다. Global Head는 모든 포인트를 첫 번째 이미지를 좌표계 기준으로 예측하고 Local Head는 각 포인트를 해당 이미지의 카메라 좌표계 기준으로 예측한다.

Model Inference Layer: Fast3R은 PyTorch 기반으로 구현되며 직접 학습시킨 Croco-ViT 인코더와 DPT 디코더를 포함하는 모듈형 구조로 구성된다. 입력된 이미지들은 일괄 전처리 후, image encoder -> fusion transformer -> decoder 구조를 거쳐 local/global 3D pointmap과 confidence map으로 출력된다. 모델의 추론 모듈은 독립된 클래스로 구성되어 있어 추론 디바이스 (GPU) 상태에 따라 배치 크기 조절 및 분산 병렬화가 가능하다.

PointMap Processing Layer: 모델 출력 결과는 confidence 상위 percentile 기반으로 노이즈 포인트를 제거한다. Local pointmap은 global pointmap에 ICP 기반으로 정렬되어 하나의 통합된 point cloud를 구성한다. 각 뷰에서 유효 포인트의 비율, confidence 통계를 수집해 이후 reconstruction 및 평가 단계에 사용한다.

3D 평면도

평면 검출 RANSAC 알고리즘을 활용하여 실내 포인트 클라우드에서 주요 평면을 검출하였다. 가장 먼저 넓은 면적을 가지는 바닥 또는 천장을 기준 평면으로 인식하고, 해당 평면의 법선 벡터에 수직인 방향으로만 추가 평면을 탐색함으로써 벽면 후보를 제한하였다. 이 과정을 반복 적용하여 실내 구조를 형성하는 벽면들을 검출하고, 검출된 평면에 포함된 포인트를 기반으로 꼭짓점을 추출하여 벽면 구조를 생성하였다.

PointCloud.jpg

객체검출 객체 검출에는 사전 학습된 SoftGroup 모델을 사용하였으며, PyTorch 프레임워크 기반으로 인퍼런스를 수행하도록 구성하였다. 입력된 포인트 클라우드에 대해 모델은 각 포인트에 semantic 및 instance label을 할당하며, 이를 통해 동일한 클래스 내에서도 인스턴스 단위로 객체를 구분할 수 있다. 이를 바탕으로 책상, 의자, 침대 등 실내에 존재하는 주요 가구와 구조물들을 식별하고 분리하였으며, 후속 처리 단계에서는 각 인스턴스별 포인트 그룹이 바운딩 박스 생성을 위한 입력으로 사용된다. 검출 결과

1. 다운로드 데이터
Softgroup1.jpg Softgroup2.jpg
2. 촬영 데이터
Softgroup3.jpg Softgroup4.jpg

다른 방법으로 DBSCAN(Density-Based Spatial Clustering of Applications with Noise) 알고리즘을 적용하였다. DBSCAN은 포인트 간의 밀도 기반 군집화를 통해 의미 있는 객체 단위의 클러스터를 자동으로 형성하며, 사전 정의된 거리 임계값과 최소 포인트 수를 기준으로 군집을 결정한다. 이를 통해 SoftGroup이 검출하지 못하거나, 객체로 인식되지 않은 잔여 포인트들에 대해 추가적인 클러스터링을 수행하여 후처리의 정확도를 보완하였다.

검출 결과

1. 다운로드 데이터
Dbscan1.jpg
2. 촬영 데이터
Dbscan2.jpg

바운딩 박스 생성 SoftGroup의 출력 결과로 얻어진 객체별 포인트 클러스터에 대해 Open3D의 Oriented Bounding Box(OBB) 기능을 이용해 최소 외접 바운딩 박스를 생성하였다. 이 과정에서는 각 객체의 위치, 크기, 방향 등의 기하 정보를 추출하며, 검출된 박스는 객체를 단순화된 형태로 표현하는 데 활용된다. 최종적으로 모든 객체의 바운딩 박스와 벽면 메쉬를 통합하여 3차원 공간에 배치함으로써, 실내 공간을 간략화한 형태의 3D 평면도를 완성하였다.

Boundingbox.jpg

결과 및 평가

완료 작품의 소개

스크린샷

관련사업비 내역서

(단위 : 천원)
항목 (품명, 규격) 수량 단가 금액
Runpod 결제 13 16.3 213.1
ChatGPT Plus 구독료 3 31.8 95.6
회의비 1 43.0 43.0
회의비 1 32.2 32.2
회의비 1 41.0 41.0
AWS 클라우드 서비스 1 4.0 4.0
Cursor Pro 구독료 2 28.7 57.5
Google Cloud 구독료 1 2.9 2.9
도서비 1 4.7 4.7
합계 540.0

완료작품의 평가

평가항목 평가방법 적용기준 개발 목표치 비중 (%) 평가결과
1. fast3r 구현 여부 구현 한 함수 동작 유무 검사 원래의 fast3r과 비교한 정확도, 완성도, 재현율 프로젝트에 필요한 핵심 함수 구현 20 원래 fast3r 모델을 기반으로 직접 구현하였다. 주요 파라미터와 threshold 값을 조정해 정확도와 재현율을 개선하였다. 하지만 실제 성능에서는 학습 데이터의 한계로 인해 약간의 성능 저하가 있었다. accuracy는 13.07, accuracy median은 12.99, Completion은 8.28, completion median은 8.29 등으로 결과가 도출되었으며, 핵심 구조 구현에는 성공했으나 성능 최적화 측면에서는 추가적인 개선이 필요하다.
2. 실내 공간의 3D 모델링 여부 실내 공간의 3D 모델이 출력되는지, 회전 가능한지 검사 정교성 실제 실내공간을 정교하게 모델링 20 Lidar 센서 기반으로 만들어진 포인트 클라우드로 3D 평면도가 잘 시각화되었음을 확인하였다. 3D 모델링이 목표와 일치하게 시각화되었고 회전도 가능하며 정확한 실내 공간 형상을 보여준다.
3. 3D 평면도 출력 여부 포인트 클라우드로부터 모든 벽면이 인식되는지, 시각화도 잘 됐는지 확인 벽 인식률 벽을 인식해 평평하게 만듦 20 포인트 클라우드에서 벽면이 평평하게 인식되고 시각화되었으며, 대부분의 벽이 정확히 검출되었다. 노이즈와 outlier도 효과적으로 제거되었고, 회전 기능도 잘 적용되었다.
4. 3D 평면도의 객체 검출 여부 실내 공간 내부의 객체를 정확히 검출하는지 검사 객체 검출 및 파악 의자와 책상 등 큰 가구를 정확히 검출, 파악 20 SoftGroup을 활용한 객체 검출로 책상, 의자, 변기 등 주요 객체는 잘 인식되었으나, 작거나 불분명한 객체는 성능 저하가 있었다. 바운딩 박스도 객체 형태에 맞게 생성되었으며, 직접 촬영한 데이터에서도 주요 객체가 잘 검출되었으나 일부는 실제 크기와 차이를 보였다.
5. 어플 개발 개발한 기능 검사 설계와 비교, 완성도 설계대로 구현 10 어플리케이션은 주요 기능을 정상적으로 작동하도록 구현되었으며, Sign in with Apple, LiDAR 기반 실내 포인트 클라우드 생성, 서버 통신, 푸시 알림, 평면도 렌더링, 객체 확인 기능 등을 포함하여 설계 목표와 비교 시 기능 완성도가 높게 나타났다.

향후계획

  • iOS: 더 많은 부분에 대한 유닛 테스트와 UI 테스트 작성한다.
  • Fast3R: 데이터셋 구축에 어려움이 있어 ARKitScenes 데이터셋만을 사용했다. 차후에는 원 논문에 제시된 것처럼 더 많은 데이터셋을 사용해 학습을 진행한다. 시간적 여유가 없어 성능이 평가 기준을 만족시킬만큼 학습을 진행하지 못했다. 추가로 학습을 진행하여 로스가 수렴하고 성능이 평가 기준을 만족했는지 확인한다. 또한 원 모델에 파인튜닝 학습을 진행하여 비교한다.
  • 3D 평면도: 3D 평면도 결과물에서 일부 객체의 위치 정렬이 정확하지 않거나, 바운딩 박스 크기가 실제 객체와 맞지 않는 경우가 발생하였다. 이러한 문제를 개선하기 위해 바운딩 박스의 크기를 최소화하고, 객체 중심에 맞춰 정렬하는 알고리즘을 고도화할 예정이다. 또한 사용자가 바운딩 박스를 직접 삭제하거나 위치를 재조정할 수 있는 편집 기능을 추가하여 활용도를 높일 계획이다. 더불어, 각 객체 위에 해당 클래스명을 표시하는 라벨링 기능을 도입함으로써 시각화의 직관성을 향상시키고, 결과 분석 과정에서도 편의성을 제공할 수 있도록 할 예정이다.