该系列文章与qwe一同创作,喜欢的话不妨点个赞。
在一起看CUDA-BEVFusion的代码前,我们把后面会常见到的变量以及他的含义写在前方,看代码的时候如果看到同名的变量,可以过来看一看数据的形状和含义。
另外这里介绍了开启debug的方法。
总而言之,本篇文章是一个类似前言的文章,方便后续大家调试代码,理解代码。
开启Debug
- 修改
CMakeLists.txt
,注释 26 行,打开 27 行注释。
修改前,默认设置
修改后
-
重新运行
bash tool/run.sh
。重新构建run.sh
中 41 行默认会执行build/bevfusion
。推理一次。只想构建,注释掉 41 行即可
-
Debug
如果系统里有多个版本的 cuda/tensorrt,则需要在 launch.json 文件里进行相应的配置:
"environment": [{"name": "LD_LIBRARY_PATH", "value":"/path_to_trt/TensorRT-8.5.3.1/lib:/path_to_cuda/cuda-11.7/lib64:$LD_LIBRARY_PATH"}],
如果发现调试时变量显示都是16进制的数,想让其变成10进制,需要如下设置:
"setupCommands": [
{ "text": "set output-radix 10"}#或者切换成16
]
因为.vscode中launch.json已经配置好,按照下图Debug,会运行build/bevfusion进入主程序。
常用数据
- numel_frustum_:332288。一个相机视锥点数量
- numel_geometry_:1993728。6 个相机一共的视锥点数量(332288*6)
- remain_ranks :159963。转体素时超出边界的视锥点的个数
- keep_count_:1833765。转成功的视锥点的数量。1993728 - 159963 = 1833765
- interval_starts 、n_intervals_: 96801。起始点数量,也可以理解成区间数量。
- ranks_、interval_start、indices、geometry 关系
-
ranks_
- 从
compute_geometry_kernel
中看出,ranks 与 geometry 的数据偏移量一致,只不过这个偏移量对应的点如果没有落在体素内时,ranks 存的值是 0,而 geometry 存的是错误的数值-
ranks 与 geometry 的数据偏移量一致依据
-
ranks 存的值是 0,而 geometry 存的是错误的数值依据
-
- 从
-
indices 存的是 geometry 与排序前 ranks_的偏移量数值。这个偏移量就是_pid=indeces。理解为视锥索引。
- 可以理解为一个数据由两部分存,indices 存的索引,ranks_\geometry 存的数据。indices=0 为例。其含义就是指 geometry 与 ranks_ 偏移量是 0
- 一般用法是计算出 indices 后, geometry[indices]去找对应的数据。当 indices=0 时,找到的就是 63905
- 可以理解为一个数据由两部分存,indices 存的索引,ranks_\geometry 存的数据。indices=0 为例。其含义就是指 geometry 与 ranks_ 偏移量是 0
-
interval_start 具体数据 + 加上 reamain_ranks 的数量(159963)就是这个数据在排序后 rank 中距离首地址的 偏移量
-