• Stars
    star
    107
  • Rank 323,587 (Top 7 %)
  • Language
    MATLAB
  • Created over 4 years ago
  • Updated 12 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Certifiable Outlier-Robust Geometric Perception

Certifiable Outlier-Robust Geometric Perception

About

This repository holds the implementation for certifiably solving outlier-robust geometric perception problems to global optimality. The certifiable outlier-robust geometric perception framework contains two main modules:

  • A sparse semidefinite programming relaxation (SSR) scheme that relaxes nonconvex outlier-robust perception problems into convex semidefinite programs (SDPs); and

  • A novel SDP solver, called STRIDE, that solves the generated SDPs at an unprecedented scale and accuracy.

We proposed a preliminary version of the SSR scheme in our NeurIPS 2020 paper, and released a certifier (that certifies if a given estimate is optimal) based on Douglas-Rachford Splitting (DRS). Please switch to the NeurIPS2020 branch of this repo to checkout the NeurIPS2020 implementation.

If you find this library helpful or use it in your projects, please cite:

@article{Yang22tpami-certifiableperception,
  title={Certifiably Optimal Outlier-Robust Geometric Perception: Semidefinite Relaxations and Scalable Global Optimization},
  author={Yang, Heng and Carlone, Luca},
  journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},
  year={2022}
}

Tutorial: Semidefinite Relaxation for Polynomial Optimization

A general polynomial optimization problem (POP) is an optimization problem of the following standard form

minimize_{x ∈ R^d}      f(x)
subject to              h_i(x) == 0, i=1,...,l_h
                        g_j(x) >= 0, j=1,...,l_g

where x ∈ R^d is a d-dimensional decision variable, f(x) is a scalar polynomial objective function, h_i(x),i=1,...,l_h are scalar polynomial functions that define equality constraints, and g_j(x),j=1,...,l_g are polynomial functions that define inequality constraints. POPs are in general nonconvex and NP-hard problems. For example, one can easily see that binary quadratic programming is an instance of POP, because binary constraints x_i ∈ {+1, -1}, i=1,...,d can be easily written as polynomial equalities h_i(x) = x_i^2 - 1 = 0,i=1,...,d.

Semidefinite relaxations are a powerful tool for solving nonconvex POPs to global optimality. In this repo, we provide tools that can help the user exploit the power of semidefinite relaxations with minimum efforts.

Dense Relaxation (Lasserre's Hierarchy)

Lasserre's hierarchy of moment relaxations is a standard technique for relaxing POPs into semidefinite programs (SDPs). The basic idea is as follows. Let kappa be a positive integer (called the relaxation order) such that 2*kappa is no smaller than the maximum degree of the defining polynomials f,h_i,g_j, and let v = [x]_kappa be the set of standard monomials in x with degree up to kappa. For example, suppose x = [x_1; x_2], then [x]_kappa with kappa = 2 leads to v = [1; x_1; x_2; x_1*x_2; x_1^2; x_2^2]. The essential idea of Lasserre's hierarchy is to express the original POP problem in the matrix variable X = v*v' (called the moment matrix, by construction X is positive semidefinite) and relax the POP into a convex SDP. In the seminal paper of Lasserre, it was proved that if kappa is chosen large enough, then the convex SDP can solve the original nonconvex POP to global optimality.

Although the underlying mechanics of Lasserre's hierarchy can be complicated (the interested reader can refer to Section 2 of our paper for technical details), in this repo we provide a simple function that implements Lasserre's hierarchy:

[SDP,info] = dense_sdp_relax(problem,kappa)

where the inputs are:

  • problem: a Matlab structure that contains the following fields:
    • vars: a vector of symbolic decision variables (i.e., x in the POP);
    • objective: a multivariate polynomial that specifies the objective function of the POP (i.e., f(x) in the POP);
    • equality (optional): a vector of multivariate polynomials with dimension l_h that specifies the equality constraints of the POP (i.e., h_i(x),i=1,...,l_h in the POP);
    • inequality (optional): a vector of multivariate polynomials with dimension l_g that specifies the inequality constraints of the POP (i.e., g_j(x),j=1,...,l_g in the POP).
  • kappa (optional): a positive integer that specifies the relaxation order. If kappa is not provided, or provided such that 2*kappa is smaller than the maximum degree of the defining polynomials, then our implementation uses the minimum relaxation order kappa such that 2*kappa is no smaller than the maximum degree.

and the outputs are:

  • SDP: a Matlab structure that contains the following fields:
    • blk,At,b,C: standard SDP problem data in SDPT3 format. The interested reader should check out SDPT3 user manual for details. Section 2.1 of our paper also gives a quick introduction.
    • sedumi: a Matlab structure that provides the standard SDP problem data in sedumi format. The interested reader should checkout sedumi user manual for details. It is easy to convert sedumi format to MOSEK format, as we will show in one of the examples later.
  • info: a Matlab structure that contains additional information about the relaxation.

Example: Binary Quadratic Programming

We now use a simple example on binary quadratic programming (BQP) to illustrate how to supply the POP problem description to dense_sdp_relax. The sample code is given below.

%% Generate random binary quadratic program
d       = 10; % BQP with d variables
x       = msspoly('x',d); % symbolic decision variables using SPOTLESS
Q       = randn(d,d); Q = Q + Q'; % a random symmetric matrix
c       = randn(d,1);
f       = x'*Q*x + c'*x; % objective function of the BQP
h       = x.^2 - 1; % equality constraints of the BQP (binary variables)
g       = [x(1)]; % ask the first variable to be positive

%% Relax BQP into an SDP
problem.vars            = x;
problem.objective       = f;
problem.equality        = h; 
problem.inequality      = g;
kappa                   = 2; % relaxation order
[SDP,info]              = dense_sdp_relax(problem,kappa);

In this demo code, we first generate a random binary quadratic programming problem using the package SPOTLESS (which is a submodule of this repo), and then pass the problem structure with fields vars, objective, equality, and inequality to the function dense_sdp_relax to generate SDP relaxations. We recommend the user to run the script example_bqp.m to check how to solve the SDP data using MOSEK, and to see that SDP relaxations can actually solve BQP problems to global optimality.

Sparse Relaxation (Basis Reduction)

Coming soon.

More Repositories

1

Kimera

Index repo for Kimera code
1,800
star
2

TEASER-plusplus

A fast and robust point cloud registration library
C++
1,753
star
3

Kimera-VIO

Visual Inertial Odometry with SLAM capabilities and 3D Mesh generation.
C++
1,534
star
4

Kimera-Semantics

Real-Time 3D Semantic Reconstruction from 2D data
C++
640
star
5

Hydra

C++
583
star
6

Kimera-RPGO

Robust Pose Graph Optimization
C++
468
star
7

Kimera-VIO-ROS

ROS wrapper for Kimera-VIO
C++
371
star
8

Kimera-Multi

Index repo for Kimera-Multi system
Shell
327
star
9

Khronos

Spatio-Temporal Metric-Semantic SLAM
C++
273
star
10

Loc-NeRF

Monte Carlo Localization using Neural Radiance Fields
Python
259
star
11

Kimera-Multi-Data

A large-scale multi-robot dataset for multi-robot SLAM
149
star
12

GNC-and-ADAPT

Graduated Non-Convexity (GNC) and Adaptive Trimming (ADAPT) algorithms for outlier robust estimation
MATLAB
112
star
13

PD-MeshNet

Primal-Dual Mesh Convolutional Neural Networks
Python
106
star
14

GlobalOptimizationTutorial

Hands-on Tutorial for Global Optimization in Matlab
MATLAB
104
star
15

llm_scene_understanding

HTML
71
star
16

STRIDE

Solver for Large-Scale Rank-One Semidefinite Relaxations
MATLAB
66
star
17

Clio

66
star
18

VNAV-labs

Labs for MIT 16.485
Python
64
star
19

Spatial-Hash

Minimal C++ library for spatial data structures based on voxel hashing
C++
57
star
20

KISS-Matcher

52
star
21

Hydra-ROS

Hydra ROS Interface
C++
39
star
22

Spark-DSG

Scene Graph API (C++ and Python)
C++
37
star
23

Kimera-VIO-ROS2

C++
36
star
24

Kimera-Multi-LCD

C++
34
star
25

Kimera-VIO-Evaluation

Code to automatically evaluate and tune parameters for Kimera-VIO pipeline.
Python
33
star
26

Kimera-PGMO

C++
33
star
27

ROBIN

C++
31
star
28

config_utilities

Automatic C++ config structs and tools.
C++
28
star
29

pose_graph_tools

C++
26
star
30

pose-baselines

Jupyter Notebook
25
star
31

estimation-contracts

MATLAB
25
star
32

neural_tree

Python
22
star
33

C-3PO

Python
21
star
34

Kimera-Distributed

C++
21
star
35

MiDiffusion

Python
17
star
36

LP2

Long-term Human Trajectory Prediction using 3D DSGs
15
star
37

GlobalOptimization-ICCV2019

ICCV 2019 Tutorial: Global Optimization for Geometric Understanding with Provable Guarantees
TeX
14
star
38

FUSES

C++
11
star
39

Hydra-GNN

Room classification network training and inference code
Python
10
star
40

certifiable_tracking

MATLAB
8
star
41

PACE

Index repo for the PACE project
Python
7
star
42

robotRepresentations-RSS2023

Robot Representations Workshop @ RSS 2023
SCSS
6
star
43

ensemble_pose

Self-training for an ensemble of object pose estimators
Python
5
star
44

ford-paper-params

Parameters for competitor pipelines for the Kimera Multicamera project
5
star
45

CertifiablePerception-RSS2020

Workshop website on Certifiable Robot Perception for RSS2020
TeX
5
star
46

Longterm-Perception-WS

Workshop on Long-term Perception for Autonomy in Dynamic Human-shared Environments
SCSS
4
star
47

ThreedFront

Python
4
star
48

PerceptionMonitoring

Python
3
star
49

dbow2_catkin

CMake
2
star
50

PAL-ICRA2020

Ruby
2
star
51

kimera-multi-vocab

Vocabulary file for Kimera-Multi in the Kimera-Multi dataset
2
star
52

VNAV2020-handouts

Handouts/webpage for VNAV 2020
HTML
1
star