3DMatch adalah deskriptor fitur geometris lokal berbasis ConvNet yang beroperasi pada data 3D (yaitu awan titik, peta kedalaman, jerat, dll.). Kotak peralatan ini menyediakan kode untuk menggunakan 3DMatch untuk registrasi geometris dan pencocokan titik kunci, serta kode untuk melatih 3DMatch dari rekonstruksi RGB-D yang ada. Ini adalah implementasi referensi dari makalah kami:
PDF | Halaman Web & Tolok Ukur & Kumpulan Data | Video
Andy Zeng, Shuran Song, Matthias Nießner, Matthew Fisher, Jianxiong Xiao, dan Thomas Funkhouser
Konferensi IEEE tentang Visi Komputer dan Pengenalan Pola (CVPR) Presentasi Lisan 2017
Mencocokkan fitur geometris lokal pada gambar kedalaman dunia nyata merupakan tugas yang menantang karena sifat data pemindaian 3D yang berisik, beresolusi rendah, dan tidak lengkap. Kesulitan-kesulitan ini membatasi kinerja metode canggih saat ini, yang biasanya didasarkan pada histogram dibandingkan properti geometris. Dalam makalah ini, kami menyajikan 3DMatch, model berbasis data yang mempelajari deskriptor patch volumetrik lokal untuk membuat korespondensi antara sebagian data 3D. Untuk mengumpulkan data pelatihan untuk model kami, kami mengusulkan metode pembelajaran fitur tanpa pengawasan yang memanfaatkan jutaan label korespondensi yang ditemukan dalam rekonstruksi RGB-D yang ada. Eksperimen menunjukkan bahwa deskriptor kami tidak hanya mampu mencocokkan geometri lokal dalam adegan baru untuk rekonstruksi, namun juga menggeneralisasi tugas dan skala spasial yang berbeda (misalnya penyelarasan model objek tingkat instans untuk Amazon Picking Challenge, dan korespondensi permukaan mesh). Hasilnya menunjukkan bahwa 3DMatch secara konsisten mengungguli pendekatan canggih lainnya dengan selisih yang signifikan.
Jika Anda merasa kode ini berguna dalam pekerjaan Anda, harap pertimbangkan untuk mengutip:
@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}
}
Kode ini dirilis di bawah Lisensi BSD Sederhana (lihat file LISENSI untuk rinciannya).
Semua informasi dan unduhan yang relevan dapat ditemukan di sini.
Jika Anda memiliki pertanyaan atau menemukan bug, beri tahu saya: Andy Zeng andyz[at]princeton[dot]edu
#include <random>
ke utils.hpp dalam kode demo.Implementasi referensi kami untuk 3DMatch, serta komponen lain dalam kotak peralatan ini, memerlukan dependensi berikut. Diuji pada Ubuntu 14.04.
CUDA 7.5 dan cuDNN 5.1. Anda mungkin perlu mendaftar ke NVIDIA. Berikut adalah beberapa langkah tambahan untuk menyiapkan cuDNN 5.1. CATATAN Kami sangat menyarankan Anda menginstal versi cuDNN yang berbeda ke direktori yang berbeda (misalnya, /usr/local/cudnn/vXX
) karena paket perangkat lunak yang berbeda mungkin memerlukan versi yang berbeda.
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 (diuji dengan OpenCV 2.4.11)
Demo ini menyelaraskan dua titik awan 3D (diproyeksikan dari peta kedalaman tampilan tunggal) menggunakan deskriptor 3DMatch kami yang telah dilatih sebelumnya (dengan Marvin) dan RANSAC standar.
Periksa kotak alat 3DMatch, kompilasi kode demo C++/CUDA dan Marvin
git clone https://github.com/andyzeng/3dmatch-toolbox.git 3dmatch-toolbox
cd 3dmatch-toolbox/core
./compile.sh
Unduh beban terlatih 3DMatch kami
./download-weights.sh # 3dmatch-weights-snapshot-137000.marvin
Muat dua contoh awan titik 3D, hitung volume kisi voxel TDF, dan hitung titik kunci permukaan acak serta deskriptor 3DMatchnya (disimpan ke file biner di disk). Peringatan: demo ini hanya membaca titik awan 3D yang disimpan dalam format biner sederhana. Jika Anda ingin menjalankan kode demo 3DMatch pada format point cloud Anda sendiri, silakan ubah demo.cu sesuai kebutuhan.
# 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
Jalankan skrip berikut di 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 ;
Petunjuk tentang cara mengonversi berbagai representasi data 3D menjadi kisi voxel nilai Fungsi Jarak Terpotong (TDF).
Petunjuk tentang cara menginstal GAPS dan mengonversi mesh sampel (file .off) menjadi grid voxel (file .raw biner dari float):
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
Jalankan skrip visualisasi di Matlab
% Visualize TDF voxel grid of mesh
showTDF ;
Lihat folder 3dmatch-toolbox/training
Kode untuk melatih 3DMatch dengan Marvin, kerangka jaringan saraf ringan khusus GPU. Termasuk file .json file training/net.json
arsitektur jaringan Siam dan lapisan data CUDA/C++ Marvin di training/match.hpp
yang secara acak mengambil sampel korespondensi dari kumpulan data rekonstruksi RGB-D (yang dapat diunduh dari halaman web proyek kami).
Kompilasi Marvin
cd 3dmatch-toolbox/training
./compile.sh
Unduh beberapa adegan pelatihan dan pengujian dari kumpulan data rekonstruksi RGB-D (unduh adegan lainnya di sini)
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
Latih model 3DMatch dari awal melalui korespondensi dari adegan RGB-D yang disimpan dalam data/train
./marvin train net.json
(Opsional) Latih 3DMatch menggunakan bobot yang telah dilatih sebelumnya dari file tensor Marvin
./marvin train net.json your-pre-trained-weights.marvin
Anda dapat mengunduh lebih banyak adegan dari kumpulan data rekonstruksi RGB-D di halaman web proyek kami. Kumpulan data ini telah diubah menjadi format terpadu, yang kompatibel dengan lapisan data Marvin kami yang digunakan untuk melatih 3DMatch. Simpan setidaknya satu adegan ke dalam data/train
dan adegan lainnya ke dalam data/test
sehingga hierarki folder terlihat seperti ini:
| ——— 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
| ——— ...
Lihat folder 3dmatch-toolbox/depth-fusion
Kode CUDA/C++ untuk menggabungkan beberapa peta kedalaman terdaftar ke dalam volume voxel TSDF (Curless dan Levoy 1996), yang kemudian dapat digunakan untuk membuat jerat permukaan dan awan titik.
Demo ini menggabungkan 50 peta kedalaman terdaftar dari direktori data/sample/depth-fusion-demo/rgbd-frames
ke dalam volume voxel TSDF, dan menciptakan cloud titik permukaan tsdf.ply
cd 3dmatch-toolbox/depth-fusion
./compile.sh
./demo # output saved to tsdf.ply
Lihat folder 3dmatch-toolbox/evaluation
Kode evaluasi untuk Tolok Ukur Pencocokan Titik Kunci dan Tolok Ukur Registrasi Geometris, serta implementasi referensi untuk eksperimen dalam makalah kami.
Lihat folder 3dmatch-toolbox/evaluation/keypoint-matching
Deskripsi benchmark dan papan peringkat dapat ditemukan di sini.
Navigasikan ke 3dmatch-toolbox/evaluation/keypoint-matching
dan jalankan perintah berikut di Matlab:
% Evaluate 3DMatch (3dmatch.log) on the validation set (validation-set-gt.log)
getError ;
Kompilasi kode C++/CUDA untuk menghitung deskriptor 3DMatch dengan Marvin
cd 3dmatch-toolbox/evaluation/keypoint-matching
./compile.sh
Unduh beban terlatih 3DMatch kami
./download-weights.sh # 3dmatch-weights-snapshot-137000.marvin
Unduh set validasi dan set pengujian
./download-validation.sh # validation-set.mat
./download-test.sh # test-set.mat
Ubah dan jalankan skrip berikut di Matlab:
% Runs 3DMatch on the validation set and generates 3dmatch.log
test3DMatch ;
Unduh satu atau lebih adegan dari kumpulan data rekonstruksi RGB-D di halaman web proyek kami. Atur hierarki folder seperti di atas.
Ubah dan jalankan skrip berikut di Matlab:
makeCorresDataset ;
Lihat folder 3dmatch-toolbox/evaluation/geometric-registration
Termasuk kode Matlab untuk menjalankan evaluasi pada tolok ukur registrasi geometris yang dijelaskan di sini. Ringkasan:
getKeyptsAndDesc.m
- menghasilkan data perantara (volume voxel TDF, titik kunci, dan deskriptor 3DMatch) untuk fragmen adegan. Anda juga dapat mengunduh data kami yang telah dihitung sebelumnya di sini.runFragmentRegistration.m
- membaca data perantara dan menjalankan registrasi berbasis RANSAC untuk setiap pasangan fragmen.writeLog
- membaca hasil registrasi dari setiap pasangan fragmen dan membuat file .logevaluate.m
- menghitung presisi dan penarikan kembali dari file .log untuk evaluasi Jalankan yang berikut ini di Matlab:
% Evaluate 3DMatch on the geometric registration benchmark
evaluate ;
Catatan: kisi-kisi voxel TDF dari fragmen pemandangan dari tolok ukur sintetik dihitung menggunakan kode yang tidak digunakan lagi untuk TDF yang akurat (lihat deprecated/pointCloud2AccTDF.m
). Bobot terlatih 3DMatch yang disesuaikan dengan fragmen pelatihan dapat diunduh di sini.
Lihat folder 3dmatch-toolbox/evaluation/model-fitting-apc
Menyertakan kode dan model terlatih untuk mengevaluasi 3DMatch untuk kesesuaian model pada kumpulan data Shelf & Tote. Anda dapat mengunduh data kami yang telah dihitung sebelumnya (volume kisi voxel TDF untuk objek dan pemindaian, titik kunci permukaan, deskriptor, dan prediksi pose) di sini. Untuk contoh evaluasi, jalankan skrip Matlab getError.m
Lihat folder 3dmatch-toolbox/evaluation/mesh-correspondence-shape2pose
Termasuk kode untuk menghasilkan visualisasi korespondensi mesh pada mesh dari dataset Shape2Pose menggunakan 3DMatch. Anda juga dapat mengunduh data kami yang telah dihitung sebelumnya (volume grid voxel TDF dari jerat, titik kunci permukaan, deskriptor 3DMatch) di sini. Untuk visualisasi cepat, jalankan skrip Matlab keypointRetrieval.m
.