DL

[ICCV 2025] MagicHOI: Leveraging 3D Priors for Accurate Hand-object Reconstruction from Short Monocular Video Clips

gomduribo 2026. 1. 25. 15:39
Motivation

  • Casual monocular video(TikTok, Instagram Reels, YouTube Shorts 등 인터넷 영상)에는 손–물체 상호작용이 풍부하지만, hand-induced occlusion / object self-occlusion / 제한된 viewpoint 등 때문에 object의 전체 geometry가 관측되지 않음. 따라서, 기존 3D reconstruction 방법들이 실패하거나 심각한 artifact 발생.

→ 짧은 monocular interaction video에서, partial visibility + occlusion 상황에서 hand와 object의 3D geometry를 동시에 reconstruction하는 task를 제안하고 수행

Contribution

  • short monocular video sequence에서 3D hand-object recon을 하는데에 NVS diffusion prior를 사용
  • NVS 모델이 template-free hand-object recon에서 regularize하는데 사용될수 있는것을 보임
  • a novel visibility-aware weighted sampling strategy를 통해서 observed-unobserved object region간의 regularization을 균형맞춤
  • hand-object recon에서 sota 달성

3. Method

  • 비디오의 모든 프레임에서 hand object 포즈를 추정
  • NVS모델을 파이프라인에 넣고, object 좌표계에 맞춤
  • NVS 모델을 prior로 사용해 SDF를 최적화, 보이지 않는 object의 영역의 reconstruction을 regularize
  • 마지막으로 hand를 visible contact constraints을 이용해서 object에 align

3.1. Initialization

Hand initialization
• 각 비디오 프레임 IobsR3×H×WI^{obs} ∈ R^{3×H×W} 에서 HaMeR로 hand pose 추정

Object initialization

  • SfM을 통해 camera intrinsic KR3×3K ∈ \mathbb{R}^{3×3}, rotation RSfMSO(3)R^{SfM} ∈ SO(3), translation tSfMR3t^{SfM} ∈ \mathbb{R}^3 추정
  • 각 프레임에 대해서 multi-view stereo (MVS)를 이용해서 depth map DRH×WD ∈ \mathbb{R}^{H×W} 생성
  • 위의 SfM + MVS 과정은 전체 이미지가 아니라 Cutie라는 segmentation 모델로 물체만 잘라낸 이미지에 대해 수행

3.2. Novel view synthesis model

Inpainting

  • reference image IrefI^{ref} 에서 objec mask 로 object 부분만 추출후 InpaintAnything을 이용해서 hand 부분 inpainting
  • 물체만 있는 reference image I~ref\tilde I^{ref} 생성, 이 이미지를 center crop, resize 해서 Zero-1-to-3 입력 포맷에 맞춤 IrefI^{ref}
  • video에서 reference frame은 간단한 heuristic으로 선정.
    • 프레임에서 hand와 object mask를 만들어내고, object대 hand pixel의 비율 계산해서 가장 높은 비율가지는 프레임 선택 → 손이 가장 적게 가리고, 물체가 가장 잘 보이는 프레임을 reference로 사용

Novel view synthesis mode

  • view synthesis backbone으로 Pretrained Zero-1-to-3라는 모델 사용
    INVS=fNVS(Iref,yref,y) I_{NVS}=f_{NVS}(I_{ref},y_{ref},y) \\
    • Iref=reference imageI_{ref}=\text{reference image} 
    • yref=reference camera posey_{ref}=\text{reference camera pose} 
    • y=target camera pose([ϕ,φ,ρ])y=\text{target camera pose}([ϕ,φ,ρ]) 

Space alignment

  • Zero-1-to-3의 object space를 canoncal object space로 삼고 SfM object space를 align
  • 같은 reference image에 대해:
    • Zero-1-to-3 입력 해상도 이미지 IrefI_{ref}
    • 원래 해상도의 이미지 I~ref\tilde I_{ref}

    → 이 둘 사이에서 2D pixel correspondence {pref,p~ref}\{p_{ref}, \tilde p_{ref}\} 를 얻음

  • Zero-1-to-3는 reference view에 대한 depth map DrefD^{ref} 생성 가능
  • MVS는 같은 프레임에 대해 depth map D~ref\tilde D^{ref} 생성 가능

각각의 depth + intrinsic을 사용해 {Pref,P~ref}\{P^{ref}, \tilde P^{ref}\} 라는 3D point correspondence를 얻는다.

  • 이 2D/3D correspondence를 통해서 SfM object frame을 Zero-1-to-3 frame으로 변환하는 rotation/translation RaSO(3)R_a \in SO(3) , taR3 t_a \in \mathbb{R}^3 를 찾음. loss는 다음과 같음
    La=L3D+λ2DL2D,λ2D=1.0L_a = L_{3D} + \lambda_{2D} L_{2D}, \quad \lambda_{2D}=1.0 \\
    • L3D:3D point alignmentL_{3D}: \text{3D point alignment} 
    • L2D:PnP based reprojection alignmentL_{2D}: \text{PnP based reprojection alignment}

  • 최종적으로 얻은(Ra,ta)(R_a, t_a)를 사용해 SfM camera pose를 Zero-1-to-3 frame으로 변환
R=RaRSfM , t=RatSfM+taR = R_a R_{SfM}\ ,\ t = R_a t_{SfM} + t_a

3.3. Occlusion-robust object reconstruction

  • 물체는 object model 함수fψo f_{\psi_o}로 표현됨.
    • x:3D 공간의 한 점x: \text{3D 공간의 한 점} 
    • output: signed distance/ RGB texture on x \text{output: signed distance/ RGB texture on x }
fψo(x):R3R×R3f_{\psi_o}(x): \mathbb{R}^3 \rightarrow \mathbb{R} \times \mathbb{R}^3 \\

Supervision on the observed object regions

  • observed RGB images IobsI^{obs}에 대해서 object model ψoψ_o 를 supervised 방식으로 학습. loss는 다음과 같음
    LRGB+λsegmLsegmL_{RGB}+λ_{segm}L_{segm}
    • LRGBL_{RGB} : 렌더링된 object 이미지와 실제 RGB 사이의 photometric consistency
    • LsegmL_{segm}: 렌더링된 silhouette가 object segmentation mask와 맞도록 유도

Supervision on the unobserved object regions

  • 랜덤하게 샘플링된 camera pose y 를 이용해서 object model fψof_{\psi_o} 로 novel view image INVSI^{NVS} 를 만들어냄
  • diffusion timestep tUniform({0, . . . , T})t \sim \text{Uniform(\{0, . . . , T\})}를 샘플
  • INVSI^{NVS}에 Gaussian noise ϵtϵ_t 를 더해서 noisy image ztz_t를 생성
  • Zero-1-to-3의 denoiser ϵω\epsilon_\omega 가 예측한 noise와 실제 noise의 차이를 최소화
    • C=Ψ(Iref,yref,y)C=Ψ(I_{ref},y_{ref},y): reference 이미지와 camera pose로부터 만든 conditioning embedding
    • w(t)w(t): diffusion 모델에서 정의된 timestep weight

  • 무작위 novel view를 계속 강하게 걸면 실제로 이미 관측된 영역까지 diffusion prior가 덮어쓸 수 있음

    visibility-aware weighting이 필요

Visibility-aware weighting strategy

  • object model이 observed views로 일정 횟수 최적화된 이후 object 주변에 대해 coarse voxel grid O(x,y,z)O(x,y,z) 를 생성
  • observed input images의 object pixel 각각에 대해 해당 픽셀에서 ray를 쏘아 visibility grid와 교차 여부를 계산
  • 어떤 voxel이 ray의 첫 번째 교차 지점이면 → 해당 voxel의 값 = 1 (visible)
  • 어떤 voxel도 어느 ray에서도 첫 교차 지점이 되지 않으면 → 해당 voxel의 값 = 0 (non-visible)
  • novel view y에 대해 visibility grid O(x,y,z)를 rasterization하여2D visibility image V(u,v)를 생성
    • V(u,v) = 1→ 해당 픽셀이 대응하는 voxel이 observed
    • V(u,v)=0 → 해당 픽셀이 대응하는 voxel이 non-observed
    • V(u,v)=−1 → background
  • visibility image V(u,v)로부터 다음 비율을 계산
    β=(u,v)VI[V(u,v)=1](u,v)VI[V(u,v)=0]\beta =\frac{ \sum_{(u,v)\in V} \mathbb{I}[V(u,v)=1] }{ \sum_{(u,v)\in V} \mathbb{I}[V(u,v)=0] }
    • 분자: observed voxel에 해당하는 픽셀 수
    • 분모: non-observed voxel에 해당하는 픽셀 수

  • novel view y에 대해 weighting factor μ\mu는 다음과 같이 정의
μ=eβ2/0.6μ=e^{−β^2/0.6}

Total loss

  • 각 iteration에서 다음을 샘플링:
    • 입력 비디오에서 RGB 이미지 1장: Iobs{Iobs}I_{obs} \in \{I_{obs}\}
    • reference image 1장: Iref I_{ref}
    • 여러 개의 novel view:{y} \{y\}

    → 이들을 사용해 object network 파라미터 ψo\psi_o를 학습하기 위한 total loss LoL_o를 계산

Lo=LRGB+λsegmLsegm+λsmoothLsmooth+μLNVSLo=L_{RGB}+λ_{segm}L_{segm}+λ_{smooth}L_{smooth}+μL_{NVS}

3.4. Hand-object alignment

Visible contact

  • 기존 방법처럼 hand–object vertex 간 최단거리를 사용하는 대신, 접촉이 빈번한 손가락 끝(fingertips) 정점들만(손바닥(palm) 정점은 제외)을 접촉 후보로 선택
  • 선택된 손 정점 집합을 VhpV_h^p로 정의
  • vhVhpv_h \in V_h^p 를 이미지 평면으로 투영
    • 투영 결과가 hand mask 내부에 있으면 visible contact candidate로 분류하여 VhvV_h^v에 포함
    • hand mask 밖이면 object-occluded로 간주하고 제거

  • 최종 contact 집합을 VhV_h 로 정의
  • vhVhv_h \in V_h 에 대해 ray tracing을 수행하여 대응되는 object surface contact point vov_o를 찾음
  • object surface가 아닌 접촉은 제거
  • 결과로 visible contact pair 집합 {Vh,Vo}\{V_h, V_o\} 를 얻음

Alignment process

  • object는 고정, hand만 최적화. hand pose θ\theta 는 최적화하지 않음
  • 최적화 변수:
    • hand translation thR3t_h \in \mathbb{R}^3
    • scale sRs \in \mathbb{R}
  • hand pose θ\theta 를 최적화할 경우 MPJPE = 7.83 mm, 초기 hand pose를 유지할 경우 MPJPE = 4.62 mm →이에 따라 θ\theta 는 고정
    • LcontactL_{contact}: hand–object contact 관계를 제약
    • LkpointsL_{kpoints}: hand joint의 2D projection consistency
    • LvsmoothL_{vsmooth}: hand vertex의 temporal smoothness
    • LpenetrL_{penetr}: hand–object penetration penalty

4. Experiments