热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【论文精读】3DShapeSegmentation

3DShapeSegmentationwithProjectiveConvolutionalNetworks原文地址:3DShapeSegmentationwith

3D Shape Segmentation with Projective Convolutional Networks

原文地址:3D Shape Segmentation with Projective Convolutional Networks

数据和代码:Data and code


Abstract

这篇文章介绍了一种分割3D物体的深度架构,此架构结合了Fully Convolutional Networks (FCNs)和Conditional Random Fields (CRFs)。FCN将多视角和多尺度的图像投影到3D物体对应的不同部分,然后一个基于表面特征的CRF结合投影出的3D物体不同部分表面的特征将他们在3D物体上进行分割。同样这个架构也用到了一些预训练的图像识别的模型。表现远好于state-of-the-art的方法,最后还展示了在消费级深度相机中进行分割的结果。


Introduction

这篇文章主要的任务是见3D物体分割成为带标注的部分。这个问题很基础,但也很有挑战性:


  1. 物体的每一部分有着多种多样的形态,而不同形态的物体必须被分配到有着相同含义的标注中。
  2. 每一部分之间精确的边界难以划分
  3. 局部和全局的特征需要联系在一起
  4. 要处理噪声和干扰问题还有采样不充分

另外此方法还必须解决以下问题:


  1. 视图必须尽可能的覆盖物体的表面,并且减少阻塞(occlusion,不是很懂,或者应该是遮挡的意思)。
  2. 每一部分必须再度个视图中出现以便巩固特征。
  3. 必须保证3D物体被分割完全并且一致。

贡献点:介绍了一种用于3D形状分割并推断识别各个部分的深度架构,这个架构是端对端进行训练的并且使用了图像识别的预训练模型,没有使用任何的人工调整的特征,对于一些复杂的物体,相比state-of-the-art的方法,这种方法的识别率提高了接近8%。

架构


Related work

这篇论文与图像(包括RGB-D图像)和3D形状分割有关。


Image-based segmentation

图像分割的主要方法有:随机森林和卷积网络,一般用于图像分类的卷积网络在这里也可以被用作图像分割,有一些提高准确率的策略包括:基于区域自上而下推理,CRFs,atrous convolutional layers,解卷积网络,循环网络,多尺度分析等。


Learning 3D shape representations from images

目前有些研究试图通过使用特殊层对图像进行形状投影建模的卷积网络,从图像中学习形状的体积表示;另一些基于网格的表示也可以通过假设固定数目的网格顶点来从图像中学习。本文的3D-2D投影机制是可微的,无参数的,稀疏的,因为它只对形状表面而不是体积,也没有假定顶点个数是固定的。这个方法有点类似于这篇文章,但是本篇文章的方法着眼于通过自适应地选择视图来推断3D物体的各个部分。它也使用CRF来解决视图表示中表面信息的不一致或缺失。


3D geometric shape segmentation

与其它方法相比,这篇文章所用的方法有以下四个优点:


  1. 此架构可以使用二维数据集进行训练,二位数据集的数据量比三维数据集要多很多,并且二位数据中训练出的特征可以在三维形状识别中使用。
  2. 没有用到人工产生的几何描述子。
  3. 使用了适应性的视图选择机制
  4. 采用端对端的机制。

Method

先简介了架构的工作流程,下面将详细讲述这个网络的输入,各个层以及训练过程。


Input

输入是一个多边形网络,用1024个均匀分布在物体表面的点进行采样。采集视图时首先overcomplete采集,使得每个点至少能够被三个不同的视图采集到。对于每个视角,在每个采样点的法线上放置,从三个距离采集多尺度的视图(0.5,1和1.5倍最小外接球半径的距离)。然后需要找到一个更为简洁的视角集合用来描述3D形状的表面。首先将我们采样的点投影一个视角上,用一个二值图来表示,二值图上置一的点就是采样点上距离他最近的点(我觉得就是把采样点垂直投影到一个平面上有采样点的地方就置一),那么这个视角的覆盖面积就可以用投影到这个二值图上的点来表示,因为只有能看到的点才能被投影上。然后对于不同的尺度,覆盖面积最大的那个视角会被放进一个表中,然后忽略掉这个视角捕捉到的所有可视点,然后找下一个覆盖面积最大的视角,直到在这个尺度中所有的点都被捕捉到。在实验中,大约每个尺度20个视角就可以将绝大部分的采样点记录。

拿到不同视角的采样后,然后将图像渲染成512*512阴影图和深度图像,阴影图像根据Phong反射模型产生(文中的two-channel image应该指的是这两种图像分别作为一个channel)。除了阴影和深度图像之外,对于每个选定的相机设置,我们将形状栅格化为另一个图像,其中每个像素存储投影距离像素中心最近的多边形的ID(可参见图1)。


FCN module

使用FCN产生LL个置信图,L" role="presentation">L是3D形状子部分的种类数,使用了这篇文章中建议的FCN架构(以后研究一下),另外还作了两点改进:第一,使用双通道的filter;第二,使用步幅是8的解卷积层将FCN的输出上采样为512*512的置信图。


Image2Surface projection layer

该层的目标是在多个视图中整合置信图信息,并将结果投影到3D表面。我们注意到,最佳视点的位置和数量可能因形状而异,而且它们不是以任何方式排序的。即使不同形状的最佳视点是相同的,视图也不一定是有序的,因为我们不假设形状是一致的。假设一共有MsMs个输入图像(视图),那么考虑到LL种部分,那么输入这个投射层的数据就是一个Ms×512×512×L" role="presentation">Ms×512×512×L的4D图像,同时他还要将之前提到的保存有多边形ID信息的Ms×512×512Ms×512×512的图像当作输入。输出则是Fs×LFs×L的矩阵,FsFs是3D形状总共包含的多边形数量,意思就是把每个多边形属于那种部分的置信度当作输出。这个投射的过程是通过一个叫view-pooling的过程实现的,可以由下面的公式表示:

viewpooling

上面的公式就是说找出所有MsMs个图像中所有像素点对应的多边形每一个种类的部分的置信度,所以才能出来Fs×LFs×L个结果。(后面作者说在形状的轮廓附近不使用取最大值的操作,而是使用平均操作,不太懂)


Surface CRF

有一些多边形(其实就是三角形)没有被贴上标签,可能因为遮挡或其他原因,那么这些多边形的标签应该被置零,然后使用附近的标签来决定他们的类别。另外,由于FCN中采用了上采样,因此在可能是分割边缘的凸点或凹点上会有bleeding(暂时没看明白)。

在这里作者使用了三个因子去构建这个条件随机场,分别是:
factor1

factor2

factor3

分别代表着置信度因子,法线差角因子和距离因子。根据这三个因子,CRF公式如下:

CRF


Training procedure

FCN使用了预训练的模型,由于输入数据是灰度图像,因此将预训练的卷积层三通道的卷积核进行平均处理,变成单通道,然后进行复制以便处理包括阴影和深度两通道的图像。CRF权值初始化为1.

加入正则项后要优化的是log极大似然函数:

loss

正则化的系数λλ被设为10310−3,然后对FCN层的输出求梯度:

gradient

CRF的梯度也能比较方便地求出。

每个模型随机取出24幅视图进行训练,训练中使用了DropConnect技巧用来避免过拟合。


Implementation

用C++语言和Caffe框架写的程序,随机梯度下降做优化learning rate是10310−3,还使用了momentum,另外还添加了Image2Surface层用来投影二维图像中的信息到三维物体表面。


Evaluation

下面展示实验验证和分析。


Datasets

主要使用ShapeNetCore,PSB和COSEG中数据很少,而且好多不能用的。


Prior methods

主要和ShapeBoost以及Guo的方法对比。


Dataset splits

目前找不到标准的训练集测试集的划分。作者选一半来训练一半来测试。但是如果一种形状的数据很多,那么就只选出来500个来训练。


Result

见论文中的图表。


Analysis

在这一部分作者进行了横向的对比,发现还是最终的架构准确度最高。


Generalization to RGB-D sensor data

相比之前的方法,这种方法对现实中采样的数据表现更为健壮。


Conclusion

最后作者做出展望,第一,要找到更加鲁棒的边界,以分层的方式将对象进一步分割成细粒度的部分会有所帮助;第二,研究不同类型的网络输入,目前的输入是相对视图方向的法线和深度,将来可以尝试HHA编码,或者原始的位置数据;第三,使用半监督或者非监督的方式。


推荐阅读
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 从高级程序员到CTO的4次能力跃迁!如何选择适合的技术负责人?
    本文讲解了从高级程序员到CTO的4次能力跃迁,以及如何选择适合的技术负责人。在初创期、发展期、成熟期的每个阶段,创业公司需要不同级别的技术负责人来实现复杂功能、解决技术难题、提高交付效率和质量。高级程序员的职责是实现复杂功能、编写核心代码、处理线上bug、解决技术难题。而技术经理则需要提高交付效率和质量。 ... [详细]
  • 判断编码是否可立即解码的程序及电话号码一致性判断程序
    本文介绍了两个编程题目,一个是判断编码是否可立即解码的程序,另一个是判断电话号码一致性的程序。对于第一个题目,给出一组二进制编码,判断是否存在一个编码是另一个编码的前缀,如果不存在则称为可立即解码的编码。对于第二个题目,给出一些电话号码,判断是否存在一个号码是另一个号码的前缀,如果不存在则说明这些号码是一致的。两个题目的解法类似,都使用了树的数据结构来实现。 ... [详细]
  • ①页面初始化----------收到客户端的请求,产生相应页面的Page对象,通过Page_Init事件进行page对象及其控件的初始化.②加载视图状态-------ViewSta ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文介绍了在满足特定条件时如何在输入字段中使用默认值的方法和相应的代码。当输入字段填充100或更多的金额时,使用50作为默认值;当输入字段填充有-20或更多(负数)时,使用-10作为默认值。文章还提供了相关的JavaScript和Jquery代码,用于动态地根据条件使用默认值。 ... [详细]
  • Python基础知识:注释、输出和input交互
    本文介绍了Python基础知识,包括注释的使用、输出函数print的用法以及input函数的交互功能。其中涉及到字符串和整数的类型转换等内容。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
author-avatar
mobiledu2502926167
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有