array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation - 爱码网

留个笔记自用

OccuSeg: Occupancy-Aware 3D Instance Segmentation

做什么

Instance segmentation实例分割
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
目标检测( Object detection)不仅需要提供图像中物体的类别,还需要提供物体的位置(bounding box)。语义分割( Semantic segmentation)需要预测出输入图像的每一个像素点属于哪一类的标签。实例分割( instance segmentation)在语义分割的基础上,还需要区分出同一类不同的个体。
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
这里就是从2D图像的分割转移到了点云上的分割,无非就是在位置信息上多了一维

做了什么

《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
定义一个"3D occupancy size"定义为每个实例占用的体素数量。在此基础上,提出了一种占用感知的三维实例分割方案。聚类方案受益于预测占用大小和聚类占用大小之间的可靠比较,这有助于正确聚类硬样本并避免过度分割。其实也就是根据定义的size来进一步约束聚类

怎么做

《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
首先是整个结构的整体流程,输入是一张以2cm的分辨率而voxel化的3D彩色场景,输入至3D-Unet进行feature extract。然后学习后的特征被转发到特定任务的头部,以学习每个输入voxel的不同表示,包括语义分割,其目的是分配类别标签、特征和空间嵌入,以及占用回归,最后,执行基于图的占用感知聚类方案,为每个voxel生成3D对象实例标签
整体结构以这样的方式呈现
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
首先自然是feature extractor的介绍
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
这里就是在Unet的基础上将卷积换成了3D稀疏卷积
稀疏卷积
接下来得到了voxel化的特征后,就是本文的核心部分,多任务框架,用来学习第i个输入voxel的task-specific representation
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
这里包括了三个任务, semantic segmentation语义分割ci,目的是分配类别标签,joint feature and spatial embedding联合特征和空间嵌入si和bi,目的是融合特征和空间信息,occupancy regression占有率回归oi
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
使用一个联合LOSS来进行训练,这里的Lc是语义分割中每个点分类的传统cross-entropy,Le和Lo后面部分再介绍,与别的论文中直接连接特征和空间嵌入的方法不同,这里的任务是联合监督,使用不同的目标分开监督二者
首先是空间监督
定义di为第i个voxel的空间嵌入是回归到对象中心的三维向量
这里采用的监督LOSS是
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
其中C是整个场景中的实例数量,Nc是第c个实例中占有的voxel数量,μi表示的是第c个实例的第i个voxel的3D位置,显然这个的意思是为了控制对象内voxel点与中心点的距离
然后是特征监督
这里使用了由三项组成的LOSS
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
这里的si指的就是第i个voxel的特征嵌入,uc指的是第c个实例的全部voxel的平均特征嵌入,δ都是设定好的一个阈值。
简单来说,方差项Lvar将当前嵌入引向每个实例的平均嵌入,距离项Ldist将实例相互推开,正则项Lreg就是普通的正则项,控制大小使其往0靠
然后是二者监督的一个限制条件,协方差项
旨在为每个实例学习一个最佳聚类区域
这里定义前面所说到的bi=《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
也就是第c个实例的第i个voxel的(特征嵌入,空间嵌入),这两者计算就是前面两个的结果,为了平均bi,再次定义了一个
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
和上面类似,这里是第c个实例(特征嵌入,空间嵌入)
然后定义第i个voxel属于第c个实例的概率pi
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
这里的ec表示预测的第c个实例的中心位置,其他定义和上面相同,显然这里考虑到了特征si和uc和空间嵌入di和μi,这里的定义方式跟前面相同,使用协方差来控制其起伏大小
这里使用的是二分的cross-entropy《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
其中yi=1表示第i个voxel属于第c个实例,N是点云中点的总数
前面所提到的三个LOSS结合在一起构成了joint loss中的第二个LOSS
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
旨在学习一种嵌入向量,该向量结合考虑了特征和空间嵌入,用于实例分割
得到了前面两者特征的结合后,接下来要融合本文事先定义的一个occupancy也就是实例中的voxel数,这里是预测一个positive value oi来指示当前实例占用的voxel数,然后,oi的平均值将用作当前实例的预计occupancy size,于是定义了以下LOSS
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
这里的Nc表示的是第c个实例内的voxel数量,显然这个LOSS是为了让voxel数量趋近于GT,同样,这里的Lo正是前面joint loss的第三项,用于回归每个体素所属实例的占用大小
这里文中还展示了预测的效果,定义了一个评判标准后用画图的方式展示了它较好的性能,表示这种预测实例中voxel数量的方法的可行性
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
最后就是整体结构的最后一部分,基于前一阶段的多任务学习后对实例结果进行聚类
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
很显然跟上篇使用了同样的方法,基于图卷积的方法,还是一样先是要定义图,首先这里是定义了一个超体素作为voxel的分组
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
i表示属于第i个超体素的voxel的集合,使用超体素内其他体素的特征嵌入和空间嵌入的总和平均得到该超体素的嵌入特征,进一步定义一个占有率ri
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
之后就可以开始正式定义图了《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
vi表示超体素的嵌入特征∈V,ei,j表示超体素i和j之间的边∈E,其中包含了权重wi,j∈W
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
σ是前面定义的特征协方差和空间协方差,r是占有率,大写的S和D和前面的小写的s和d的区别是一个是超体素一个是体素,这里是属于超体素vi中所有voxel的相似度平均计算得到,权重越大表示i和j属于同一实例的可能性越大
定义完成后开始进行图操作
对E中的每条边,选择wi,j最大的边也就是说明i和j最有可能是同一实例,设定一个阈值T,如果权重>T的话将两个节点合并,合并后更新图,不断更新下去直到没有边权重大于T
《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation

总结

1.整体论文看下来又有了一脸懵逼的感觉(上一篇还是点云校准的),如果按流程看下来几乎没有逻辑性,就是想起哪讲哪。
2.总体来说,这篇的主要创新点就是occupancy-aware,也就是对象实例中voxel数量《论文阅读》OccuSeg: Occupancy-Aware 3D Instance Segmentation
相比于2D图片,3D点云确实能够更好的预测每个实例占用的像素(voxel数),但其实感觉和别的基于voxel的做法差别不算很大,不知道为什么效果这么好

相关文章: