3DMatch عبارة عن واصف ميزات هندسية محلي يعتمد على ConvNet ويعمل على البيانات ثلاثية الأبعاد (مثل السحب النقطية وخرائط العمق والشبكات وما إلى ذلك). يوفر صندوق الأدوات هذا تعليمات برمجية لاستخدام 3DMatch للتسجيل الهندسي ومطابقة نقاط المفاتيح، بالإضافة إلى تعليمات برمجية لتدريب 3DMatch من عمليات إعادة بناء RGB-D الحالية. هذا هو التنفيذ المرجعي لورقتنا:
قوات الدفاع الشعبي | صفحة الويب والمعايير ومجموعات البيانات | فيديو
آندي تسنغ، وشوران سونغ، وماتياس نيسنر، وماثيو فيشر، وجيانكسيونغ شياو، وتوماس فانكهاوسر
مؤتمر IEEE حول الرؤية الحاسوبية والتعرف على الأنماط (CVPR) 2017 العرض الشفهي
تعد مطابقة الميزات الهندسية المحلية على الصور العميقة في العالم الحقيقي مهمة صعبة نظرًا للطبيعة الصاخبة والمنخفضة الدقة وغير المكتملة لبيانات المسح ثلاثي الأبعاد. هذه الصعوبات تحد من أداء الأساليب الحديثة، والتي تعتمد عادة على الرسوم البيانية على الخصائص الهندسية. في هذا البحث، نقدم نموذج 3DMatch، وهو نموذج يعتمد على البيانات ويتعلم واصف التصحيح الحجمي المحلي لإنشاء المراسلات بين البيانات ثلاثية الأبعاد الجزئية. لتجميع بيانات التدريب لنموذجنا، نقترح طريقة تعلم الميزات غير الخاضعة للرقابة والتي تعمل على الاستفادة من ملايين تسميات المراسلات الموجودة في عمليات إعادة بناء RGB-D الحالية. تُظهر التجارب أن الواصف الخاص بنا ليس قادرًا فقط على مطابقة الهندسة المحلية في المشاهد الجديدة لإعادة الإعمار، ولكنه أيضًا تعميم على مهام ومقاييس مكانية مختلفة (على سبيل المثال، محاذاة نموذج الكائن على مستوى المثيل لتحدي Amazon Picking، والمراسلات السطحية الشبكية). تظهر النتائج أن برنامج 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 المبسط (ارجع إلى ملف الترخيص للحصول على التفاصيل).
جميع المعلومات والتنزيلات ذات الصلة يمكن العثور عليها هنا.
إذا كان لديك أي أسئلة أو وجدت أي أخطاء، فيرجى إبلاغي بذلك: Andy Zeng andyz[at]princeton[dot]edu
#include <random>
إلى utils.hpp في التعليمات البرمجية التجريبية.يتطلب تطبيقنا المرجعي لبرنامج 3DMatch، بالإضافة إلى المكونات الأخرى في صندوق الأدوات هذا، التبعيات التالية. تم الاختبار على أوبونتو 14.04.
كودا 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 القياسي.
صندوق أدوات Checkout 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
قم بتحميل المثالين لسحب النقاط ثلاثية الأبعاد، واحسب أحجام شبكة TDF voxel الخاصة بهم، واحسب نقاط المفاتيح السطحية العشوائية وواصفات 3DMatch الخاصة بهم (المحفوظة في الملفات الثنائية على القرص). تحذير: يقرأ هذا العرض التوضيحي فقط السحب النقطية ثلاثية الأبعاد المحفوظة بتنسيق ثنائي بسيط. إذا كنت ترغب في تشغيل كود العرض التوضيحي 3DMatch على تنسيق السحابة النقطية الخاص بك، فيرجى تعديل 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 ;
إرشادات حول كيفية التحويل من تمثيلات البيانات ثلاثية الأبعاد المتنوعة إلى شبكة فوكسل لقيم دالة المسافة المقطوعة (TDF).
إرشادات حول تثبيت 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
قم بتشغيل البرنامج النصي للتصور في ماتلاب
% Visualize TDF voxel grid of mesh
showTDF ;
راجع المجلد 3dmatch-toolbox/training
كود لتدريب برنامج 3DMatch مع Marvin، وهو إطار شبكة عصبية خفيف الوزن مخصص لوحدة معالجة الرسومات فقط. يتضمن بنية الشبكة السيامية .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 and Levoy 1996)، والتي يمكن استخدامها بعد ذلك لإنشاء شبكات سطحية وسحب نقطية.
يدمج هذا العرض التوضيحي 50 خريطة عمق مسجلة من data/sample/depth-fusion-demo/rgbd-frames
في وحدة تخزين TSDF voxel، وينشئ سحابة نقطة سطحية 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
- حساب الدقة والاستدعاء من ملفات السجل للتقييم قم بتشغيل الأمر التالي في 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. يمكنك تنزيل بياناتنا المحسوبة مسبقًا (أحجام شبكة TDF voxel للكائنات وعمليات المسح ونقاط المفاتيح السطحية والواصفات والتنبؤات الموضعية) هنا. للحصول على مثال للتقييم، قم بتشغيل البرنامج النصي Matlab getError.m
راجع المجلد 3dmatch-toolbox/evaluation/mesh-correspondence-shape2pose
يتضمن تعليمات برمجية لإنشاء تصورات مراسلات شبكية على الشبكات من مجموعة بيانات Shape2Pose باستخدام 3DMatch. يمكنك أيضًا تنزيل بياناتنا المحسوبة مسبقًا (أحجام شبكة TDF voxel للشبكات ونقاط المفاتيح السطحية وواصفات 3DMatch) هنا. للحصول على تصور سريع، قم بتشغيل البرنامج النصي Matlab keypointRetrieval.m
.