前言
VoteNet 是一个3D 点云目标检测的一个模型,其中涉及Hough voting的概念,困惑了我好久,这里记录下我的理解。
如有错误,欢迎指正。
在VoteNet的源码中,涉及Hough voting的计算有两处:
- 在点云数据的label产生中,计算Hough voting的真实值
- 在网络的正向传播过程中,计算Hough voting的预测值
以下将通过这两个部分讲解Hough voting。
一、Hough voting真实值的计算
其源代码在votenet/sunrgbd/sunrgbd_data.py 中。
以下我利用2D 图像的例子描述。
如下图所示,黑色方格代表像素,红色框、绿色框、蓝色框是三个ground truth框。
先取红色的框,计算框内每个点到框中心点的向量,这就是红色框的vote。然后继续计算绿色框,蓝色框的vote。
--> -->
将图中的向量用数值表示出来,就是:
可以发现框内每个像素点拥有的vote的个数不同,有些有一个,有些有两个,有些有三个。
为了方便程序处理,设置每个像素点拥有三个vote值。当不满三个vote时,用第一个vote填充剩下的值。
在ground truth框外的像素点的vote值为[(0, 0), (0, 0), (0, 0)],这里没有在图中画出。
如下图所示,这样就是这副图像的Hough voting的结果了。
理解了2D图像的Hough voting,3D 点云的Hough voting可以看做vote向量由二维变成了三维。
VoteNet源码中Hough voting向量是由3D 框的中心点指向3D 框内的其他点,方向跟本文图例相反。
二、Hough voting预测值的计算
其源代码在votenet/models/voting_module.py 中。
... 待更新 ...