Skip to content

Pytorch extension: Batch-wise eigencomputation for symmetric 3x3 matrices

License

Notifications You must be signed in to change notification settings

nnaisense/pytorch_sym3eig

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pytorch extension: Batch-wise eigencomputation for symmetric 3x3 matrices


The operator works on 32 and 64 bit floating point data types and is implemented both for CPU and GPU with custom kernels. Implementations include forward and backward steps.

The full code for our work Deep Iterative Surface Normal Estimation can be found here: https://github.com/nnaisense/deep-iterative-surface-normal-estimation.

Installation

Ensure that at least PyTorch >= 1.0.0 is installed, checkout repository and run:

python setup.py install

Running tests

python setup.py test

Requires pytest and numpy.

Usage

import torch
from torch_sym3eig import Sym3Eig

matrices = torch.rand(100, 3, 3)
# Matrices need to be symmetric
matrices = (matrices + torch.transpose(matrices, 1, 2))/2.0

eig_vals, eig_vecs = Sym3Eig.apply(matrices)

Benchmarks

Runtimes for 100k matrices on an i7-7700K @ 4.20GHz and a GTX Titan X, respectively:

CPU GPU
Forward 23.59 ms 1.93 ms
Backward 20.47 ms 1.31 ms

Running benchmarks:

python test/benchmark.py 100000

Parameters

  • x (Tensor) - Input matrices (symmetric 3x3) (number_of_matrices x 3 x 3).

Returns

  • eig_vals (Tensor) - Eigenvalues of the input matrices in no pre-defined order(number_of_matrices x 3).
  • eig_vecs (Tensor) - Corresponding eigenvectors in columns(number_of_matrices x 3 x 3).

Information

The module was initially created for and used in our Deep Iterative Surface Normal Estimation paper, which can be cited as reference:

@InProceedings{Lenssen:2020,
	author = {Lenssen, Jan Eric and Osendorfer, Christian and Masci, Jonathan},
	title = {Deep Iterative Surface Normal Estimation},
	booktitle = {Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
	year = {2020}
}

The implementation follows the derivations from:

  • Mike B. Giles. Collected matrix derivative results for forward and reverse mode algorithmic differentiation. In Advances in Automatic Differentiation, pages 35–44. Springer Berlin Heidelberg, 2008, and
  • https://en.wikipedia.org/wiki/Eigenvalue_algorithm

About

Pytorch extension: Batch-wise eigencomputation for symmetric 3x3 matrices

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published