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_blobspreprocess_changesim_blobs
We can also pre-compute the super-nodes (no need to load the blobs) using:
preprocess_scannet_snodespreprocess_changesim_snodes
Most of the important python utilities can be launched using the scripts.
3rscan_link: links the relevant 3RScan files into theDatasetfolder using the dataset'sjsonfileschangesim_poses: changeSim processing create thetrajectory.txtfile 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-snodesfolder)fusion_post: filters and merges results from thefusion_errorandfusion_timeutilitiesfusion_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 theDatasetfolder and creates thetrajectory.txtfilesmake_python: creates links for the python scripts in thebuildfoldermake_scripts: creates links for theshscripts in thebuildfoldermetrics: runs thefusion_error,fusion_graph,fusion_post,fusion_successandfusion_graphpython 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 inbuildifprocess_DATASETwas run with an argumentresult_process: moves a run frombuildtorunsin a named folder (default:last) and generates the result summariesresult_redo: clears the run files inbuild, and moves back a run fromrunsif its name is providedscannet_extract: extracts the relevant files from thesensfilesscannet_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 theDatasetfolderscannet_orientation: create theorientation.txtfiles for ScanNet (for ground truth alignment)
- PCL may not be compatible with the double precision coordinates used in the
cloud_map.plymodels of ChangeSim. They should be converted to float precision and renamedcloud_map_float.ply