├── .gitignore
├── LICENSE
├── README.md
├── docs
├── data_pics
│ ├── Pitts_Helicopter_Dataset.png
│ ├── Pittsburgh_City-scale_Dataset.png
│ └── pitts_google_earth.png
├── dataset_description.md
└── loading_data.md
├── pyproject.toml
├── requirements.txt
├── setup.py
├── src
└── gpr
│ ├── __init__.py
│ ├── dataloader
│ ├── BaseLoader.py
│ ├── LifeLoader.py
│ ├── PittsLoader.py
│ ├── UavLoader.py
│ ├── UgvLoader.py
│ └── __init__.py
│ ├── evaluation
│ ├── __init__.py
│ └── recall.py
│ └── tools
│ ├── __init__.py
│ ├── feature.py
│ └── geometry.py
└── tests
├── test_pitts.ipynb
└── val_pitts.py
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | pip-wheel-metadata/
24 | share/python-wheels/
25 | *.egg-info/
26 | .installed.cfg
27 | *.egg
28 | MANIFEST
29 |
30 | # PyInstaller
31 | # Usually these files are written by a python script from a template
32 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
33 | *.manifest
34 | *.spec
35 |
36 | # Installer logs
37 | pip-log.txt
38 | pip-delete-this-directory.txt
39 |
40 | # Unit test / coverage reports
41 | htmlcov/
42 | .tox/
43 | .nox/
44 | .coverage
45 | .coverage.*
46 | .cache
47 | nosetests.xml
48 | coverage.xml
49 | *.cover
50 | *.py,cover
51 | .hypothesis/
52 | .pytest_cache/
53 |
54 | # Translations
55 | *.mo
56 | *.pot
57 |
58 | # Django stuff:
59 | *.log
60 | local_settings.py
61 | db.sqlite3
62 | db.sqlite3-journal
63 |
64 | # Flask stuff:
65 | instance/
66 | .webassets-cache
67 |
68 | # Scrapy stuff:
69 | .scrapy
70 |
71 | # Sphinx documentation
72 | docs/_build/
73 |
74 | # PyBuilder
75 | target/
76 |
77 | # Jupyter Notebook
78 | .ipynb_checkpoints
79 |
80 | # IPython
81 | profile_default/
82 | ipython_config.py
83 |
84 | # pyenv
85 | .python-version
86 |
87 | # pipenv
88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
91 | # install all needed dependencies.
92 | #Pipfile.lock
93 |
94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95 | __pypackages__/
96 |
97 | # Celery stuff
98 | celerybeat-schedule
99 | celerybeat.pid
100 |
101 | # SageMath parsed files
102 | *.sage.py
103 |
104 | # Environments
105 | .env
106 | .venv
107 | env/
108 | venv/
109 | ENV/
110 | env.bak/
111 | venv.bak/
112 |
113 | # Spyder project settings
114 | .spyderproject
115 | .spyproject
116 |
117 | # Rope project settings
118 | .ropeproject
119 |
120 | # mkdocs documentation
121 | /site
122 |
123 | # mypy
124 | .mypy_cache/
125 | .dmypy.json
126 | dmypy.json
127 |
128 | # Pyre type checker
129 | .pyre/
130 |
131 | # vscode settings
132 | .vscode/
133 |
134 | datasets/
135 |
136 | tests/*.png
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | BSD 3-Clause License
2 |
3 | Copyright (c) 2022, MetaSLAM
4 | All rights reserved.
5 |
6 | Redistribution and use in source and binary forms, with or without
7 | modification, are permitted provided that the following conditions are met:
8 |
9 | 1. Redistributions of source code must retain the above copyright notice, this
10 | list of conditions and the following disclaimer.
11 |
12 | 2. Redistributions in binary form must reproduce the above copyright notice,
13 | this list of conditions and the following disclaimer in the documentation
14 | and/or other materials provided with the distribution.
15 |
16 | 3. Neither the name of the copyright holder nor the names of its
17 | contributors may be used to endorse or promote products derived from
18 | this software without specific prior written permission.
19 |
20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # GPR Competition datasets
2 |
3 | Dataset for the General Place Recognition Competition. You can find more details in the competition website: [http://gprcompetition.com/](http://gprcompetition.com/)
4 |
5 | ## Note
6 | - **1st-round Competition: 04/08/2022~05/24/2022**
7 | * :1st_place_medal:1st and :2nd_place_medal:2nd --> Present @ ICRA 2022
8 |
9 | - **2nd-round Competition: 06/01/2022~09/01/2022**
10 | * :1st_place_medal:1st --> :dollar: 3000$
11 | * :2nd_place_medal:2nd --> :dollar: 2000$
12 | * Exceptional Individuals
13 | * Academic Visits to [RI](https://www.ri.cmu.edu/)
14 | * Internship at [Air Lab](http://theairlab.org/)
15 |
16 | - **Large-scale 3D Localization Dataset:**
17 | * **Training and validation set release: 8th May**
18 | * **Testing set release: 9th May**
19 |
20 | - **Visual Terrain Relative Navigation Datase:**
21 | * **Training and validation set release: 9th May**
22 | * **Testing set release: 9th May**
23 |
24 | ## AIcrowd
25 | The performance is evaluated on AIcrowd, please sign up or log in [here](https://www.aicrowd.com/) and register the competition
26 |
27 | * [[ICRA2022] General Place Recognition: City-scale UGV Localization](https://www.aicrowd.com/challenges/icra2022-general-place-recognition-city-scale-ugv-localization)
28 |
29 | * [[ICRA2022] General Place Recognition: Visual Terrain Relative Navigation](https://www.aicrowd.com/challenges/icra2022-general-place-recognition-visual-terrain-relative-navigation)
30 |
31 | ## Datasets
32 |
33 | We provide two datasets for evaluating place recognition or global localization methods. They are
34 |
35 | - **Large-scale 3D Localization Dataset**: This competition dataset is a subset of the [ALITA](https://github.com/MetaSLAM/ALITA) dataset, which can be accessed [here](https://github.com/MetaSLAM/ALITA).
36 | This dataset aims for the Large-scale 3D Localization (LiDAR$\rightarrow$LiDAR) competition track. It has LiDAR point clouds and ground truth poses for 55 trajectories, collected in Pittsburgh. Each trajectory is divided into several submaps:
37 | * In ROUND 1, a submap has size 50m*50m with the distance between every two submaps being 2m. [Dropbox](https://www.dropbox.com/sh/q1w5dmghbkut553/AAAOCMaELmfHE4NN5cw06QBba?dl=0) or [百度云盘](https://pan.baidu.com/s/1M97bBnSoRhy-56NhAmpf7w)(提取码:qghd);
38 | * In ROUND 2, a submap has size 40m*40m with the distance between every two submaps being 2m. [Dropbox](https://www.dropbox.com/sh/mgqypozwz1l8z9x/AABshUNN5lu8sWGVE5CtEhjoa?dl=0) or [百度云盘](https://pan.baidu.com/s/1M97bBnSoRhy-56NhAmpf7w)(提取码:qghd).
39 |
40 | 
41 |
42 | In this dataset, we include:
43 | * Point cloud submaps (size 50m*50m, every 2m along the trajectory).
44 | * Ground truth poses of submaps (6DoF)
45 |
46 | You can find the **sample** training data `gpr_pitts_sample.tar.gz` and testing/query data `gpr_pitts_query_sample.tar.gz` [here](https://sandbox.zenodo.org/record/1033096).
47 |
48 | - **Visual Terrain Relative Navigation Dataset**: This competition dataset is a subset of the [ALTO](https://github.com/MetaSLAM/ALTO) dataset, which can be accessed [here](https://github.com/MetaSLAM/ALTO).
49 | This dataset focuses on visual place recognition over a large-scale trajectory. The trajectory of interest is a 150km long flight from Ohio to Pittsburgh using a helicopter with a nadir-facing high resolution camera. The trajectory includes several types of environments of varying difficulty, including urban/suburban, forested, rural, and other natural terrain.
50 | Part of the difficulty of this challenge involves being able to correctly match the inference imagery to the reference map imagery taken several years prior. We captured this flight in August 2017, and we include georeferenced satellite imagery from 2012.
51 | Ground truth positions of the flight were collected using a NovAtel's SPAN GPS+INS, with submeter level accuracy.
52 |
53 | * The ROUND 1 dataset is available here: [Dropbox](https://www.dropbox.com/sh/q1w5dmghbkut553/AAAOCMaELmfHE4NN5cw06QBba?dl=0) or [百度云盘](https://pan.baidu.com/s/1M97bBnSoRhy-56NhAmpf7w)(提取码:qghd).
54 |
55 | * The ROUND 2 dataset is available here: [Dropbox](https://www.dropbox.com/scl/fo/saejbf9qanbfq40k8jo18/h?dl=0&rlkey=l19kx1vzzahifv3n5lkg19n84) or [百度云盘](https://pan.baidu.com/s/1M97bBnSoRhy-56NhAmpf7w)(提取码:qghd).
56 |
57 | 
58 |
59 | In this dataset, we include:
60 | * High resolution (compressed to 500x500) helicopter imagery, captured at 20fps. Timestamps are synchronized with the rest of the system.
61 | * Paired reference satellite image for each helicopter frame.
62 | * IMU (scalar last quaternion, in ECEF reference frame)
63 | * Global positions (UTM coordinates).
64 |
65 | Relative ground truth for each sequence compared with the corresponding selected reference sequence is provided.
66 |
67 | Datasets are *pre-processed* and you can easily manage the data with our tools. For more information about dataset, please refer to [dataset description](./docs/dataset_description.md).
68 |
69 | ## Install
70 |
71 | The easiest way to install our tools is by using pip. We recommend the use of virtual environment such as `conda` to keep a clean software environment.
72 |
73 | ```bash
74 | ~$ git clone https://github.com/MetaSLAM/GPR_Competition.git
75 | ~$ conda create --name GPR python=3.7
76 | ~$ conda activate GPR
77 | (GPR) ~$ cd GPR_Competition
78 | (GPR) ~/GPR_Competition$ pip install -r requirements.txt
79 | (GPR) ~/GPR_Competition$ python setup.py install
80 | ```
81 |
82 | ## Modules
83 |
84 | Our package organizes different functions in sub-modules. You may have a better understanding of the `gpr` package with this table:
85 |
86 | module | description
87 | :--: |--
88 | `gpr`|common definations
89 | `gpr.dataloader`|load dataset from disk, get images, point clouds, poses, etc.
90 | `gpr.evaluation`|evaluate your method, such as recall@N, accuracy, PR curve
91 | `gpr.tools`|utility, such as feature extraction, point cloud projection
92 |
93 | ## Quick Start
94 |
95 | To quickly use this package for your place recognition task, we provide the test templates (both python scripts and jupyter notebooks) within the folder `tests/`. For **Pittsburgh City-scale Dataset** datasets, we can start a quick evaluation.
96 |
97 | First, download the sample data [here](https://sandbox.zenodo.org/record/1033096). Decompress `gpr_pitts_sample.tar.gz` to **PATH_TO_DATA**. Then you can test it with the following code:
98 |
99 | ```python
100 | import numpy as np
101 | from gpr.dataloader import PittsLoader
102 | from gpr.evaluation import get_recall
103 | from gpr.tools import HogFeature, lidar_trans
104 |
105 | # * Test Data Loader, change to your datafolder
106 | pitts_loader = PittsLoader('PATH_TO_DATA')
107 |
108 | # * Point cloud conversion and feature extractor
109 | lidar_to_sph = lidar_trans() # for lidar projections
110 | hog_fea = HogFeature()
111 |
112 | # feature extraction
113 | feature_ref = []
114 | for idx in tqdm(range(len(pitts_loader)), desc='comp. fea.'):
115 | pcd_ref = pitts_loader[idx]['pcd']
116 |
117 | # You can use your own method to extract feature
118 | sph_img = lidar_to_sph.sph_projection(pcd_ref)
119 | sph_img = (sph_img * 255).astype(np.uint8)
120 | feature_ref.append(hog_fea.infer_data(sph_img))
121 |
122 | # evaluate recall
123 | feature_ref = np.array(feature_ref)
124 | topN_recall, one_percent_recall = get_recall(feature_ref, feature_ref)
125 | ```
126 |
127 | Second, if you want to evaluate your model on validation set, please refer to our example code [here](tests/val_pitts.py)
128 |
129 | Then, if you want to submit your result, use the following code to save the (num_submap * feature_dim) feature to a *.npy file:
130 | ```python
131 | from gpr.tools import save_feature_for_submission
132 | save_feature_for_submission('FILE_NAME.npy', feature_ref)
133 | ```
134 | and you can submit the `FILE_NAME.npy` to the AIcrowd platform.
135 |
136 | For more about the data loader, visualization and evaluation, please refer to [loading_data.md](./docs/loading_data.md) and the jupyter notebook [test_pitts.ipynb](./tests/test_pitts.ipynb).
137 |
--------------------------------------------------------------------------------
/docs/data_pics/Pitts_Helicopter_Dataset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MetaSLAM/GPR_Competition/8208fc9068d9e411fb9022f28ed34389e6226915/docs/data_pics/Pitts_Helicopter_Dataset.png
--------------------------------------------------------------------------------
/docs/data_pics/Pittsburgh_City-scale_Dataset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MetaSLAM/GPR_Competition/8208fc9068d9e411fb9022f28ed34389e6226915/docs/data_pics/Pittsburgh_City-scale_Dataset.png
--------------------------------------------------------------------------------
/docs/data_pics/pitts_google_earth.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MetaSLAM/GPR_Competition/8208fc9068d9e411fb9022f28ed34389e6226915/docs/data_pics/pitts_google_earth.png
--------------------------------------------------------------------------------
/docs/dataset_description.md:
--------------------------------------------------------------------------------
1 | # Dataset Description
2 |
3 | ## City-scale UGV Localization Dataset
4 |
5 | Pittsburgh city-scale dataset consists abundant sensory information including GPS, IMU and LiDAR. We created it by traversing 187.5 km in the city of Pittsburgh, which results in over 70 thousand dense LiDAR submaps.
6 |
7 |
8 |
12 |
13 | Map of the route used for dataset collection
14 |
15 |
19 |
20 | A total number of 55 trajectories
21 |
22 |
23 | * Driving distance: 187.5 km, total tracks number: 55
24 | * Overlap at multiple junctions for multi-map fusion
25 |
26 | This dataset concentrates on the LiDAR place recognition over a large-scale area within urban environment. We collected 55 vehicle trajectories covering partial of the Pittsburgh and thus including diverse enviroments. Each trajectory is at least overlapped at one junction with the others, and some trajectories even have multiple junctions. This feature enables the dataset to be used in tasks such as LiDAR place recognition and multi-map fusion.
27 |
28 | The original dataset contains point clouds and GPS data. We generate ground truth poses by SLAM, which is fused with the GPS data and later optimized by Interactive SLAM. With this process, we also get the map of each trajectory. For convenience, we slice the map along the trajectory into several submaps, and a submap has size 50m*50m with the distance between every two submaps being 2m. The global 6DoF ground truth pose of each submap is also given, so that you can easily determine the distance relation of submaps.
29 |
30 | In this dataset, we include:
31 | - Point cloud submaps (size 50m*50m, every 2m along the trajectory).
32 | - Ground truth poses of submaps (6DoF)
33 |
34 |
35 | ## Visual Terrain Relative Navigation
36 |
37 | This dataset focuses on visual place recognition over a large-scale trajectory. The trajectory of interest is a 150km long flight from Ohio to Pittsburgh using a helicopter with a nadir-facing high resolution camera. The trajectory includes several types of environments of varying difficulty, including urban/suburban, forested, rural, and other natural terrain.
38 |
39 |
40 |
44 |
45 | A long trajectory including various environments
46 |
47 |
48 | Part of the difficulty of this challenge involves being able to correctly match the inference imagery to the reference map imagery taken several years prior. We captured this flight in August 2017, and we include georeferenced satellite imagery from 2012.
49 |
50 | Ground truth positions of the flight were collected using a NovAtel's SPAN GPS+INS, with submeter level accuracy.
51 |
52 | In this dataset, we include:
53 | - High resolution (1600x1200) helicopter imagery, captured at 20fps. Timestamps are synchronized with the rest of the system.
54 | - Paired reference satellite image for each helicopter frame.
55 | - Timestamped IMU (linear and angular velocities)
56 | - Timestamped global positions (ECEF coordinates).
57 |
--------------------------------------------------------------------------------
/docs/loading_data.md:
--------------------------------------------------------------------------------
1 | # Loading Data
2 | We provide data loader for the datasets. With these loaders, you can easily get access to the data (point clouds, images, etc.) and the poses of each frame/submap.
3 |
4 | Data type of each frame:
5 | - LiDAR point clouds: open3d.geometry.PointCloud
6 | - Image: PIL.Image object
7 | - pose: T = numpy.ndarray([[R, t], [0, 1]]), of size (4, 4)
8 | - rotation: R $\in$ SO(3), numpy.ndarray, of size (3, 3)
9 | - translation: t = numpy.ndarray([x, y, z]), of size (3, 1)
10 |
11 | We provide **sample data** for quick testing. The sample data for the Pittsburgh City-scale Dataset can be found [here](https://sandbox.zenodo.org/record/1033096).
12 |
13 | ## class `PittsLoader`
14 | ```python
15 | class PittsLoader(BaseLoader):
16 | def __len__(self) -> int:
17 | """Return the number of frames in this dataset"""
18 |
19 | def __str__(self) -> str:
20 | return f'PittsLoader at "{self.dir_path}" with {self.len} submaps.'
21 |
22 | def __repr__(self) -> str:
23 | return f'PittsLoader at "{self.dir_path}" with {self.len} submaps.'
24 |
25 | def __getitem__(self, frame_id: int):
26 | """Return the query data (Image, LiDAR, etc)
27 | Args:
28 | frame_id: the index of current frame
29 | Returns:
30 | data: Dict['img':Image, 'pcd':LiDAR, ...]
31 | """
32 |
33 | def get_point_cloud(self, frame_id: int) -> np.ndarray:
34 | """Get the point cloud at the `frame_id` frame.
35 | Args:
36 | frame_id: the index of current frame
37 | Returns:
38 | pcd: N*3 point clouds
39 | """
40 |
41 | def get_pose(self, frame_id: int) -> np.ndarray:
42 | """Get the pose (4*4 transformation matrix) at the `frame_id` frame.
43 | Args:
44 | frame_id: the index of current frame
45 | Returns:
46 | pose: numpy.ndarray([[R, t], [0, 1]]), of size (4, 4)
47 | Raise:
48 | ValueError: If this dataset doesn't have poses
49 | """
50 |
51 | def get_rotation(self, frame_id: int, type: str = 'matrix') -> np.ndarray:
52 | """Get the rotation part at of the pose at the `frame_id` frame.
53 | Args:
54 | frame_id: the index of current frame
55 | type: can be one of {'matrix', 'rpy', 'quat'}. 'matrix'-> 3*3 rotation matrix,
56 | 'rpy'-> roll, pitch, yaw angles, 'quat'-> quaternion
57 | Returns:
58 | rotation: if type == 'matrix', then it is 3*3 rotation matrix. If type == 'rpy',
59 | then it is (roll, pitch, yaw) of size (3,). If type == 'quat', then it is
60 | quaternion (qx, qy, qz, qw) of size (4,).
61 | Raises:
62 | ValueError: if type is not one of {'matrix', 'rpy', 'quat'}.
63 | """
64 |
65 | def get_translation(self, frame_id: int) -> np.ndarray:
66 | """Get the 3*1 translation vector of the pose at the `frame_id` frame
67 | Args:
68 | frame_id: the index of current frame
69 | Returns:
70 | translation: (3,) np.ndarray, the translation vector.
71 | """
72 | ```
73 |
74 | # Examples
75 | ## Get point clouds and its pose
76 | ```python
77 | from gpr.dataloader import PittsLoader
78 |
79 | dataset_path = 'PATH_TO_THE_DATASET'
80 | pitts_loader = PittsLoader(dataset_path)
81 |
82 | submap_id = 50
83 | pcd_ndarray = pitts_loader[submap_id]['pcd']
84 | # or pcd_ndarray = pitts_loader.get_point_cloud(submap_id)
85 | pose = pitts_loader.get_pose(submap_id)
86 | ```
87 |
88 | ## Iterate the dataloader
89 | ```python
90 | from gpr.dataloader import PittsLoader
91 |
92 | dataset_path = 'PATH_TO_THE_DATASET'
93 | pitts_loader = PittsLoader(dataset_path)
94 |
95 | for frame_id in range(len(pitts_loader)):
96 | pcd = pitts_loader.get_point_cloud(frame_id)
97 | poses = pitts_loader.get_pose(frame_id)
98 | ```
99 |
100 | ## Get the trajectory xyz
101 | ```python
102 | import numpy as np
103 | from gpr.dataloader import PittsLoader
104 |
105 | dataset_path = 'PATH_TO_THE_DATASET'
106 | pitts_loader = PittsLoader(dataset_path)
107 |
108 | trajectory = [
109 | pitts_loader.get_translation(frame_id)
110 | for frame_id in range(len(pitts_loader))
111 | ]
112 | trajectory = np.vstack(trajectory)
113 | ```
--------------------------------------------------------------------------------
/pyproject.toml:
--------------------------------------------------------------------------------
1 | [build-system]
2 | requires = [
3 | "setuptools>=42",
4 | "wheel"
5 | ]
6 | build-backend = "setuptools.build_meta"
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | numpy
2 | scipy
3 | scikit-learn
4 | open3d
5 | opencv-python
6 | tqdm
7 | matplotlib
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 |
2 | import setuptools
3 |
4 | with open("README.md", "r", encoding="utf-8") as fh:
5 | long_description = fh.read()
6 |
7 | setuptools.setup(
8 | name="gpr",
9 | version="0.0.1",
10 | author="MateSLAM",
11 | author_email="hitmaxtom@gmail.com",
12 | description="A tool box for general place recognition",
13 | long_description=long_description,
14 | long_description_content_type="text/markdown",
15 | url="https://github.com/MetaSLAM/GPR_Competition",
16 | project_urls={
17 | "Bug Tracker": "https://github.com/MetaSLAM/GPR_Competition/issues",
18 | },
19 | classifiers=[
20 | "Programming Language :: Python :: 3",
21 | "License :: OSI Approved :: BSD 3 License",
22 | "Operating System :: LINUX",
23 | ],
24 | package_dir={"": "src"},
25 | packages=setuptools.find_packages(where="src"),
26 | python_requires=">=3.6",
27 | )
--------------------------------------------------------------------------------
/src/gpr/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MetaSLAM/GPR_Competition/8208fc9068d9e411fb9022f28ed34389e6226915/src/gpr/__init__.py
--------------------------------------------------------------------------------
/src/gpr/dataloader/BaseLoader.py:
--------------------------------------------------------------------------------
1 | '''
2 | Filename: /home/maxtom/codespace/GPR_Competition/src/gpr/dataloader/base_loader.py
3 | Path: /home/maxtom/codespace/GPR_Competition/src/gpr/dataloader
4 | Created Date: Sunday, March 6th 2022, 9:26:53 pm
5 | Author: maxtom, Haowen
6 |
7 | Copyright (c) 2022 Your Company
8 | '''
9 |
10 | from typing import Dict
11 | import numpy as np
12 | from abc import abstractmethod
13 | from scipy.spatial.transform import Rotation as R
14 |
15 |
16 | class BaseLoader(object):
17 | """This class serves as the interface for all data loaders of different datasets"""
18 |
19 | def __init__(self, dir_path: str):
20 | """BaseLoader initlization"""
21 | self.dir_path = dir_path
22 |
23 | @abstractmethod
24 | def __len__(self) -> int:
25 | """Return the number of frames in this dataset"""
26 | pass
27 |
28 | @abstractmethod
29 | def __getitem__(self, frame_id: int) -> Dict:
30 | """Return the query data (Image, LiDAR, etc)
31 | Args:
32 | frame_id: the index of current frame
33 | Returns:
34 | data: Dict['img':Image, 'pcd':LiDAR, ...]
35 | """
36 | pass
37 |
38 | @abstractmethod
39 | def get_pose(self, frame_id: int) -> np.ndarray:
40 | """Get the pose (4*4 transformation matrix) at the `frame_id` frame.
41 | Args:
42 | frame_id: the index of current frame
43 | Returns:
44 | pose: numpy.ndarray([[R, t], [0, 1]]), of size (4, 4)
45 | Raise:
46 | ValueError: If this dataset doesn't have poses
47 | """
48 | pass
49 |
50 | def get_rotation(self, frame_id: int, type: str = 'matrix') -> np.ndarray:
51 | """Get the rotation part at of the pose at the `frame_id` frame.
52 | Args:
53 | frame_id: the index of current frame
54 | type: can be one of {'matrix', 'rpy', 'quat'}. 'matrix'-> 3*3 rotation matrix,
55 | 'rpy'-> roll, pitch, yaw angles, 'quat'-> quaternion
56 | Returns:
57 | rotation: if type == 'matrix', then it is 3*3 rotation matrix. If type == 'rpy',
58 | then it is (roll, pitch, yaw) of size (3,). If type == 'quat', then it is
59 | quaternion (qx, qy, qz, qw) of size (4,).
60 | Raises:
61 | ValueError: if type is not one of {'matrix', 'rpy', 'quat'}.
62 | """
63 | transform = self.get_pose(frame_id)
64 |
65 | if type == 'matrix':
66 | return transform[:3, :3]
67 | elif type == 'rpy':
68 | return R.from_matrix(transform[:3, :3]).as_euler('xyz')
69 | elif type == 'quat':
70 | return R.from_matrix(transform[:3, :3]).as_quat()
71 | else:
72 | raise ValueError(f'{type} is not a valid type.')
73 |
74 | def get_translation(self, frame_id: int) -> np.ndarray:
75 | """Get the 3*1 translation vector of the pose at the `frame_id` frame
76 | Args:
77 | frame_id: the index of current frame
78 | Returns:
79 | translation: (3,) np.ndarray, the translation vector.
80 | """
81 | transform = self.get_pose(frame_id)
82 | return transform[:3, 3]
83 |
84 | @abstractmethod
85 | def get_point_cloud(self, frame_id: int) -> np.ndarray:
86 | """Get the point cloud at the `frame_id` frame.
87 | Args:
88 | frame_id: the index of current frame
89 | Returns:
90 | pcd: N*3 point clouds
91 | """
92 | pass
93 |
94 | @abstractmethod
95 | def get_image(self, frame_id: int):
96 | """Get the image at the `frame_id` frame.
97 | Args:
98 | frame_id: the index of current frame
99 | Returns:
100 | image: PIL.Image image
101 | """
102 | pass
103 |
--------------------------------------------------------------------------------
/src/gpr/dataloader/LifeLoader.py:
--------------------------------------------------------------------------------
1 | '''
2 | Filename: /home/maxtom/codespace/GPR_Competition/src/gpr/dataloader/base_loader.py
3 | Path: /home/maxtom/codespace/GPR_Competition/src/gpr/dataloader
4 | Created Date: Sunday, March 6th 2022, 9:26:53 pm
5 | Author: maxtom
6 |
7 | Copyright (c) 2022 Your Company
8 | '''
9 | from typing import Tuple
10 | import open3d as o3d
11 | from PIL import Image
12 | import numpy as np
13 | from glob import glob
14 | from scipy.spatial.transform import Rotation as R
15 |
16 | from .BaseLoader import BaseLoader
17 | from ..tools import lidar_trans
18 |
19 |
20 | class LifeLoader(BaseLoader):
21 | def __init__(
22 | self,
23 | dir_path: str,
24 | image_size: Tuple[int, int] = (512, 512),
25 | top_size: Tuple[int, int] = (512, 512),
26 | sph_size: Tuple[int, int] = (512, 512),
27 | fov_range: Tuple[int, int] = (-90, 90),
28 | resolution: float = 0.5,
29 | max_radius: float = 50,
30 | ):
31 | """Data loader for Life Dataset.
32 | Args:
33 | image_size [int, int]: set image resolution
34 | top_size [int, int]: set top down view resolution
35 | sph_size [int, int]: set spherical view resolution
36 | resolution [float]: resolution for point cloud voxels
37 | max_radius [int]: maximum distance for sub map
38 | """
39 | super().__init__(dir_path)
40 | self.resolution = resolution
41 | self.max_radius = max_radius
42 | self.queries = sorted(glob("{}/*.png".format(self.dir_path)))
43 |
44 | # * for raw RGB image
45 | # self.image_trans = image_trans(image_size=image_size, channel=3)
46 |
47 | # * for lidar projections
48 | self.lidar_trans = lidar_trans(
49 | top_size, sph_size, max_dis=self.max_radius, fov_range=fov_range
50 | )
51 |
52 | # * Obtain raw point cloud map
53 | map_pcd = o3d.io.read_point_cloud(self.dir_path + "/dense.pcd")
54 | self.map_pcd = map_pcd.voxel_down_sample(self.resolution)
55 | self.tree = o3d.geometry.KDTreeFlann(self.map_pcd)
56 |
57 | def __len__(self) -> int:
58 | """Return the number of frames in this dataset"""
59 | return len(self.queries)
60 |
61 | def __getitem__(self, frame_id: int):
62 | """Return the query data (Image, LiDAR, etc)
63 | Args:
64 | frame_id: the index of current frame
65 | Returns:
66 | data: Dict['img':Image, 'pcd':LiDAR, ...]
67 | """
68 | img = self.get_image(frame_id)
69 | pcd = self.get_point_cloud(frame_id)
70 | sph = self.lidar_trans.sph_projection(pcd) # get spherical projection
71 | top = self.lidar_trans.top_projection(pcd) # get top_down projection
72 |
73 | return {'img': img, 'pcd': pcd, 'sph': sph, 'top': top}
74 |
75 | def get_pose(self, frame_id: int) -> np.ndarray:
76 | """Get the pose (4*4 transformation matrix) at the `frame_id` frame.
77 | Args:
78 | frame_id: the index of current frame
79 | Returns:
80 | pose: numpy.ndarray([[R, t], [0, 1]]), of size (4, 4)
81 | """
82 | trans_matrix = np.loadtxt(
83 | '{}.odom'.format(self.queries[frame_id].split('.')[0])
84 | )
85 | return trans_matrix
86 |
87 | def get_image(self, frame_id: int):
88 | """Get the image at the `frame_id` frame.
89 | Args:
90 | frame_id: the index of current frame
91 | Returns:
92 | image: PIL.Image image
93 | """
94 | return Image.open(self.queries[frame_id])
95 |
96 | def get_point_cloud(self, frame_id: int) -> np.ndarray:
97 | """Get the point cloud at the `frame_id` frame.
98 | Args:
99 | frame_id: the index of current frame
100 | Returns:
101 | pcd: N*3 point clouds
102 | """
103 | trans_matrix = self.get_pose(frame_id, rot_type='matrix')
104 | translation = self.get_translation(trans_matrix)
105 | rotation = self.get_rotation(trans_matrix)
106 |
107 | [_, idx, _] = self.tree.search_radius_vector_3d(translation, self.max_radius)
108 |
109 | # * get raw point cloud
110 | pcd_data = np.asarray(self.map_pcd.points)[idx, :] - translation - 1.5
111 | pcd = o3d.geometry.PointCloud()
112 | pcd.points = o3d.utility.Vector3dVector(pcd_data)
113 | rot = R.from_matrix(rotation)
114 | trans_matrix = np.eye(4)
115 | trans_matrix[0:3, 0:3] = rot.inv().as_matrix()
116 | pcd.transform(trans_matrix)
117 | pcd = np.array(pcd.points)
118 |
119 | return pcd
120 |
--------------------------------------------------------------------------------
/src/gpr/dataloader/PittsLoader.py:
--------------------------------------------------------------------------------
1 | """
2 | Created Date: Thursday, March 10th 2022, 9:26:53 pm
3 | Author: Haowen Lai
4 |
5 | Copyright (c) 2022 Your Company
6 | """
7 |
8 | import open3d as o3d
9 | import numpy as np
10 | from glob import glob
11 | from scipy.spatial.transform import Rotation as R
12 |
13 | from .BaseLoader import BaseLoader
14 |
15 |
16 | class PittsLoader(BaseLoader):
17 | def __init__(self, dir_path: str):
18 | """Data loader for the Pittsburgh Dataset."""
19 | super().__init__(dir_path)
20 |
21 | # may be test/query data, which has no poses
22 | try:
23 | self.poses = np.load(self.dir_path + '/poses_6d.npy')
24 | except FileNotFoundError:
25 | self.poses = None
26 | self.len = len(glob(dir_path + '/*.pcd'))
27 |
28 | def __len__(self) -> int:
29 | """Return the number of frames in this dataset"""
30 | return self.len
31 |
32 | def __str__(self) -> str:
33 | return f'PittsLoader at "{self.dir_path}" with {self.len} submaps.'
34 |
35 | def __repr__(self) -> str:
36 | return f'PittsLoader at "{self.dir_path}" with {self.len} submaps.'
37 |
38 | def __getitem__(self, frame_id: int):
39 | """Return the query data (Image, LiDAR, etc)
40 | Args:
41 | frame_id: the index of current frame
42 | Returns:
43 | data: Dict['img':Image, 'pcd':LiDAR, ...]
44 | """
45 | pcd = self.get_point_cloud(frame_id)
46 | return {'pcd': pcd}
47 |
48 | def get_pose(self, frame_id: int) -> np.ndarray:
49 | """Get the pose (4*4 transformation matrix) at the `frame_id` frame.
50 | Args:
51 | frame_id: the index of current frame
52 | Returns:
53 | pose: numpy.ndarray([[R, t], [0, 1]]), of size (4, 4)
54 | Raise:
55 | ValueError: If this dataset doesn't have poses
56 | """
57 | if self.poses is None:
58 | raise ValueError(
59 | 'This dataset does NOT have poses. '
60 | 'Maybe it is used for testing/query'
61 | )
62 |
63 | pose6d = self.poses[frame_id] # size (6,)
64 | rot_matrix = R.from_euler('xyz', pose6d[3:]).as_matrix()
65 | trans_vector = pose6d[:3].reshape((3, 1))
66 |
67 | trans_matrix = np.identity(4)
68 | trans_matrix[:3, :3] = rot_matrix
69 | trans_matrix[:3, 3:] = trans_vector
70 |
71 | return trans_matrix
72 |
73 | def get_image(self, frame_id: int):
74 | """Get the image at the `frame_id` frame.
75 | Args:
76 | frame_id: the index of current frame
77 | Returns:
78 | image: PIL.Image image
79 | """
80 | raise ValueError('This dataset does NOT have images.')
81 |
82 | def get_point_cloud(self, frame_id: int) -> np.ndarray:
83 | """Get the point cloud at the `frame_id` frame.
84 | Args:
85 | frame_id: the index of current frame
86 | Returns:
87 | pcd: N*3 point clouds
88 | """
89 | pcd = o3d.io.read_point_cloud(self.dir_path + f'/{frame_id+1:06d}.pcd')
90 | pcd = np.asarray(pcd.points)
91 | return pcd
92 |
--------------------------------------------------------------------------------
/src/gpr/dataloader/UavLoader.py:
--------------------------------------------------------------------------------
1 | '''
2 | Filename: /home/maxtom/codespace/GPR_Competition/src/gpr/dataloader/base_loader.py
3 | Path: /home/maxtom/codespace/GPR_Competition/src/gpr/dataloader
4 | Created Date: Sunday, March 6th 2022, 9:26:53 pm
5 | Author: maxtom
6 |
7 | Copyright (c) 2022 Your Company
8 | '''
9 | from .BaseLoader import BaseLoader
10 | from ..tools import image_trans
11 |
12 | # NOTE: This dataset loader is not complete now !!
13 |
14 |
15 | class UavLoader(BaseLoader):
16 | def __init__(self, dir_path, image_size=[512, 512], random_rotation=False):
17 | '''image_size [int, int]: set image resolution
18 | random_rotation: True/False, set viewpoint rotation
19 | '''
20 | super().__init__(dir_path)
21 |
22 | # * for raw RGB image
23 | self.image_trans = image_trans(image_size=image_size, channel=3)
24 |
25 | def __getitem__(self, idx: int):
26 | '''Return the query data (Image, LiDAR, etc)'''
27 | img = self.get_image(idx)
28 | return {'img': img}
29 |
30 | def get_image(self, frame_id: int):
31 | '''Get the image at the `frame_id` frame.
32 | Raise ValueError if there is no image in the dataset.
33 | return -> Image.Image
34 | '''
35 | return self.image_trans(self.queries[frame_id])
36 |
--------------------------------------------------------------------------------
/src/gpr/dataloader/UgvLoader.py:
--------------------------------------------------------------------------------
1 | '''
2 | Filename: /home/maxtom/codespace/GPR_Competition/src/gpr/dataloader/base_loader.py
3 | Path: /home/maxtom/codespace/GPR_Competition/src/gpr/dataloader
4 | Created Date: Sunday, March 6th 2022, 9:26:53 pm
5 | Author: maxtom
6 |
7 | Copyright (c) 2022 Your Company
8 | '''
9 | from typing import Tuple
10 | import open3d as o3d
11 | import numpy as np
12 | from .BaseLoader import BaseLoader
13 | from ..tools import lidar_trans
14 |
15 | # NOTE: This dataset loader is not complete now !!
16 |
17 |
18 | class UgvLoader(BaseLoader):
19 | def __init__(
20 | self,
21 | dir_path: str,
22 | top_size: Tuple[int, int] = (512, 512),
23 | sph_size: Tuple[int, int] = (512, 512),
24 | resolution: float = 0.5,
25 | ):
26 | """Data loader for the UGV Dataset.
27 | Args:
28 | image_size [int, int]: set image resolution
29 | resolution [float]: resolution for point cloud voxels
30 | """
31 | super().__init__(dir_path)
32 | self.resolution = resolution
33 |
34 | # * for lidar projections
35 | self.lidar_trans = lidar_trans(top_size, sph_size)
36 |
37 | def __getitem__(self, idx: int):
38 | '''Return the query data (Image, LiDAR, etc)'''
39 | pcd, sph, top = self.get_point_cloud(idx)
40 | return {'pcd': pcd, 'sph': sph, 'top': top}
41 |
42 | def get_point_cloud(self, frame_id: int):
43 | '''Get the point cloud at the `frame_id` frame.
44 | Raise ValueError if there is no point cloud in the dataset.
45 | return -> o3d.geometry.PointCloud
46 | '''
47 | pcd_data = o3d.io.read_point_cloud(self.queries[frame_id])
48 | ds_pcd = pcd_data.voxel_down_sample(self.resolution)
49 |
50 | # * get raw point cloud
51 | pcd = np.asarray(ds_pcd.points)
52 |
53 | # * get spherical projection
54 | sph = self.lidar_trans.sph_projection(pcd)
55 |
56 | # * get top_down projection
57 | top = self.lidar_trans.top_projection(pcd)
58 |
59 | return pcd, sph, top
60 |
--------------------------------------------------------------------------------
/src/gpr/dataloader/__init__.py:
--------------------------------------------------------------------------------
1 | # these two loader is not complete now
2 | # from .UgvLoader import UgvLoader
3 | # from .UavLoader import UavLoader
4 |
5 | from .LifeLoader import LifeLoader
6 | from .PittsLoader import PittsLoader
7 |
--------------------------------------------------------------------------------
/src/gpr/evaluation/__init__.py:
--------------------------------------------------------------------------------
1 | from .recall import get_recall
2 |
--------------------------------------------------------------------------------
/src/gpr/evaluation/recall.py:
--------------------------------------------------------------------------------
1 | '''
2 | Filename: /home/maxtom/codespace/GPR_Competition/src/gpr/evaluation/__init__.py
3 | Path: /home/maxtom/codespace/GPR_Competition/src/gpr/evaluation
4 | Created Date: Friday, March 4th 2022, 4:25:15 pm
5 | Author: maxtom
6 |
7 | Copyright (c) 2022 Your Company
8 | '''
9 |
10 | import numpy as np
11 | from sklearn.neighbors import KDTree
12 |
13 |
14 | def get_recall(
15 | reference_feature: np.ndarray,
16 | queries_feature: np.ndarray,
17 | true_threshold: int = 2,
18 | num_neighbors: int = 50,
19 | reference_poses: np.ndarray = None,
20 | queries_poses: np.ndarray = None,
21 | success_dis: np.ndarray = None,
22 | ):
23 | """Analyze the recall of references and queries.
24 | Args:
25 | reference_feature [N1, M]: N1 frames reference feature
26 | queries_feature [N2, M]: N2 frames query features
27 | true_threshold [int]: threshold for true place recognition
28 | num_neighbors [int]: Knn search, determine the N for top-N recall
29 | reference_poses [N1, 3]: corresponding reference poses
30 | queries_poses [N1, 3]: corresponding query poses
31 | success_dis [int]: distance regarded as success retrieval
32 | Return:
33 | topN_recall, one_percent_recall
34 | """
35 | database_nbrs = KDTree(reference_feature)
36 | recall = [0] * num_neighbors
37 |
38 | top1_similarity_score = []
39 | one_percent_retrieved = 0
40 | one_percent_threshold = max(int(round(len(reference_feature) / 100.0)), 1)
41 |
42 | num_evaluated = 0
43 | dists, indices = database_nbrs.query(queries_feature, k=num_neighbors)
44 | if reference_poses is not None:
45 | database_poses_nbrs = KDTree(reference_poses)
46 | dists_poses, indices_poses = database_poses_nbrs.query(queries_poses, k=num_neighbors)
47 |
48 | for i in range(true_threshold, len(queries_feature) - true_threshold):
49 | if reference_poses is None:
50 | true_neighbors = i + np.arange(-true_threshold, true_threshold + 1)
51 | else:
52 | true_neighbors = indices_poses[i][np.where(dists_poses[i] 0:
73 | one_percent_retrieved += 1
74 |
75 | one_percent_recall = one_percent_retrieved / float(num_evaluated)
76 | topN_recalls = np.cumsum(recall) / float(num_evaluated)
77 |
78 | return topN_recalls, one_percent_recall
79 |
--------------------------------------------------------------------------------
/src/gpr/tools/__init__.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 |
3 | from .geometry import lidar_trans, to_image
4 | from .feature import HogFeature
5 |
6 |
7 | def save_feature_for_submission(
8 | npy_name: str,
9 | feature: np.ndarray,
10 | ):
11 | """You can save the features of the testing/query set for
12 | submission. Note that we used L2-norm to search the nearest
13 | neighbors, so if you use cosine distance, remember to normalize
14 | you feature before calling this function.
15 |
16 | Args:
17 | npy_name: the name of *.npy file you want to save
18 | feature: should be (N_submap * feature_dim) np.ndarray
19 | """
20 | if feature.ndim != 2:
21 | raise ValueError('feature can only have size (N_submap * feature_dim)')
22 |
23 | np.save(npy_name, feature)
24 |
--------------------------------------------------------------------------------
/src/gpr/tools/feature.py:
--------------------------------------------------------------------------------
1 | '''
2 | Filename: /home/maxtom/codespace/GPR_Competition/src/gpr/tools/feature.py
3 | Path: /home/maxtom/codespace/GPR_Competition/src/gpr/tools
4 | Created Date: Monday, March 7th 2022, 7:00:51 pm
5 | Author: maxtom
6 |
7 | Copyright (c) 2022 Your Company
8 | '''
9 | import numpy as np
10 | import cv2
11 |
12 |
13 | class HogFeature:
14 | def __init__(
15 | self,
16 | winSize=(512, 512),
17 | blockSize=(16, 16),
18 | blockStride=(8, 8),
19 | cellSize=(16, 16),
20 | nbins=9,
21 | ):
22 | self.winSize = winSize
23 | self.hog = cv2.HOGDescriptor(
24 | self.winSize, blockSize, blockStride, cellSize, nbins
25 | )
26 |
27 | def infer_data(self, query):
28 | query_desc = self.hog.compute(cv2.resize(np.array(query), self.winSize))
29 | return query_desc.reshape(-1)
30 |
--------------------------------------------------------------------------------
/src/gpr/tools/geometry.py:
--------------------------------------------------------------------------------
1 | '''
2 | Filename: /home/maxtom/codespace/GPR_Competition/src/gpr/tools/geometry.py
3 | Path: /home/maxtom/codespace/GPR_Competition/src/gpr/tools
4 | Created Date: Sunday, March 6th 2022, 9:38:32 pm
5 | Author: maxtom
6 |
7 | Copyright (c) 2022 Your Company
8 | '''
9 |
10 | from PIL import Image
11 | import numpy as np
12 |
13 | # import torchvision.transforms as transforms
14 |
15 |
16 | def to_image(data):
17 | '''transform tensor backto Image'''
18 | return data
19 | # if len(data.shape) == 2:
20 | # im_data = (data * 255).astype(np.uint8)
21 | # else:
22 | # data = data.cpu().numpy()
23 | # im_data = ((data + 1.0) / 2.0 * 255).astype(np.uint8)
24 | # im_data = np.transpose(im_data, (1, 2, 0))
25 | # return Image.fromarray(im_data)
26 |
27 |
28 | # NOTE: No need to do such detailed transform. Maybe somebody doesn't use pytorch.
29 | # class image_trans(object):
30 | # def __init__(self, image_size, channel=3):
31 | # ''' image_size [int, int], channel = 1 or 3
32 | # '''
33 | # self.image_size = image_size
34 | # if channel == 3:
35 | # trans = [
36 | # transforms.Resize(
37 | # (image_size[0], image_size[1]), Image.BICUBIC),
38 | # transforms.ToTensor(),
39 | # transforms.Normalize((0.5), (0.5)),
40 | # ]
41 | # else:
42 | # trans = [
43 | # transforms.Resize(
44 | # (image_size[0], image_size[1]), Image.BICUBIC),
45 | # transforms.ToTensor(),
46 | # transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
47 | # ]
48 | #
49 | # self.trans = transforms.Compose(trans)
50 | #
51 | # def get_data(self, filename):
52 | # img = Image.open(filename)
53 | # img = self.trans(img)
54 | # return img
55 |
56 |
57 | class lidar_trans(object):
58 | """Project the LiDAR point cloud onto top-down or spherical view"""
59 |
60 | def __init__(
61 | self,
62 | top_size=[64, 64],
63 | sph_size=[64, 64],
64 | z_range=[-3.0, 3.0],
65 | max_dis=30,
66 | fov_range=[-25.0, 3.0],
67 | ):
68 | """top_size [int, int]: define top-down view image resolution
69 | sph_size [int, int]: define spherical view image resolution
70 | z_range [min:float, max:float]: define point cloud crop values on Z
71 | max_dis (float): maxisimum distance of cropping on XY-plane
72 | fov_range [min:float, max:float]: define vertical field of view
73 | """
74 | #! For top down view
75 | self.proj_H, self.proj_W = (int)(top_size[0] / 2), (int)(top_size[1] / 2)
76 | self.proj_Z_min, self.proj_Z_max = z_range
77 |
78 | #! For spherical view
79 | self.sph_H, self.sph_W = sph_size
80 | self.sph_down, self.sph_up = fov_range
81 |
82 | #! For activate range
83 | self.max_dis = max_dis
84 |
85 | def top_projection(self, points):
86 | """Project a pointcloud into a spherical projection image.projection.
87 | Function takes no arguments because it can be also called externally
88 | if the value of the constructor was not set (in case you change your
89 | mind about wanting the projection)
90 | """
91 |
92 | # get scan components
93 | scan_x = points[:, 0]
94 | scan_y = points[:, 1]
95 | scan_z = points[:, 2]
96 |
97 | # get projections in image coords
98 | proj_x = scan_x / self.max_dis
99 | proj_y = scan_y / self.max_dis
100 |
101 | # scale to image size using angular resolution
102 | proj_x = (proj_x + 1.0) * self.proj_W # in [0.0, 2W]
103 | proj_y = (proj_y + 1.0) * self.proj_H # in [0.0, 2H]
104 |
105 | # round and clamp for use as index
106 | proj_x = np.floor(proj_x)
107 | proj_x = np.minimum(2 * self.proj_W - 1, proj_x)
108 | proj_x = np.maximum(0, proj_x).astype(np.int32) # in [0,2W-]
109 |
110 | proj_y = np.floor(proj_y)
111 | proj_y = np.minimum(2 * self.proj_H - 1, proj_y)
112 | proj_y = np.maximum(0, proj_y).astype(np.int32) # in [0,2H-1]
113 |
114 | data_grid = np.zeros((2 * self.proj_H, 2 * self.proj_W), dtype='float64')
115 | data_grid[proj_y, proj_x] = scan_z
116 |
117 | data_norm = (data_grid - data_grid.min()) / (data_grid.max() - data_grid.min())
118 |
119 | return data_norm
120 |
121 | def sph_projection(self, points):
122 | """Project a pointcloud into a spherical projection image.projection.
123 | Function takes no arguments because it can be also called externally
124 | if the value of the constructor was not set (in case you change your
125 | mind about wanting the projection)
126 | """
127 |
128 | # laser parameters
129 | fov_up = self.sph_up / 180.0 * np.pi # field of view up in rad
130 | fov_down = self.sph_down / 180.0 * np.pi # field of view down in rad
131 | fov = abs(fov_down) + abs(fov_up) # get field of view total in rad
132 |
133 | # get depth of all points
134 | depth = np.linalg.norm(points, 2, axis=1)
135 |
136 | # get scan components
137 | scan_x = points[:, 0]
138 | scan_y = points[:, 1]
139 | scan_z = points[:, 2]
140 |
141 | # get angles of all points
142 | yaw = -np.arctan2(scan_y, scan_x)
143 | pitch = np.arcsin(scan_z / depth)
144 |
145 | # get projections in image coords
146 | proj_x = 0.5 * (yaw / np.pi + 1.0) # in [0.0, 1.0]
147 | proj_y = 1.0 - (pitch + abs(fov_down)) / fov # in [0.0, 1.0]
148 |
149 | # scale to image size using angular resolution
150 | sph_H = self.sph_H
151 | sph_W = self.sph_W
152 | proj_x *= sph_W # in [0.0, W] 128
153 | proj_y *= sph_H # in [0.0, H] 64
154 |
155 | # round and clamp for use as index
156 | proj_x = np.floor(proj_x)
157 | proj_x = np.minimum(sph_W - 1, proj_x)
158 | proj_x = np.maximum(0, proj_x).astype(np.int32) # in [0,W-1]
159 |
160 | proj_y = np.floor(proj_y)
161 | proj_y = np.minimum(sph_H - 1, proj_y)
162 | proj_y = np.maximum(0, proj_y).astype(np.int32) # in [0,H-1]
163 |
164 | data_grid = np.zeros((sph_H, sph_W), dtype='float32')
165 |
166 | indices = np.argsort(depth)[::-1]
167 | data_grid[proj_y[indices], proj_x[indices]] = depth[indices]
168 | sph_norm = (data_grid - data_grid.min()) / (data_grid.max() - data_grid.min())
169 |
170 | return sph_norm
171 |
--------------------------------------------------------------------------------
/tests/test_pitts.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Call Dataloder for your task"
8 | ]
9 | },
10 | {
11 | "cell_type": "code",
12 | "execution_count": 1,
13 | "metadata": {},
14 | "outputs": [
15 | {
16 | "name": "stdout",
17 | "output_type": "stream",
18 | "text": [
19 | "Jupyter environment detected. Enabling Open3D WebVisualizer.\n",
20 | "[Open3D INFO] WebRTC GUI backend enabled.\n",
21 | "[Open3D INFO] WebRTCWindowSystem: HTTP handshake server disabled.\n"
22 | ]
23 | }
24 | ],
25 | "source": [
26 | "'''\n",
27 | "Created Date: Friday, March 11th 2022, 20:00:01 pm\n",
28 | "Author: Haowen Lai\n",
29 | "\n",
30 | "Copyright (c) 2022 Your Company\n",
31 | "'''\n",
32 | "import numpy as np\n",
33 | "from tqdm import tqdm\n",
34 | "from matplotlib import pyplot as plt\n",
35 | "\n",
36 | "from gpr.dataloader import PittsLoader\n",
37 | "from gpr.evaluation import get_recall\n",
38 | "from gpr.tools import HogFeature, lidar_trans\n",
39 | "\n",
40 | "from matplotlib import pyplot as plt\n",
41 | "%matplotlib inline\n",
42 | "\n",
43 | "pitts_loader = PittsLoader('../datasets/Pitts/gpr_pitts_sample')"
44 | ]
45 | },
46 | {
47 | "cell_type": "markdown",
48 | "metadata": {},
49 | "source": [
50 | "## Visiualize raw point cloud and top spherical projection"
51 | ]
52 | },
53 | {
54 | "cell_type": "code",
55 | "execution_count": 2,
56 | "metadata": {},
57 | "outputs": [
58 | {
59 | "data": {
60 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAEgCAYAAABchszxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAEAAElEQVR4nOz9d5Bca36eCT7fd0x6X74KBW8vrnd9my2y2STVJJcUJQ0pidrlyM1ypJEidhTaDTEUGzMbq9iQNKvZkSY0YogzEkXKz0gzIiU1PbubbHbf7tvXwZsCUEB5l94d9337x8lMVBUKQBU8cM8TceMCWZUnsxJZed7zM+8rtNZERERERERERHyWkE/7CUREREREREREPGkiARQRERERERHxmSMSQBERERERERGfOSIBFBEREREREfGZIxJAEREREREREZ85IgEUERERERER8ZkjEkARERHPDUKIHxZCXBZCzAghfu5pP5+IiIjnFxH5AEVERDwPCCEM4ArwQ8A88AHw01rrC0/1iUVERDyXRBWgiIiI54V3gBmt9XWttQv8a+AnnvJzioiIeE4x7/P1qDwUEfHZQzztJ3AXJoG5TX+fB97d/k1CiJ8FfhbAwHgzSfbJPLuIiIinTpcWrnZ29Rl2PwEUERER8Vyhtf4F4BcAsqKo3xU/8JSfUURExJPi2/p3dv29UQssIiLieWEB2Lfp71O92yIiIiL2TCSAIiIinhc+AI4KIQ4KIWzgTwG/+pSfU0RExHNK1AKLiIh4LtBa+0KIvwL8BmAA/0Rrff4pP62IiIjnlEgARUREPDdorb8CfOVpP4+IiIjnn6gFFhEREREREfGZIxJAEREREREREZ85IgEUERERERER8ZkjEkARERERERERnzkiARQRERERERHxmSMSQBERERERERGfOSIBFBEREREREfGZIxJAEREREREREZ85IgEUERERERER8ZkjEkARERERERERnzkiARQRERERERHxmSMSQBERERERERGfOSIBFBEREREREfGZI0qDf47QWuN5HkEQYJompmkihHjaTysiIiIiIuK5IxJAzwlaa1zXxfM8PM8bCB/DMLAsC9M0MQwjEkQRERERERG7IBJAzwFBEOB5HlprpJSD/7TWKKXodruD740EUURERERExP2JBNAzjNYa3/fxfR8hBEIIbt26RbPZpFgsks/nMU1zy/dHgigiIiIiIuL+RALoGUUphed5KKUQQuB5HufOnSMWi1EsFqnVaty8eROtNfl8nkKhQC6X21EQdTqdgfBptVqUSqVIEEVEREREfKaJBNAzhtZ60PICEEJQqVS4ePEiR44cYXh4GNd1GRoaAsD3farVKpVKhRs3biCE2CKIDMNASjk49qVLl3jjjTeiGaKIiIiIiM80kQB6htje8gK4du0a5XKZN954g0QigVJqy31M02RoaGggiDzPo1qtsr6+zrVr1zAMY4sg6t+n/3jbK0T97bJIEEVEREREvMhEAugZQSnF4uIipVIJIQSO43DmzBkKhQJvvfXWoIpzPyzLYnh4mOHhYQBc16VarbK6usrMzAydTocbN25QLBbJZDKDgWq4XX3yfX9wPNM0BxUiKWUkiCIiIiIiXggiAfSU2dzyunr1KsPDw6yurnL16lVOnDhBqVR6qOPbts3IyAgjIyMAfPvb3yaZTLK0tMTly5exbZtCoUChUCCdTm8RWtsFkRBiS4UoEkQREREREU8UITCKBYKNcvjXWAztOA90qEgAPUX63j79QWetNRcvXqTdbvP2229j2/Yjf0whBKOjo4yOjgLQ7XapVCosLCzQaDSIxWL3FES+72+ZT4oEUURERETEk0DG46huF9VsgRCgdXjufMDjRQLoKaGUwnVddO8fsN1u0263mZyc5MSJE09MSMTjccbHxxkfHweg0+lQqVQG6/aJRGIgiFKpVCSIIiIiIiKeGkY2i9Ya7boAqE22L3slEkBPmO2DzlJKFhYWuHnzJvF4nP379z9W0XC/YycSCRKJBBMTE2itB4JodnaWVqtFKpUaDFUnk8k7BFHfqXpubo6JiQni8TiWZQ220SJBFBERERGxE/dqZxmFAqrReCjBs51IAD1Btre8giDgwoULALzzzjt88MEHT+Q57BYhBMlkkmQyyeTkJFpr2u02lUqF69ev0263SafTFAoF8vk8iUQCwzAAqFarjI+PDwRR/3j9gep+jlkkiCIiIiJefIxCgaBSAUBYNjoIQAVbRI9Mp1BBgPZ9jHyOoFob3L9/30dJJICeENtbRY1Gg3PnzrF//34mJycHt/dbYs8iQghSqRSpVIqpqSm01rRaLSqVCjMzM3S73YEg8n0fKeVAEMFtAej03+xSYlnWoEIUCaKIiIiIF5O+gJHxODpQO39P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\n",
61 | "text/plain": [
62 | ""
63 | ]
64 | },
65 | "metadata": {
66 | "needs_background": "light"
67 | },
68 | "output_type": "display_data"
69 | }
70 | ],
71 | "source": [
72 | "# Convert lidar point cloud to top sherical projection\n",
73 | "lidar_to_sph = lidar_trans(\n",
74 | " top_size=(512, 512),\n",
75 | " sph_size=(512, 512),\n",
76 | " max_dis=50,\n",
77 | " fov_range=(-90, 90),\n",
78 | ") # for lidar projections\n",
79 | "\n",
80 | "# load data\n",
81 | "pcd = pitts_loader[41]['pcd'] # {'pcd': pcd}\n",
82 | "sph_img = lidar_to_sph.sph_projection(pcd) # get spherical projection\n",
83 | "sph_img = (sph_img * 255).astype(np.uint8)\n",
84 | "\n",
85 | "# show results\n",
86 | "fig = plt.figure(figsize=(10, 5))\n",
87 | "ax_pc = fig.add_subplot(121, projection='3d')\n",
88 | "ax_img = fig.add_subplot(122)\n",
89 | "#\n",
90 | "ax_pc.scatter(\n",
91 | " pcd[:, 0], pcd[:, 1], pcd[:, 2], c=pcd[:, 2], s=3, linewidths=0,\n",
92 | ")\n",
93 | "ax_pc.set_xlabel('x')\n",
94 | "ax_pc.set_ylabel('y')\n",
95 | "ax_pc.set_xlim(-50.0, 50.0)\n",
96 | "ax_pc.set_ylim(-50.0, 50.0)\n",
97 | "ax_img.imshow(sph_img)\n",
98 | "plt.show()"
99 | ]
100 | },
101 | {
102 | "cell_type": "markdown",
103 | "metadata": {},
104 | "source": [
105 | "## Visiualize the trajectory"
106 | ]
107 | },
108 | {
109 | "cell_type": "code",
110 | "execution_count": 3,
111 | "metadata": {},
112 | "outputs": [
113 | {
114 | "data": {
115 | "image/png": "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\n",
116 | "text/plain": [
117 | ""
118 | ]
119 | },
120 | "metadata": {
121 | "needs_background": "light"
122 | },
123 | "output_type": "display_data"
124 | }
125 | ],
126 | "source": [
127 | "traj_xyz = [pitts_loader.get_translation(idx) for idx in range(len(pitts_loader))]\n",
128 | "traj_xyz = np.vstack(traj_xyz)\n",
129 | "\n",
130 | "# plot result\n",
131 | "fig, ax = plt.subplots(1, 1, figsize=(5, 2))\n",
132 | "plt.rcParams['font.size'] = '12'\n",
133 | "plt.plot(traj_xyz[:, 0], traj_xyz[:, 1])\n",
134 | "plt.title('The trajectory in xy-plane')\n",
135 | "plt.xlabel('x (m)')\n",
136 | "plt.ylabel('y (m)')\n",
137 | "plt.show()"
138 | ]
139 | },
140 | {
141 | "cell_type": "markdown",
142 | "metadata": {},
143 | "source": [
144 | "## Evaluation Testing"
145 | ]
146 | },
147 | {
148 | "cell_type": "code",
149 | "execution_count": 4,
150 | "metadata": {},
151 | "outputs": [
152 | {
153 | "name": "stderr",
154 | "output_type": "stream",
155 | "text": [
156 | "comp. fea.: 100%|██████████| 100/100 [00:05<00:00, 17.08it/s]\n"
157 | ]
158 | },
159 | {
160 | "name": "stdout",
161 | "output_type": "stream",
162 | "text": [
163 | "Top 1 recall 47.96%\n",
164 | "Top 5 recall 85.71%\n"
165 | ]
166 | },
167 | {
168 | "data": {
169 | "image/png": "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\n",
170 | "text/plain": [
171 | ""
172 | ]
173 | },
174 | "metadata": {
175 | "needs_background": "light"
176 | },
177 | "output_type": "display_data"
178 | }
179 | ],
180 | "source": [
181 | "# * Point cloud conversion and feature extractor\n",
182 | "lidar_to_sph = lidar_trans(\n",
183 | " top_size=(512, 512),\n",
184 | " sph_size=(512, 512),\n",
185 | " max_dis=50,\n",
186 | " fov_range=(-90, 90),\n",
187 | ") # for lidar projections\n",
188 | "hog_fea = HogFeature()\n",
189 | "\n",
190 | "# feature extraction\n",
191 | "feature_ref = []\n",
192 | "feature_test = []\n",
193 | "for idx in tqdm(range(len(pitts_loader)), desc='comp. fea.'):\n",
194 | " pcd_ref = pitts_loader[idx]['pcd']\n",
195 | " pcd_test = pcd_ref @ np.array(\n",
196 | " [[0.866, 0.5, 0], [-0.5, 0.866, 0], [0, 0, 1]]\n",
197 | " ) # rotate pi/6 around z-axis\n",
198 | " \n",
199 | " sph_img = lidar_to_sph.sph_projection(pcd_ref) # get spherical projection\n",
200 | " sph_img = (sph_img * 255).astype(np.uint8)\n",
201 | " feature_ref.append(hog_fea.infer_data(sph_img)) # get HOG feature\n",
202 | "\n",
203 | " sph_img = lidar_to_sph.sph_projection(pcd_test) # get spherical projection\n",
204 | " sph_img = (sph_img * 255).astype(np.uint8)\n",
205 | " feature_test.append(hog_fea.infer_data(sph_img)) # get HOG feature\n",
206 | " \n",
207 | "# evaluate recall\n",
208 | "feature_ref = np.array(feature_ref)\n",
209 | "feature_test = np.array(feature_test)\n",
210 | "topN_recall, one_percent_recall = get_recall(\n",
211 | " feature_ref, feature_test, true_threshold=1, num_neighbors=18\n",
212 | ")\n",
213 | "\n",
214 | "# plot result\n",
215 | "fig, ax = plt.subplots(1, 1, figsize=(5, 5))\n",
216 | "plt.rcParams['font.size'] = '12'\n",
217 | "plt.plot(np.arange(1, len(topN_recall) + 1), topN_recall)\n",
218 | "plt.xticks(np.arange(1, len(topN_recall), 2))\n",
219 | "plt.xlabel('Top N')\n",
220 | "plt.ylabel('Recall %')\n",
221 | "plt.title('Place Recognition Analysis')\n",
222 | "\n",
223 | "print(\"Top 1 recall {:.2%}\".format(topN_recall[0]))\n",
224 | "print(\"Top 5 recall {:.2%}\".format(topN_recall[4]))"
225 | ]
226 | }
227 | ],
228 | "metadata": {
229 | "interpreter": {
230 | "hash": "bbeb57c622ec875b30b7d7ae1d93292575f58ac4396e7bd18c7353975286fafc"
231 | },
232 | "kernelspec": {
233 | "display_name": "Python 3",
234 | "language": "python",
235 | "name": "python3"
236 | },
237 | "language_info": {
238 | "codemirror_mode": {
239 | "name": "ipython",
240 | "version": 3
241 | },
242 | "file_extension": ".py",
243 | "mimetype": "text/x-python",
244 | "name": "python",
245 | "nbconvert_exporter": "python",
246 | "pygments_lexer": "ipython3",
247 | "version": "3.6.12"
248 | }
249 | },
250 | "nbformat": 4,
251 | "nbformat_minor": 2
252 | }
253 |
--------------------------------------------------------------------------------
/tests/val_pitts.py:
--------------------------------------------------------------------------------
1 | """
2 | This script is a quick test for the Pittsburgh dataset.
3 |
4 | Created Date: Friday, March 11th 2022, 3:08:28 pm
5 | Author: Haowen Lai, Shiqi Zhao
6 |
7 | Copyright (c) 2022 Your Company
8 | """
9 |
10 | import os
11 | import numpy as np
12 | from tqdm import tqdm
13 | from glob import glob
14 | import open3d as o3d
15 | from matplotlib import pyplot as plt
16 |
17 | from gpr.evaluation import get_recall
18 | from gpr.tools import HogFeature, lidar_trans
19 |
20 | # * Load validation set, modify the folder path here
21 | VAL_DATA_PATH = '{}/VAL'.format('/data_hdd_1/GPR/UGV/')
22 | VAL_TRAJ = 4
23 | SUCCESS_DIS = 3 if VAL_TRAJ in [1, 2] else 5
24 |
25 | # * Point cloud conversion and feature extractor
26 | # * Load your model here
27 | lidar_to_sph = lidar_trans(
28 | top_size=(512, 512),
29 | sph_size=(512, 512),
30 | max_dis=40,
31 | fov_range=(-90, 90),
32 | ) # for lidar projections
33 | hog_fea = HogFeature()
34 |
35 | # feature extraction and take val_1 as an example
36 | #! generate database feature here
37 | print("\033[1;34mLoading database frames\033[0m")
38 | feature_ref = []
39 | poses_ref = []
40 | database_files = sorted(glob('{}/val_{}/DATABASE/*.pcd'.format(VAL_DATA_PATH, VAL_TRAJ)))
41 | for pcd_name in tqdm(database_files):
42 | #* Load pcd files and preprocess them
43 | pcd_database = np.asarray(o3d.io.read_point_cloud(pcd_name).points)
44 | pose_database = np.load('{}_pose6d.npy'.format(pcd_name.split('.pcd')[0]))[:3]
45 |
46 | #* example code, modify here!
47 | sph_img = lidar_to_sph.sph_projection(pcd_database) # get spherical projection
48 | sph_img = (sph_img * 255).astype(np.uint8)
49 | feature_ref.append(hog_fea.infer_data(sph_img)) # get HOG feature
50 | poses_ref.append(pose_database) # get corresponding pose
51 | feature_ref = np.array(feature_ref)
52 | poses_ref = np.array(poses_ref)
53 |
54 | #! generate query feature here
55 | query_folders = os.listdir('{}/val_{}/QUERY/'.format(VAL_DATA_PATH, VAL_TRAJ))
56 | for folder in query_folders:
57 | print("\033[1;34mLoading query frames {}\033[0m".format(folder))
58 | feature_query = []
59 | poses_query = []
60 | query_files = sorted(glob('{}/val_{}/QUERY/{}/*.pcd'.format(VAL_DATA_PATH, VAL_TRAJ, folder)))
61 | for pcd_name in tqdm(query_files):
62 | pcd_query = np.asarray(o3d.io.read_point_cloud(pcd_name).points)
63 | pose_query = np.load('{}_pose6d.npy'.format(pcd_name.split('.pcd')[0]))[:3]
64 |
65 | #* example code, modify here!
66 | sph_img = lidar_to_sph.sph_projection(pcd_query) # get spherical projection
67 | sph_img = (sph_img * 255).astype(np.uint8)
68 | feature_query.append(hog_fea.infer_data(sph_img)) # get HOG feature
69 | poses_query.append(pose_query)
70 |
71 | # evaluate recall
72 | feature_query = np.array(feature_query)
73 | poses_query = np.array(poses_query)
74 | topN_recall, one_percent_recall = get_recall(
75 | feature_ref, feature_query, true_threshold=1, num_neighbors=20,
76 | reference_poses=poses_ref, queries_poses=poses_query, success_dis=SUCCESS_DIS
77 | )
78 |
79 | # plot result
80 | fig, ax = plt.subplots(1, 1, dpi=200)
81 | plt.rcParams['font.size'] = '12'
82 | plt.plot(np.arange(1, len(topN_recall) + 1), topN_recall)
83 | plt.xticks(np.arange(1, len(topN_recall), 2))
84 | plt.xlabel('Top N')
85 | plt.ylabel('Recall %')
86 | plt.title('Place Recognition Analysis Traj{}_{}'.format(VAL_TRAJ, folder))
87 | plt.savefig('Top_N_traj{}_{}.png'.format(VAL_TRAJ, folder))
88 |
89 | print("\033[1;32mTraj {} {} Top 1 recall {:.2%}\033[0m".format(VAL_TRAJ, folder, topN_recall[0]))
90 | print("\033[1;32mTraj {} {} Top 5 recall {:.2%}\033[0m".format(VAL_TRAJ, folder, topN_recall[4]))
91 |
--------------------------------------------------------------------------------