Offroad Traversability Segmentation with VLM and Human in the Loop
Project description
AnyTraverse
An Offroad Traversability Framework with VLM and Human Operator in the Loop
Installation
- Install PyTorch: AnyTraverse requires
torchandtorchvisionto be installed. Install compatibletorchandtorchvisionversions for your platform before proceeding.uv add torch torchvision # uv users pip install torch torchvision # pip users
:warning: PyTorch does not provide wheels for the NVIDIA Jetson platform. Please ensure you have installed te compatible versions of
torch,torchvisionfor your Jetson device for GPU acceleration. - Install AnyTraverse: Install
anytraverseusing your python dependency manager. We recommend usinguvuv add anytraverse # uv users pip install anytraverse # pip users
Optional
- AnyTraverse allows you to bring your own vision-language models (VLMs) and image embedding models and use them by creating wrappers. However, it also ships with some wrappers for models on HuggingFace.
- To use these models, install the
transformerspackage with additional dependencies.uv add transformers einops acccelerate # uv users pip install transformers einops accelerate # pip users
Usage
Quickstart :running_man:
This example explains how to get started with the implementation discussed in the original paper. To get the implementation from the paper running, use the function provided.
from anytraverse import build_pipeline_from_paper
from PIL import Image as PILImage
from matplotlib import pyplot as plt
from matplotlib import patches
import requests
def main():
# Load the image
url = "https://source.roboflow.com/oWTBJ1yeWRbHDXbzJBrOsPVaoH92/0C8goYvWpiqF26dNKxby/original.jpg"
image = PILImage.open(requests.get(url, stream=True).raw)
# Build the pipeline from the paper
anytraverse = build_pipeline_from_paper(
init_traversabilty_preferences={"road": 1, "bush": -0.8, "rock": 0.45},
ref_scene_similarity_threshold=0.8,
roi_uncertainty_threshold=0.3,
roi_x_bounds=(0.333, 0.667),
roi_y_bounds=(0.6, 0.95),
)
# Take one step
state = anytraverse.step(image=image)
# Plot the attention maps
fig, ax = plt.subplots(1, 3, figsize=(15, 5))
for attn_map, prompt, ax_ in zip(
state.attention_maps, state.traversability_preferences, ax
):
ax_.imshow(image)
ax_.imshow(attn_map.cpu(), cmap="plasma", alpha=0.4)
ax_.set_title(prompt)
ax_.axis("off")
plt.show()
# See the traversability and uncertainty maps
fig, ax = plt.subplots(1, 2, figsize=(16, 9))
(x0, y0), (x1, y1) = state.roi_bbox
rects = [
patches.Rectangle(
(x0, y0),
x1 - x0,
y1 - y0,
edgecolor="#ffffff",
facecolor="#ffffff22",
linewidth=4,
)
for _ in range(2)
]
for ax_, m, r_roi, title, rect in zip(
ax,
(state.traversability_map, state.uncertainty_map),
(state.traversability_map_roi.mean(), state.uncertainty_map_roi.mean()),
("Traversability Map", "Uncertainty Map"),
rects,
):
ax_.imshow(image)
map_plot = ax_.imshow(m.cpu(), alpha=0.5, cmap="plasma")
ax_.add_patch(rect)
ax_.text(
x0,
y0 - 15,
f"ROI {title.split(' ')[0]}: {r_roi * 100.0:.2f}%",
size=18,
color="#ffffff",
)
ax_.axis("off")
ax_.set_title(title, fontsize=22)
cbar = plt.colorbar(map_plot, orientation="horizontal", pad=0.01)
cbar.set_label(f"{title.split(' ')[0]} Score", fontsize=12)
for t in cbar.ax.get_xticklabels():
t.set_fontsize(10)
fig.tight_layout()
plt.show()
if __name__ == "__main__":
main()
Attention Maps
Traversability and uncertainty maps
Make AnyTraverse your Own! :nerd_face:
- AnyTraverse is modular and the modules from the original paper can be swapped with your own implementation easily.
- The VLM, image encoder, traversability pooling and uncertainty pooling modules can be replaced with your own implementation, by extending abstract base classes provided in the
anytraversepackage. - Refer to the extended documentation to learn more.
NOTE: Extended documentation coming soon...
Contributing :man_technologist:
We'd love to see your implementations and modifications to help make AnyTraverse better. Please create a pull request (branch name: dev/feat/<your-feature-name>) to add a new feature and raise and issue to request a new feature.
Made with :heart: in IISER Bhopal.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file anytraverse-1.0.9.tar.gz.
File metadata
- Download URL: anytraverse-1.0.9.tar.gz
- Upload date:
- Size: 1.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab8064a6d89a52d0a554bed518702bc47b5f4b975714b3d4e578c189f782fc48
|
|
| MD5 |
7a8da93adcb576f59454dcdc1c3378ed
|
|
| BLAKE2b-256 |
68da78dbca2aebf56002edee0498c2def03e6ce91ad7fc9f5b860a572cc24629
|
File details
Details for the file anytraverse-1.0.9-py3-none-any.whl.
File metadata
- Download URL: anytraverse-1.0.9-py3-none-any.whl
- Upload date:
- Size: 31.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
59d984c8cefea2ea36a7b1d5ca03c754fee748715cc3b7a936022fbc64cdb701
|
|
| MD5 |
a39af63c921a53f1532bc18cbe501850
|
|
| BLAKE2b-256 |
39084332bfe1edbe7551172005d60116cea8db8cd032e218e9099d5ef7424e44
|