diff --git a/RandLA-Net Inference.ipynb b/RandLA-Net Inference.ipynb new file mode 100644 index 00000000..f75a45bb --- /dev/null +++ b/RandLA-Net Inference.ipynb @@ -0,0 +1,925 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "gpuType": "T4", + "authorship_tag": "ABX9TyM/PaJS/C/frV0tgv5gnRXA", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU" + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "source": [ + "# RandLA-Net Inference on LiDAR Point Cloud (Google Colab)\n", + "\n", + "This notebook runs inference on a `.ply` file using a pre-trained RandLA-Net model. The output will be a segmented `.ply` file that can be visualized in CloudCompare.\n", + "\n", + "## 1. Setup Environment\n", + "\n", + "### Install Dependencies\n" + ], + "metadata": { + "id": "EAygOTZaVAf3" + } + }, + { + "cell_type": "code", + "source": [ + "# Install Python 3.10 and dependencies\n", + "!sudo apt-get update -y\n", + "!sudo apt-get install python3.10 python3.10-distutils python3.10-venv -y\n", + "\n", + "# Ensure pip is available for Python 3.10\n", + "!python3.10 -m ensurepip\n", + "\n", + "# Upgrade pip, setuptools, and wheel\n", + "!python3.10 -m pip install --upgrade pip setuptools wheel\n", + "\n", + "# Update alternatives to make Python 3.10 the default\n", + "!sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1\n", + "!sudo update-alternatives --config python3\n", + "\n", + "# Verify the active Python version\n", + "!python3 --version" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cCLx-DeJ9Nfb", + "outputId": "bd2e079c-e5a6-4ef8-e1a5-466dbbf9280b" + }, + "execution_count": 13, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\r0% [Working]\r \rHit:1 http://archive.ubuntu.com/ubuntu jammy InRelease\n", + "\r0% [Connecting to security.ubuntu.com (185.125.190.82)] [Waiting for headers] [\r \rHit:2 https://cloud.r-project.org/bin/linux/ubuntu jammy-cran40/ InRelease\n", + "\r0% [Waiting for headers] [Connecting to security.ubuntu.com (185.125.190.82)] [\r \rHit:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease\n", + "\r0% [Waiting for headers] [Waiting for headers] [Waiting for headers] [Waiting f\r \rHit:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease\n", + "Hit:5 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64 InRelease\n", + "Hit:6 http://security.ubuntu.com/ubuntu jammy-security InRelease\n", + "Hit:7 https://r2u.stat.illinois.edu/ubuntu jammy InRelease\n", + "Hit:8 https://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu jammy InRelease\n", + "Hit:9 https://ppa.launchpadcontent.net/graphics-drivers/ppa/ubuntu jammy InRelease\n", + "Hit:10 https://ppa.launchpadcontent.net/ubuntugis/ppa/ubuntu jammy InRelease\n", + "Reading package lists... Done\n", + "W: Skipping acquire of configured file 'main/source/Sources' as repository 'https://r2u.stat.illinois.edu/ubuntu jammy InRelease' does not seem to provide it (sources.list entry misspelt?)\n", + "Reading package lists... Done\n", + "Building dependency tree... Done\n", + "Reading state information... Done\n", + "Note, selecting 'python3-distutils' instead of 'python3.10-distutils'\n", + "python3-distutils is already the newest version (3.10.8-1~22.04).\n", + "python3.10 is already the newest version (3.10.12-1~22.04.8).\n", + "python3.10 set to manually installed.\n", + "The following NEW packages will be installed:\n", + " python3-pip-whl python3-setuptools-whl python3.10-venv\n", + "0 upgraded, 3 newly installed, 0 to remove and 25 not upgraded.\n", + "Need to get 2,474 kB of archives.\n", + "After this operation, 2,885 kB of additional disk space will be used.\n", + "Get:1 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 python3-pip-whl all 22.0.2+dfsg-1ubuntu0.5 [1,680 kB]\n", + "Get:2 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 python3-setuptools-whl all 59.6.0-1.2ubuntu0.22.04.2 [788 kB]\n", + "Get:3 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 python3.10-venv amd64 3.10.12-1~22.04.8 [5,722 B]\n", + "Fetched 2,474 kB in 0s (8,934 kB/s)\n", + "debconf: unable to initialize frontend: Dialog\n", + "debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 78, <> line 3.)\n", + "debconf: falling back to frontend: Readline\n", + "debconf: unable to initialize frontend: Readline\n", + "debconf: (This frontend requires a controlling tty.)\n", + "debconf: falling back to frontend: Teletype\n", + "dpkg-preconfigure: unable to re-open stdin: \n", + "Selecting previously unselected package python3-pip-whl.\n", + "(Reading database ... 129997 files and directories currently installed.)\n", + "Preparing to unpack .../python3-pip-whl_22.0.2+dfsg-1ubuntu0.5_all.deb ...\n", + "Unpacking python3-pip-whl (22.0.2+dfsg-1ubuntu0.5) ...\n", + "Selecting previously unselected package python3-setuptools-whl.\n", + "Preparing to unpack .../python3-setuptools-whl_59.6.0-1.2ubuntu0.22.04.2_all.deb ...\n", + "Unpacking python3-setuptools-whl (59.6.0-1.2ubuntu0.22.04.2) ...\n", + "Selecting previously unselected package python3.10-venv.\n", + "Preparing to unpack .../python3.10-venv_3.10.12-1~22.04.8_amd64.deb ...\n", + "Unpacking python3.10-venv (3.10.12-1~22.04.8) ...\n", + "Setting up python3-setuptools-whl (59.6.0-1.2ubuntu0.22.04.2) ...\n", + "Setting up python3-pip-whl (22.0.2+dfsg-1ubuntu0.5) ...\n", + "Setting up python3.10-venv (3.10.12-1~22.04.8) ...\n", + "ensurepip is disabled in Debian/Ubuntu for the system python.\n", + "\n", + "Python modules for the system python are usually handled by dpkg and apt-get.\n", + "\n", + " apt install python3-\n", + "\n", + "Install the python3-pip package to use pip itself. Using pip together\n", + "with the system python might have unexpected results for any system installed\n", + "module, so use it on your own risk, or make sure to only use it in virtual\n", + "environments.\n", + "\n", + "/usr/bin/python3.10: No module named pip\n", + "There are 3 choices for the alternative python3 (providing /usr/bin/python3).\n", + "\n", + " Selection Path Priority Status\n", + "------------------------------------------------------------\n", + "* 0 /usr/bin/python3.11 2 auto mode\n", + " 1 /usr/bin/python3.10 1 manual mode\n", + " 2 /usr/bin/python3.11 2 manual mode\n", + " 3 /usr/bin/python3.8 1 manual mode\n", + "\n", + "Press to keep the current choice[*], or type selection number: 1\n", + "update-alternatives: using /usr/bin/python3.10 to provide /usr/bin/python3 (python3) in manual mode\n", + "Python 3.10.12\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "!pip install numpy scipy h5py pandas open3d potpourri3d plyfile trimesh\n", + "!pip install torch torchvision torchaudio\n", + "!pip install torch-geometric torch-cluster torch-scatter torch-sparse torch-spline-conv\n", + "!pip install git+https://github.com/nicolas-chaulet/torch-points3d.git" + ], + "metadata": { + "id": "HAvWyD86U_OW", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "cb6b8885-2702-46ed-c2be-494e2f252b35" + }, + "execution_count": 14, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting numpy\n", + " Downloading numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.6 kB)\n", + "Collecting scipy\n", + " Downloading scipy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (58 kB)\n", + "Collecting h5py\n", + " Downloading h5py-3.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.5 kB)\n", + "Collecting pandas\n", + " Downloading pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (18 kB)\n", + "Collecting open3d\n", + " Downloading open3d-0.19.0-cp38-cp38-manylinux_2_31_x86_64.whl.metadata (4.3 kB)\n", + "Collecting potpourri3d\n", + " Downloading potpourri3d-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (17 kB)\n", + "Collecting plyfile\n", + " Downloading plyfile-1.0.3-py3-none-any.whl.metadata (2.1 kB)\n", + "Collecting trimesh\n", + " Downloading trimesh-4.6.1-py3-none-any.whl.metadata (18 kB)\n", + "Collecting python-dateutil>=2.8.2 (from pandas)\n", + " Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)\n", + "Collecting pytz>=2020.1 (from pandas)\n", + " Downloading pytz-2025.1-py2.py3-none-any.whl.metadata (22 kB)\n", + "Collecting tzdata>=2022.1 (from pandas)\n", + " Downloading tzdata-2025.1-py2.py3-none-any.whl.metadata (1.4 kB)\n", + "Collecting dash>=2.6.0 (from open3d)\n", + " Downloading dash-2.18.2-py3-none-any.whl.metadata (10 kB)\n", + "Collecting werkzeug>=3.0.0 (from open3d)\n", + " Downloading werkzeug-3.0.6-py3-none-any.whl.metadata (3.7 kB)\n", + "Collecting flask>=3.0.0 (from open3d)\n", + " Downloading flask-3.0.3-py3-none-any.whl.metadata (3.2 kB)\n", + "Collecting nbformat>=5.7.0 (from open3d)\n", + " Downloading nbformat-5.10.4-py3-none-any.whl.metadata (3.6 kB)\n", + "Collecting configargparse (from open3d)\n", + " Downloading ConfigArgParse-1.7-py3-none-any.whl.metadata (23 kB)\n", + "Collecting ipywidgets>=8.0.4 (from open3d)\n", + " Downloading ipywidgets-8.1.5-py3-none-any.whl.metadata (2.3 kB)\n", + "Collecting addict (from open3d)\n", + " Downloading addict-2.4.0-py3-none-any.whl.metadata (1.0 kB)\n", + "Collecting pillow>=9.3.0 (from open3d)\n", + " Downloading pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl.metadata (9.2 kB)\n", + "Collecting matplotlib>=3 (from open3d)\n", + " Downloading matplotlib-3.7.5-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (5.7 kB)\n", + "Requirement already satisfied: pyyaml>=5.4.1 in /usr/lib/python3/dist-packages (from open3d) (5.4.1)\n", + "Collecting scikit-learn>=0.21 (from open3d)\n", + " Downloading scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (11 kB)\n", + "Collecting tqdm (from open3d)\n", + " Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n", + "Collecting pyquaternion (from open3d)\n", + " Downloading pyquaternion-0.9.9-py3-none-any.whl.metadata (1.4 kB)\n", + "Collecting plotly>=5.0.0 (from dash>=2.6.0->open3d)\n", + " Downloading plotly-6.0.0-py3-none-any.whl.metadata (5.6 kB)\n", + "Collecting dash-html-components==2.0.0 (from dash>=2.6.0->open3d)\n", + " Downloading dash_html_components-2.0.0-py3-none-any.whl.metadata (3.8 kB)\n", + "Collecting dash-core-components==2.0.0 (from dash>=2.6.0->open3d)\n", + " Downloading dash_core_components-2.0.0-py3-none-any.whl.metadata (2.9 kB)\n", + "Collecting dash-table==5.0.0 (from dash>=2.6.0->open3d)\n", + " Downloading dash_table-5.0.0-py3-none-any.whl.metadata (2.4 kB)\n", + "Requirement already satisfied: importlib-metadata in /usr/lib/python3/dist-packages (from dash>=2.6.0->open3d) (4.6.4)\n", + "Collecting typing-extensions>=4.1.1 (from dash>=2.6.0->open3d)\n", + " Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", + "Collecting requests (from dash>=2.6.0->open3d)\n", + " Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", + "Collecting retrying (from dash>=2.6.0->open3d)\n", + " Downloading retrying-1.3.4-py3-none-any.whl.metadata (6.9 kB)\n", + "Collecting nest-asyncio (from dash>=2.6.0->open3d)\n", + " Downloading nest_asyncio-1.6.0-py3-none-any.whl.metadata (2.8 kB)\n", + "Requirement already satisfied: setuptools in /usr/local/lib/python3.8/dist-packages (from dash>=2.6.0->open3d) (75.3.0)\n", + "Collecting Jinja2>=3.1.2 (from flask>=3.0.0->open3d)\n", + " Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", + "Collecting itsdangerous>=2.1.2 (from flask>=3.0.0->open3d)\n", + " Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB)\n", + "Collecting click>=8.1.3 (from flask>=3.0.0->open3d)\n", + " Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB)\n", + "Collecting blinker>=1.6.2 (from flask>=3.0.0->open3d)\n", + " Downloading blinker-1.8.2-py3-none-any.whl.metadata (1.6 kB)\n", + "Collecting comm>=0.1.3 (from ipywidgets>=8.0.4->open3d)\n", + " Downloading comm-0.2.2-py3-none-any.whl.metadata (3.7 kB)\n", + "Collecting ipython>=6.1.0 (from ipywidgets>=8.0.4->open3d)\n", + " Downloading ipython-8.12.3-py3-none-any.whl.metadata (5.7 kB)\n", + "Collecting traitlets>=4.3.1 (from ipywidgets>=8.0.4->open3d)\n", + " Downloading traitlets-5.14.3-py3-none-any.whl.metadata (10 kB)\n", + "Collecting widgetsnbextension~=4.0.12 (from ipywidgets>=8.0.4->open3d)\n", + " Downloading widgetsnbextension-4.0.13-py3-none-any.whl.metadata (1.6 kB)\n", + "Collecting jupyterlab-widgets~=3.0.12 (from ipywidgets>=8.0.4->open3d)\n", + " Downloading jupyterlab_widgets-3.0.13-py3-none-any.whl.metadata (4.1 kB)\n", + "Collecting contourpy>=1.0.1 (from matplotlib>=3->open3d)\n", + " Downloading contourpy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.9 kB)\n", + "Collecting cycler>=0.10 (from matplotlib>=3->open3d)\n", + " Downloading cycler-0.12.1-py3-none-any.whl.metadata (3.8 kB)\n", + "Collecting fonttools>=4.22.0 (from matplotlib>=3->open3d)\n", + " Downloading fonttools-4.56.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (101 kB)\n", + "Collecting kiwisolver>=1.0.1 (from matplotlib>=3->open3d)\n", + " Downloading kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl.metadata (6.3 kB)\n", + "Collecting packaging>=20.0 (from matplotlib>=3->open3d)\n", + " Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in /usr/lib/python3/dist-packages (from matplotlib>=3->open3d) (2.4.7)\n", + "Collecting importlib-resources>=3.2.0 (from matplotlib>=3->open3d)\n", + " Downloading importlib_resources-6.4.5-py3-none-any.whl.metadata (4.0 kB)\n", + "Collecting fastjsonschema>=2.15 (from nbformat>=5.7.0->open3d)\n", + " Downloading fastjsonschema-2.21.1-py3-none-any.whl.metadata (2.2 kB)\n", + "Collecting jsonschema>=2.6 (from nbformat>=5.7.0->open3d)\n", + " Downloading jsonschema-4.23.0-py3-none-any.whl.metadata (7.9 kB)\n", + "Collecting jupyter-core!=5.0.*,>=4.12 (from nbformat>=5.7.0->open3d)\n", + " Downloading jupyter_core-5.7.2-py3-none-any.whl.metadata (3.4 kB)\n", + "Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil>=2.8.2->pandas) (1.16.0)\n", + "Collecting joblib>=1.1.1 (from scikit-learn>=0.21->open3d)\n", + " Downloading joblib-1.4.2-py3-none-any.whl.metadata (5.4 kB)\n", + "Collecting threadpoolctl>=2.0.0 (from scikit-learn>=0.21->open3d)\n", + " Downloading threadpoolctl-3.5.0-py3-none-any.whl.metadata (13 kB)\n", + "Collecting MarkupSafe>=2.1.1 (from werkzeug>=3.0.0->open3d)\n", + " Downloading MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.0 kB)\n", + "Collecting zipp>=3.1.0 (from importlib-resources>=3.2.0->matplotlib>=3->open3d)\n", + " Downloading zipp-3.20.2-py3-none-any.whl.metadata (3.7 kB)\n", + "Collecting backcall (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n", + " Downloading backcall-0.2.0-py2.py3-none-any.whl.metadata (2.0 kB)\n", + "Collecting decorator (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n", + " Downloading decorator-5.1.1-py3-none-any.whl.metadata (4.0 kB)\n", + "Collecting jedi>=0.16 (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n", + " Downloading jedi-0.19.2-py2.py3-none-any.whl.metadata (22 kB)\n", + "Collecting matplotlib-inline (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n", + " Downloading matplotlib_inline-0.1.7-py3-none-any.whl.metadata (3.9 kB)\n", + "Collecting pickleshare (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n", + " Downloading pickleshare-0.7.5-py2.py3-none-any.whl.metadata (1.5 kB)\n", + "Collecting prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30 (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n", + " Downloading prompt_toolkit-3.0.50-py3-none-any.whl.metadata (6.6 kB)\n", + "Requirement already satisfied: pygments>=2.4.0 in /usr/lib/python3/dist-packages (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d) (2.11.2)\n", + "Collecting stack-data (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n", + " Downloading stack_data-0.6.3-py3-none-any.whl.metadata (18 kB)\n", + "Collecting pexpect>4.3 (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n", + " Downloading pexpect-4.9.0-py2.py3-none-any.whl.metadata (2.5 kB)\n", + "Collecting attrs>=22.2.0 (from jsonschema>=2.6->nbformat>=5.7.0->open3d)\n", + " Downloading attrs-25.1.0-py3-none-any.whl.metadata (10 kB)\n", + "Collecting jsonschema-specifications>=2023.03.6 (from jsonschema>=2.6->nbformat>=5.7.0->open3d)\n", + " Downloading jsonschema_specifications-2023.12.1-py3-none-any.whl.metadata (3.0 kB)\n", + "Collecting pkgutil-resolve-name>=1.3.10 (from jsonschema>=2.6->nbformat>=5.7.0->open3d)\n", + " Downloading pkgutil_resolve_name-1.3.10-py3-none-any.whl.metadata (624 bytes)\n", + "Collecting referencing>=0.28.4 (from jsonschema>=2.6->nbformat>=5.7.0->open3d)\n", + " Downloading referencing-0.35.1-py3-none-any.whl.metadata (2.8 kB)\n", + "Collecting rpds-py>=0.7.1 (from jsonschema>=2.6->nbformat>=5.7.0->open3d)\n", + " Downloading rpds_py-0.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.2 kB)\n", + "\u001b[33mWARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))': /simple/platformdirs/\u001b[0m\u001b[33m\n", + "\u001b[0mCollecting platformdirs>=2.5 (from jupyter-core!=5.0.*,>=4.12->nbformat>=5.7.0->open3d)\n", + " Downloading platformdirs-4.3.6-py3-none-any.whl.metadata (11 kB)\n", + "Collecting narwhals>=1.15.1 (from plotly>=5.0.0->dash>=2.6.0->open3d)\n", + " Downloading narwhals-1.25.2-py3-none-any.whl.metadata (10 kB)\n", + "Collecting charset-normalizer<4,>=2 (from requests->dash>=2.6.0->open3d)\n", + " Downloading charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", + "Collecting idna<4,>=2.5 (from requests->dash>=2.6.0->open3d)\n", + " Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", + "Collecting urllib3<3,>=1.21.1 (from requests->dash>=2.6.0->open3d)\n", + " Downloading urllib3-2.2.3-py3-none-any.whl.metadata (6.5 kB)\n", + "Collecting certifi>=2017.4.17 (from requests->dash>=2.6.0->open3d)\n", + " Downloading certifi-2025.1.31-py3-none-any.whl.metadata (2.5 kB)\n", + "Collecting parso<0.9.0,>=0.8.4 (from jedi>=0.16->ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n", + " Downloading parso-0.8.4-py2.py3-none-any.whl.metadata (7.7 kB)\n", + "Collecting ptyprocess>=0.5 (from pexpect>4.3->ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n", + " Downloading ptyprocess-0.7.0-py2.py3-none-any.whl.metadata (1.3 kB)\n", + "Collecting wcwidth (from prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30->ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n", + " Downloading wcwidth-0.2.13-py2.py3-none-any.whl.metadata (14 kB)\n", + "Collecting executing>=1.2.0 (from stack-data->ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n", + " Downloading executing-2.2.0-py2.py3-none-any.whl.metadata (8.9 kB)\n", + "Collecting asttokens>=2.1.0 (from stack-data->ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n", + " Downloading asttokens-3.0.0-py3-none-any.whl.metadata (4.7 kB)\n", + "Collecting pure-eval (from stack-data->ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n", + " Downloading pure_eval-0.2.3-py3-none-any.whl.metadata (6.3 kB)\n", + "Downloading numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m17.3/17.3 MB\u001b[0m \u001b[31m78.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading scipy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (34.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m34.5/34.5 MB\u001b[0m \u001b[31m61.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading h5py-3.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.3/5.3 MB\u001b[0m \u001b[31m102.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.4 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.4/12.4 MB\u001b[0m \u001b[31m105.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading open3d-0.19.0-cp38-cp38-manylinux_2_31_x86_64.whl (447.7 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m447.7/447.7 MB\u001b[0m \u001b[31m18.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading potpourri3d-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (881 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m881.1/881.1 kB\u001b[0m \u001b[31m31.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading plyfile-1.0.3-py3-none-any.whl (23 kB)\n", + "Downloading trimesh-4.6.1-py3-none-any.whl (707 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m707.0/707.0 kB\u001b[0m \u001b[31m27.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading dash-2.18.2-py3-none-any.whl (7.8 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.8/7.8 MB\u001b[0m \u001b[31m114.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading dash_core_components-2.0.0-py3-none-any.whl (3.8 kB)\n", + "Downloading dash_html_components-2.0.0-py3-none-any.whl (4.1 kB)\n", + "Downloading dash_table-5.0.0-py3-none-any.whl (3.9 kB)\n", + "Downloading flask-3.0.3-py3-none-any.whl (101 kB)\n", + "Downloading ipywidgets-8.1.5-py3-none-any.whl (139 kB)\n", + "Downloading matplotlib-3.7.5-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (9.2 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m9.2/9.2 MB\u001b[0m \u001b[31m109.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nbformat-5.10.4-py3-none-any.whl (78 kB)\n", + "Downloading pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl (4.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.5/4.5 MB\u001b[0m \u001b[31m99.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)\n", + "Downloading pytz-2025.1-py2.py3-none-any.whl (507 kB)\n", + "Downloading scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.1 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m11.1/11.1 MB\u001b[0m \u001b[31m100.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading tzdata-2025.1-py2.py3-none-any.whl (346 kB)\n", + "Downloading werkzeug-3.0.6-py3-none-any.whl (227 kB)\n", + "Downloading addict-2.4.0-py3-none-any.whl (3.8 kB)\n", + "Downloading ConfigArgParse-1.7-py3-none-any.whl (25 kB)\n", + "Downloading pyquaternion-0.9.9-py3-none-any.whl (14 kB)\n", + "Downloading tqdm-4.67.1-py3-none-any.whl (78 kB)\n", + "Downloading blinker-1.8.2-py3-none-any.whl (9.5 kB)\n", + "Downloading click-8.1.8-py3-none-any.whl (98 kB)\n", + "Downloading comm-0.2.2-py3-none-any.whl (7.2 kB)\n", + "Downloading contourpy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (301 kB)\n", + "Downloading cycler-0.12.1-py3-none-any.whl (8.3 kB)\n", + "Downloading fastjsonschema-2.21.1-py3-none-any.whl (23 kB)\n", + "Downloading fonttools-4.56.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.7 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.7/4.7 MB\u001b[0m \u001b[31m101.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading importlib_resources-6.4.5-py3-none-any.whl (36 kB)\n", + "Downloading ipython-8.12.3-py3-none-any.whl (798 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m798.3/798.3 kB\u001b[0m \u001b[31m32.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading itsdangerous-2.2.0-py3-none-any.whl (16 kB)\n", + "Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", + "Downloading joblib-1.4.2-py3-none-any.whl (301 kB)\n", + "Downloading jsonschema-4.23.0-py3-none-any.whl (88 kB)\n", + "Downloading jupyter_core-5.7.2-py3-none-any.whl (28 kB)\n", + "Downloading jupyterlab_widgets-3.0.13-py3-none-any.whl (214 kB)\n", + "Downloading kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.2 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.2/1.2 MB\u001b[0m \u001b[31m46.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (26 kB)\n", + "Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", + "Downloading plotly-6.0.0-py3-none-any.whl (14.8 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m14.8/14.8 MB\u001b[0m \u001b[31m127.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading threadpoolctl-3.5.0-py3-none-any.whl (18 kB)\n", + "Downloading traitlets-5.14.3-py3-none-any.whl (85 kB)\n", + "Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", + "Downloading widgetsnbextension-4.0.13-py3-none-any.whl (2.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.3/2.3 MB\u001b[0m \u001b[31m79.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nest_asyncio-1.6.0-py3-none-any.whl (5.2 kB)\n", + "Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", + "Downloading retrying-1.3.4-py3-none-any.whl (11 kB)\n", + "Downloading attrs-25.1.0-py3-none-any.whl (63 kB)\n", + "Downloading certifi-2025.1.31-py3-none-any.whl (166 kB)\n", + "Downloading charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (144 kB)\n", + "Downloading idna-3.10-py3-none-any.whl (70 kB)\n", + "Downloading jedi-0.19.2-py2.py3-none-any.whl (1.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.6/1.6 MB\u001b[0m \u001b[31m56.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading jsonschema_specifications-2023.12.1-py3-none-any.whl (18 kB)\n", + "Downloading narwhals-1.25.2-py3-none-any.whl (305 kB)\n", + "Downloading pexpect-4.9.0-py2.py3-none-any.whl (63 kB)\n", + "Downloading pkgutil_resolve_name-1.3.10-py3-none-any.whl (4.7 kB)\n", + "Downloading platformdirs-4.3.6-py3-none-any.whl (18 kB)\n", + "Downloading prompt_toolkit-3.0.50-py3-none-any.whl (387 kB)\n", + "Downloading referencing-0.35.1-py3-none-any.whl (26 kB)\n", + "Downloading rpds_py-0.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (360 kB)\n", + "Downloading urllib3-2.2.3-py3-none-any.whl (126 kB)\n", + "Downloading zipp-3.20.2-py3-none-any.whl (9.2 kB)\n", + "Downloading backcall-0.2.0-py2.py3-none-any.whl (11 kB)\n", + "Downloading decorator-5.1.1-py3-none-any.whl (9.1 kB)\n", + "Downloading matplotlib_inline-0.1.7-py3-none-any.whl (9.9 kB)\n", + "Downloading pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB)\n", + "Downloading stack_data-0.6.3-py3-none-any.whl (24 kB)\n", + "Downloading asttokens-3.0.0-py3-none-any.whl (26 kB)\n", + "Downloading executing-2.2.0-py2.py3-none-any.whl (26 kB)\n", + "Downloading parso-0.8.4-py2.py3-none-any.whl (103 kB)\n", + "Downloading ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)\n", + "Downloading pure_eval-0.2.3-py3-none-any.whl (11 kB)\n", + "Downloading wcwidth-0.2.13-py2.py3-none-any.whl (34 kB)\n", + "Installing collected packages: wcwidth, pytz, pure-eval, ptyprocess, pickleshare, fastjsonschema, dash-table, dash-html-components, dash-core-components, backcall, addict, zipp, widgetsnbextension, urllib3, tzdata, typing-extensions, traitlets, tqdm, threadpoolctl, rpds-py, retrying, python-dateutil, prompt-toolkit, platformdirs, pkgutil-resolve-name, pillow, pexpect, parso, packaging, numpy, nest-asyncio, narwhals, MarkupSafe, kiwisolver, jupyterlab-widgets, joblib, itsdangerous, idna, fonttools, executing, decorator, cycler, configargparse, click, charset-normalizer, certifi, blinker, attrs, asttokens, werkzeug, trimesh, stack-data, scipy, requests, referencing, pyquaternion, plyfile, plotly, pandas, matplotlib-inline, jupyter-core, Jinja2, jedi, importlib-resources, h5py, contourpy, comm, scikit-learn, potpourri3d, matplotlib, jsonschema-specifications, ipython, flask, jsonschema, ipywidgets, dash, nbformat, open3d\n", + " Attempting uninstall: zipp\n", + " Found existing installation: zipp 1.0.0\n", + " Uninstalling zipp-1.0.0:\n", + " Successfully uninstalled zipp-1.0.0\n", + " Attempting uninstall: blinker\n", + " Found existing installation: blinker 1.4\n", + "\u001b[1;31merror\u001b[0m: \u001b[1muninstall-distutils-installed-package\u001b[0m\n", + "\n", + "\u001b[31m×\u001b[0m Cannot uninstall blinker 1.4\n", + "\u001b[31m╰─>\u001b[0m It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.\n", + "Collecting torch\n", + " Downloading torch-2.4.1-cp38-cp38-manylinux1_x86_64.whl.metadata (26 kB)\n", + "Collecting torchvision\n", + " Downloading torchvision-0.19.1-cp38-cp38-manylinux1_x86_64.whl.metadata (6.0 kB)\n", + "Collecting torchaudio\n", + " Downloading torchaudio-2.4.1-cp38-cp38-manylinux1_x86_64.whl.metadata (6.4 kB)\n", + "Collecting filelock (from torch)\n", + " Downloading filelock-3.16.1-py3-none-any.whl.metadata (2.9 kB)\n", + "Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.8/dist-packages (from torch) (4.12.2)\n", + "Collecting sympy (from torch)\n", + " Downloading sympy-1.13.3-py3-none-any.whl.metadata (12 kB)\n", + "Collecting networkx (from torch)\n", + " Downloading networkx-3.1-py3-none-any.whl.metadata (5.3 kB)\n", + "Collecting jinja2 (from torch)\n", + " Using cached jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", + "Collecting fsspec (from torch)\n", + " Downloading fsspec-2025.2.0-py3-none-any.whl.metadata (11 kB)\n", + "Collecting nvidia-cuda-nvrtc-cu12==12.1.105 (from torch)\n", + " Downloading nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", + "Collecting nvidia-cuda-runtime-cu12==12.1.105 (from torch)\n", + " Downloading nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", + "Collecting nvidia-cuda-cupti-cu12==12.1.105 (from torch)\n", + " Downloading nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", + "Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch)\n", + " Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "Collecting nvidia-cublas-cu12==12.1.3.1 (from torch)\n", + " Downloading nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", + "Collecting nvidia-cufft-cu12==11.0.2.54 (from torch)\n", + " Downloading nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", + "Collecting nvidia-curand-cu12==10.3.2.106 (from torch)\n", + " Downloading nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", + "Collecting nvidia-cusolver-cu12==11.4.5.107 (from torch)\n", + " Downloading nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", + "Collecting nvidia-cusparse-cu12==12.1.0.106 (from torch)\n", + " Downloading nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", + "Collecting nvidia-nccl-cu12==2.20.5 (from torch)\n", + " Downloading nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", + "Collecting nvidia-nvtx-cu12==12.1.105 (from torch)\n", + " Downloading nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.7 kB)\n", + "Collecting triton==3.0.0 (from torch)\n", + " Downloading triton-3.0.0-1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.3 kB)\n", + "Collecting nvidia-nvjitlink-cu12 (from nvidia-cusolver-cu12==11.4.5.107->torch)\n", + " Downloading nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl.metadata (1.7 kB)\n", + "Requirement already satisfied: numpy in /usr/local/lib/python3.8/dist-packages (from torchvision) (1.24.4)\n", + "Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /usr/local/lib/python3.8/dist-packages (from torchvision) (10.4.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.8/dist-packages (from jinja2->torch) (2.1.5)\n", + "Collecting mpmath<1.4,>=1.1.0 (from sympy->torch)\n", + " Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "Downloading torch-2.4.1-cp38-cp38-manylinux1_x86_64.whl (797.1 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m797.1/797.1 MB\u001b[0m \u001b[31m33.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl (410.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m410.6/410.6 MB\u001b[0m \u001b[31m56.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (14.1 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m14.1/14.1 MB\u001b[0m \u001b[31m122.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (23.7 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m23.7/23.7 MB\u001b[0m \u001b[31m127.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (823 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m823.6/823.6 kB\u001b[0m \u001b[31m28.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m664.8/664.8 MB\u001b[0m \u001b[31m27.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl (121.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m121.6/121.6 MB\u001b[0m \u001b[31m63.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl (56.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.5/56.5 MB\u001b[0m \u001b[31m61.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl (124.2 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m124.2/124.2 MB\u001b[0m \u001b[31m63.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl (196.0 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m196.0/196.0 MB\u001b[0m \u001b[31m63.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_x86_64.whl (176.2 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m176.2/176.2 MB\u001b[0m \u001b[31m58.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (99 kB)\n", + "Downloading triton-3.0.0-1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (209.4 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m209.4/209.4 MB\u001b[0m \u001b[31m67.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading torchvision-0.19.1-cp38-cp38-manylinux1_x86_64.whl (7.0 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.0/7.0 MB\u001b[0m \u001b[31m101.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading torchaudio-2.4.1-cp38-cp38-manylinux1_x86_64.whl (3.4 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.4/3.4 MB\u001b[0m \u001b[31m91.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading filelock-3.16.1-py3-none-any.whl (16 kB)\n", + "Downloading fsspec-2025.2.0-py3-none-any.whl (184 kB)\n", + "Using cached jinja2-3.1.5-py3-none-any.whl (134 kB)\n", + "Downloading networkx-3.1-py3-none-any.whl (2.1 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.1/2.1 MB\u001b[0m \u001b[31m71.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading sympy-1.13.3-py3-none-any.whl (6.2 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.2/6.2 MB\u001b[0m \u001b[31m111.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m536.2/536.2 kB\u001b[0m \u001b[31m17.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl (39.2 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m39.2/39.2 MB\u001b[0m \u001b[31m51.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hInstalling collected packages: mpmath, sympy, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, networkx, jinja2, fsspec, filelock, triton, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nvidia-cusolver-cu12, torch, torchvision, torchaudio\n", + "Successfully installed filelock-3.16.1 fsspec-2025.2.0 jinja2-3.1.5 mpmath-1.3.0 networkx-3.1 nvidia-cublas-cu12-12.1.3.1 nvidia-cuda-cupti-cu12-12.1.105 nvidia-cuda-nvrtc-cu12-12.1.105 nvidia-cuda-runtime-cu12-12.1.105 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.0.2.54 nvidia-curand-cu12-10.3.2.106 nvidia-cusolver-cu12-11.4.5.107 nvidia-cusparse-cu12-12.1.0.106 nvidia-nccl-cu12-2.20.5 nvidia-nvjitlink-cu12-12.8.61 nvidia-nvtx-cu12-12.1.105 sympy-1.13.3 torch-2.4.1 torchaudio-2.4.1 torchvision-0.19.1 triton-3.0.0\n", + "Collecting torch-geometric\n", + " Downloading torch_geometric-2.6.1-py3-none-any.whl.metadata (63 kB)\n", + "Collecting torch-cluster\n", + " Downloading torch_cluster-1.6.3.tar.gz (54 kB)\n", + " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Collecting torch-scatter\n", + " Downloading torch_scatter-2.1.2.tar.gz (108 kB)\n", + " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Collecting torch-sparse\n", + " Downloading torch_sparse-0.6.18.tar.gz (209 kB)\n", + " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Collecting torch-spline-conv\n", + " Downloading torch_spline_conv-1.2.2.tar.gz (25 kB)\n", + " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Collecting aiohttp (from torch-geometric)\n", + " Downloading aiohttp-3.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.7 kB)\n", + "Requirement already satisfied: fsspec in /usr/local/lib/python3.8/dist-packages (from torch-geometric) (2025.2.0)\n", + "Requirement already satisfied: jinja2 in /usr/local/lib/python3.8/dist-packages (from torch-geometric) (3.1.5)\n", + "Requirement already satisfied: numpy in /usr/local/lib/python3.8/dist-packages (from torch-geometric) (1.24.4)\n", + "Collecting psutil>=5.8.0 (from torch-geometric)\n", + " Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "Requirement already satisfied: pyparsing in /usr/lib/python3/dist-packages (from torch-geometric) (2.4.7)\n", + "Collecting requests (from torch-geometric)\n", + " Using cached requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", + "Requirement already satisfied: tqdm in /usr/local/lib/python3.8/dist-packages (from torch-geometric) (4.67.1)\n", + "Collecting scipy (from torch-cluster)\n", + " Using cached scipy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (58 kB)\n", + "Collecting aiohappyeyeballs>=2.3.0 (from aiohttp->torch-geometric)\n", + " Downloading aiohappyeyeballs-2.4.4-py3-none-any.whl.metadata (6.1 kB)\n", + "Collecting aiosignal>=1.1.2 (from aiohttp->torch-geometric)\n", + " Downloading aiosignal-1.3.1-py3-none-any.whl.metadata (4.0 kB)\n", + "Collecting attrs>=17.3.0 (from aiohttp->torch-geometric)\n", + " Using cached attrs-25.1.0-py3-none-any.whl.metadata (10 kB)\n", + "Collecting frozenlist>=1.1.1 (from aiohttp->torch-geometric)\n", + " Downloading frozenlist-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (13 kB)\n", + "Collecting multidict<7.0,>=4.5 (from aiohttp->torch-geometric)\n", + " Downloading multidict-6.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.0 kB)\n", + "Collecting yarl<2.0,>=1.12.0 (from aiohttp->torch-geometric)\n", + " Downloading yarl-1.15.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (56 kB)\n", + "Collecting async-timeout<6.0,>=4.0 (from aiohttp->torch-geometric)\n", + " Downloading async_timeout-5.0.1-py3-none-any.whl.metadata (5.1 kB)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.8/dist-packages (from jinja2->torch-geometric) (2.1.5)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.8/dist-packages (from requests->torch-geometric) (3.4.1)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.8/dist-packages (from requests->torch-geometric) (3.10)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.8/dist-packages (from requests->torch-geometric) (2.2.3)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.8/dist-packages (from requests->torch-geometric) (2025.1.31)\n", + "Requirement already satisfied: typing-extensions>=4.1.0 in /usr/local/lib/python3.8/dist-packages (from multidict<7.0,>=4.5->aiohttp->torch-geometric) (4.12.2)\n", + "Collecting propcache>=0.2.0 (from yarl<2.0,>=1.12.0->aiohttp->torch-geometric)\n", + " Downloading propcache-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.7 kB)\n", + "Downloading torch_geometric-2.6.1-py3-none-any.whl (1.1 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.1/1.1 MB\u001b[0m \u001b[31m26.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "Downloading aiohttp-3.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m49.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hUsing cached requests-2.32.3-py3-none-any.whl (64 kB)\n", + "Using cached scipy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (34.5 MB)\n", + "Downloading aiohappyeyeballs-2.4.4-py3-none-any.whl (14 kB)\n", + "Downloading aiosignal-1.3.1-py3-none-any.whl (7.6 kB)\n", + "Downloading async_timeout-5.0.1-py3-none-any.whl (6.2 kB)\n", + "Using cached attrs-25.1.0-py3-none-any.whl (63 kB)\n", + "Downloading frozenlist-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (243 kB)\n", + "Downloading multidict-6.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (129 kB)\n", + "Downloading yarl-1.15.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (319 kB)\n", + "Downloading propcache-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (213 kB)\n", + "Building wheels for collected packages: torch-cluster, torch-scatter, torch-sparse, torch-spline-conv\n", + " Building wheel for torch-cluster (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for torch-cluster: filename=torch_cluster-1.6.3-cp38-cp38-linux_x86_64.whl size=731837 sha256=0610861bccf82c5fe17a84a9fe9f8ed62f6a20656578ce92a445469c8203c5e6\n", + " Stored in directory: /root/.cache/pip/wheels/83/ae/16/6e083c8e0651c589dba0257e7d82c6a142ee63cca2f9f41d2d\n", + " Building wheel for torch-scatter (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for torch-scatter: filename=torch_scatter-2.1.2-cp38-cp38-linux_x86_64.whl size=536728 sha256=f8e1761f266b7222610528420c5df95cbbd81b72d16f2f5d126a51fc4ab20c1d\n", + " Stored in directory: /root/.cache/pip/wheels/54/0c/3d/5e4aea36abfd59a43f8bb9859f545baa46c2a880a99a428db6\n", + " Building wheel for torch-sparse (setup.py) ... \u001b[?25l\u001b[?25hcanceled\n", + "\u001b[31mERROR: Operation cancelled by user\u001b[0m\u001b[31m\n", + "\u001b[0m^C\n", + "Collecting git+https://github.com/nicolas-chaulet/torch-points3d.git\n", + " Cloning https://github.com/nicolas-chaulet/torch-points3d.git to /tmp/pip-req-build-k8zeklkk\n", + " Running command git clone --filter=blob:none --quiet https://github.com/nicolas-chaulet/torch-points3d.git /tmp/pip-req-build-k8zeklkk\n", + "Traceback (most recent call last):\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/cli/base_command.py\", line 106, in _run_wrapper\n", + " status = _inner_run()\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/cli/base_command.py\", line 97, in _inner_run\n", + " return self.run(options, args)\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/cli/req_command.py\", line 67, in wrapper\n", + " return func(self, options, args)\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/commands/install.py\", line 386, in run\n", + " requirement_set = resolver.resolve(\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/resolution/resolvelib/resolver.py\", line 76, in resolve\n", + " collected = self.factory.collect_root_requirements(root_reqs)\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/resolution/resolvelib/factory.py\", line 545, in collect_root_requirements\n", + " reqs = list(\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/resolution/resolvelib/factory.py\", line 501, in _make_requirements_from_install_req\n", + " cand = self._make_base_candidate_from_link(\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/resolution/resolvelib/factory.py\", line 233, in _make_base_candidate_from_link\n", + " self._link_candidate_cache[link] = LinkCandidate(\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/resolution/resolvelib/candidates.py\", line 304, in __init__\n", + " super().__init__(\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/resolution/resolvelib/candidates.py\", line 159, in __init__\n", + " self.dist = self._prepare()\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/resolution/resolvelib/candidates.py\", line 236, in _prepare\n", + " dist = self._prepare_distribution()\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/resolution/resolvelib/candidates.py\", line 315, in _prepare_distribution\n", + " return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True)\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/operations/prepare.py\", line 527, in prepare_linked_requirement\n", + " return self._prepare_linked_requirement(req, parallel_builds)\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/operations/prepare.py\", line 598, in _prepare_linked_requirement\n", + " local_file = unpack_url(\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/operations/prepare.py\", line 159, in unpack_url\n", + " unpack_vcs_link(link, location, verbosity=verbosity)\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/operations/prepare.py\", line 81, in unpack_vcs_link\n", + " vcs_backend.unpack(location, url=hide_url(link.url), verbosity=verbosity)\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/vcs/versioncontrol.py\", line 589, in unpack\n", + " self.obtain(location, url=url, verbosity=verbosity)\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/vcs/versioncontrol.py\", line 502, in obtain\n", + " self.fetch_new(dest, url, rev_options, verbosity=verbosity)\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/vcs/git.py\", line 277, in fetch_new\n", + " self.run_command(\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/vcs/versioncontrol.py\", line 631, in run_command\n", + " return call_subprocess(\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/utils/subprocess.py\", line 151, in call_subprocess\n", + " line: str = proc.stdout.readline()\n", + " File \"/usr/lib/python3.8/codecs.py\", line 319, in decode\n", + " def decode(self, input, final=False):\n", + "KeyboardInterrupt\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"/usr/local/bin/pip\", line 8, in \n", + " sys.exit(main())\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/cli/main.py\", line 80, in main\n", + " return command.main(cmd_args)\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/cli/base_command.py\", line 158, in main\n", + " return self._main(args)\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/cli/base_command.py\", line 240, in _main\n", + " return self._run_wrapper(level_number, options, args)\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/cli/base_command.py\", line 142, in _run_wrapper\n", + " logger.critical(\"Operation cancelled by user\")\n", + " File \"/usr/lib/python3.8/logging/__init__.py\", line 1493, in critical\n", + " self._log(CRITICAL, msg, args, **kwargs)\n", + " File \"/usr/lib/python3.8/logging/__init__.py\", line 1589, in _log\n", + " self.handle(record)\n", + " File \"/usr/lib/python3.8/logging/__init__.py\", line 1599, in handle\n", + " self.callHandlers(record)\n", + " File \"/usr/lib/python3.8/logging/__init__.py\", line 1661, in callHandlers\n", + " hdlr.handle(record)\n", + " File \"/usr/lib/python3.8/logging/__init__.py\", line 954, in handle\n", + " self.emit(record)\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_internal/utils/logging.py\", line 179, in emit\n", + " style = Style(color=\"red\")\n", + " File \"/usr/local/lib/python3.8/dist-packages/pip/_vendor/rich/style.py\", line 146, in __init__\n", + " def _make_color(color: Union[Color, str]) -> Color:\n", + " File \"/usr/lib/python3.8/typing.py\", line 258, in inner\n", + " return cached(*args, **kwds)\n", + " File \"/usr/lib/python3.8/typing.py\", line 362, in __getitem__\n", + " return _GenericAlias(self, parameters)\n", + " File \"/usr/lib/python3.8/typing.py\", line 660, in __init__\n", + " self._inst = inst\n", + " File \"/usr/lib/python3.8/typing.py\", line 764, in __setattr__\n", + " super().__setattr__(attr, val)\n", + "KeyboardInterrupt\n", + "^C\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### Mount Google Drive" + ], + "metadata": { + "id": "_y6wwlh8VI_7" + } + }, + { + "cell_type": "code", + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ], + "metadata": { + "id": "rhfhh89KVJcc", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "09e03c2c-660c-4953-b799-7463b7d87dcf" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Mounted at /content/drive\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## 2. Load Model and Data\n", + "\n", + "### Define Paths\n" + ], + "metadata": { + "id": "ghCuoMT8VQWo" + } + }, + { + "cell_type": "code", + "source": [ + "CHECKPOINT_PATH = '/content/drive/My Drive/P8T/checkpoint.tar'\n", + "INPUT_PLY = '/content/drive/My Drive/P8T/Tibet-2.ply'\n", + "OUTPUT_PLY = '/content/drive/My Drive/P8T/Tibet-2-segmented.ply'" + ], + "metadata": { + "id": "M_I_JFtdVRAU" + }, + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Load Pretrained Model" + ], + "metadata": { + "id": "n37BVqFQVV7D" + } + }, + { + "cell_type": "code", + "source": [ + "import torch\n", + "from torch_points3d.models.segmentation import RandLANet\n", + "\n", + "# Load model\n", + "checkpoint = torch.load(CHECKPOINT_PATH, map_location='cpu')\n", + "model = RandLANet()\n", + "model.load_state_dict(checkpoint['model_state_dict'])\n", + "model.eval()" + ], + "metadata": { + "id": "m9FnRcZ6VVd9", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 384 + }, + "outputId": "87bda6ac-7761-41c3-fe06-920cbbde5a60" + }, + "execution_count": 4, + "outputs": [ + { + "output_type": "error", + "ename": "ModuleNotFoundError", + "evalue": "No module named 'torch_points3d'", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mtorch_points3d\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodels\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msegmentation\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mRandLANet\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;31m# Load model\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mcheckpoint\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mCHECKPOINT_PATH\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmap_location\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'cpu'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'torch_points3d'", + "", + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0;32m\nNOTE: If your import is failing due to a missing package, you can\nmanually install dependencies using either !pip or !apt.\n\nTo view examples of installing some common dependencies, click the\n\"Open Examples\" button below.\n\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n" + ], + "errorDetails": { + "actions": [ + { + "action": "open_url", + "actionText": "Open Examples", + "url": "/notebooks/snippets/importing_libraries.ipynb" + } + ] + } + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "\n", + "## 3. Run Inference\n", + "\n", + "### Load Point Cloud\n" + ], + "metadata": { + "id": "mYTWrGG5ViAl" + } + }, + { + "cell_type": "code", + "source": [ + "import open3d as o3d\n", + "import numpy as np\n", + "\n", + "# Load PLY file\n", + "pcd = o3d.io.read_point_cloud(INPUT_PLY)\n", + "points = np.asarray(pcd.points)" + ], + "metadata": { + "id": "hpgpIsnGVhB3" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Predict Classes\n", + "\n" + ], + "metadata": { + "id": "U0NvzDOLVv6G" + } + }, + { + "cell_type": "code", + "source": [ + "with torch.no_grad():\n", + " inputs = torch.tensor(points, dtype=torch.float32).unsqueeze(0)\n", + " preds = model(inputs).argmax(dim=2).squeeze().numpy()" + ], + "metadata": { + "id": "wto82b90VvM1" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Assign Colors Based on Classes\n", + "\n", + "\n" + ], + "metadata": { + "id": "mh8LRz71VzCG" + } + }, + { + "cell_type": "code", + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "NUM_CLASSES = preds.max() + 1\n", + "COLORS = plt.get_cmap(\"tab10\")(np.linspace(0, 1, NUM_CLASSES))[:, :3] # RGB colors\n", + "colors = COLORS[preds]\n", + "\n", + "pcd.colors = o3d.utility.Vector3dVector(colors)" + ], + "metadata": { + "id": "xnUV9R6OVz75" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Save Segmented Point Cloud" + ], + "metadata": { + "id": "Goj13eLtV4ng" + } + }, + { + "cell_type": "code", + "source": [ + "o3d.io.write_point_cloud(OUTPUT_PLY, pcd)\n", + "print(f\"Segmented point cloud saved at: {OUTPUT_PLY}\")" + ], + "metadata": { + "id": "wATW_FANV5Wq" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## 4. Visualization in CloudCompare\n", + "\n", + "- Download `Tibet-2-segmented.ply` from Google Drive.\n", + "- Open it in CloudCompare to view the segmented results." + ], + "metadata": { + "id": "8oISnb4nWK2u" + } + } + ] +} \ No newline at end of file diff --git a/ToDoList.py b/ToDoList.py new file mode 100644 index 00000000..b44ab23a --- /dev/null +++ b/ToDoList.py @@ -0,0 +1,88 @@ +import os + +# Function to load tasks from a file +def load_tasks(filename="tasks.txt"): + if os.path.exists(filename): + with open(filename, 'r') as file: + tasks = [line.strip() for line in file] + else: + tasks = [] + return tasks + +# Function to save tasks to a file +def save_tasks(tasks, filename="tasks.txt"): + with open(filename, 'w') as file: + for task in tasks: + file.write(task + '\n') + +# Function to add a new task +def add_task(tasks): + task = input("Enter a new task: ") + tasks.append(task) + print(f"Task '{task}' added.") + +# Function to view all tasks +def view_tasks(tasks): + if tasks: + print("\nYour Tasks:") + for i, task in enumerate(tasks, 1): + print(f"{i}. {task}") + else: + print("\nNo tasks to show.") + +# Function to remove a task +def remove_task(tasks): + view_tasks(tasks) + try: + task_num = int(input("Enter the number of the task to remove: ")) - 1 + if 0 <= task_num < len(tasks): + removed_task = tasks.pop(task_num) + print(f"Task '{removed_task}' removed.") + else: + print("Invalid task number.") + except ValueError: + print("Please enter a valid number.") + +# Function to mark a task as complete +def mark_task_complete(tasks): + view_tasks(tasks) + try: + task_num = int(input("Enter the number of the task to mark as complete: ")) - 1 + if 0 <= task_num < len(tasks): + tasks[task_num] = tasks[task_num] + " (Completed)" + print(f"Task '{tasks[task_num]}' marked as complete.") + else: + print("Invalid task number.") + except ValueError: + print("Please enter a valid number.") + +# Main function to run the application +def main(): + tasks = load_tasks() + while True: + print("\nTo-Do List Application") + print("1. Add Task") + print("2. View Tasks") + print("3. Remove Task") + print("4. Mark Task as Complete") + print("5. Save and Exit") + + choice = input("Choose an option: ") + if choice == '1': + add_task(tasks) + elif choice == '2': + view_tasks(tasks) + elif choice == '3': + remove_task(tasks) + elif choice == '4': + mark_task_complete(tasks) + elif choice == '5': + save_tasks(tasks) + print("Tasks saved. Exiting...") + break + else: + print("Invalid choice. Please try again.") + +# Entry point of the application +if __name__ == "__main__": + main() diff --git a/tasks.txt b/tasks.txt new file mode 100644 index 00000000..e69de29b