SAM3DBody-cpp — 단일 카메라로 실시간 3D 전신 복원하는 순수 C++ 추론 엔진
SAM3DBody-cpp: 단일 카메라로 실시간 3D 전신을 복원하는 순수 C++ 추론 엔진
한 줄 요약
SAM3DBody-cpp는 단일 카메라 영상에서 사람의 3D 전신 메시와 자세를 실시간으로 복원하는 순수 C++ 추론 엔진으로, Python 의존성 없이 ONNX Runtime과 ggml을 활용하여 독립적으로 실행되며, 70개 관절(손 포함)의 3D 키포인트와 SMPL 형태의 전신 메시를 출력하고 다중 인물 BVH 모션 캡처를 지원합니다.
핵심 내용
1. 프로젝트 배경과 목적
이 프로젝트의 개발자는 Ammar Qammaz(AmmarkoV)이며, Facebook Research의 SAM 3D Body 모델을 바탕으로 실제 배포 환경에서 사용할 수 있는 추론 엔진을 만들었습니다. 원래의 SAM 3D Body는 Python과 PyTorch에 의존하는 연구용 코드였는데, 이를 순수 C++으로 포팅하여 프로덕션 환경에서 바로 사용할 수 있도록 만들었습니다.
상위 프로젝트인 Fast-SAM-3D-Body는 원래 SAM 3D Body의 추론 경로를 재설계하여 최대 10.9배 빠른 속도를 달성하는 프레임워크이고, SAM3DBody-cpp는 그 중에서 C++ 런타임만 분리해낸 독립 프로젝트입니다.
2. 하이브리드 추론 아키텍처
핵심 아이디어는 "무거운 계산은 GPU에서, 가벼운 계산은 CPU에서"라는 하이브리드 접근법입니다.
GPU 측 (ONNX Runtime CUDA):
- DINOv3-ViT-H/14+ 백본: 약 6.3억 파라미터의 비전 트랜스포머 인코더로, 이미지에서 특징 맵을 추출합니다. 이 부분이 전체 모델의 약 95% 이상을 차지하는 무거운 부분입니다.
- 6층 PromptableDecoder: 트랜스포머 디코더로, 특징 맵에서 포즈 토큰을 추출합니다.
- YOLO11m-pose: 사람 검출기입니다. 이미지 속 사람을 찾고 17개 COCO 키포인트를 감지합니다.
CPU 측 (ggml):
- pipeline.gguf: MHR(Mesh Human Recovery) 파라미터와 카메라 프로젝션 헤드를 담당합니다. 약 5MB로 매우 가볍고, CPU에서 행렬 곱셈만 하면 됩니다.
이렇게 나누는 이유는 GPU에서 가벼운 계산을 하는 것은 오버헤드가 크지만, CPU에서 무거운 계산을 하는 것은 실시간 처리가 불가능하기 때문입니다. DINOv3-ViT-H만 CPU에서 돌리면 최신 노트북에서 한 프레임에 5~15초가 걸리는데, GPU에서는 약 65ms(RTX 5090 기준)로 처리됩니다.
3. 입력/출력 파이프라인
전체 파이프라인은 5단계로 나뉩니다.
- YOLO 감지: yolo.onnx가 이미지에서 사람을 찾고 바운딩 박스와 17개 COCO 키포인트를 출력합니다.
- 특징 추출: backbone.onnx(DINOv3-ViT-H)가 이미지에서 특징 맵을 생성합니다. 출력은 [배치, 1280, 32, 32] 차원의 텐서입니다.
- 디코딩: decoder.onnx(6층 PromptableDecoder)가 특징 맵에서 포즈 토큰 [배치, 1024]을 추출합니다.
- 회귀: pipeline.gguf(CPU)가 MHR 파라미터 [배치, 519]와 카메라 파라미터 [배치, 3]를 출력합니다.
- 메시 생성(선택적): body_model.lbs(Native C LBS)가 18,439개의 정점으로 구성된 3D 메시를 생성합니다.
중요한 점: 이 시스템은 2D 키포인트를 3D로 리프팅(올리는) 방식이 아닙니다. 이미지 특징에서 직접 3D 신체 모델 파라미터를 회귀하여 복원합니다. 즉, 2D에서 3D로 변환하는 중간 단계가 없이 이미지에서 바로 3D를 예측합니다.
출력 데이터 (한 사람당):
- 70개 3D 키포인트 (신체 + 양손, 단위: 미터)
- 18,439개 정점의 3D 메시 (SMPL 형태)
- 카메라 변환 파라미터 (위치, 초점 거리)
- 전신 회전 각도, 신체 관절 각도, 손 관절 각도, 얼굴 표정 파라미터
- SMPL 형태의 신체 형태 베타 값 45개
4. BVH 모션 캡처 기능
--bvh 옵션을 사용하면 검출된 각 인물에 대해 표준 BVH(BioVision Hierarchy) 파일을 생성합니다. BVH는 애니메이션과 게임 개발에서 널리 사용되는 모션 캡처 포맷입니다.
특징:
- 내장된 2D 바운딩 박스 IoU 트래커가 프레임 간 인물 정체성을 유지합니다. 즉, 여러 사람이 화면에 있을 때 누가 누구인지 구분합니다.
- 각 파일의 관절 OFFSET은 배우의 측정된 뼈 길이에 맞춰 자동 조정됩니다.
- Blender, BVHTester 등 DCC(Digital Content Creation) 도구와 직접 연동 가능합니다.
- 제공되는 Blender 플러그인으로 MakeHuman 리깅 캐릭터를 구동할 수 있습니다.
# 다중 인물 BVH 출력 예시
./fast_sam_3dbody_run --from clip.mp4 --bvh ./p.bvh --headless
# 결과: p_0.bvh, p_1.bvh, ... 생성
5. 설치 및 빌드
빌드 요구사항:
- CMake 3.18 이상
- C++17 컴파일러
- OpenCV
- CUDA Toolkit (선택 사항, GPU 가속용)
CMake가 ONNX Runtime 1.20.1과 ggml 의존성을 자동으로 처리합니다. CUDA가 없으면 CPU 전용으로 빌드됩니다.
mkdir -p build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
모델 파일 (HuggingFace에서 다운로드):
- backbone.onnx: 약 4.8GB (DINOv3-ViT-H, BF16, CUDA 전용)
- decoder.onnx: 약 93MB (6층 PromptableDecoder)
- yolo.onnx: 약 81MB (YOLO11m-pose)
- pipeline.gguf: 약 5MB (MHR + 카메라 헤드를 ggml 형식으로)
- body_model.lbs: 약 27MB (C LBS 데이터)
- correctives.bin: 약 33MB (포즈 보정 블렌드 셰이프)
전체 모델 크기는 약 5GB 수준입니다.
CPU 전용 옵션: backbone_fp32.onnx를 사용하면 CPU에서도 실행 가능하지만, 6.3억 파라미터를 CPU에서 돌리는 것이므로 실시간 처리는 불가능합니다. 최신 노트북 CPU에서 한 프레임에 5~15초가 걸립니다.
6. 실제 성능
- RTX 5090 기준: 약 65ms/프레임 (초당 약 15fps)
- CUDA GPU 필수: 실시간 처리에는 GPU가 필요합니다. CPU는 단일 이미지나 저빈도 사용에 적합합니다.
- WSL2 지원: WSL2에서 nvidia-smi가 작동하면 CUDA 툴킷만 설치하면 됩니다.
- Windows 제한: Windows는 headless 빌드만 지원하며, OpenGL 오버레이 뷰어는 빌드되지 않습니다(GLX/X11 의존성 때문).
커뮤니티 반응
Reddit r/computervision
335개 업보트, 25개 댓글로 비교적 높은 관심을 받았습니다. 주요 반응:
- 실용성 인정: "단일 카메라로 이런 수준의 3D 복원이 가능한 것은 인상적이다"라는 평가가 많았습니다.
- BVH 출력에 대한 관심: 애니메이션 작업자들과 인디 게임 개발자들로부터 BVH 모션 캡처 기능에 대한 긍정적인 반응이 있었습니다.
- 정확도 질문: "SMPL 기반이기 때문에 손가락이나 얼굴 같은 디테일한 부분은 얼마나 정확한가"라는 질문이 있었습니다. 개발자의 답변에 따르면 70개 키포인트가 손까지 포함하지만, 미세한 손가락 제스처는 SMPL 모델의 한계로 완벽하지는 않습니다.
- 모델 크기 우려: 5GB 모델이 모바일이나 임베디드 환경에서는 부담스럽다는 지적이 있었습니다. 개발자는 "실시간 3D 전신 복원의 현재 SOTA(state-of-the-art) 수준에서는 불가피한 크기"라고 설명했습니다.
개발자 Ammar Qammaz가 직접 LinkedIn에서 소개했으며, 컴퓨터 비전 커뮤니티에서 공유되었습니다. 특히 "Python 없이 C++에서 실행된다"는 점이 프로덕션 배포 관점에서 강조되었습니다.
새로운 시각
1. "Python 없는 AI"의 실제적 의미
대부분의 AI 모델은 Python/PyTorch 환경에서 실행되므로 프로덕션 배포 시 Python 런타임, 의존성 관리, 메모리 오버헤드를 감수해야 합니다. SAM3DBody-cpp는 이 문제를 근본적으로 해결합니다. ONNX Runtime + ggml 조합으로 완전히 독립적인 실행 파일을 만들 수 있으므로, Linux 서버에 CMake와 OpenCV만 설치하면 바로 동작합니다. 이는 AI 모델을 실제 서비스로 옮길 때 발생하는 "Python 지옥" 문제를 우회하는 실용적인 접근입니다.
2. 하이브리드 GPU/CPU 추론의 보편화
이 프로젝트가 보여주는 하이브리드 접근법은 앞으로 더 일반화될 것입니다. 무거운 백본은 GPU에서, 가벼운 헤드 계산은 CPU에서 — 이 패턴은 다른 비전 모델에도 적용 가능합니다. 특히 ggml(원래 LLM 양자화에 사용되던 라이브러리)를 비전 모델의 후처리에 사용하는 것은 새로운 시도입니다.
3. 모션 캡처의 민주화
전통적으로 모션 캡처는 수천만 원 하는 장비와 전문 스튜디오가 필요했습니다. SAM3DBody-cpp는 웹캠 하나와 GPU가 있는 PC만 있으면 BVH 파일을 생성할 수 있습니다. 인디 게임 개발자, 애니메이션 학생, 연구자들이 저비용으로 모션 데이터를 수집할 수 있는 길이 열렸습니다. 특히 다중 인물 트래킹이 지원되므로 여러 사람이 함께 연기하는 장면도 캡처 가능합니다.
4. 의료 분야와의 연결 가능성
대장내시경 분야에서 3D 복원 기술이 중요한 것처럼, 3D 자세 추정 기술도 재활 의학, 물리 치료, 동작 분석 등 의료 분야에 적용 가능합니다. 예를 들어, 환자의 보행 패턴을 3D로 분석하거나, 운동 재활 진행 상황을 정량적으로 추적하는 데 활용될 수 있습니다. 다만 현재 SMPL 모델은 일반 성인을 기준으로 학습되었으므로, 노인이나 어린이의 신체 비율에는 추가 보정이 필요할 수 있습니다.
자녀/미래 영향
아인(첫째 딸)
- 애니메이션이나 게임 개발에 관심이 생기면, BVH 모션 캡처 기술을 활용해 캐릭터에 실제 동작을 적용하는 경험을 해볼 수 있습니다. 웹캠 하나면 시작 가능한 기술입니다.
- 3D 모델링과 애니메이션 분야에서 AI 도구가 빠르게 진화하고 있으므로, 이러한 기술 흐름을 이해하는 것이 중요합니다.
석현(둘째 아들), 은한(셋째 아들)
- 로봇 공학이나 인간-컴퓨터 상호작용 분야에 관심이 있다면, 실시간 3D 자세 추정은 핵심 기술 중 하나입니다. 특히 휴머노이드 로봇 제어가 단일 카메라만으로 가능해지고 있다는 점은 주목할 만합니다.
- Fast-SAM-3D-Body 프로젝트에서 실제로 Unitree G1 휴머노이드 로봇을 단일 RGB 카메라로 원격 제어하는 데 성공한 사례가 있습니다.
관련 노트
- 2026-06-01_tiny-vllm-cuda-inference-engine — C++ 기반 경량 추론 엔진의 또 다른 사례
- 2026-06-05_seedance-2-0-프롬프트-모음 — 3D 생성 모델과 관련된 기술