3DMatch — это дескриптор локальных геометрических объектов на основе ConvNet, который работает с 3D-данными (т. е. облаками точек, картами глубины, сетками и т. д.). Этот набор инструментов предоставляет код для использования 3DMatch для геометрической регистрации и сопоставления ключевых точек, а также код для обучения 3DMatch на основе существующих реконструкций RGB-D. Это эталонная реализация нашей статьи:
PDF | Веб-страница, тесты и наборы данных | Видео
Энди Цзэн, Шуран Сонг, Маттиас Ниснер, Мэтью Фишер, Цзяньсюн Сяо и Томас Фанкхаузер
Конференция IEEE по компьютерному зрению и распознаванию образов (CVPR), 2017 г., устная презентация
Сопоставление локальных геометрических особенностей с реальными изображениями глубины является сложной задачей из-за шума, низкого разрешения и неполноты данных 3D-сканирования. Эти трудности ограничивают эффективность современных методов, которые обычно основаны на гистограммах, а не на геометрических свойствах. В этой статье мы представляем 3DMatch, управляемую данными модель, которая изучает локальный объемный дескриптор патча для установления соответствий между частичными 3D-данными. Чтобы собрать данные обучения для нашей модели, мы предлагаем метод обучения признаков без учителя, который использует миллионы меток соответствия, обнаруженных в существующих реконструкциях 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 (подробную информацию см. в файле ЛИЦЕНЗИИ).
Всю необходимую информацию и файлы для скачивания можно найти здесь.
Если у вас есть вопросы или вы обнаружили ошибки, дайте мне знать: Энди Цзэн 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)
В этой демонстрации выравниваются два трехмерных облака точек (спроецированные на основе однопрофильных карт глубины) с использованием нашего предварительно обученного дескриптора 3DMatch (с Марвином) и стандартного 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
Загрузите два примера трехмерных облаков точек, вычислите их объемы воксельной сетки TDF, а также вычислите случайные ключевые точки поверхности и их дескрипторы 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
Запустите скрипт визуализации в Matlab.
% 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 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 (Curless and Levoy, 1996), который затем можно использовать для создания поверхностных сеток и облаков точек.
Эта демонстрация объединяет 50 зарегистрированных карт глубины из каталога data/sample/depth-fusion-demo/rgbd-frames
в воксельный объем 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 ;
Скомпилируйте код 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, ключевые точки и дескрипторы 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
Включает код и предварительно обученные модели для оценки 3DMatch на предмет соответствия модели набору данных Shelf & Tote. Вы можете скачать наши предварительно рассчитанные данные (объемы воксельной сетки TDF для объектов и сканирований, ключевые точки поверхности, дескрипторы и прогнозы поз) здесь. В качестве примера оценки запустите сценарий Matlab getError.m
См. папку 3dmatch-toolbox/evaluation/mesh-correspondence-shape2pose
Включает код для создания визуализаций соответствия сеток на сетках из набора данных Shape2Pose с использованием 3DMatch. Вы также можете скачать наши предварительно рассчитанные данные (объемы воксельной сетки TDF для сеток, ключевые точки поверхности, дескрипторы 3DMatch) здесь. Для быстрой визуализации запустите скрипт Matlab keypointRetrieval.m
.