FlowNet3D 工程复现

FlowNet3D工程复现

1. 下载工程和数据

git clone https://github.com/vinits5/learning3d.git
// 数据地址: 226M,npz格式数据,kitti_rm_ground
https://drive.google.com/file/d/1XBsF35wKY0rmaL7x7grD_evvKCAccbKi/view

注意:npz数据存在3个key:gt、pos1、pos2,分别为真值flow、点云数据和点云数据。

2. 安装依赖(采用清华源)

pip install -r requirements.txt  -i https://pypi.tuna.tsinghua.edu.cn/simple

3. 运行测试程序

注意:将测试程序拷贝到新工程,本工程learning3d只当成一个库使用,例如将examples下面的测试文件单独拷贝到外面,或者形如下面的工作目录。

├── learning3d
├── learning3d_test
        ├── test_flownet.py

4. 问题记录

  • Q1:ModuleNotFoundError: No module named ‘learning3d’

参考:python 【No module named】找不到自己写的模块 3种情况及解决方法
原因分析及解决办法:未找到本工程自身的pkg,python默认从root路径(sys.path)中寻找,可以打印查看。包搜索顺序:当前脚本的同目录下->入口程序目录下->sys.path的目录下,需要添加工程的目录:

import sys
sys.path.append('/home/cui/workspace/deepLearning/')
print(sys.path)

  • Q2:No module named ‘sklearn.neighbors.kde’
    解决办法:将from sklearn.neighbors.kde import KernelDensity 中去掉kde,改为如下:
    from sklearn.neighbors import KernelDensity # ctrl+shift+f 全局搜索代码关键词

  • Q3:inconsistent use of tabs and spaces in indentation
    原因及解决办法:代码中出现空格和tab换乱情况,将File “/home/cui/workspace/deepLearning/learning3d/data_utils/dataloaders.py”, line 259,代码中source前面的空格删掉。

  • Q4:pycharm调试出现 frame not available
    参考:(全网率先解决)Pycharm在Debug的时候出现frames are not available;Variable:Connected
    原因及解决:因为程序中使用多线程,pycharm只支持主线程显示,故可以关掉其他线程。可以先把models/init.py中的其他模型先注释掉。

  • Q5:单步调试时,运行流程到ClassificationData RegistrationData,会莫名进行初始化
    原因:暂时不明,将其注释上。

  • Q6:name ‘pointutils’ is not defined
    参考:pointnet2_cuda not in the repository? #4
    原因及解决:import pointnet2_utils 失败,缺少pointnet2_cuda库,需要安装,通过setup.by脚本,执行python setup.py install。有可能执行上一步脚本报下面CUDA版本不匹配错,cudatoolkit工具没有安装

// 错误详情
RuntimeError:
The detected CUDA version (10.1) mismatches the version that was used to compile
PyTorch (11.3). Please make sure to use the same CUDA versions.
//安装cudatoolkit工具,例如:
conda install pytorch=1.11.0 torchvision=0.12.0 cudatoolkit=11.3.1 -f

  • Q7:import pointnet2_cuda 报错,undefined symbol: _ZN6caffe26detail37_typeMetaDataInstance_preallocated_14E
    猜测:可能有torch版本,和上一步的编译有关。

  • Q8:RuntimeError: expected scalar type Double but found Float
    原因及解决办法:tensor数据类型不正确,将数据类型转为float32,在dataloader里面添加
    pos1_ = np.copy(pos1)[sample_idx1, :].astype(np.float32)

  • Q9:服务器端python3.8+cuda11.3, match = self._regex.search(version)

// 修改环境内部的文件:version.py
vim /opt/conda/envs/learning3d/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/version.py
// 修改264行,
// 将match = self._regex.search(version)更改为match = self._regex.search(str(version))

  • Q10: pytorch 安装完,torch.cuda.is_available() false
// 重新安装pytorch,本地版本是cpu的
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch

  • Q11:fatal error: THC/THC.h: No such file or directory
    原因及解决:最新的版(1.11)本中将THC/THC.h文件删除了,pytorch降级1.10即可.
conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=11.3 -c pytorch -c conda-forge

  • Q12:subprocess.CalledProcessError: Command ‘[‘ninja’, ‘-v’]’ returned non-zero exit status 1.
    参考:
    1. subprocess.CalledProcessError: Command ‘[‘ninja‘, ‘-v‘]‘ returned non-zero exit status 1
    2. subprocess.CalledProcessError: Command ‘[‘ninja‘, ‘-v‘]‘ returned non-zero exit status 1
    原因及解决:未能正确安装ninja。安装后还是不行,将[‘ninja’,‘-v’]改成[‘ninja’,‘–v’] 或者[‘ninja’,‘–version’],会出现一个g++错误问题,缺少.o文件,将别人低版本编译好的拷贝到对应目录下。
pip install ninja 	#使用pip安装ninja(也可上github自行安装)
ninja --version 	#输出ninja版本,检查是否安装正确,结果为 1.10.2.git.kitware.jobserver-1

  • Q13: 使用CUDA11.3 + pytorch0.10.0 编译pointnet2_cuda 时,THCState_getCurrentStream’ was not declared in this scope
    参考:setup.py build_ext fail RuntimeError: Error compiling objects for extension #79
// 修改learning3d/utils/lib/src下面的文件
#define CHECK_CONTIGUOUS(x) AT_CHECK(x.is_contiguous(), #x, " must be contiguous ")
to
#define CHECK_CONTIGUOUS(x) AT_ASSERT(x.is_contiguous())
SA-SSD/mmdet/ops/pointnet2/src/interpolate.cpp
cudaStream_t stream = THCState_getCurrentStream(state);
to
cudaStream_t stream = at::cuda::getCurrentCUDAStream();
SA-SSD/mmdet/ops/iou3d/src/iou3d.cpp
#define CHECK_CUDA(x) AT_CHECK(x.type().is_cuda(), #x, " must be a CUDAtensor ")
#define CHECK_CONTIGUOUS(x) AT_CHECK(x.is_contiguous(), #x, " must be contiguous ")
to
#define CHECK_CUDA(x) AT_ASSERT(x.type().is_cuda())
#define CHECK_CONTIGUOUS(x) AT_ASSERT(x.is_contiguous())

5. 结果

5.1 场景流

红色为t0时刻点云,绿色为下一帧t1时刻点云,蓝色为t0时刻+场景流后的预测点云。
可以看出红色圆圈一些高速车辆的预测不够准确,黑色框中低速车比较准,如下图所示。
FlowNet3D 工程复现_第1张图片

5.2 运动分割

利用flow阈值进行运动分割后效果图,运动物体用红色标注,静止物体用蓝色标注。
FlowNet3D 工程复现_第2张图片

你可能感兴趣的:(工程复现,python,计算机视觉,深度学习,目标检测,自动驾驶)