3DMatch는 3D 데이터(예: 포인트 클라우드, 깊이 맵, 메쉬 등)에서 작동하는 ConvNet 기반 로컬 기하학적 특징 설명자입니다. 이 도구 상자는 기하학적 등록 및 키포인트 일치를 위해 3DMatch를 사용하는 코드와 기존 RGB-D 재구성에서 3DMatch를 훈련하는 코드를 제공합니다. 이것은 우리 논문의 참조 구현입니다.
PDF | 웹페이지, 벤치마크, 데이터 세트 | 동영상
Andy Zeng, Shuran Song, Matthias Nießner, Matthew Fisher, Jianxiong Xiao 및 Thomas Funkhouser
컴퓨터 비전 및 패턴 인식(CVPR)에 관한 IEEE 컨퍼런스 2017 구두 발표
실제 깊이 이미지에서 로컬 기하학적 특징을 일치시키는 것은 3D 스캔 데이터의 노이즈, 저해상도 및 불완전한 특성으로 인해 어려운 작업입니다. 이러한 어려움은 일반적으로 기하학적 특성에 대한 히스토그램을 기반으로 하는 현재 최첨단 방법의 성능을 제한합니다. 본 논문에서는 부분 3D 데이터 간의 대응을 설정하기 위해 로컬 볼륨 패치 설명자를 학습하는 데이터 기반 모델인 3DMatch를 제시합니다. 모델에 대한 교육 데이터를 축적하기 위해 기존 RGB-D 재구성에서 발견된 수백만 개의 대응 레이블을 활용하는 비지도 기능 학습 방법을 제안합니다. 실험에 따르면 설명자는 재구성을 위해 새로운 장면의 로컬 지오메트리를 일치시킬 수 있을 뿐만 아니라 다양한 작업 및 공간 규모(예: Amazon Picking Challenge에 대한 인스턴스 수준 개체 모델 정렬 및 메쉬 표면 대응)로 일반화할 수 있는 것으로 나타났습니다. 결과에 따르면 3DMatch는 다른 최첨단 접근 방식보다 지속적으로 상당한 차이를 보이는 것으로 나타났습니다.
이 코드가 작업에 유용하다고 생각되면 다음을 인용해 보세요.
@inproceedings{zeng20163dmatch,
title={3DMatch: Learning Local Geometric Descriptors from RGB-D Reconstructions},
author={Zeng, Andy and Song, Shuran and Nie{ s s}ner, Matthias and Fisher, Matthew and Xiao, Jianxiong and Funkhouser, Thomas},
booktitle={CVPR},
year={2017}
}
이 코드는 단순화된 BSD 라이선스에 따라 릴리스됩니다(자세한 내용은 LICENSE 파일 참조).
모든 관련 정보와 다운로드는 여기에서 찾을 수 있습니다.
질문이 있거나 버그를 발견하면 알려주시기 바랍니다: Andy Zeng andyz[at]princeton[dot]edu
#include <random>
추가했습니다.3DMatch의 참조 구현과 이 도구 상자의 다른 구성 요소에는 다음 종속성이 필요합니다. 우분투 14.04에서 테스트되었습니다.
CUDA 7.5 및 cuDNN 5.1. NVIDIA에 등록해야 할 수도 있습니다. 다음은 cuDNN 5.1을 설정하기 위한 몇 가지 추가 단계입니다. 참고 서로 다른 소프트웨어 패키지에는 서로 다른 버전이 필요할 수 있으므로 서로 다른 버전의 cuDNN을 서로 다른 디렉터리(예: /usr/local/cudnn/vXX
)에 설치하는 것이 좋습니다.
LIB_DIR=lib $( [[ $( uname ) == " Linux " ]] && echo 64 )
CUDNN_LIB_DIR=/usr/local/cudnn/v5.1/ $LIB_DIR
echo LD_LIBRARY_PATH= $LD_LIBRARY_PATH : $CUDNN_LIB_DIR >> ~ /.profile && ~ /.profile
tar zxvf cudnn * .tgz
sudo cp cuda/ $LIB_DIR / * $CUDNN_LIB_DIR /
sudo cp cuda/include/ * /usr/local/cudnn/v5.1/include/
OpenCV(OpenCV 2.4.11로 테스트됨)
이 데모는 사전 훈련된 3DMatch 설명자(Marvin 포함)와 표준 RANSAC를 사용하여 두 개의 3D 포인트 클라우드(단일 뷰 심도 맵에서 투영됨)를 정렬합니다.
3DMatch 도구 상자를 확인하고 C++/CUDA 데모 코드 및 Marvin을 컴파일하세요.
git clone https://github.com/andyzeng/3dmatch-toolbox.git 3dmatch-toolbox
cd 3dmatch-toolbox/core
./compile.sh
3DMatch 사전 훈련된 가중치 다운로드
./download-weights.sh # 3dmatch-weights-snapshot-137000.marvin
두 개의 예제 3D 포인트 클라우드를 로드하고, TDF 복셀 그리드 볼륨을 계산하고, 무작위 표면 키포인트와 3DMatch 설명자(디스크의 바이너리 파일에 저장됨)를 계산합니다. 경고: 이 데모는 단순 바이너리 형식으로 저장된 3D 포인트 클라우드만 읽습니다. 자신만의 포인트 클라우드 형식으로 3DMatch 데모 코드를 실행하려면 그에 맞게 데모.cu를 수정하십시오.
# Generate fragment-1.desc.3dmatch.bin and fragment-1.keypts.bin
./demo ../data/sample/3dmatch-demo/single-depth-1.ply fragment-1
# Generate fragment-2.desc.3dmatch.bin and fragment-2.keypts.bin
./demo ../data/sample/3dmatch-demo/single-depth-2.ply fragment-2
Matlab에서 다음 스크립트를 실행합니다.
% Load keypoints and 3DMatch descriptors and use RANSAC to register the two
% point clouds. A visualization of the aligned point clouds is saved into
% the file `result.ply` which can be viewed with Meshlab or any other 3D
% viewer. Note: there is a chance that alignment may fail on the first try
% of this demo due to bad keypoints, which are selected randomly by default.
demo ;
다양한 3D 데이터 표현을 TDF(Truncate Distance Function) 값의 복셀 그리드로 변환하는 방법에 대한 지침입니다.
GAPS를 설치하고 샘플 메시(.off 파일)를 복셀 그리드(플로트의 바이너리 .raw 파일)로 변환하는 방법에 대한 지침:
cd 3dmatch-toolbox/gaps
# Install GAPS
make
# Run msh2df on example mesh file (see comments in msh2df.cpp for more instructions)
cd bin/x86_64
wget http://vision.princeton.edu/projects/2016/3DMatch/downloads/gaps/bicycle000002.off
./msh2df bicycle000002.off bicycle000002.raw -v # see comments in msh2df.cpp for more arguments
# Download visualization script
wget http://vision.princeton.edu/projects/2016/3DMatch/downloads/gaps/showTDF.m
Matlab에서 시각화 스크립트 실행
% Visualize TDF voxel grid of mesh
showTDF ;
3dmatch-toolbox/training
폴더를 참조하세요.
경량 GPU 전용 신경망 프레임워크인 Marvin을 사용하여 3DMatch를 훈련하기 위한 코드입니다. Siamese 네트워크 아키텍처 .json 파일 training/net.json
과 RGB-D 재구성 데이터세트(프로젝트 웹페이지에서 다운로드 가능)에서 대응 항목을 무작위로 샘플링하는 training/match.hpp
의 CUDA/C++ Marvin 데이터 레이어가 포함되어 있습니다.
마빈 컴파일
cd 3dmatch-toolbox/training
./compile.sh
RGB-D 재구성 데이터세트에서 여러 훈련 및 테스트 장면을 다운로드하세요(여기에서 더 많은 장면을 다운로드하세요).
cd ../data
mkdir train && mkdir test && mkdir backup
cd train
wget http://vision.princeton.edu/projects/2016/3DMatch/downloads/rgbd-datasets/sun3d-brown_cogsci_1-brown_cogsci_1.zip
wget http://vision.princeton.edu/projects/2016/3DMatch/downloads/rgbd-datasets/7-scenes-heads.zip
wget http://vision.princeton.edu/projects/2016/3DMatch/downloads/rgbd-datasets/sun3d-harvard_c11-hv_c11_2.zip
unzip sun3d-brown_cogsci_1-brown_cogsci_1.zip
unzip 7-scenes-heads.zip
unzip sun3d-harvard_c11-hv_c11_2.zip
mv * .zip ../backup
cd ../test
wget http://vision.princeton.edu/projects/2016/3DMatch/downloads/rgbd-datasets/sun3d-hotel_umd-maryland_hotel3.zip
unzip sun3d-hotel_umd-maryland_hotel3.zip
mv * .zip ../backup
cd ../../training
data/train
에 저장된 RGB-D 장면의 대응에 대해 처음부터 3DMatch 모델을 훈련합니다.
./marvin train net.json
(선택 사항) Marvin 텐서 파일에서 사전 훈련된 가중치를 사용하여 3DMatch를 훈련합니다.
./marvin train net.json your-pre-trained-weights.marvin
당사 프로젝트 웹페이지의 RGB-D 재구성 데이터 세트에서 더 많은 장면을 다운로드할 수 있습니다. 이러한 데이터세트는 3DMatch를 훈련하는 데 사용되는 Marvin 데이터 레이어와 호환되는 통합 형식으로 변환되었습니다. 폴더 계층 구조가 다음과 같도록 최소한 하나의 장면을 data/train
에 저장하고 다른 장면을 data/test
에 저장합니다.
| ——— training
| ——— core
| ——— marvin.hpp
| ——— ...
| ——— data
| ——— train
| ——— rgbd-dataset-scene-1
| ——— seq-01
| ——— seq-02
| ——— camera-intrinsics.txt
| ——— ...
| ——— ...
| ——— test
| ——— rgbd-dataset-scene-2
| ——— seq-01
| ——— camera-intrinsics.txt
| ——— ...
3dmatch-toolbox/depth-fusion
폴더를 참조하세요.
여러 개의 등록된 깊이 맵을 TSDF 복셀 볼륨으로 융합하는 CUDA/C++ 코드(Curless 및 Levoy 1996), 그런 다음 표면 메시 및 포인트 클라우드를 생성하는 데 사용할 수 있습니다.
이 데모는 data/sample/depth-fusion-demo/rgbd-frames
디렉토리의 등록된 깊이 맵 50개를 TSDF 복셀 볼륨으로 융합하고 표면 포인트 클라우드 tsdf.ply
생성합니다.
cd 3dmatch-toolbox/depth-fusion
./compile.sh
./demo # output saved to tsdf.ply
3dmatch-toolbox/evaluation
폴더를 참조하세요.
키포인트 매칭 벤치마크 및 기하학적 정합 벤치마크에 대한 평가 코드와 논문의 실험에 대한 참조 구현입니다.
3dmatch-toolbox/evaluation/keypoint-matching
폴더를 참조하세요.
벤치마크 설명 및 리더보드는 여기에서 확인할 수 있습니다.
3dmatch-toolbox/evaluation/keypoint-matching
으로 이동하여 Matlab에서 다음을 실행합니다.
% Evaluate 3DMatch (3dmatch.log) on the validation set (validation-set-gt.log)
getError ;
Marvin으로 3DMatch 설명자를 계산하기 위해 C++/CUDA 코드 컴파일
cd 3dmatch-toolbox/evaluation/keypoint-matching
./compile.sh
3DMatch 사전 훈련된 가중치 다운로드
./download-weights.sh # 3dmatch-weights-snapshot-137000.marvin
검증 세트 및 테스트 세트 다운로드
./download-validation.sh # validation-set.mat
./download-test.sh # test-set.mat
Matlab에서 다음 스크립트를 수정하고 실행합니다.
% Runs 3DMatch on the validation set and generates 3dmatch.log
test3DMatch ;
프로젝트 웹페이지의 RGB-D 재구성 데이터세트에서 하나 이상의 장면을 다운로드하세요. 위와 같이 폴더 계층 구조를 구성합니다.
Matlab에서 다음 스크립트를 수정하고 실행합니다.
makeCorresDataset ;
3dmatch-toolbox/evaluation/geometric-registration
폴더를 참조하세요.
여기에 설명된 기하학적 등록 벤치마크에 대한 평가를 실행하기 위한 Matlab 코드가 포함되어 있습니다. 개요:
getKeyptsAndDesc.m
- 장면 조각에 대한 중간 데이터(TDF 복셀 볼륨, 키포인트 및 3DMatch 설명자)를 생성합니다. 여기에서 사전 계산된 데이터를 다운로드할 수도 있습니다.runFragmentRegistration.m
- 중간 데이터를 읽고 모든 조각 쌍에 대해 RANSAC 기반 등록을 실행합니다.writeLog
- 모든 조각 쌍에서 등록 결과를 읽고 .log 파일을 만듭니다.evaluate.m
- 평가를 위해 .log 파일에서 정밀도를 계산하고 호출합니다. Matlab에서 다음을 실행합니다.
% Evaluate 3DMatch on the geometric registration benchmark
evaluate ;
참고: 합성 벤치마크에서 장면 조각의 TDF 복셀 그리드는 정확한 TDF를 위해 더 이상 사용되지 않는 코드를 사용하여 계산되었습니다( deprecated/pointCloud2AccTDF.m
참조). 훈련 조각에 대해 미세 조정된 3DMatch 사전 훈련된 가중치는 여기에서 다운로드할 수 있습니다.
3dmatch-toolbox/evaluation/model-fitting-apc
폴더를 참조하세요.
Shelf & Tote 데이터 세트에 대한 모델 피팅을 위해 3DMatch를 평가하기 위한 코드 및 사전 훈련된 모델이 포함되어 있습니다. 여기에서 미리 계산된 데이터(객체 및 스캔에 대한 TDF 복셀 그리드 볼륨, 표면 키포인트, 설명자 및 포즈 예측)를 다운로드할 수 있습니다. 평가 예시를 보려면 Matlab 스크립트 getError.m
을 실행하세요.
3dmatch-toolbox/evaluation/mesh-correspondence-shape2pose
폴더를 참조하세요.
3DMatch를 사용하여 Shape2Pose 데이터세트의 메시에 대한 메시 대응 시각화를 생성하는 코드가 포함되어 있습니다. 사전 계산된 데이터(메쉬의 TDF 복셀 그리드 볼륨, 표면 키포인트, 3DMatch 설명자)를 여기에서 다운로드할 수도 있습니다. 빠른 시각화를 위해 Matlab 스크립트 keypointRetrieval.m
을 실행하세요.