[windows]pointnet2安装

本文记录了解决在使用PointNet2库时遇到的编译问题,涉及路径设置、编译器警告、环境变量调整及版本兼容性,最终通过更新CUDA和调整sys.path解决模块导入错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pointnet2的代码来自:

https://github.com/halfsummer11/CAPTRA#dataset-folder-structure

https://github.com/sshaoshuai/Pointnet2.PyTorch

https://github.com/yanx27/Pointnet_Pointnet2_pytorch

在pointnet_lib目录下执行 python setup.py install 后

安装pointnet_lib报错:

D:\Anaconda\envs\pcl\lib\site-packages\torch\utils\cpp_extension.py:316: UserWarning: Error checking compiler version for cl: [WinError 2] 系统找不到指定的文件。

warnings.warn(f'Error checking compiler version for {compiler}: {error}')

找到cl.exe的路径添加到环境变量path中,去VS安装目录下找exe

D:\VS2019\VC\Tools\MSVC\14.28.29333\bin\Hostx64\x64

重启cmd使环境变量生效

D:\Anaconda\lib\site-packages\torch\utils\cpp_extension.py:209: UserWarning: Error checking compiler version for cl: 'utf-8' codec can't decode byte 0xd3 in position 0: invalid continuation byte

(未测试)安装英文语言包的VS可以解决 https://github.com/harskish/ganspace/issues/31

Pytorch 编译cpp、cuda扩展遇到的问题_xiongxyowo的博客-CSDN博客

找到报错的py文件 cpp_extension.py

找到代码:

compiler_info.decode()

改为

compiler_info.decode('gbk')

但是不想改文件

Pytorch编译maskRCNN问题:cpp_extension.py:189: UserWarning: Error checking compiler version for cl..._高精度计算机视觉的博客-CSDN博客

VS2019可以直接call,说如果输出没有中文

D:\VS2019\VC\Auxiliary\Build>vcvars64.bat

**********************************************************************

** Visual Studio 2019 Developer Command Prompt v16.8.2

** Copyright (c) 2020 Microsoft Corporation

**********************************************************************

[vcvarsall.bat] Environment initialized for: 'x64'

将version.py代码从match = self._regex.search(version)更改match = self._regex.search(str(version))

//…………

经历了安装cuda toolkit版本对应的pytorch…

//…………

UserWarning: It seems that the VC environment is activated but DISTUTILS_USE_SDK is not set.This may lead to multiple activations of the VC env.Please set `DISTUTILS_USE_SDK=1` and try again.

在命令行中执行:set DISTUTILS_USE_SDK=1

File "D:\Anaconda\envs\pcl\lib\site-packages\torch\utils\cpp_extension.py", line 545, in win_cuda_flags

    cflags + _get_cuda_arch_flags(cflags))

  File "D:\Anaconda\envs\pcl\lib\site-packages\torch\utils\cpp_extension.py", line 1561, in _get_cuda_arch_flags

    arch_list[-1] += '+PTX'

IndexError: list index out of range

参考:https://github.com/pytorch/extension-cpp/issues/71

在Python中输出torch.cuda.is_available() 是False,当输出为True时就能够解决这个问题

看了一下我的pytorch安装的是cpu版本的

使用conda search查看包的详细信息

cpu版本的所以会一直返回False

卸载

nvcc -V查看到CUDA是11.2,但是官网没有找到11.2对应的安装命令

https://pytorch.org/get-started/locally/,勇敢安装11.3

至此可以成功创建库

numpy.core.multiarray failed to import

似乎是安装pointnet_lib时安装了其他版本的numpy?还是其他原因?

但是我uninstall之后重新install又可以了,而且安装的还是这个版本

问题解决了就行….

pointnet_utils.py在尝试调用库pointnet_lib时报错

Traceback (most recent call last):

  File "<frozen importlib._bootstrap>", line 971, in _find_and_load

  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked

  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked

  File "<frozen importlib._bootstrap_external>", line 678, in exec_module

  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed

  File "H:\PCL\2DKeypoint\model\pointnet_utils.py", line 10, in <module>

    from pointnet_lib import pointnet2_utils as futils

ModuleNotFoundError: No module named 'pointnet_lib'

打印sys.path发现是project目录,也就是说,python尝试在project目录下搜索pointnet_lib

因此在代码中,将model目录到sys.path中

pointnet_utils.py中打印__file__显示:

'H:\\PCL\\2DKeypoint\\model\\pointnet_utils.py'

可以使用os.path.dirname(__file__)来获得当前文件的上一层目录

添加

import sys

import os

sys.path.append(os.path.dirname(__file__))

 或者

pointnet_utils.py同级目录下创建一个__init__.py文件

import os

import sys

from os.path import join as pjoin

BASEPATH=os.path.dirname(__file__)

sys.path.insert(0,BASEPATH)

sys.path.insert(0,pjoin(BASEPATH,'..'))

sys.path.insert(0,pjoin(BASEPATH,'..','..'))

<think>好的,我现在需要帮助用户解决关于PointNet++编译的问题。用户提到了他们在编译过程中遇到了一些问题,并希望找到相关的教程或解决方法。首先,我应该先回顾用户提供的引用内容,看看是否有相关的信息可以提取。 根据引用[1],用户在编译过程中遇到了关于gcc版本和ABI设置的问题。他们尝试了不同的-D_GLIBCXX_USE_CXX11_ABI参数,发现设置为0有效,但网上教程建议高版本gcc使用1。这说明ABI兼容性可能是一个常见问题,需要提醒用户根据自己环境尝试不同的设置。另外,用户提到修改CUDA头文件的路径,引用[3]中提到了通过locate找到cuda_runtime.h的位置,并修改include路径,这可能涉及到CUDA环境配置的问题。 引用[2]指出PointNet++在Ubuntu下需要编译动态文件.so,但在Windows下迁移困难,可能涉及到系统兼容性和TensorFlow版本的问题。用户使用的TensorFlow版本可能需要特别注意,比如1.13.1及以下可以运行,而1.14.0失败,需要检查用户的环境版本。 接下来,我需要整理这些信息,分步骤给出解决方案。首先检查系统环境,确认Ubuntu版本、CUDA版本、TensorFlow版本是否符合要求。然后处理ABI设置的问题,建议用户尝试不同的参数。接着处理CUDA头文件路径错误,指导如何正确包含路径。同时,可能涉及TensorFlow框架版本的问题,需要确保版本兼容。最后,常见的编译错误如符号未定义或链接错误,可能需要重新编译TensorFlow或检查符号名称。 另外,用户可能需要生成相关问题,比如环境配置要求、ABI参数选择、CUDA路径错误处理等,这些可以作为相关问题列出。需要确保回答结构清晰,步骤详细,同时引用提供的参考资料来支持建议。例如,引用[1]和[3]中的具体解决方法,以及引用[2]中关于TensorFlow版本的注意事项。 最后,确保使用中文回答,行内公式用$...$,独立公式用$$...$$,但用户的问题主要涉及编译问题,可能不需要数学公式,但需要遵循格式要求。检查是否有需要强调的命令行参数或代码片段,正确使用代码块格式,如示例中的Python代码。同时,引用标识要自然添加在相关段落末尾,帮助用户追踪信息来源。</think>### PointNet++编译问题解决方案 #### 一、环境配置要求 1. **操作系统**:优先使用**Ubuntu 18.04/20.04**(官方推荐环境),避免Windows迁移问题[^2] 2. **CUDA版本**:需与TensorFlow版本匹配(如CUDA 10.0对应TensorFlow 1.13.1) 3. **TensorFlow版本**:需≤1.13.1,高版本(如1.14.0)会导致`libtensorflow_framework.so`链接失败[^2] 4. **GCC版本**:建议使用**GCC 5~7**,避免ABI兼容性问题 #### 二、编译步骤与常见问题 1. **ABI兼容性设置** - 在`.sh`编译脚本中,修改`-D_GLIBCXX_USE_CXX11_ABI`参数: ```bash # 尝试以下三种情况之一 -D_GLIBCXX_USE_CXX11_ABI=0 # 多数情况适用 -D_GLIBCXX_USE_CXX11_ABI=1 # 高版本GCC尝试 # 注释掉该参数 # 极端情况 ``` - 若训练时出现`undefined symbol`错误,需重新编译并切换ABI参数[^1] 2. **CUDA路径错误** ```cpp // 原代码可能报错找不到cuda_runtime.h #include <cuda_runtime.h> // 修改为绝对路径(通过locate命令查询实际路径) #include </usr/local/cuda-10.0/include/cuda_runtime.h> ``` 使用`locate cuda_runtime.h`获取准确路径后修改对应`.cpp`文件[^3] 3. **TensorFlow框架问题** - 确保`libtensorflow_framework.so`存在且版本匹配 - 若使用TensorFlow源码编译,需执行: ```bash # 下载依赖(引用自官方脚本) tensorflow/contrib/makefile/download_dependencies.sh ``` #### 三、验证编译结果 1. 执行`train.py`时若报错`CheckOpMessageBuilder`相关错误,需检查: - TensorFlow与CUDA版本匹配性 - 是否漏编译自定义操作层(如`grouping`模块) 2. 典型成功标志: ```bash Generating __init__.py files for the packages... Running setup.py for pointnet2_ops... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值