작은 객체/장면의 높은 품질 재구성을 달성하기 위해 규모를 희생하거나, 더 큰 장면을 처리하기 위해 실시간 성능 및/또는 품질을 희생하거나, 활성 재구성의 범위를 제한단일 노이즈 제거 모델로 융합, 동적 객체의 감지 및 업데이트 등을 포함합니다. 
깊이 맵 전처리 (Depth Map Preprocessing)
카메라 포즈 추정 (Camera Pose Estimation)
초기 동적 분할 (Initial Dynamics Segmentation)
깊이 맵 융합 (Depth Map Fusion)
동적 추정 (Dynamics Estimation)
표면 분할 (Surface Splatting)

PointFusion 클래스는 ICPSLAM 클래스(https://velog.io/@jk01019/ICPSLAM)를 상속받아 PointFusion 논문(참조: Point-based Fusion)에 기반한 기법을 사용하여 점 기반 융합을 수행odom: 사용하려는 오도메트리 방법.gt(ground truth), icp(Iterative Closest Point), gradicp(Gradient-based ICP) 중 선택.dist_th: 거리 임계값. 포인트 클라우드 내에서 포인트들을 필터링할 때 사용.angle_th: 각도 임계값. 점들의 법선 벡터 간의 각도로 필터링할 때 사용.sigma: 가우시안 벨의 폭. 원본 논문에서는 0.6을 사용.dsratio: 다운샘플링 비율. 입력 프레임을 ICP 수행 전에 다운샘플링하는 데 사용.numiters: 최적화를 수행할 반복 횟수.damp: 비선형 최소 제곱을 위한 감쇠 계수.dist_thresh: src_pc와 tgt_pc 사이의 거리 임계값.lambda_max, B, B2, nu: gradicp 방법에 필요한 추가 파라미터.device: 내부 텐서를 위한 장치. 기본적으로 CPU.use_embeddings: 임베딩 사용 여부.embedding_fusion_method: 임베딩 융합 방법.점들의 위치 및 속성(예: 색상, 법선 벡터 등)을 사용하여 지도를 생성하고 업데이트하는 기법PointFusion 클래스는 거리 임계값과 각도 임계값을 사용하여 불필요한 점들을 제거하고, pointclouds와 live_frame을 입력으로 받아, 거리 임계값, 각도 임계값, 가우시안 폭을 사용하여 def _map(
self, pointclouds: Pointclouds, live_frame: RGBDImages, inplace: bool = False
):
return update_map_fusion(
pointclouds,
live_frame,
self.dist_th,
self.dot_th,
self.sigma,
inplace,
use_embeddings=self.use_embeddings, # KM
embedding_fusion_method=self.embedding_fusion_method,
)
def update_map_fusion(
pointclouds: Pointclouds,
rgbdimages: RGBDImages,
dist_th: Union[float, int],
dot_th: Union[float, int],
sigma: Union[torch.Tensor, float, int],
inplace: bool = False,
use_embeddings: bool = False, # KM
embedding_fusion_method: str = "slam", # KM
) -> Pointclouds:
r"""Updates pointclouds in-place given the live frame RGB-D images using PointFusion.
(See Point-based Fusion `paper <http://reality.cs.ucl.ac.uk/projects/kinect/keller13realtime.pdf>`__).
Returns:
gradslam.Pointclouds: Updated Pointclouds object containing global maps.
"""
batch_size, seq_len, height, width = rgbdimages.shape
pc2im_bnhw = find_correspondences(pointclouds, rgbdimages, dist_th, dot_th)
pointclouds = fuse_with_map(
pointclouds,
rgbdimages,
pc2im_bnhw,
sigma,
inplace,
use_embeddings=use_embeddings,
embedding_fusion_method=embedding_fusion_method,
)
return pointclouds
dist_th: 거리 임계값으로, 포인트 간의 거리 차이가 이 값보다 작아야 매칭dot_th: 포인트 간의 노멀 벡터 간의 각도가 이 값보다 작아야 매칭sigma: use_embeddings: 임베딩을 사용할지 여부를 나타내는 플래그embedding_fusion_method: find_correspondences: fuse_with_map 함수sigma 값을 사용하여 가우시안 융합을 수행라이브 프레임의 점들과 글로벌 맵의 점들 사이의 1 대 1 대응 관계를 찾기 위한 일련의 단계를 수행find_active_map_points):find_similar_map_points):find_best_unique_correspondences):pc2im_bnhw(반환값): b), 포인트 인덱스(n), 투영된 라이브 프레임의 높이(h), 너비(w)를 포함하는 고유 대응 관계를 나타냅니다. 각 프레임에서 활성 상태인 글로벌 맵 포인트의 인덱스와 이들이 라이브 프레임에 투영된 위치를 찾음 pc2im_bnhw = find_active_map_points(pointclouds, rgbdimages)
pc2im_bnhw, _ = find_similar_map_points(
pointclouds, rgbdimages, pc2im_bnhw, dist_th, dot_th
)
pc2im_bnhw = find_best_unique_correspondences(pointclouds, rgbdimages, pc2im_bnhw)
초기화 및 변환:
rgbdimages의 포즈 정보를 이용해, 전역 지도 점들을 현재 프레임 좌표계로 변환inverse_transformation 함수가 사용투영:
활성 점 필터링:
결과 반환:
pc2im_bnhw = find_active_map_points(pointclouds, rgbdimages)
pc2im_bnhw, _ = find_similar_map_points(
pointclouds, rgbdimages, pc2im_bnhw, dist_th, dot_th
)
pc2im_bnhw = find_best_unique_correspondences(pointclouds, rgbdimages, pc2im_bnhw)
find_similar_map_points 함수는 활성 점 좌표와 법선 벡터 추출:
pc2im_bnhw에 따라 라이브 프레임의 활성 점들의 좌표와 법선 벡터를 추출조건 필터링:
거리와 법선 벡터의 유사성을 기준으로 조건을 만족하는 점들을 필터링결과 반환:
pc2im_bnhw_similar)와 필터링된 점들의 마스크(is_similar_mask)를 반환 pc2im_bnhw = find_active_map_points(pointclouds, rgbdimages)
pc2im_bnhw, _ = find_similar_map_points(
pointclouds, rgbdimages, pc2im_bnhw, dist_th, dot_th
)
pc2im_bnhw = find_best_unique_correspondences(pointclouds, rgbdimages, pc2im_bnhw)
이를 통해 포인트 클라우드의 중복된 포인트를 제거하고, 가장 적합한 포인트를 선택하여 매핑의 정확성을 높입니다.
pc2im_bnhw_unique(반환값):
batch_size, seq_len, height, width = rgbdimages.shape
pc2im_bnhw = find_correspondences(pointclouds, rgbdimages, dist_th, dot_th)
pointclouds = fuse_with_map(
pointclouds,
rgbdimages,
pc2im_bnhw,
sigma,
inplace,
use_embeddings=use_embeddings,
embedding_fusion_method=embedding_fusion_method,
)
fuse_with_map 함수는 라이브 프레임에서 얻은 새로운 데이터를 alpha_image/point의 신뢰도)는 가우시안 분포를 사용하여 계산inv_updated_ccounts를 사용하여 정규화됩니다.new_mask를 사용하여 새로운 포인트를 식별하고, 이를 글로벌 맵에 추가use_embeddings 옵션이 참일 경우, 새로운 포인트 클라우드 데이터에 포함된 임베딩(특징 벡터)을 기존 맵의 임베딩과 병합slam과 bayes) 중 하나를 선택하여 임베딩을 병합할 수 있습니다.slam 방법: 가중 평균을 사용 bayes 방법: 베이즈 확률론적 방법을 사용하여 임베딩을 병합