3DMatch เป็นตัวอธิบายคุณลักษณะทางเรขาคณิตเฉพาะที่ที่ใช้ ConvNet ซึ่งทำงานกับข้อมูล 3 มิติ (เช่น พอยต์คลาวด์ แผนที่เชิงลึก เมช ฯลฯ) กล่องเครื่องมือนี้ให้โค้ดเพื่อใช้ 3DMatch สำหรับการลงทะเบียนทางเรขาคณิตและการจับคู่จุดสำคัญ เช่นเดียวกับโค้ดเพื่อฝึก 3DMatch จากการสร้าง RGB-D ที่มีอยู่ใหม่ นี่คือการดำเนินการอ้างอิงในเอกสารของเรา:
PDF | หน้าเว็บ & เกณฑ์มาตรฐาน & ชุดข้อมูล | วีดีโอ
Andy Zeng, Shuran Song, Matthias Nießner, Matthew Fisher, Jianxiong Xiao และ Thomas Funkhouser
การประชุม IEEE เรื่องคอมพิวเตอร์วิทัศน์และการจดจำรูปแบบ (CVPR) การนำเสนอปากเปล่าประจำ ปี 2560
การจับคู่คุณสมบัติทางเรขาคณิตในท้องถิ่นกับภาพเชิงลึกในโลกแห่งความเป็นจริงถือเป็นงานที่ท้าทาย เนื่องจากข้อมูลสแกน 3 มิติมีสัญญาณรบกวน ความละเอียดต่ำ และไม่สมบูรณ์ ปัญหาเหล่านี้จำกัดประสิทธิภาพของวิธีการที่ทันสมัยในปัจจุบัน ซึ่งโดยทั่วไปจะขึ้นอยู่กับฮิสโตแกรมมากกว่าคุณสมบัติทางเรขาคณิต ในบทความนี้ เรานำเสนอ 3Datch ซึ่งเป็นโมเดลที่ขับเคลื่อนด้วยข้อมูลซึ่งเรียนรู้ตัวอธิบายแพตช์ปริมาตรเฉพาะสำหรับสร้างความสัมพันธ์ระหว่างข้อมูล 3D บางส่วน เพื่อรวบรวมข้อมูลการฝึกอบรมสำหรับโมเดลของเรา เราเสนอวิธีการเรียนรู้ฟีเจอร์แบบไม่มีผู้ดูแลซึ่งใช้ประโยชน์จากป้ายกำกับการติดต่อนับล้านรายการที่พบในการสร้าง RGB-D ที่มีอยู่ใหม่ การทดลองแสดงให้เห็นว่าคำอธิบายของเราไม่เพียงแต่สามารถจับคู่เรขาคณิตเฉพาะที่ในฉากใหม่สำหรับการสร้างใหม่ แต่ยังสรุปกับงานที่แตกต่างกันและขนาดเชิงพื้นที่ (เช่น การจัดตำแหน่งโมเดลวัตถุระดับอินสแตนซ์สำหรับ Amazon Picking Challenge และการโต้ตอบของพื้นผิวตาข่าย) ผลลัพธ์แสดงให้เห็นว่า 3Datch มีประสิทธิภาพเหนือกว่าแนวทางที่ล้ำสมัยอื่นๆ อย่างสม่ำเสมอด้วยอัตรากำไรขั้นต้นที่สำคัญ
หากคุณพบว่าโค้ดนี้มีประโยชน์ในการทำงานของคุณ โปรดพิจารณาการอ้างอิง:
@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 แบบง่าย (ดูรายละเอียดในไฟล์ใบอนุญาต)
สามารถดูข้อมูลที่เกี่ยวข้องและดาวน์โหลดทั้งหมดได้ที่นี่
หากคุณมีคำถามหรือพบข้อบกพร่อง โปรดแจ้งให้เราทราบ: Andy Zeng andyz[at]princeton[dot]edu
#include <random>
ให้กับ utils.hpp ในโค้ดสาธิตการใช้งานอ้างอิง 3DMatch ของเราตลอดจนส่วนประกอบอื่นๆ ในกล่องเครื่องมือนี้ จำเป็นต้องมีการขึ้นต่อกันดังต่อไปนี้ ทดสอบบน Ubuntu 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)
การสาธิตนี้จัดตำแหน่งเมฆจุด 3 มิติสองจุด (ฉายจากแผนที่เชิงลึกแบบมุมมองเดียว) โดยใช้ตัวอธิบาย 3DMatch ที่ได้รับการฝึกอบรมล่วงหน้าของเรา (พร้อม Marvin) และ RANSAC มาตรฐาน
กล่องเครื่องมือ 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 point cloud ตัวอย่างสองตัว คำนวณปริมาตรกริด voxel ของ TDF และคำนวณจุดสำคัญพื้นผิวแบบสุ่มและตัวอธิบาย 3DMatch (บันทึกลงในไฟล์ไบนารีบนดิสก์) คำเตือน: การสาธิตนี้อ่านเฉพาะเมฆจุด 3 มิติที่บันทึกในรูปแบบไบนารีอย่างง่าย หากคุณต้องการรันโค้ดสาธิต 3Dmatch ในรูปแบบ point cloud ของคุณเอง โปรดแก้ไข demo.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 ต่างๆ เป็นตาราง voxel ของค่า Truncated Distance Function (TDF)
คำแนะนำในการติดตั้ง GAPS และการแปลง mesh ตัวอย่าง (ไฟล์ .off) ให้เป็นตาราง voxel (ไฟล์ไบนารี .raw ของ 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
เรียกใช้สคริปต์การแสดงภาพใน Matlab
% Visualize TDF voxel grid of mesh
showTDF ;
ดูโฟลเดอร์ 3dmatch-toolbox/training
โค้ดสำหรับการฝึกอบรม 3DMatch กับ Marvin ซึ่งเป็นเฟรมเวิร์กโครงข่ายประสาทเทียมน้ำหนักเบาเฉพาะ GPU เท่านั้น รวมสถาปัตยกรรมเครือข่ายสยาม .json ไฟล์ training/net.json
และชั้นข้อมูล CUDA/C++ Marvin ใน training/match.hpp
ที่สุ่มตัวอย่างการติดต่อจากชุดข้อมูลการสร้าง RGB-D ใหม่ (ซึ่งสามารถดาวน์โหลดได้จากหน้าเว็บโครงการของเรา)
เรียบเรียงมาร์วิน
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
ฝึกฝนโมเดล 3DMatch ตั้งแต่ต้น ผ่านการโต้ตอบจากฉาก RGB-D ที่บันทึกไว้ใน data/train
./marvin train net.json
(ไม่บังคับ) ฝึก 3DMatch โดยใช้ตุ้มน้ำหนักที่ได้รับการฝึกไว้ล่วงหน้าจากไฟล์เทนเซอร์ Marvin
./marvin train net.json your-pre-trained-weights.marvin
คุณสามารถดาวน์โหลดฉากเพิ่มเติมจากชุดข้อมูลการสร้าง RGB-D ใหม่ได้บนหน้าเว็บโครงการของเรา ชุดข้อมูลเหล่านี้ได้รับการแปลงเป็นรูปแบบรวม ซึ่งเข้ากันได้กับชั้นข้อมูล Marvin ของเราที่ใช้ในการฝึก 3Dmatch บันทึกอย่างน้อยหนึ่งฉากลงใน 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
รหัส CUDA/C++ เพื่อรวมแมปความลึกที่ลงทะเบียนหลายรายการไว้ในวอลุ่ม TSDF voxel (Curless และ Levoy 1996) ซึ่งจากนั้นสามารถใช้เพื่อสร้างตาข่ายพื้นผิวและพอยต์คลาวด์ได้
การสาธิตนี้รวมแผนที่เชิงลึกที่ลงทะเบียนไว้ 50 รายการจาก directory data/sample/depth-fusion-demo/rgbd-frames
ลงในวอลุ่ม voxel ของ TSDF และสร้าง Surface point cloud 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 ;
คอมไพล์โค้ด C++/CUDA เพื่อคำนวณตัวอธิบาย 3DMatch กับ Marvin
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 voxel, จุดสำคัญ และตัวอธิบาย 3DMatch) สำหรับส่วนของฉาก คุณยังสามารถดาวน์โหลดข้อมูลที่คำนวณไว้ล่วงหน้าของเราได้ที่นี่runFragmentRegistration.m
- อ่านข้อมูลระดับกลางและรันการลงทะเบียนแบบ RANSAC สำหรับแฟรกเมนต์ทุกคู่writeLog
- อ่านผลการลงทะเบียนจากทุกคู่ของแฟรกเมนต์ และสร้างไฟล์ .logevaluate.m
- คำนวณความแม่นยำและการเรียกคืนจากไฟล์ .log เพื่อการประเมินผล เรียกใช้สิ่งต่อไปนี้ใน Matlab:
% Evaluate 3DMatch on the geometric registration benchmark
evaluate ;
หมายเหตุ: ตาราง TDF voxel ของชิ้นส่วนฉากจากเกณฑ์มาตรฐานสังเคราะห์ได้รับการคำนวณโดยใช้โค้ดที่เลิกใช้แล้วเพื่อให้ได้ TDF ที่แม่นยำ (ดู deprecated/pointCloud2AccTDF.m
) สามารถดาวน์โหลดตุ้มน้ำหนักฝึกล่วงหน้า 3Dmatch ที่ปรับแต่งอย่างละเอียดในส่วนย่อยการฝึกได้ ที่นี่
ดูโฟลเดอร์ 3dmatch-toolbox/evaluation/model-fitting-apc
รวมโค้ดและโมเดลที่ได้รับการฝึกอบรมล่วงหน้าเพื่อประเมิน 3DMatch สำหรับการปรับโมเดลให้เหมาะสมบนชุดข้อมูล Shelf & Tote คุณสามารถดาวน์โหลดข้อมูลที่คำนวณล่วงหน้าของเรา (ปริมาณกริด voxel TDF สำหรับออบเจ็กต์และการสแกน จุดสำคัญบนพื้นผิว ตัวอธิบาย และการคาดการณ์ท่าทาง) ได้ที่นี่ สำหรับตัวอย่างการประเมิน ให้รันสคริปต์ Matlab getError.m
ดูโฟลเดอร์ 3dmatch-toolbox/evaluation/mesh-correspondence-shape2pose
รวมโค้ดเพื่อสร้างการแสดงภาพการโต้ตอบแบบตาข่ายบนตาข่ายจากชุดข้อมูล Shape2Pose โดยใช้ 3DMatch คุณยังสามารถดาวน์โหลดข้อมูลที่คำนวณไว้ล่วงหน้าของเรา (ปริมาตรกริด TDF voxel ของ meshes จุดสำคัญบนพื้นผิว ตัวอธิบาย 3DMatch) ได้ที่นี่ เพื่อให้เห็นภาพอย่างรวดเร็ว ให้เรียกใช้สคริปต์ Matlab keypointRetrieval.m