This methods converts two image sequences (label maps, depth maps and camera poses) into semantic scene graphs, creates node descriptors for those graphs in an attempts to semantically match them. The results of the semantic matching are then use to calculate the relative transformation matrix between the two sequences world coordinate systems.
Our adjacency-based descriptors are compared against:
- the random walk descriptors from X-View: Graph-Based Semantic Multi-View Localization (Gawel et al. 2018)
- the walk histogram descriptors from Semantic Histogram Based Graph Matching for Real-Time Multi-Robot Global Localization in Large Scale Environment (Guo et al. 2021)
We re-implemented the relevant parts of both works to fit our datasets and to fairly compare their performances against ours.
We also provide an alternative graph extraction method that produces nodes based on object instances rather than spatial regions, for a more accurate object-level understanding of the scene.
- Ubuntu (20.04)
- CMake (3.22.1)
- Eigen (3.3.7)
- OpenCV (4.2.0)
- PCL (1.10)
You must set the correct DATA
and SOURCES
paths in the scripts and python utilities to match your system configuration.
Clone the repository and run:
mkdir build
cd build
cmake ..
make
ln -f -s ../scripts/make_scripts.sh . && ./make_scripts.sh
&& ./make_python.sh
To run the registration:
./sgRegistration instance1 instance2 [descriptor_type descriptor_depth graph_type task registration_type saving start1 count1 start2 count2 suffix]
instance1
and instance2
are folders in the Dataset
folder.
They all require processing before being used:
- ScanNet
- ChangeSim
- Prototypical: 3RScan, as we have yet to create the registration ground truth.
To speed up the process, we can pre-compute the "blobs" (no need to load the images) using:
preprocess_scannet_blobs
preprocess_changesim_blobs
We can also pre-compute the super-nodes (no need to load the blobs) using:
preprocess_scannet_snodes
preprocess_changesim_snodes
Most of the important python utilities can be launched using the scripts.
3rscan_link
: links the relevant 3RScan files into theDataset
folder using the dataset'sjson
fileschangesim_poses
: changeSim processing create thetrajectory.txt
file by matching raw and processed depth maps and interpolating quaternionsfusion_error
: gives summary of the error (error against depth curves) over the whole runfusion_graph
: gives summary of the graph extraction metrics (to use on acmd-snodes
folder)fusion_post
: filters and merges results from thefusion_error
andfusion_time
utilitiesfusion_success
: gives the overall the error results (error against instance/success against threshold) over whole runfusion_time
: gives summary of the run-time (time against depth curves) over the whole runmetrics_dataset
: gives information on the instances in the datasets (ie camera speed)metrics_graph
: gives summary of the distances between objects, their radii etc... over the generated graphsorientation_checker
: ScanNet processing find the transformation required to align different instances of a same scene in ScanNet
changesim_link
: links the relevant ScanNet files into theDataset
folder and creates thetrajectory.txt
filesmake_python
: creates links for the python scripts in thebuild
foldermake_scripts
: creates links for thesh
scripts in thebuild
foldermetrics
: runs thefusion_error
,fusion_graph
,fusion_post
,fusion_success
andfusion_graph
python utilities over the selected configurationpreprocess_changesim_blobs
: convert the images of ChangeSim into a list of blobspreprocess_changesim_snodes
: convert the images (or blobs if available) of ChangeSim into a list of super-nodespreprocess_scannet_blobs
: convert the images of ScanNet into a list of blobspreprocess_scannet_snodes
: convert the images (or blobs if available) of ScanNet into a list of super-nodesprocess_changesim
: run the registration pipeline on ChangeSim (argument to select a subset of scenes)process_scannet
: run the registration pipeline on ScanNet (argument to select a subset of scenes)process
: compiles and run the registration on a specific sceneresult_merge
: merges results files inbuild
ifprocess_DATASET
was run with an argumentresult_process
: moves a run frombuild
toruns
in a named folder (default:last
) and generates the result summariesresult_redo
: clears the run files inbuild
, and moves back a run fromruns
if its name is providedscannet_extract
: extracts the relevant files from thesens
filesscannet_link_esalab
: links ESANet labels for ScanNet if they have been created on Windowsscannet_link_instance
: links instance images for ScanNet for graph ground truthscannet_link
: links the relevant ScanNet files into theDataset
folderscannet_orientation
: create theorientation.txt
files for ScanNet (for ground truth alignment)
- PCL may not be compatible with the double precision coordinates used in the
cloud_map.ply
models of ChangeSim. They should be converted to float precision and renamedcloud_map_float.ply