| .idea | ||
| data | ||
| model | ||
| train | ||
| .gitignore | ||
| main.py | ||
| readme.md | ||
Hist2Point
Usage
usage histogram→feature map用于处理下游任务;feature map→generate point cloud用于生成对应spad直方图
encoder 利用卷积层提取特征;
decoder 利用反卷积得到直方图,和原始图对比;利用pointnet得到点云图,统计点云得到直方图然后和原始图对比
graph TD
A[(原始点云)] -->H(Histogram) & P(PointCloud)
P-->C[CompareModel]-->G(GenPC)
H-->E[\Encoder/]-->F(FeatureMap)-->D[/Decoder\]-->G
F & P-->S[PCalgo]-->T([Downstream])
Encoder 模块
encoder模块的核心是提取spad 3d image的核心feature
其输入是:
\mathcal{X}\in\mathbb{R}^{h\times w\times c}
$(h,~w)$是视角上的长和宽,$c$是time bin的长度。
其输出是:
\mathcal{Z}\in\mathbb{R}^{p\times f}
$p$是特征点的个数, $f$是每个特征点的特征数。
encoder的过程:
\mathcal{X}\to\mathcal{Z}:{\rm Conv+pool}
encoder的输入是一个3d 深度图,输出是一个2维特征点云。
利用卷积的提取特征能力,将3d深度图提取成2维特征点云,但这里的特征点云是抽象的特征点云。
若 $f=1$,则encoder只是一个正常的特征提取过程;若 $f=3$或 $f=4$,则encoder除了前面的卷积层作为特征提取模块外,还外加了一层一维特征生成模块(实际上就是一维卷积操作),即通常卷积操作会得到
(b, h, w, c)\xrightarrow{\rm map}(b, p,h',w',c') \xrightarrow{\rm flatten}(b,p,h'\times w'\times c')\xrightarrow{map}(b,p,f)
这样,得到的feature map可在理论上为一个特征点云。
Decoder模块
decoder模块的核心是将核心的feature还原成点云或者三维深度图
其输入是:
\mathcal{Z}\in\mathbb{R}^{p\times f}
$p$是特征点的个数, $f$是每个特征点的特征数。
其输出根据设计思想的不同,可以分为两种:
1)还原成三维深度图的概率分布
\mathcal{X}\in\mathbb{R}^{h\times w\times c}
$(h,~w)$是视角上的长和宽,$c$是time bin的长度。
此时,decoder的过程是:
\mathcal{Z}\to\mathcal{X}:{\rm deconv}
这里的过程与正常的图像生成类似,只是维度变多了。
不过,生成的可以是原始图像,但最好的是生成概率密度分布。
2)还原成点云
\mathcal{P}\in\mathbb{R}^{n\times3}{\rm or}\mathbb{R}^{n\times 4}
此时,decoder的过程是:
\mathcal{Z}\to\mathcal{X}:{\rm PointNet}