基于点云的3D深度学习主干网络进展综述
点击上方“3D视觉工坊”,选择“星标”
干货第一时间送达
本文由知乎作者Slumbers授权转载,不得擅自二次转载。原文链接:https://zhuanlan.zhihu.com/p/123142370
AtlasNet/FoldineNet
其实这两不是同一篇论文,但是放到一起是因为他们的idea比较类似,意会一下就好了。AtlasNet的原理是将latent vector和一个包含2D的unit square(这些2D点是自行sample的)输入到多个MLP中,来生成"deform"后的3D points,其实就是说把2D unit square的点投影到三维空间上。他的Encoder根据input分了两种,主要是提取latent vector:如果输入是点云,主干网络选用ShapeNet,输出维度为1024的隐向量;如果输入是图片,主干网络使用ResNet,
Decoder实际上才是AtlasNet的主要结构: 输入前面的latent vector+基于2D点的unit square, 输出3D pointcloud。其损失函数是Chamfer Distance。注意,在3D网络中,使用Normalize这种在2D中很常见的操作会使得效果变差,所以会发现基本下面的3D网络也很少有用normalize的
PointNet
应该说PointNet是处理点云结构最常用的网络之一,后续许多网络结构都是在PointNet的基础上进行改进。他的输入是点云,每个点用(x,y,z)表示。它的思想很简单,将点云通过MLP提取local feature,然后将local feature合并并进行最大池化,生成global feature(见下图)
PointNet解决的一个很重要的问题是确保点云输入的无顺序性,为此使用了MLP+Max Pooling的层操作消除input排列的影响。同时加上了T-Net解决transform不变性的问题。T-Net实际上实际上是对Input进行一系列卷积和池化后与weight相乘的操作,而weight是在训练过程中学出来的,也就是说,作者是预先假定T-Net能够解决transform不变性的问题,然后去训练,那么T-Net到底有没有解决transform的问题,由于深度学习的黑箱性,不太好做判断。
损失函数上,依旧是Chamfer Loss,但是加上了对T-Net参数的正则化限制
其缺点是没有考虑3D点和周围的neigbhour信息,同时没有点云密度不均匀的特点进行特殊设计。作者后面又出了PointNet++,对这些问题做了改进
最近开始流行的一些点云的处理方式是用autoencoder+无监督学习方式来做3D点云的特征提取。下面两篇都是这个思路
3D Point Capsule Networks(2018)
Capsule Network胶囊网络由Hinton提出,前一段时间也火了一下,本质上是用一个个capsule去表达事物的一个具体部分或者局部特征。关于胶囊网络的解释,这篇解答写的还挺好的。而3D Point Capsule Networks这篇Paper是最早用胶囊网络处理点云数据的,在论文中也显示实现了较好的效果。前面讲到的pointNet, atlasNet,其中间产物都是一个全局的latent vector, 而在3D-PointCapsNet中,其中间产物是latent capsules。每个capsule对应的是object的一个特定的部位。
该网络分为encoder和decoder两个部分,如下图,encode方面,输入3D点云,使用MLP+最大池化提取出多个1024维向量,将这些1024维向量concate起来组成了Primary Point Capsules。通过DR过程后,生成最终的Latent Capsules,然后类似AtlasNet的过程,sample 2D point grid和latent capsules一起,生成一个个的Local Patches ,将这些patches组合就来就形成了最终的object
损失也是chamfer loss,计算的事encoder+decodert后重构的Object和输入的点云的loss
论文中也提到了该网络对于旋转变换也同一样有效(胶囊网络本来就能处理transform ,rotation等变换)。目前在各种3D任务上,Paper中都取得了比前面列举网络更佳的效果。
Geometric Capsule Autoencoders(2019)
这一篇是19年底出来的论文,继承了上面的3D Capsule Network的基础。在这篇Paper中,每个capsule包含有两个信息,pose和feature,如下图所示
总地来说,作者设计了一个叫做"PointsToParts Autoencoder"的网络。该Autoencoder分为两部分,如下图所示,一部分是PointsToParts Encoder,一部分是PartsToPoints Decoder,这部分将PointsToPart Encoder生成的Capsule encoder为object。其主干网络分为3个部分,feature-voting network F, pose-voting network Q, decoding network G,其中Q,F的主干网络都类似于PointNet。G的结构类似FoldingNet(与前面我说AtlasNet原理类似)。
在Encoder中,通过联合学习F和Q,来得到Object Capsule。
G的结构可见下图的(b)部分。总地来说,其中
是part的pose,
是part的feature, hq 是整个object的pose。对于任何一个part来说,它的pose可能会有很多种,但是feature却是唯一的。因此,如果从pose的角度去匹配groundtruth,会有很多种情况,但是从feature的角度去匹配ground_truth, 则只有一种情况。
三个网络的Loss都是Chamfer Loss
实际上这篇文章搞得挺复杂的,但核心思想就是让每个Capsule能同时学到pose和feature,用了一个autoencoder来搞定这个事情
上述内容,如有侵犯版权,请联系作者,会自行删文。
推荐阅读:
那些精贵的3D视觉系统学习资源总结(附书籍、网址与****)
机器人抓取汇总|涉及目标检测、分割、姿态识别、抓取点检测、路径规划
重磅!3DCVer-知识星球和学术交流群已成立
3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导,820+的星球成员为创造更好的AI世界共同进步,知识星球入口:
学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题
欢迎加入我们公众号读者群一起和同行交流,目前有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。
▲长按加群或投稿