pytorchse3
================
<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->
## Install
``` sh
pip install pytorchse3
```
## How to use
``` python
import torch
from pytorchse3.se3 import se3_exp_map, se3_log_map
```
Here are two transformation matrices for which `PyTorch3D` recovers the
wrong log map (see [this
issue](https://github.com/facebookresearch/pytorch3d/issues/1609?notification_referrer_id=NT_kwDOAcYOvLM3MzY1NTAxMTY0OjI5NzU3MTE2#issuecomment-1839450529)).
``` python
T = torch.Tensor(
[
[
[-0.7384057045, 0.3333132863, -0.5862244964, 0.0000000000],
[0.3520625532, -0.5508944392, -0.7566816807, 0.0000000000],
[-0.5751599669, -0.7651259303, 0.2894364297, 0.0000000000],
[-0.1840534210, -0.1836946011, 0.9952554703, 1.0000000000],
],
[
[-0.7400283217, 0.5210028887, -0.4253400862, 0.0000000000],
[0.5329059958, 0.0683888718, -0.8434065580, 0.0000000000],
[-0.4103286564, -0.8508108258, -0.3282552958, 0.0000000000],
[-0.1197679043, 0.1799146235, 0.5538908839, 1.0000000000],
],
],
).transpose(-1, -2)
```
`pytorchse3` computes the correct log map.
``` python
log_T_vee = se3_log_map(T)
log_T_vee
```
tensor([[ 1.1319, 1.4831, -2.5131, -0.8503, -0.1170, 0.7346],
[ 1.1288, 2.2886, -1.8147, -0.8812, 0.0367, -0.1004]])
Exponentiating the log map recovers the original transformation matrix
with 1e-4 absolute error.
``` python
eq_T = se3_exp_map(log_T_vee)
assert torch.allclose(T, eq_T, atol=1e-4)
```
``` python
T - eq_T
```
tensor([[[-9.2983e-06, -2.3842e-07, 1.1504e-05, 2.9802e-08],
[-5.1558e-06, 8.5235e-06, -8.6427e-06, -2.9802e-08],
[ 8.6427e-06, -6.4373e-06, 4.4703e-07, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00]],
[[ 8.0466e-06, 1.6212e-05, 6.0201e-06, -3.7253e-08],
[ 4.5896e-06, 8.6352e-06, 3.3975e-06, 2.9802e-08],
[-8.5831e-06, 1.0610e-05, -1.6809e-05, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00]]])
## References
- `pytorchse3` implements log/exp maps defined in Section 2 and 3 of
[Ethan Eade’s tutorial](https://ethaneade.com/lie.pdf)
- Our numerically stable
[`so3_log_map`](https://vivekg.dev/pytorchse3/so3.html#so3_log_map) is
a PyTorch port of
[`pytransform3d`](https://github.com/dfki-ric/pytransform3d/blob/c45e817c4a7960108afe9f5259542c8376c0e89a/pytransform3d/rotations/_conversions.py#L1719-L1787)
- Taylor expansions for some coefficients in
[`se3_log_map`](https://vivekg.dev/pytorchse3/se3.html#se3_log_map)
are taken from
[`H2-Mapping`](https://github.com/SYSU-STAR/H2-Mapping/blob/11b8ab15f3302ccb2b4b3d2b30f76d86dcfcde2c/mapping/src/se3pose.py#L89-L118)
Raw data
{
"_id": null,
"home_page": "https://github.com/eigenvivek/pytorchse3",
"name": "pytorchse3",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "",
"keywords": "nbdev jupyter notebook python",
"author": "Vivek Gopalakrishnan",
"author_email": "vivekg@mit.edu",
"download_url": "https://files.pythonhosted.org/packages/0c/fd/af35bf585b82124c31ae8aa2fea4c20ed5e0e113d985156d9fa60bc04ce8/pytorchse3-0.0.3.tar.gz",
"platform": null,
"description": "pytorchse3\n================\n\n<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->\n\n## Install\n\n``` sh\npip install pytorchse3\n```\n\n## How to use\n\n``` python\nimport torch\n\nfrom pytorchse3.se3 import se3_exp_map, se3_log_map\n```\n\nHere are two transformation matrices for which `PyTorch3D` recovers the\nwrong log map (see [this\nissue](https://github.com/facebookresearch/pytorch3d/issues/1609?notification_referrer_id=NT_kwDOAcYOvLM3MzY1NTAxMTY0OjI5NzU3MTE2#issuecomment-1839450529)).\n\n``` python\nT = torch.Tensor(\n [\n [\n [-0.7384057045, 0.3333132863, -0.5862244964, 0.0000000000],\n [0.3520625532, -0.5508944392, -0.7566816807, 0.0000000000],\n [-0.5751599669, -0.7651259303, 0.2894364297, 0.0000000000],\n [-0.1840534210, -0.1836946011, 0.9952554703, 1.0000000000],\n ],\n [\n [-0.7400283217, 0.5210028887, -0.4253400862, 0.0000000000],\n [0.5329059958, 0.0683888718, -0.8434065580, 0.0000000000],\n [-0.4103286564, -0.8508108258, -0.3282552958, 0.0000000000],\n [-0.1197679043, 0.1799146235, 0.5538908839, 1.0000000000],\n ],\n ],\n).transpose(-1, -2)\n```\n\n`pytorchse3` computes the correct log map.\n\n``` python\nlog_T_vee = se3_log_map(T)\nlog_T_vee\n```\n\n tensor([[ 1.1319, 1.4831, -2.5131, -0.8503, -0.1170, 0.7346],\n [ 1.1288, 2.2886, -1.8147, -0.8812, 0.0367, -0.1004]])\n\nExponentiating the log map recovers the original transformation matrix\nwith 1e-4 absolute error.\n\n``` python\neq_T = se3_exp_map(log_T_vee)\nassert torch.allclose(T, eq_T, atol=1e-4)\n```\n\n``` python\nT - eq_T\n```\n\n tensor([[[-9.2983e-06, -2.3842e-07, 1.1504e-05, 2.9802e-08],\n [-5.1558e-06, 8.5235e-06, -8.6427e-06, -2.9802e-08],\n [ 8.6427e-06, -6.4373e-06, 4.4703e-07, 0.0000e+00],\n [ 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00]],\n\n [[ 8.0466e-06, 1.6212e-05, 6.0201e-06, -3.7253e-08],\n [ 4.5896e-06, 8.6352e-06, 3.3975e-06, 2.9802e-08],\n [-8.5831e-06, 1.0610e-05, -1.6809e-05, 0.0000e+00],\n [ 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00]]])\n\n## References\n\n- `pytorchse3` implements log/exp maps defined in Section 2 and 3 of\n [Ethan Eade\u2019s tutorial](https://ethaneade.com/lie.pdf)\n- Our numerically stable\n [`so3_log_map`](https://vivekg.dev/pytorchse3/so3.html#so3_log_map) is\n a PyTorch port of\n [`pytransform3d`](https://github.com/dfki-ric/pytransform3d/blob/c45e817c4a7960108afe9f5259542c8376c0e89a/pytransform3d/rotations/_conversions.py#L1719-L1787)\n- Taylor expansions for some coefficients in\n [`se3_log_map`](https://vivekg.dev/pytorchse3/se3.html#se3_log_map)\n are taken from\n [`H2-Mapping`](https://github.com/SYSU-STAR/H2-Mapping/blob/11b8ab15f3302ccb2b4b3d2b30f76d86dcfcde2c/mapping/src/se3pose.py#L89-L118)\n",
"bugtrack_url": null,
"license": "MIT License",
"summary": "Numerically stable implementations of batched SE(3) exp and log maps",
"version": "0.0.3",
"project_urls": {
"Homepage": "https://github.com/eigenvivek/pytorchse3"
},
"split_keywords": [
"nbdev",
"jupyter",
"notebook",
"python"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "c50f3c7770978ece4c9947da3d60636d9d812cc470007eed69e5c4dc94741f58",
"md5": "710d2861f6ef5f7e2b95beafba875a4a",
"sha256": "07cdca16dcdf3561d1be2fe9f586262d21f84c3291b02a097c630eec7e2fac78"
},
"downloads": -1,
"filename": "pytorchse3-0.0.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "710d2861f6ef5f7e2b95beafba875a4a",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 6728,
"upload_time": "2023-12-07T18:48:37",
"upload_time_iso_8601": "2023-12-07T18:48:37.957497Z",
"url": "https://files.pythonhosted.org/packages/c5/0f/3c7770978ece4c9947da3d60636d9d812cc470007eed69e5c4dc94741f58/pytorchse3-0.0.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0cfdaf35bf585b82124c31ae8aa2fea4c20ed5e0e113d985156d9fa60bc04ce8",
"md5": "0faad13c18c1de1cbd3caa489d6bf1e1",
"sha256": "ecda68926ea06ab746172db588d0ed7bd87793c25346ce7a52c8a6631302d87b"
},
"downloads": -1,
"filename": "pytorchse3-0.0.3.tar.gz",
"has_sig": false,
"md5_digest": "0faad13c18c1de1cbd3caa489d6bf1e1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 6706,
"upload_time": "2023-12-07T18:48:40",
"upload_time_iso_8601": "2023-12-07T18:48:40.601018Z",
"url": "https://files.pythonhosted.org/packages/0c/fd/af35bf585b82124c31ae8aa2fea4c20ed5e0e113d985156d9fa60bc04ce8/pytorchse3-0.0.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-12-07 18:48:40",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "eigenvivek",
"github_project": "pytorchse3",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pytorchse3"
}