Cree y ejecute la versión Tensorflow del modelo pointNet++ desde cero y resuelva problemas comunes
- 1. Instalación e inicialización del sistema Ubuntu18
- 2. Descarga del código fuente y del conjunto de datos
- 3. El entorno necesario para construir pointNet++ (Anaconda, Cuda, cuDNN, Pytorch, Python)
-
- 1. Descarga e instalación del controlador de la tarjeta gráfica
- 2. Instalación y configuración de Anaconda y Cuda
- 3.cudnn instalación y configuración
- Si ocurre el siguiente error durante la instalación de cudnn: libcudnn7-doc_7.4.2.24-1+cuda10.0_amd64.deb no es un archivo de paquete en formato Debian
- 4. Instalación y configuración del entorno python y la biblioteca dependiente de tensorflow
- Si se informa el siguiente error al instalar la biblioteca python3-pip: Los siguientes paquetes tienen dependencias no satisfechas
- Si ocurre el siguiente error al probar tensorflow: TypeError: los descriptores no se pueden crear directamente.
- 5. Instalación y configuración de gcc5 y g++5
- 4. Ejecute pointNet++
-
- 1. Modificar el archivo de script de tf
- 2. Compilar y generar un archivo
- Si no se realiza este paso, puede aparecer el siguiente error durante la compilación: /usr/bin/ld: no se puede encontrar -ltensorflow_framework collect2: error: ld devolvió 1 estado de salida
- Si no se ejecutan los comandos chmod y cd aparecerá el siguiente error: gcc: error: tf_sampling_g.cu: No such file or directory
- 3. Modificar el código fuente de pointNet++
- 4. Ejecute el modelo de entrenamiento
- 5. Solución de problemas comunes en funcionamiento
-
- 1.报错:{NotFoundError}libcudart.so.10.0: no se puede abrir el archivo de objeto compartido: no existe tal archivo o directorio
- 2. Siguiente:{NotFoundError}/home/sdg/code/pointnet2-master/tf.ops/sampling/tf.sampling_so.s0:( símbolo indefinido: _ZM10temsorflow120pDefBuilder4AttrESs
- 3. Siguiente: FileNotFoundError: [Errno 2] No existe tal archivo o directorio: '/home/sdg/code/pointnet2-master/data/modelnet40_normal_resampled/shape_names.txt'
- 4. Nota:{AttributeError}módulo 'proveedor' no tiene atributo 'rotate_point_cloud'
- 5. Nota: no se pudieron asignar 64,00 M (67108864 bytes) del dispositivo: CUDA_ERROR_OUT_OF_MEMORY: memoria insuficiente
本次采用的是Tensorflow版的pointNet++模型
服务器环境是Ubuntu18/python3.7/cuda10.0/cudnn7.4/tensorflow-gpu1.4/g++5
Referencia: Tutorial del modelo pointNet++ de reproducción basada en cero y código pointnet2 de pointnet++ que ejecuta el tutorial de nivel de niñera
1. Instalación e inicialización del sistema Ubuntu18
Referencia: instalación e inicialización del sistema Ubuntu18 (servicio SSH, configuración de red)
Si el sistema Ubuntu16 está instalado, puede ejecutar el siguiente comando para actualizar a Ubuntu18:
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade
sudo apt autoremove
sudo do-release-upgrade
2. Descarga del código fuente y del conjunto de datos
1. código fuente pointNet++
Dirección de descarga: https://github.com/charlesq34/pointnet2
Copie el archivo pointnet2-master.zip descargado en el servidor y luego ejecuteunzip pointnet2-master.zip
2. Conjunto de datos ModelNet40 (XYZ y normal de malla, 10k puntos)
Dirección de descarga: modelnet40_normal_resampled.zip
Copie el archivo del conjunto de datos descargado en el directorio de datos del programa pointnet2-master y ejecute el unzip modelnet40_normal_resampled.zip
comando para descomprimir el conjunto de datos
3. Conjunto de datos ModelNet40 en formato h5 (XYZ y normal de malla, 2048 puntos)
Descargue la dirección modelnet40_ply_hdf5_2048.zip
Copie el archivo del conjunto de datos descargado en el directorio de datos en el programa pointnet2-master y ejecute unzip modelnet40_ply_hdf5_2048.zip
el comando para descomprimir el conjunto de datos
3. El entorno necesario para construir pointNet++ (Anaconda, Cuda, cuDNN, Pytorch, Python)
Combinado con el hardware de su propia tarjeta gráfica, haga coincidir las versiones del controlador de la tarjeta gráfica, cuda, cudnn y tensorflow de acuerdo con la siguiente figura.
El entorno seleccionado esta vez es /cuda10.0/cudnn7.4/tensorflow-gpu1.4
1. Descarga e instalación del controlador de la tarjeta gráfica
Puede consultar: Varias formas de instalar el controlador de la tarjeta gráfica en una máquina física Ubuntu
(1) Ver el controlador adecuado para esta tarjeta gráfica:ubuntu-drivers devices
(2) Agregue la fuente del controlador: sudo add-apt-repository ppa:graphics-drivers/ppa
(3) Actualice la fuente del software: sudo apt-get update
(4) Instale el controlador de la tarjeta gráfica recomendado por el sistema: sudo apt-get install nvidia-driver-470
(5) Instale la herramienta nvidia-cuda-toolkit: sudo apt-get install nvidia-cuda-toolkit
(6) Pruebe si el controlador de la tarjeta gráfica se instala correctamente:nvidia-smi
2. Instalación y configuración de Anaconda y Cuda
La configuración de instalación de Anaconda y Cuda puede referirse a: Ubuntu construye el entorno Pytorch (Anaconda, Cuda, cuDNN, Pytorch, Python, Pycharm, Jupyter) , preste atención a la versión de Cuda, yo uso cuda10.0
3.cudnn instalación y configuración
Consulte el tutorial del modelo pointNet++ de reproducción de base cero
Si ocurre el siguiente error durante la instalación de cudnn: libcudnn7-doc_7.4.2.24-1+cuda10.0_amd64.deb no es un archivo de paquete en formato Debian
El motivo es que la fuente de instalación del tercer paquete está dañada, se recomienda instalar cudnn7.4 siguiendo los siguientes pasos:
(1) Primero cambie al directorio /usr/local y luego cree un directorio CuDNN
cd /usr/local
mkdir CuDNN
cd CuDNN
(2) Vaya a https://developer.nvidia.com/rdp/cudnn-archive para descargar los archivos necesarios
(3) Copie los archivos descargados en el directorio /usr/local/CuDNN/ y
ejecute el siguiente comando para instalar CUDNN7 .4.2, instalar aquí El orden debe ser el siguiente:
sudo dpkg -i libcudnn7_7.4.2.24-1+cuda10.0_amd64.deb
sudo dpkg -i libcudnn7-dev_7.4.2.24-1+cuda10.0_amd64.deb
sudo dpkg -i libcudnn7-doc_7.4.2.24-1+cuda10.0_amd64.deb
(4) Copie el archivo en la carpeta /usr/local/cuda/include y modifique los permisos:
sudo cp /usr/include/cudnn.h /usr/local/cuda/include
sudo chmod a+x /usr/local/cuda/include/cudnn.h
(5) Comando de prueba para verificar si la instalación es exitosa:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
4. Instalación y configuración del entorno python y la biblioteca dependiente de tensorflow
(1) Active el entorno virtual predeterminado (entorno base): source activate
(2) Cree un entorno virtual llamado torch basado en python3.7: conda create -n torch python=3.7
(3) Cambie al entorno virtual de torch creado: conda activate torch
(4) Instale la biblioteca python3-pip:sudo apt-get install python3-pip
Si se informa el siguiente error al instalar la biblioteca python3-pip: Los siguientes paquetes tienen dependencias no satisfechas
Puede usar la instalación de aptitude en lugar de apt-get, aptitude es más inteligente en el manejo de problemas de dependencia:
apt-get install aptitude
sudo aptitude install python3-pip
(5) Instale otras bibliotecas dependientes: pip install numpy scipy matplotlib pylint
(6) Instale tensorflow: pip install tensorflow-gpu==1.14.0
después de la instalación, realice python -c 'import tensorflow as tf; print(tf.__version__)'
una prueba para ver si se puede usar la GPU y aparecerá la información de la versión de tensorflow.
Nota: es normal tener advertencias en este paso. Obsesivo -el trastorno compulsivo puede seguir las indicaciones para poner el archivo de respuesta entre paréntesis El "1" se cambia a "(1,)", que es causado por el problema de la clase python, que puede ignorarse
Si ocurre el siguiente error al probar tensorflow: TypeError: los descriptores no se pueden crear directamente.
Primero ingrese pip uninstall protobuf
para desinstalar la versión existente
y luego ingrese para pip install protobuf==3.19.0
reinstalar la versión correspondiente
5. Instalación y configuración de gcc5 y g++5
(1) Instale gcc5 y g++5: sudo apt install gcc-5 g++-5
(2) Verifique la información de la versión de gcc y g++:
gcc -v
g++ -v
Verifique la versión y descubra que gcc y g ++ aún apuntan a gcc7 y g ++ 7, por lo que debe modificar manualmente el enlace suave
(3) Ingrese al directorio /usr/bin y haga una copia de seguridad del enlace antiguo:
cd /usr/bin
sudo mv gcc gcc_backup
sudo mv g++ g++_backup
(4) Crear un nuevo enlace blando
sudo ln -s gcc-5 gcc
sudo ln -s g++-5 g++
(5) Verifique la información de la versión de gcc y g ++ nuevamente y encontrará que ya es 5
gcc -v
g++ -v
4. Ejecute pointNet++
1. Modificar el archivo de script de tf
(1) Ingrese al directorio /pointnet2-master/tf_ops/ y modifique los siguientes archivos
vi tf_ops/sampling/tf_sampling_compile.sh
vi tf_ops/grouping/tf_grouping_compile.sh
vi tf_ops/3d_interpolation/tf_interpolate_compile.sh
(2) Tomando tf_sampling_compile.sh como ejemplo, el contenido original es
(3) El contenido modificado es el siguiente:
1. Esta vez uso tensorflow 1.14, comento el contenido de TF1.2 y publico el comentario de TF1.4 2.
La versión gcc5 utilizada esta vez, si gcc la versión es mayor que 4, entonces la opción -D_GLIBCXX_USE_CXX11_ABI = 0 no es necesaria en el script de compilación, elimínelo
3. Verifique la ruta de cuda y tensorflow instalado por usted mismo
- ruta cuda: reemplace /usr/local/cuda-${ VERSION } según la versión que instaló, la mía es /usr/local/cuda-10.0
- La ruta de tensorflow: ejecute
python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())'
el comando, la salida es la ruta de tensorflow, la mía es /opt/anaconda3/envs/torch/lib/python3.7/site-packages/tensorflow
Reemplace la ruta cuda y la ruta tensorflow en el script de la siguiente manera
contenido original | Contenido reemplazado |
---|---|
/usr/local/cuda-8.0 | /usr/local/cuda-10.0 |
/usr/local/lib/python2.7/dist-packages/tensorflow | /opt/anaconda3/envs/torch/lib/python3.7/site-packages/tensorflow |
(4) El contenido modificado es:
2. Compilar y generar un archivo
(1) Ejecute el siguiente comando para obtener el archivo libtensorflow_framework.so (modifique de acuerdo con su propio directorio de tensorflow)
cd /opt/anaconda3/envs/torch/lib/python3.7/site-packages/tensorflow/
cp libtensorflow_framework.so.1 libtensorflow_framework.so
Si no se realiza este paso, puede aparecer el siguiente error durante la compilación: /usr/bin/ld: no se puede encontrar -ltensorflow_framework collect2: error: ld devolvió 1 estado de salida
(2) Ejecute el siguiente comando para compilar y generar el archivo so (modifique según el directorio de su propio pointnet2-master)
cd /home/sdg/code/pointnet2-master/tf_ops/grouping/
chmod 777 tf_grouping_compile.sh
sh tf_grouping_compile.sh
cd /home/sdg/code/pointnet2-master/tf_ops/sampling/
chmod 777 tf_sampling_compile.sh
sh tf_sampling_compile.sh
cd /home/sdg/code/pointnet2-master/tf_ops/3d_interpolation/
chmod 777 tf_interpolate_compile.sh
sh tf_interpolate_compile.sh
Si no se ejecutan los comandos chmod y cd aparecerá el siguiente error: gcc: error: tf_sampling_g.cu: No such file or directory
(3) Una vez completada la compilación, se obtendrán los archivos .cu.o y .so correspondientes
3. Modificar el código fuente de pointNet++
Debido a la diferencia gramatical entre python2 y python3, debe reemplazar xrange en el código con range y agregar corchetes después de imprimir
4. Ejecute el modelo de entrenamiento
(1) Cambiar al entorno virtual correspondiente: conda activate torch
(2) Ejecutar el modelo de entrenamiento:python train.py
5. Solución de problemas comunes en funcionamiento
1.报错:{NotFoundError}libcudart.so.10.0: no se puede abrir el archivo de objeto compartido: no existe tal archivo o directorio
Motivo del error: hay un problema con las variables de entorno de anaconda y cuda
Solución: verifique los directorios de anaconda y cuda, y agregue las variables de entorno relevantes
2. Siguiente:{NotFoundError}/home/sdg/code/pointnet2-master/tf.ops/sampling/tf.sampling_so.s0:( símbolo indefinido: _ZM10temsorflow120pDefBuilder4AttrESs
Motivo del error: si la versión de gcc es mayor que 4, la opción -D_GLIBCXX_USE_CXX11_ABI = 0 no es necesaria en el script de compilación.
Solución: elimine -D_GLIBCXX_USE_CXX11_ABI = 0 en los 3 scripts de compilación anteriores
3. Siguiente: FileNotFoundError: [Errno 2] No existe tal archivo o directorio: '/home/sdg/code/pointnet2-master/data/modelnet40_normal_resampled/shape_names.txt'
Motivo del error: No se encontraron archivos relevantes
Solución: Cambie el nombre del archivo modelnet40_shape_names.txt en data/modelnet40_normal_resampled/ a shape_names.txt
4. Nota:{AttributeError}módulo 'proveedor' no tiene atributo 'rotate_point_cloud'
Causa del error: el nombre del archivo python es el mismo que el error causado por la biblioteca de terceros utilizada. Hay un archivo de proveedor.py en el código fuente, por lo que no es necesario instalar la biblioteca del proveedor.
Solución: desinstale la biblioteca del proveedor instalada (proveedor de desinstalación de pip), y la bandera roja del proveedor de importación no afectará la operación
5. Nota: no se pudieron asignar 64,00 M (67108864 bytes) del dispositivo: CUDA_ERROR_OUT_OF_MEMORY: memoria insuficiente
Motivo del error: memoria de tarjeta gráfica insuficiente
Solución: reemplace la tarjeta gráfica (memoria de video recomendada de 24G)