MV3D 论文代码复现

实验记录 MV3D 代码复现

conda activate mv3d2
file path : ~/work/object_deteciton/didi/

1, 下载好数据,不要下载错了

MV3D 论文代码复现_第1张图片

2,按照数据布局进行数据摆放

MV3D 论文代码复现_第2张图片

然后对raw进行数据摆放

MV3D 论文代码复现_第3张图片

3,摆放好数据后,编译ver3的代码,生成两个动态库

这里要注意按照readme文件,对路径进行修正。
在这里插入图片描述
MV3D 论文代码复现_第4张图片
但是这里我也碰到一个问题,
怎么实现 Change numpy array to be loaded into ‘raw’ to LidarTopPreprocess.so in ExampleUsage_Top.py line 126.
我尝试raw=np.load(“LidarTopPreprocess.so”,allow_pickle=True),但是这会报错动态库文件没法当picklefiel打开。
如果有朋友会,私信我,感谢。

4,生成动态库文件后,Python data.py

这里要注意的是

运行data.py文件以后,在data文件中产生6个文件夹,如下图:
MV3D 论文代码复现_第5张图片
gt_boxes3d 储存154个npy文件,每个文件对应一帧点云数据中所有boxes的8个坐标信息
gt_boxes_plot 储存了154和png文件,是将2Dbox画在img上的png文件(并不是所有额obj都被画了出来,根据tracklet.xml文件可知,点云数据中还有cycilst和行人等目标,但是在data阶段没有画出来)

MV3D 论文代码复现_第6张图片
gt_labels 文件夹里边包含154个npy文件,储存对应点云中boxes目标框的标签,比如[1,1].代表这帧点云中有两个boxes框,且种类标签都为1

rgb 154个png文件,代表归一化后的原始image;不要诧异图片是黑色的,黑色的原因是因为原始图片的rgb范围是[0,255].黑色的图片rgb范围是[0,1];

top npy.npz文件,mv3d的top视图,将点云平均分为M个切片,为每一个切片计算高度图,得到M个高度图;代码中的M计算得15;
首先将点云分为很对个3维格子,设置格子的长宽高分辨率;然后根据点的三维坐标确定位于的格子;取每个格子内所有点的最大高度为切片对应得2D 格子的高度值;源码里边将每个点云切片分为500*300的分辨率;每个npy.npz文件可以得到一个shape为[500,300,15]的数组
MV3D 论文代码复现_第7张图片

5,调试tensorflow

这个时候要用到tensorflow,因此需要不断调试。
tensorflow版本太高了,需要降低到1
pip install tensorflow-gpu1.1.0
卸载干净
python版本太高,降低到python3.6
conda install python
3.6

但是降低版本太麻烦,不如重新创建一个环境
conda create --name mv3d2 python=3.6
conda install tensorflow-gpu==1.4.1
conda install cudatoolkit=8
conda install cudnn=6
MV3D 论文代码复现_第8张图片

然后缺啥补啥。

5.1 首先测试TensorFlow是否正常能用

Test your Tensorflow-GPU is running by"
MV3D 论文代码复现_第9张图片

5.2 测试 tensorflow-gpu是否可用

5.3 修改相关文件和查询gpu的算力

After Tensorflow-GPU could work If you are not using Nvidia K520 GPU, you need to change “arch=sm_30” to other value in src/net/lib/setup.py and src/lib/make.sh in order to compiler *.so file right. Here is short list for arch values for different architecture.

MV3D 论文代码复现_第10张图片
因为我用的是rtx3090,所以sm_86

6,python train.py

碰到新问题卡住了

ImportError: /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0: undefined symbol: FT_Get_Var_Blend_Coordinates
MV3D 论文代码复现_第11张图片
搞定又有新问题,我都无语了

ImportError: /home/siat/Downloads/ENTER/envs/mv3d2/bin/…/lib/libgio-2.0.so.0: undefined symbol: g_spawn_async_with_fds

第一种可能glib的版本跟系统版本不同

查看后果然版本不同
mv3d 是2.58.2
ubuntu core18是2.56.4
ubunu core20是2.64.6
core22 是2.72.1
MV3D 论文代码复现_第12张图片
降低glib版本,注意不要再vscode的终端进行,要在ubuntu终端进行
conda install -c anaconda glib==2.56.1
成功解决该问题
但是版本降低又会出现新的问题。。。无语
ImportError: /usr/lib/x86_64-linux-gnu/libcairo.so.2: undefined symbol: FT_Get_Var_Design_Coordinates

那么我再查看是否版本问题
MV3D 论文代码复现_第13张图片
当前cairo 版本是1.12.18
ubuntu是1.15.0
将两者版本调为一致试试

调整失败

谷歌说pixman版本要和cari版本匹配,但是匹配关系没找到

在这里插入图片描述
pixman 版本为0.32.6
当前cairo 版本是1.12.18

然后第二种法说法是freetyle的版本有那个 FT_Get_Var_Design_Coordinates,所以需要在freetyle下面做文章

先看看libcairo.so.2跟哪些东西链接
ldd /usr/lib/x86_64-linux-gnu/libcairo.so.2
MV3D 论文代码复现_第14张图片
nm -s -D /usr/lib/x86_64-linux-gnu/libfreetype.so.6 | grep FT_Get_Var_Design_Coordinates

谷歌发现 libcairo.so.2 报错主要是freetype版本问题

查找libfreetype.so文件

MV3D 论文代码复现_第15张图片
在这里插入图片描述
可以看出我的mv3d2环境的freetype.so是查不到那个 FT_Get_Var_Design_Coordinates
所以

但是问题来了,/usr/lib/x86_64-linux-gnu/libcairo.so.2的freetype是链接/usr/lib/x86_64-linux-gnu/libfreetype.so.6,那这应该是没问题的呀。

在这里插入图片描述在这里插入图片描述
有一个新的想法,升级mv3d2的cario版本
既然我们已经知道1.12.18是不行,那么就升级到最新版本1.16.0 干!

20221028 问题解决了,十分奇葩
因为我之前用pip安装的opencv,它是有问题的,因为版本太高,是4。3+。
我卸载pip的opencv-python,卸载conda的opencv,然后成功安装conda的opencv,他的版本使3.4+ ,然后就成功了。

新问题:psroi_pooling_op_gpu.cu.cc not compiling
https://github.com/bostondiditeam/MV3D/issues/49

参考资料

https://github.com/bostondiditeam/MV3D MV3D源代码
https://itcn.blog/p/254887482.html#datapy_7

你可能感兴趣的:(object,detection,numpy,python,深度学习,自动驾驶,c++)