DGCNN理解理论篇

参考了LDGCNN论文,分别从输入点集、任务描述、点云特性、局部图结构、图特征提取等角度给出DGCNN数学理论理解。

输入点集

输入数据可用集合来描述,即向量的集合,每一个向量代表着一个欧式空间点pi,第i个点就可以表示为(xi,yi,zi)。当然这个可以拓展到特征空间,因为在不同的任务中(例如语义分割),输入数据可能包含其他属性(如颜色、反射强度等)。另外,除了第一个边卷积层外,后面的边卷积操作的输入数据均处于特征空间。

任务描述

1. 分类

分类实际上是将输入点集,映射到标签集合中去,得到一个具体的数值。这个数值是人类预先定义,具有可理解的具体语义,如桌子、地板等。那么,分类任务就是去寻找这样一个转换函数(分类函数fc)。p1,p2,…,pn分别是输入点集中的第一个点,第二个点,第n个点。

2. 分割

而分割任务实际上是把每一个点归属到一个有限而确定的类别中,即找到一个分割函数fs为每个点计算类别可能性的分布概率,一些文献叫计算分割分数。所以分割函数fs是针对每个点进行处理的,对pi施以fs分割函数得到pi的所属类别。

点云特性

1. 置换不变性

所谓置换不变性,就是输入点云的排列顺序。例如j1,…,jn与i1,…,in是两种不相同的顺序,这种顺序的不一致性不应该引起分类结果的不同,因此同一个fc分类函数,不同点序的同一个点云集合,其输出结果相同。

2. 变换不变性

对点云进行平移、旋转不应该改变点云的分类结果和分割结果。因为这样的刚性变换理论上不影响点云的几何属性。下式中的大R是旋转矩阵(三维空间中任何旋转都可以在三个坐标轴上分解),b是平移的参数。所以R乘上点云集合再加上平移量,结果应该与未发生旋转和平移后的情形相同。

提取局部特征

点集P是p1,…,pn的集合;Li也是集合,是集合P中某一点pi的临近点集,Li是包含于P的;DGCNN并不是从单点中学习特征,而是学习局部特征。所以分类是通过分类函数fc将所有点的局部点映射为一具体类别标签,分割是通过分割函数fs将每一点的临近点转化为该中心点的具体类别。

局部图结构


图是由顶点和边组成的,因此可以抽象的描述为:

顶点集合:点云中的每一个点都是一个顶点
边集合:两个点之间向量都可以看作是边
那么DGCNN并没有让每一个点与其余所有点都构成图结构,因为这种方法十分消耗内存,计算量也很大。所采用的方法是通过K个临近点(K-NN)为一点构建局部图结构。上面示意图中,pi就是点云中的某一点,pi1,pi2,pi3和pi4就是点pi的邻居点(临近点),只不过这张图示意了K为4的情形。
边是一个有方向的量,一个中心点和它的一个临近点可以构成一条边。因为每一个点其实都是由坐标组成的一个向量,两个向量相减,还是一个向量。那为什么叫做,“从临近点指向中心点的有向边”呢?

首先,DGCNN所构建的图是有向图,每个边是有具体指向的,在数学上实现有向是利用两个向量相见。根据三角形法则计算两个向量相减,就刚刚构造了从临近点指向中心点的一条有向边。所有临近点都执行这个操作,减去中心点,就构建出了以该点为中心的局部图。

※图特征提取

公式其实不吓人,待我一一道来。
神经网络是如何从这样的图结构中提取特征的呢?所谓每个顶点都有特征是什么意思呢?什么叫做用MLP去提取边特征呢?边又有什么特征呢?
要回答上面这些问题,不妨从张量形状的角度来理解。

实际上我们输入的点云是一个二维的矩阵。经过构建局部图这个操作,输入的数据就变为一个张量了。我们现在看一个Batch,也就是上面这个示意图。每一行是一个点的局部图,每一列代表这个局部图中的邻居点。
例如第一行第一列,代表了第0个点的第0个临近点
第一行第二列,代表了第0个点的第1个临近点
以此类推。
我们可以借助图像领域的概念来类比理解,上面示意图本质上就是一个图像。只不过,图像的行和列代表了像幅大小(分辨率),每个通道储存了RGB或者特征图的特征。在点云领域,行代表了不同的点,列代表了点的不同临近点,而通道则代表了点云属性。
图像卷积核大小为3×3,在点云领域,通常使用1×1,这变成了一个MLP,因为一个1×1的核是一个神经元,如果用64个这样的1×1卷积核就变成了64个神经元(一层有64个,有多层)。只不过这个MLP是参数共享的,也就是所谓的MLP提取边特征(每个通道存储的值实际上是相应的边eij)。
输入张量如果是(B,N,K,F),且一层神经元的个数是64的话,那么输出张量的形状为(B,N,K,64)。这个时候,我们按照顺序一行一行看(也就是一个点一个点的看),以每个通道为一个维度,比较这一行的最大值,取出来代替整个行的数值。这个操作就是沿着倒数第二个轴进行最大池化,即“从每个图中选取最主要的边特征”,得到的张量形状为(B,N,1,64),再把1给砍了变成(B,N,64),这样的话原始输入点为(B,N,3)就变为了(B,N,64),3个坐标值就变成了64维特征。
用公式的话表示为:

上面公式描述了提取图局部特征的过程,也就对应了上面示意图中的一个小蓝色格子。fe是局部特征提取函数,它要提取图G中的局部特征。这个图是某一点pi为中心点构建起的局部图,有K个临近点。因此,用MLP拟合h(x)函数,提取边特征。边一共有K个边,分别是ei1,ei2,…,eiK。因为DGCNN的边特征是由中心点的属性与边拼接而成的,然后使用MLP进行提取,所以MLP提取的过程就描述成h(pi,ei1),h(pi,ei2),…。上面讲到了最大池化,所以上式中取max(·)提取所有边的主要特征,它是和点序无关的,具备置换不变性。
对于用MLP提取特征,也有相应的数学描述:

以示意图中蓝格子为例,假如MLP一层有64个神经元,那么hc’(pi,eij)描述了其中一个神经元的计算过程。蓝格子中的所有的数值都应该是一个神经元的输入数据,因此,一个输入数据对应着一个权重参数。只不过上面式子第一行是分开写的,因为是pi与eij拼接成为蓝格子,所以用加号将带权重参数的两部分连接,加上一个偏置项b。至于下标的话,大C实际上是输入数据的通道数量。小c是从1开始,到大C。wc’c是第c’个神经元对于第c个通道的权重用来与中心点pi的第c个通道数值相乘,同理,wc’(c+C)是第c‘个神经元对于第c+C个通道的权重用来与边eij的第c个通道数值相乘。式子中的第二行描述了MLP的每一个神经元的提取过程,一共有C’个。

欢迎讨论,建议大家结合LDGCNN论文进行参考。
参考文献:
Zhang, Kuangen & Hao, Ming & Wang, Jing & Silva, Clarence & Fu, Chenglong. (2019). Linked Dynamic Graph CNN: Learning on Point Cloud via Linking Hierarchical Features.

DGCNN理解理论篇相关推荐

  1. 一步步教你轻松学朴素贝叶斯模型算法理论篇1

    一步步教你轻松学朴素贝叶斯模型理论篇1 (白宁超2018年9月3日17:51:32) 导读:朴素贝叶斯模型是机器学习常用的模型算法之一,其在文本分类方面简单易行,且取得不错的分类效果.所以很受欢迎,对 ...

  2. RabbitMQ学习总结 第一篇:理论篇

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  3. 解密回声消除技术之一(理论篇)

    http://hulong988.blog.51cto.com 解密回声消除技术之一(理论篇) 2009-06-11 22:24:58 标签:语音 职场 休闲 通讯 原创作品,允许转载,转载时请务必以 ...

  4. 【机器学习】Logistic Regression 的前世今生(理论篇)

    Logistic Regression 的前世今生(理论篇) 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如需转载,请附上 ...

  5. php switch 函数,PHP丨PHP基础知识之条件语SWITCH判断「理论篇」

    Switch在一些计算机语言中是保留字,其作用大多情况下是进行判断选择.以PHP来说,switch(开关语句)常和case break default一起使用 典型结构 switch($control ...

  6. 如何构建一个分布式爬虫:理论篇

    ## 前言 本系列文章计划分三个章节进行讲述,分别是理论篇.基础篇和实战篇.理论篇主要为构建分布式爬虫而储备的理论知识,基础篇会基于理论篇的知识写一个简易的分布式爬虫,实战篇则会以微博为例,教大家做一 ...

  7. 第4代白盒測试方法介绍--理论篇

    关键词: 白盒測试 第4代 測试方法 4GWM 在线測试 持续測试 灰盒 脚本驱动 脚本桩 摘  要: 本文是第4代白盒測试方法的理论介绍,描写叙述3个关键领域内9项关键特征的概念与固有特征.同一时候 ...

  8. python分布式爬虫系统_如何构建一个分布式爬虫:理论篇

    前言 本系列文章计划分三个章节进行讲述,分别是理论篇.基础篇和实战篇.理论篇主要为构建分布式爬虫而储备的理论知识,基础篇会基于理论篇的知识写一个简易的分布式爬虫,实战篇则会以微博为例,教大家做一个比较 ...

  9. Python并发编程理论篇

    Python并发编程理论篇 前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识 ...

最新文章

  1. 2 行代码,将 .NET 执行时间降低 87%!
  2. c++与Delphi中的类型转换
  3. Git学习——提交BUG
  4. 六十六,完成SpringBoot项目中的员工增删查改功能
  5. 51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释
  6. 沟通CTBS助六和集团实现财务集中管理
  7. matlab qtdecomp,Opencv图像识别从零到精通(25)------区域分裂与合并
  8. 厉害了!阿里安全图灵实验室在ICDAR2017 MLT竞赛刷新世界最好成绩
  9. MySQL笔记-group by和聚合函数的使用
  10. 今日头条架构演进之路——高压下的架构演进专题
  11. python安装lzo_hadoop-lzo 安装配置
  12. JavaScript 物体的运动
  13. Linux下定时切割nginx日志并删除指定天数前的日志记录
  14. oracle里面asm的作用,深入了解Oracle ASM(一):基础概念
  15. 简单易学的机器学习算法——Mean Shift聚类算法
  16. 03 学生免费注册Pycharm专业版
  17. 新浪微博PC端模拟登陆
  18. 疯狂英语(Chapter one)
  19. mysql 重命名库_MySQL 库名重命名
  20. maple 解代数方程组得多项式_Maple与数学实验

热门文章

  1. 浅谈模块化UPS对提高数据中心适应性的作用
  2. Hetero-ReID 综述
  3. 魔音Morin_v2.5.1电脑版 一款音乐神器
  4. 爬虫获取天气预报并可视化
  5. c语言99朵玫瑰花,抖音我要送你九十九朵玫瑰花歌曲名字完整歌词介绍
  6. 北大青鸟.网络工程师.2.0.教学PPT、素材和视频演示
  7. 网络编程_5(超时检测+UNIX域套接字+抓包工具+包头分析)
  8. 【Web前端大作业】基于HTML+CSS+JavaScript制作西北大学新闻网站(7页)
  9. ALS冰桶挑战案例详解
  10. java潜龙谍影,我的世界:下界合金装备有存在的必要吗?老玩家的看法与众不同...