文献14:Real-time 3d reconstruction at scale using voxel hashing 3 实验结果 我们将实验结果分为两部分:模拟实验和真实世界实验.在模拟中,我们比较了我们的体素地图和光线投射地图查询与基于原始关键帧的方法在地图查询时间和遮挡处理方面的性能 Voxel-hashing:我们分配了足够的体素来保存所有的地图点,体素网格大小固定为2m.在查询时,我们使用基于光线投射的方法来返回可见点的列表.
作者认为voxel-based和point-based methods的核心区别是:voxel-based methods是在鸟瞰图(BEV)上进行检测,而point-based methods则是利用含有更多 Typically, PV-RCNN integrates voxel features into sampled keypoints with Voxel Set Abstraction. Voxel R-CNN 网络框架 整体网络挺简单的,这里只记录一下要点。 Voxel RoI pooling是怎么做的? a)Voxel Query,为proposal匹配邻近体素,其实就是按照Manhattan距离计算voxel point附近voxel。 作者引入了voxel RoI pooling layers,具体步骤是:proposal → grids → voxel query → aggregate features with PointNet
前言 前两篇文章:3D目标检测深度学习方法中voxel-represetnation内容综述(一)、3D目标检测深度学习方法中voxel-represetnation内容综述(二)分别介绍了当前voxel-representation 可以说,本文的研究工作不仅仅是一个multi-scale的voxel的特征信息融合,同时也是point和voxel的融合。 sphere来做为voxel对局部的点做特征提取。 voxel表示中存在的问题。 voxel-based的方法对Local-pointnets的局部之间不能建立联系。所以本文从这个点出发建立了Voxel-GraphAttention Network。
近期,有研究者在《Brain Imaging and Behavior》杂志上发表研究论文,对精神分裂患者Voxel-based morphometry (VBM)结果的不一致性是否是由于所用工具包不同而导致的这个问题进行了研究 VBM的分析分别采用两种工具包:FMRIB Software Library voxel-based morphometry(FSL-VBM)和Statistical Parametric Mapping Voxel-basedmorphometry results in first-episode schizophrenia: a comparison of publiclyavailable software
1.2 voxel 特征提取 voxel特征提取的含义就是将point的特征转化为voxel特征,是紧紧承接上一步的内容,上一步得到了很多的voxel,每一个voxel中包含了少于max_points_number 个点,这一步就是如何根据voxel中的point特取得到voxel特征,这里笔者介绍两种常用的特征提取方法:(1)MLP提取,即是对voxel中的点采用几层全连接层将voxel中的Point信息映射到高维 1.3 voxel backbone 这一部分,在我们得到了voxel 特征后,就是进一步提取到更加全局的特征,上文中的voxel特征仅仅是在一个voxel中的特征,甚至连local feature都没有很好的提取到 ,如下图笔者做一了一个简单的示意,通过voxel特征提取我们得到了point2voxel的特征,下图中左边表示的内容(C表示特征维度),其中空的voxel表示在原始空间没有点的在该voxel内,3D CNN 其实稀疏卷积的含义就是只对含有点的voxel做卷积输入,如果是空的voxel就直接不参与卷积计算,但是实际上随着卷积过程的推进,由于卷积的膨胀性质,会出现更多的非空的voxel。
前言 前面的一篇文章:3D目标检测深度学习方法中voxel-represetnation内容综述(一)中笔者分享了如果采用voxel作为深度学习网络输入的backbone的几个重要的模块。 ,同时把和Voxel-RPN的特征也通过索引concat到点云中。 voxels(这里可能会将全局的voxels,包括空的voxel都会被传递为含有特征的voxels),所以refine仅仅在proposals内部包含的voxel的特征做进一步优化,也算是在三维中的进一步优化 特征,将voxel特征通过转化到point表示上,并采用多层特征concat的方式,然后通过作者设计的roi-grid-pooling方式将前面的voxel多层特征转化到proposals中的grid点融合 ,(这里可以根据每一个voxel划分时得到的坐标值作为回归的量)。
AAAI2021录取论文 “Voxel R-CNN: Towards High Performance Voxel-based 3D Object Detection“,作者来自中科大和香港中文大学。 本文提出一个有趣的问题:一般大家看到point-based特征计算量大,voxel-based结构更适合特征提取,但精度下降;而作者认为,点云数据的精确定位并不需要,而粗voxel粒度也能产生充分检测精度 Voxel R-CNN包括3D主干网络,2D BEV RPN和检测头,其中提出的voxel ROI pooling负责从voxel特征中提取ROI特征。 由此得到两点认识:1)3D结构很重要,因为BEV不足预测精确的3D BBox;2)point-voxel特征交互费时,影响效率。 设计的Voxel R-CNN model概览图如下: ? voxel RoI pooling是从3D voxel特征体中聚集spatial context。这里提出一个新操作符,voxel query,在3D特征体中找邻域voxel,可以聚类voxels。
Introduction 3D检测应用 本文是一个将point_based的方法和voxel_based方法的结合的新型网络结构(在文章作者称voxel_based为grid_based的方法,实则同一种方法 point的FPS采样,然后检索得到多尺度的voxel的特征,如下的表示。 Generation 3D voxel CNN 3D proposal generation 上面的两点内容大都和其他目前流行的基于voxel的方法一样,不多赘述。 Voxel Set Abstraction Module 作者自行设计了Voxel Set Abstraction (VSA) module这样的一个模块,这个模块的作用是将keypoint周围非空的voxel 最终的特征将有三部分组成,分别是来自voxel语义信息, 来自原始点云的特征信息(作者说这一部分信息是为了弥补之前在voxel化时丢失的信息),来自BEV的高级信息.
参数(每个voxel可以存放点的个数(max_points_number),voxel长宽高的大小(whl)) 2.对依次每一个点,根据其对应的坐标(x,y,z)得到该点在voxel的索引。 设置的为35,voxel大小设置为0.5;采用的voxel特征提取方式为增加一个pointnet对每个voxel中的35个点特征提取得到相应的voxel特征(如下图中的featurelearning network ),h=0.1 采用的voxel特征直接为mean特征,即对每一个voxel中的所有点的坐标求均值即可。 在voxel-representation上做文章的研究工作,如下图,这是一篇发表在sensors2020上的 文章Voxel-FPN:multi-scale voxel feature aggregation 的特征提取和Voxel-FPN也是不一样的。
Introduction 3D检测应用 本文是一个将point_based的方法和voxel_based方法的结合的新型网络结构(在文章作者称voxel_based为grid_based的方法,实则同一种方法 point的FPS采样,然后检索得到多尺度的voxel的特征,如下的表示。 Generation 3D voxel CNN 3D proposal generation 上面的两点内容大都和其他目前流行的基于voxel的方法一样,不多赘述。 Voxel Set Abstraction Module 作者自行设计了Voxel Set Abstraction (VSA) module这样的一个模块,这个模块的作用是将keypoint周围非空的voxel 最终的特征将有三部分组成,分别是来自voxel语义信息, 来自原始点云的特征信息(作者说这一部分信息是为了弥补之前在voxel化时丢失的信息),来自BEV的高级信息.
其差别也就是lidar-backbone是基于voxel还是基于point的。 就笔者的理解是,基于voxel的方法可以利用强大的voxel-based的backbone(在文章TPAMI20的文章Part-A^2中有研究过point-based方法和voxel-based的方法最大的区别在于 但是如果采用voxel-backbone的方法就会需要考虑点到图像的映射关系的改变,因为基于point的方法采用原始的点云坐标做为特征载体,但是基于voxel的方法采用voxel中心作为CNN感知特征载体 所以这里需要解决的核心问题除了考虑怎么做特征的融合还需要考虑voxel-center作为特征载体和原始点云坐标存在一定的偏差,而如果将图像信息索引到存在偏差的voxel中心坐标上,是本文解决的另外一个问题 (2)将lidar划分的voxel中心投影到camera-plane上(带有一个偏移量,不一定是坐标网格正中心) (3)采用近邻插值,将最近的4个pixel的image特征插值个lidar-voxel。
论文:’Point-Voxel CNN for Efficient 3D Deep Learning’ 来源:NeurIPS2019 Spotlight 共同一作: Zhijian Liu (MIT), 对于voxel-based类方法的缺陷,论文指出:这类方法难以平衡分辨率和内存的关系。当体素尺寸较大时,分辨率低,大量点云占据同一个体素,没办法很好地区分。 其实voxel-based类方法的这个缺陷学界基本已经产生了共识,因此这部分此处就不再赘述了。 接着,文章对point-based方法的缺点也进行了分析。 由于点云散落分布在三维空间中,不同于voxel-based类方法中数据那样规整,因此需要动态地确定卷积核,这就是动态核开销(Dynamic Kernel)。 提出PVConv 分析完voxel-based方法和point-based方法的缺陷之后,作者开始提出自己设计的网络架构Point-Voxel Convolution(PVConv)。
,对于其它 Voxel 操作步骤是一样的,但所有的 Voxel 对应同一个 FCN。 前面表述的是 VFE1,而 VoxelNet 中划分了许多个 Voxel,每个Voxel 都有对应的 VFE,用 表示。 Sparse Tensor Representation 因为划分 Voxel 的时候,90% 的 Voxel 都是空的,所以,VoxelNet 只处理非空 Voxel 能有效节省计算量。 K 代表最大数量的非空 Voxel。 T 代表一个 Voxel 中点云最多数量. 7 是指经编码后的尺寸. 核心思想就是类 HashTable 的形式。 如果一个 Voxel 还未初始化,就初始化,再插入点云 如果一个 Voxel 已经初始化就复用,在 < T 的情况下插入点云 如果一个 Voxel 已经初始化,但其中点云数量等于 T 则不插入新的点云
因此,将 中的所有权重汇总表示了 Voxel 特征图中第 个 Voxel 特征的重要性,如图1(a)所示。 具体来说,给定一个 Voxel 特征图 ,其中 表示 Voxel 数量, 表示通道数, 中的一个 Voxel 特征 可以分解如下: 进一步,作者通过汇总概念权重矩阵 来获得全局概念激活图 ,如下所示 然而,与2D图像不同,对3D稀疏 Voxel 进行线性插值的上采样存在挑战。为此,作者受到[5]提出的 Voxel Query 技术的启发,并引入了一种针对3D稀疏 Voxel 的上采样策略。 给定一个点,作者计算所属 Voxel 的坐标如下: 然后,作者使用曼哈顿距离控制 Query 范围,在激活图上 Query 的邻近 Voxel : 其中是一个邻近 Voxel 的坐标,是两个 Voxel 作者在距离阈值内最多采样个邻近 Voxel 。最后,点的显著分数计算如下: 其中是邻近 Voxel 集合,表示具有标准正态分布的高斯核,表示激活图上 Voxel 的值。
基于 Voxel 的方法[23, 50]为每个 Voxel 分配一个特征向量,以获得密集表示,描述3D场景的细粒度结构。 一种直接的方法是将3D空间离散化为规则 Voxel ,每个 Voxel 分配一个特征向量[59]。Voxel 表示在表达复杂3D结构方面的能力使其在3D语义占用预测中具有优势。 基于语义高斯分布的局部性,作者只考虑每个 Voxel 位置附近的3D高斯以提高效率。 如图4所示,作者首先根据其均值将3D高斯嵌入到目标 Voxel 网格中。 然后作者根据 Voxel 的索引对列表进行排序,以得出每个 Voxel 应关注的3D高斯的索引: 其中,分别表示某个高斯的相邻 Voxel 数量,以及贡献给某个 Voxel 的高斯数量。 为了从三维高斯分布高效生成 Voxel 化占用预测,作者提出了一种有效的从高斯到 Voxel 的映射方法,该方法只对每个 Voxel 附近的相邻高斯分布进行聚合。
2.1 Lidar backbone 这里利用的点云特征提取网络是笔者在3D目标检测深度学习方法中voxel-represetnation内容综述(一)中提到过个voxel-backbone。 但是在本文中再提proposals之前仅仅使用了RPN网络之前的voxel点云特征信息提取。 3 网络细节设计 3.1 Dense Camera Voxel Structure 作者将camera的pixel转化到点云的BEV视图上(voxel-feature-map)时,转化的大小是lidar-voxel-feature-map (2)将lidar划分的voxel中心投影到camera-plane上(带有一个偏移量,不一定是坐标网格正中心) (3)采用近邻插值,将最近的4个pixel的image特征插值个lidar-voxel。 本文和之前做多模态融合最大的不同就在于融合的方法,之前仅仅是采用索引融合,本文先是转化到bev视图上,然后通过voxel中心和camera-plane的映射得到camera信息在voxel上的表达,最后再采用了加权融合的方法做
/dist/textures/square-outline-textured.png") }); var voxel = new THREE.Mesh(cubeGeo, cubeMaterial ); voxel.position.set(500, 500, 0) console.log(voxel) //grid var gridHelper intersect.object), 1) } // create cube } else { var voxel (50).floor().multiplyScalar(50).addScalar(25); scene.add(voxel); objects.push (voxel) } render() } } function onDocumentKeyDown(event) {
%s <pcd-file> \n " "--NT Dsables the single cloud transform \n" "-v <voxel = 0.008f; //分辨率 bool voxel_res_specified = pcl::console::find_switch (argc, argv, "-v"); if (voxel_res_specified ) pcl::console::parse (argc, argv, "-v", voxel_resolution); float seed_resolution = 0.1f; bool = super.getVoxelCentroidCloud (); //获得体素中心的点云 viewer->addPointCloud (voxel_centroid_cloud, "voxel centroids (labeled_voxel_cloud, "labeled voxels"); viewer->setPointCloudRenderingProperties (pcl::visualization
10 pcl::transformPointCloud(*original,*output,T.matrix()); 11*newCloud+=*output; 12 13//Voxel grid滤波降采样 14 static pcl::VoxelGrid<PointT>voxel; 15 static ParameterReader pd; 16 double gridsize=atof(pd.getData("voxel_grid").c_str()); 17 voxel.setLeafSize(gridsize,gridsize,gridsize) ; 18 voxel.setInputCloud(newCloud); 19 PointCloud::Ptr tmp(new PointCloud()); 20 voxel.filter /data/depth_png/ depth_extension=.png #点云分辨率 voxel_grid=0.02 #是否实时可视化 visualize_pointcloud
2)voxel-feature 为了使用更多的点信息,以及使用end-to-end模型提取更好的特征,提出了voxel表达方式,广泛应用于second、voxelnet、pointpillar等方法中。 voxel的特征表达主要包括3个步骤:点云预处理、点特征表达、voxel特征表达得到BEV图,以voxelnet中的VFE layer为例进行介绍。如下图所示。 ? voxel特征表达:经过多步的点特征提取后,将最后一次max-pooling得到的特征向量作为一个voxel的特征表达,对应到BEV图中相应坐标下的特征向量。 在voxelnet原文中,一个voxel大小为20cm*20cm*40cm,其中Δh=40cm,而BEV图的高度范围为400cm,从而在同一个xy坐标点,高度方向上也会产生多个voxel,这种方式会增加后面网络的计算量 因此,在pointpillar中,增大了Δh的值,从而几个voxel成为了一个pillar,如在pointpillar实验中,pillar高度为400cm,对应voxelnet中10个voxel,大大提高了整个网络的计算效率