Configuración del Proyecto SVDFormer en Windows 10 con CUDA 12.6

Entorno de Configuración

1. Instalación de CUDA Toolkit 12.6 (si no está instalado)

La versión del CUDA Toolkit puede diferir de la versión CUDA, ya que CUDA es compatible hacia atrás. Por ejemplo, CUDA VERSION: 13.0, CUDA Toolkit VERSION: 12.9)

1.1

Sitio de descarga, con las siguientes consideraciones:

1.2

Pasos de instalación:

2. Instalación de Miniconda

2.1

Sitio de descarga, descargar la versión "Miniconda3-py310_23.11.0-2-Windows-x86_64.exe" como se muestra en la imagen

2.2

Durante la instalación, asegúrese de marcar las siguientes opciones (especialmente la opción PATH que debe estar marcada)

3. Instalación de Visual Studio Build Tools (compilador ligero en comparación con VS completo)

Compilador, necesario en Windows para compilar las extensiones CUDA posteriores: PointNet++, Chamfer Distance y extensiones de pérdida EMD

3.1

Sitio de descarga, se descargará automáticamente la versión 2022

3.2

Durante la instalación, debe marcar el entorno de compilación C++

3.3

Resultado de la instalación completada:

3.4

Nota: Para compatibilidad con máquinas personales (CUDA 11.4), debe instalar cualquier versión entre VS 2017 y VS 2019, como se muestra a continuación (evite instalar múltiples versiones)

4. Instalación de VSCode

4.1

Sitio de descarga, haga clic en "Download for Windows"

5. Instalación de PyTorch

5.1

Sitio de descarga, seleccione las opciones según su configuración (especialmente que coincidan con la versión de CUDA), luego ejecute el siguiente comando (este paso tomará algún tiempo, tenga paciencia)

5.2

Verificación de instalación: Ejecute los siguientes comandos en su entorno Python para confirmar que PyTorch puede identificar correctamente su CUDA:


import torch
print(torch.__version__)
print(torch.cuda.is_available()) # Debería mostrar True
print(torch.version.cuda)         # Debería mostrar 12.1 o 12.6 (el número de versión puede variar ligeramente, pero siempre que no sea None y is_available() funcione está bien)

6. Isntalación de dependencias del proyecto

6.1

Descargue el código del proyecto desde el sitio de descarga

6.2

Instale las bibliotecas de dependencias básicas de Python (según el README.md del sitio web oficial), ejecute pip install easydict opencv-python transforms3d h5py timm open3d tensorboardX Ninja tensorboard (adicione Ninja y tensorboard, el primero es necesario para "ejecutar el proyecto", el segundo para "visualización del proyecto")

6.3

Compile e instale la extensión PointNet++ (extensión CUDA, en Windows se necesita Visual Studio para compilar, por lo que primero debe instalar Visual Studio Build Tools del paso 3)

6.3.1 Cambie al directorio de la extensión PointNet++: cd pointnet2\_ops\_lib

6.3.2 Ejecute python setup.py install (debe modificar os.environ\["TORCH\_CUDA\_ARCH\_LIST"\] = "3.7+PTX;5.0;6.0;6.1;6.2;7.0;7.5" en setup.py a os.environ\["TORCH\_CUDA\_ARCH\_LIST"\] = "5.0;6.0;6.1;6.2;7.0;7.5;8.0")

6.4

Compile e instale las extensiones de distancia Chamfer y pérdida EMD (extensión CUDA, en Windows se necesita Visual Studio para compilar, por lo que primero debe instalar Visual Studio Build Tools del paso 3)

Ejecute el siguiente código (consulte "solución de errores - error de concatenación de rutas" si encuentra problemas):


cd metricas/CD/chamfer3D/
python setup.py install
cd ../../EMD/
python setup.py install
cd ../../

Preparación de Datos

1. Descarga de datos (según README.md)

1.1

Sitio de descarga, consulte el proyecto PointTr

1.2

Descargue los conjuntos de datos PCN y ShapeNet55/34 respectivamente (nota: el conjunto de datos PCN descargado se llama ShapeNetCompletion, después de descargarlo, renómbrelo a PCN para que coincida con la nomenclatura en el código del proyecto)

2. Exploración de datos PCN

2.1

Primero, observe la estructura de almacenamiento de datos, la estructura del directorio es la siguiente (val, test tienen la misma estructura que train):


Datos/PCN/
├── train/
│   ├── complete/
│   │   └── %s/  # Directorio de categoría (8 categorías en total)
│   │        └── %s.pcd  # Archivo de modelo (un objeto de esta categoría)
│   └── partial/
│       └── %s/  # Directorio de categoría
│           └── %s/  # Directorio de ID de modelo
│               └── %02d.pcd  # Diferentes nubes parciales de este modelo
├── val/
│   ├── complete/
│   └── partial/
└── test/
    ├── complete/
    └── partial/

2.2

Verifique los datos (usando "C:\\Users\\Usuario\\Descargas\\Datos\\PCN\\train\\complete\\02691156\\1a04e3eab45ca15dd86060f189eb133.pcd" como ejemplo)

2.2.1 Visualice el archivo de modelo en complete, como se muestra en la siguiente imagen (puede ver que es un avión)

2.2.2 Visualice diferentes nubes parciales correspondientes a este archivo de modelo en partial, como se muestra en la siguiente imagen

3. Exploración de datos ShapeNet55/34

Modificación de Rutas Clave

1. Ruta de datos

1.1

PCN ("C:\\Usuario\\Proyecto\\SVDFormer_PuntoMarino-main\\config_pcn.py"):


__C.CONJUNTOS_DATOS.SHAPENET.PUNTOS_PARCIALES_RUTA        = 'C:/Usuario/Datos/PCN/%s/partial/%s/%s/%02d.pcd'
__C.CONJUNTOS_DATOS.SHAPENET.PUNTOS_COMPLETOS_RUTA       = 'C:/Usuario/Datos/PCN/%s/complete/%s/%s.pcd'

1.2

ShapeNet55/34 ("C:\\Usuario\\Proyecto\\SVDFormer_PuntoMarino-main\\config_55.py"):


# ShapeNet55
__C.CONJUNTOS_DATOS.SHAPENET55.PUNTOS_COMPLETOS_RUTA       = 'C:/Usuario/Datos/shapenet_pc/%s'
# ShapeNet34

2. Ruta de checkpoints

2.1

PCN ("C:\\Usuario\\Proyecto\\SVDFormer_PuntoMarino-main\\config_pcn.py"):


__C.CONST.PESOS                                = 'C:/Usuario/Proyecto/SVDFormer_PuntoMarino-main/modelos/Pesos_SVDFormer/PCN.pth'

2.2

ShapeNet55/34 ("C:\\Usuario\\Proyecto\\SVDFormer_PuntoMarino-main\\config_55.py"):

Ejecución del Proyecto

1. Ejecute los siguientes comandos en el directorio raíz del proyecto (según README.md)


# Prueba (con checkpoints)
python principal_*.py --prueba (pcn/55)
# Entrenamiento
python principal_*.py (pcn/55)

(consulte "solución de errores - error de concatenación de rutas" si encuentra problemas)

Visualización del Proyecto

1. Ejecute el siguiente comando en el directorio raíz del proyecto: tensorboard --logdir=SVDFormer\_PCN/logs/

2. Siga las indicaciones para abrir la URL (generalmente: http://localhost:6006/) e ingrese a la interfaz de TensorBoard para ver

2.1 En la interfaz Scalars, puede ver: curvas de pérdida (como train_loss, val_loss), métricas (como CD, EMD)

Resumen de Errores Comunes

1. Problemas de compatibilidad (la plataforma original era Linux, ahora es Windows)

1.1 Error de conactenación de rutas

1.1.1 "C:\\Usuario\\Proyecto\\SVDFormer_PuntoMarino-main\\metricas\\CD\\chamfer3D\\dist_chamfer_3D.py"


# Código antes de la modificación
chamfer_3D = cargar(nombre="chamfer_3D",
        fuentes=[
            "/".join(os.path.abspath(__file__).split('/')[:-1] + ["chamfer_cuda.cpp"]),
            "/".join(os.path.abspath(__file__).split('/')[:-1] + ["chamfer3D.cu"]),
            ])
# Código después de la modificación
directorio_actual = os.path.dirname(os.path.abspath(__file__))
ruta_chamfer_cpp = os.path.join(directorio_actual, "chamfer_cuda.cpp")
ruta_chamfer_cu = os.path.join(directorio_actual, "chamfer3D.cu")
chamfer_3D = cargar(
    nombre="chamfer_3D",
    fuentes=[ruta_chamfer_cpp, ruta_chamfer_cu],  # Usar rutas absolutas correctas
    verbose=True  # Opcional: imprimir detalles de compilación (útil para solucionar errores)
)

1.1.2 "C:\\Usuario\\Proyecto\\SVDFormer_PuntoMarino-main\\metricas\\EMD\\modulo_emd.py"


# Código antes de la modificación
emd = cargar(nombre="emd",
        fuentes=[
            "/".join(os.path.abspath(__file__).split('/')[:-1] + ["emd.cpp"]),
            "/".join(os.path.abspath(__file__).split('/')[:-1] + ["emd_cuda.cu"]),
            ])
# Código después de la modificación
directorio_actual = os.path.dirname(os.path.abspath(__file__))
ruta_emd_cpp = os.path.join(directorio_actual, "emd.cpp")
ruta_emd_cu = os.path.join(directorio_actual, "emd_cuda.cu")
emd = cargar(
    nombre="emd",
    fuentes=[ruta_emd_cpp, ruta_emd_cu],  # Usar rutas absolutas correctas
    verbose=True  # Opcional: imprimir detalles de compilación (útil para solucionar errores)
)

1.2 Variable de entorno no agregada a la ruta del archivo cl.exe (debe agregarla manualmente, reinicie VSCode después de agregarla)

1.2.1 Verificación de instalación (puede omitirse)

1.2.2 Obtener la ruta del archivo cl.exe

1.2.3 Agregar la ruta a las variables de entorno

<Haga clic derecho en "Este PC" ➡ Haga clic en "Propiedades" ➡ Haga clic en "Configuración avanzada del sistema" ➡ Haga clic en "Variables de entorno" ➡ Haga doble clic en "Path" en "Variables del sistema" ➡ Agregue la ruta del archivo cl.exe obtenida>

1.3

Error: Marca de tiempo (con dos puntos) como nombre de directorio

<Aparece en "C:\\Usuario\\Proyecto\\SVDFormer_PuntoMarino-main\\core\\entrenar_pcn.py">


# Código antes de la modificación, output_dir es el directorio de almacenamiento de checkpoints
output_dir = os.path.join(cfg.DIR.RUTA_SALIDA, '%s', datetime.now().isoformat())
# Código después de la modificación
marca_tiempo = datetime.now().strftime("%Y_%m_%d_%H_%M_%S")
output_dir = os.path.join(cfg.DIR.RUTA_SALIDA, '%s', marca_tiempo)

2. Módulos de importación

from torchvision.models.utils import load_state_dict_from_url (❌)

⬇👇

from torch.hub import load_state_dict_from_url (✔)

Notas Adicionales

1. Fallo inexplicable de torch.utils.cpp_extension.load

1.1

Archivos involucrados:

1.1.1 "C:\\Usuario\\Proyecto\\SVDFormer_PuntoMarino-main\\metricas\\CD\\chamfer3D\\dist_chamfer_3D.py"


# Código modificado (solo modifica el código antes de las dos clases personalizadas)
import os
import torch
from torch import nn
from torch.autograd import Function
from torch.utils.cpp_extension import load

# Establecer variables de entorno necesarias
directorio_actual = os.path.dirname(os.path.abspath(__file__))

# Especificar ruta de Visual Studio - modifique según su instalación
os.environ["PATH"] = r"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.44.35207\bin\Hostx64\x64;" + os.environ["PATH"]
os.environ["CUDA_PATH"] = r"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.6"

# Obtener capacidad de cómputo de GPU
if torch.cuda.is_available():
    capacidad_computo = torch.cuda.get_device_capability(0)
    bandera_arquitectura = f"sm_{capacidad_computo[0]}{capacidad_computo[1]}"
else:
    bandera_arquitectura = "sm_86"  # Valor predeterminado

try:
    # Intentar cargar módulo precompilado
    import chamfer_3D
    print("Módulo chamfer_3D precompilado cargado")
except ImportError:
    print("Compilando Chamfer 3D")
    
    # Compilar extensión
    chamfer_3D = load(
        nombre="chamfer_3D",
        fuentes=[
            os.path.join(directorio_actual, "chamfer_cuda.cpp"),
            os.path.join(directorio_actual, "chamfer3D.cu"),
        ],
        verbose=True,
        extra_cflags=["/O2", "/MD", "/std:c++17", "/D_USE_MATH_DEFINES"],
        extra_cuda_cflags=[
            "-Xcompiler", "/MD",
            "-gencode", f"arch=compute_{capacidad_computo[0]}{capacidad_computo[1]},code={bandera_arquitectura}",
            "--use_fast_math",
            "-D_GLIBCXX_USE_CXX11_ABI=1"
        ],
        is_python_module=False,
        with_cuda=True
    )
    print("Distancia de Chamfer 3D CUDA JIT cargada")

1.1.2 "C:\\Usuario\\Proeycto\\SVDFormer_PuntoMarino-main\\metricas\\EMD\\modulo_emd.py"


# Código modificado (solo modifica el código antes de las dos clases personalizadas)
import os
import time
import torch
import numpy as np
from torch import nn
from torch.autograd import Function
from torch.utils.cpp_extension import load

# Establecer variables de entorno necesarias
directorio_actual = os.path.dirname(os.path.abspath(__file__))

# Especificar ruta de Visual Studio - modifique según su instalación
os.environ["PATH"] = r"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.44.35207\bin\Hostx64\x64;" + os.environ["PATH"]
os.environ["CUDA_PATH"] = r"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.6"

# Obtener capacidad de cómputo de GPU
if torch.cuda.is_available():
    capacidad_computo = torch.cuda.get_device_capability(0)
    bandera_arquitectura = f"sm_{capacidad_computo[0]}{capacidad_computo[1]}"
else:
    bandera_arquitectura = "sm_86"  # Valor predeterminado

ruta_emd_cpp = os.path.join(directorio_actual, "emd.cpp")
ruta_emd_cu = os.path.join(directorio_actual, "emd_cuda.cu")

try:
    # Intentar cargar módulo precompilado
    import emd
    print("Módulo emd precompilado cargado")
except ImportError:
    print("Compilando módulo EMD")
    
    # Compilar extensión
    emd = load(
        nombre="emd",
        fuentes=[ruta_emd_cpp, ruta_emd_cu],
        verbose=True,
        extra_cflags=["/O2", "/MD", "/std:c++17", "/D_USE_MATH_DEFINES"],
        extra_cuda_cflags=[
            "-Xcompiler", "/MD",
            "-gencode", f"arch=compute_{capacidad_computo[0]}{capacidad_computo[1]},code={bandera_arquitectura}",
            "--use_fast_math",
            "-D_GLIBCXX_USE_CXX11_ABI=1"
        ],
        is_python_module=False,
        with_cuda=True
    )
    print("Módulo EMD 3D CUDA JIT cargado")

Puntos Omisos

1. Procesamiento de normalización de nube de puntos (data_transform) [✔]

2. Simulación de imágenes de profundía de diferentes perspectivas de cámara (partial_depth) [✔]

Etiquetas: configuración CUDA SVDFormer Windows PyTorch procesamiento de nubes de puntos

Publicado el 7-14 16:31