IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> KPConv 论文学习笔记 -> 正文阅读

[人工智能]KPConv 论文学习笔记

作者:recommend-item-box type_blog clearfix

Motivation

传统的2D卷积神经网络只能运用在固定的数据结构中,而对于三维的数据没办法很好的处理。对于点云数据来讲,点云有三维坐标加上特征,而且是无序的,但是点云的空间位置是包含有信息的,所以如何利用这样的信息对点云数据的处理非常重要。

Introduction

通过对于核点(kernel point)赋予权重矩阵并通过其定义空间,每一个核点的影响范围由一个函数确定。核点的个数是可变的。

同时在基础模型之上还提出了一个deformable版本的卷积。这种模型在每个卷积位置(核点)产生不同的偏移,这意味着它可以为输入云的不同区域调整其核点分布的形状。

Advantages

  • 鲁棒性,相较于K-nearest-neighbors来讲,KNN对于不规则采样的数据鲁棒性较差。而该模型的鲁棒性更好,这取决于模型将一定半径内的邻接节点特征聚合在一起并且定期的对点云进行sub sampling。
  • 在卷积操作上计算速度更快。
  • rigid KPConv在更简单的任务上表现更好,例如物体分类或者小数据集上的语义分割。deformable KPConv 在更复杂的任务上效果更好,例如更大规模数据集上的语义分割,而且它在核点数更少的时候的鲁棒性更强

Architecture

A Kernel Function Defined by Points

首先对于点云中的点(三维坐标) x i x_i xi?的定义为 P ∈ R N × 3 P\in R^{N\times3} PRN×3点的特征定义为 F ∈ R N × D F\in R^{N\times D} FRN×D x x x为球心, r r r为半径确定一个球体,落在该球体内的点将作为点 x x x的邻居点,邻居点的定义为
N x = { x i ∈ P ∣ ? ∣ ∣ x i ? x ∣ ∣ ≤ r } N_x=\{x_i\in P|\ ||x_i-x||\leq r\} Nx?={xi?P?xi??xr}
在球体中找出 K K K个点,作为核心点(kernel points)。核心点并不是点云中的点,而是通过特定规则计算出来的一些特殊的位置, K K K个核心点的定义为:
{ x ~ k ∣ k < K } ? B r 3 \{\tilde{x}_k|k<K\}\sub B_r^3 {x~k?k<K}?Br3?
对于每一个核心点 x i x_i xi?,都有一个权重矩阵 W k W_k Wk?与之对应。 W k W_k Wk?的定义为:
{ W k ∣ k < K } ? R D i n × D o u t \{W_k|k<K\}\sub R^{D_{in}\times D_{out}} {Wk?k<K}?RDin?×Dout?
y i = x i ? x y_i=x_i-x yi?=xi??x用于表示和 x x x的邻居结点,对于任意的 y i y_i yi?定义核函数 g g g为:
g ( y i ) = ∑ k < K h ( y i , x ~ k ) W k g(y_i)=\sum_{k<K}h(y_i,\tilde{x}_k)W_k g(yi?)=k<K?h(yi?,x~k?)Wk?
直观上理解, g ( y i ) g(y_i) g(yi?)相当于对 K K K个权重矩阵加权求和。其中权重系数 h ( y i , x k ) h(y_i,x_k) h(yi?,xk?)定义为:
h ( y i , x k ) = m a x ( 0 , 1 ? ∣ ∣ y i ? x ~ k ∣ ∣ σ ) h(y_i,x_k)=max(0,1-\frac{||y_i-\tilde{x}_k||}{\sigma}) h(yi?,xk?)=max(0,1?σyi??x~k??)
其中 σ \sigma σ表示核点的影响距离,这个通过输入的点的密度来进行赋值。 ∣ ∣ y i ? x ~ k ∣ ∣ ||y_i-\tilde x_k|| yi??x~k?表示中心点的邻居结点到核心点的距离。

对于每一个权重矩阵 W k W_k Wk?的系数,由 W k W_k Wk?对应的核心点 x ~ i \tilde x_i x~i? y i y_i yi?的相对距离来确定。相对距离越小,权重越大,最大值为1;相对距离越大,权重值越小。直观的解释:距离越近,相关性越大,结果越大;反之亦然。

最后,点 x x x处的核心点卷积KPConv定义为:对每个邻居点 x i x_i xi?的特征 f i f_i fi?,分别用矩阵 g ( x i ? x ) g(x_i-x) g(xi??x)变换后,累加起来:
( F ? g ) ( x ) = ∑ x i ∈ N x g ( x i ? x ) f i (F*g)(x)=\sum_{x_i\in N_x}g(x_i-x)f_i (F?g)(x)=xi?Nx??g(xi??x)fi?

在这里插入图片描述

总的来讲,KPConv的大致思路如下:

  1. 以点 x x x为球心确定一个球体;
  2. 在球体内确定若干个核心点,每个核心点带一个权重矩阵;
  3. 对于落在球体范围内的任意点,用核函数,计算出该点的权重矩阵,用该矩阵对这个点的feature进行变换;
  4. 对于落在球体内的每个点,都用上一步的方法,得出一个新的feature,最后将feature累加起来,作为点 x x x的feature。

Rigid or Deformable Kernel

Rigid KPConv

对于rigid版本的KPConv来讲,首先球体的中心会作为一个核点,然后对其它核点产生一个吸引力,其它不同核点之间则是产生一个排斥力,这些点被限制在具有吸引力的球面上。最终,周围的点被限制在平均半径1.5σ,确保每个Kernel Points之间的影响力有小幅度的重叠

具体的数学推导是求解一个优化问题,希望K个Kernel Points在球面上离得足够远,又离球心不要太远。目标方程的第一部分是希望Kernel Points之间彼此不要太近:
? x ∈ R 3 , E k r e p ( x ) = 1 ∣ ∣ x ? x k ~ ∣ ∣ \forall x\in R^3,E_k^{rep}(x)=\frac{1}{||x-\tilde{x_k}||} ?xR3,Ekrep?(x)=x?xk?~?1?
第二个部分是希望与中心点不要太远
? x ∈ R 3 , E a t t ( x ) = ∣ ∣ x 2 ∣ ∣ \forall x\in R^3,E^{att}(x)=||x^2|| ?xR3,Eatt(x)=x2
所以,最后的目标方程如下:
E t o t = ∑ k < K ( E a t t ( x ~ k ) + ∑ l ≠ k E k r e p ( x ~ l ) ) E^{tot}=\sum_{k<K}(E^{att}(\tilde{x}_k)+\sum_{l\neq k}E^{rep}_k(\tilde{x}_l)) Etot=k<K?(Eatt(x~k?)+l?=k?Ekrep?(x~l?))
通过论文的实验结果可以选取不同的超参数K所得到的Kernel Point的位置

在这里插入图片描述

Deformable KPConv

motivation: 论文首先考虑给予不同的层不同的初始化Kernel Points,但是最后认为这样并不能给予网络更多的表述能力,所以最后论文参考了Deformable Convolution Networks。

对于每一个卷积的位置(kernel point)生成一个偏移,然后将deformable KPConv定义成:
( F ? g ) ( x ) = ∑ x i ∈ N x g d e f o r m ( x i ? x , Δ x ) f i (F*g)(x)=\sum_{x_i\in N_x}g_{deform}(x_i-x,\Delta x)f_i (F?g)(x)=xi?Nx??gdeform?(xi??x,Δx)fi?

g d e f o r m ( y i , Δ ( x ) ) = ∑ k < K h ( y i , x ~ k + Δ k ( x ) ) W k g_{deform}(y_i,\Delta (x))=\sum_{k<K}h(y_i,\tilde{x}_k+\Delta_k(x))W_k gdeform?(yi?,Δ(x))=k<K?h(yi?,x~k?+Δk?(x))Wk?

其中偏移量的获得也是通过rigid KPConv学习得到,其中此处模型的输入维度为 D i n D_{in} Din?输出维度为 3 K 3K 3K,因为一共有 K K K个点,然后在 x y z xyz xyz三个坐标轴上产生偏移。(这一块不是特别理解是拿什么作为输入去学习)

但是,这种对图像可变形卷积的直接调整并不适合点云。在实践中,内核点最终被拉离了输入点。这是因为当核点附近没有点在他的影响范围的时候,它的shift的梯度会变成null。为了解决这个问题文中提出了两个loss,fitting loss用来使得这些Kernel Points形状与点云相似(所有邻居点到核点的距离之和尽可能小),repulsive loss 使得她们彼此之间不会太近(h是一个计算距离的函数,k和l分别表示两个核点)。
在这里插入图片描述

Kernel Point Network Layers

Subsampling to deal with varying densities

为了实现点云的空间一致性,保证其在空间中各个位置的密度基本相同,我们通过grid subsampling的方法来实现。因此对于点云所有输入的点,我们最后保留了每一个格栅的质心对应的点。

Pooling layer

为了创造一个多层次的结构,我们需要在每一层逐渐减少点的数量。由于已经有了subsampling,在每一个pooling层的格栅大小以及其他相关的参数都增加一倍,逐步增加KPConv的感知域。

KPConv layer

imput:

  1. points : p ∈ R N × 3 p\in R^{N\times3 } pRN×3
  2. feature: F ∈ R N × D i n F\in R^{N\times D_{in}} FRN×Din?
  3. 邻居结点的索引矩阵 n ∈ [ 1 , N ] N ′ × n m a x n\in[1,N]^{N^\prime \times n_{max}} n[1,N]N×nmax?。其中 N ′ N^\prime N表示需要产生邻居卷积运算的位置的数量(球形区域的数量), n m a x n_{max} nmax?表示邻居矩阵中最多的邻居数。

Kernel Point Network Architecture

Convolution block

在这里插入图片描述

模型的卷积块采用的是ResNet的形式。下图使用的就是上图的卷积块,其中不清楚的是stride KPconv和KPConv的区别在哪。

在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-01-17 11:30:57  更:2022-01-17 11:32:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 21:19:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码