🚀 Increase performance of axis-angle conversions #1544
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivations and context
When converting from axis-angle to matrix and back, current rotation_conversions.py does an intermediate step by converting to quaternions. There exists a faster way using Rodrigues' rotation formula .
Changes
Used the formulas for both axis-angle to matrix and matrix to axis-angle conversions.
The changes work with any number of batch dimensions, just like the original functions.
Effect
There is a 2x speedup when converting from axis-angle to matrix, and this speedup is consistent regardless of device and batch size.
There is a 5-8x speedup when converting from matrix to axis-angle.
The only difference in the results happens in matrix_to_axis_angle, when you give as input a matrix that is not a rotation matrix. This behaviour is undocumented anyway and the results do not make sense either way.
If this is really an issue, we can always merge only the first part of the changes, or we could check that the matrix is orthogonal and run the previous code if it isn't (for backwards compatibility)