【点云处理之论文狂读经典版9】—— Pointwise Convolutional Neural Networks
Pointwise-CNN: Pointwise Convolutional Neural Networks
- 摘要
- 相关工作
- Pointwise Convolution
- 实验
摘要
- 问题: 3D数据的深度学习领域吸引了很多人的注意,但是基于CNN的点云学习还没人注意到
- 方法: 本文提出一种用于点云语义分割和目标识别的卷积神经网络
- 技术细节: point-wise convolution操作可以被用于每个点 & fully convolutional network
- 代码: https://github.com/hkust-vgd/pointwise TensorFlow版本
相关工作
equivariance 与 invariance有什么区别吗?
Pointwise Convolution
Convolution
一个convolution kernel以点云中的每个点为中心。kernel中的neighbor points可以对center point产生影响。每个kernel都有一个size或radius,可以根据每个卷积层中neighbor points的数量进行调整。pointwise convolution可以表示为:
x i ℓ = ∑ k w k 1 ∣ Ω i ( k ) ∣ ∑ p j ∈ Ω i ( k ) x j ℓ − 1 x_{i}^{\ell}=\sum_{k} w_{k} \frac{1}{\left|\Omega_{i}(k)\right|} \sum_{p_{j} \in \Omega_{i}(k)} x_{j}^{\ell-1} xiℓ=k∑wk∣Ωi(k)∣1pj∈Ωi(k)∑xjℓ−1
其中, k k k遍历kernel support中的所有sub-domains。 Ω i ( k ) \Omega_{i}(k) Ωi(k)是以点 i i i为中心的kernel的第 k k k个sub-domain。 p i p_{i} pi是点 i i i的坐标。 ∣ ⋅ ∣ |\cdot| ∣⋅∣是sub-domain中所有点的数量。 w k w_{k} wk 是第 k k k个sub-domain中的kernel权重, x i x_{i} xi 和 x j x_{j} xj表示点 i i i 和 点 j j j处的值, ℓ − 1 \ell-1 ℓ−1 和 ℓ \ell ℓ是输入和输出层的索引。
结合图1更好理解,把中心点附近的区域分成栅格,每个栅格内的特征先相加然后用密度归一化,最后再乘以栅格内的卷积权重得到一个栅格的特征,多个栅格的特征相加得到新的特征。
Gradient backpropagation
为了保证pointwise convolution可训练,有必要计算输入数据和kernel权重相关的梯度。令 L L L 为损失函数,与输入相关的梯度可以定义为:
∂ L ∂ x j ℓ − 1 = ∑ i ∈ Ω j ∂ L ∂ x i ℓ ∂ x i ℓ ∂ x j ℓ − 1 \frac{\partial L}{\partial x_{j}^{\ell-1}}=\sum_{i \in \Omega_{j}} \frac{\partial L}{\partial x_{i}^{\ell}} \frac{\partial x_{i}^{\ell}}{\partial x_{j}^{\ell-1}} ∂xjℓ−1∂L=i∈Ωj∑∂xiℓ∂L∂xjℓ−1∂xiℓ
其中给定点 j j j,我们遍历所有的neighbor points i i i。遵循着chain rule, ∂ L / ∂ x i ℓ \partial L / \partial x_{i}^{\ell} ∂L/∂xiℓ是反向传播中向上到一层 ℓ \ell ℓ的梯度, ∂ x i ℓ / ∂ x j ℓ − 1 \partial x_{i}^{\ell} / \partial x_{j}^{\ell-1} ∂xiℓ/∂xjℓ−1可以写成:
∂ x i ℓ ∂ x j ℓ − 1 = ∑ k w k 1 ∣ Ω i ( k ) ∣ ∑ p j ∈ Ω i ( k ) 1 \frac{\partial x_{i}^{\ell}}{\partial x_{j}^{\ell-1}}=\sum_{k} w_{k} \frac{1}{\left|\Omega_{i}(k)\right|} \sum_{p_{j} \in \Omega_{i}(k)} 1 ∂xjℓ−1∂xiℓ=k∑wk∣Ωi(k)∣1pj∈Ωi(k)∑1
相似地,与kernel权重相关的梯度可以通过遍历所有的点 i i i进行定义:
∂ L ∂ w k = ∑ i ∂ L ∂ x i ℓ ∂ x i ℓ ∂ w k \frac{\partial L}{\partial w_{k}}=\sum_{i} \frac{\partial L}{\partial x_{i}^{\ell}} \frac{\partial x_{i}^{\ell}}{\partial w_{k}} ∂wk∂L=i∑∂xiℓ∂L∂wk∂xiℓ
其中:
∂ x i ℓ ∂ w k = 1 ∣ Ω i ( k ) ∣ ∑ p j ∈ Ω i ( k ) x j ℓ − 1 \frac{\partial x_{i}^{\ell}}{\partial w_{k}}=\frac{1}{\left|\Omega_{i}(k)\right|} \sum_{p_{j} \in \Omega_{i}(k)} x_{j}^{\ell-1} ∂wk∂xiℓ=∣Ωi(k)∣1pj∈Ωi(k)∑xjℓ−1
本文使用的convolution kernels大小为 3 × 3 × 3 3 \times 3 \times 3 3×3×3,每个kernel单元里的点的权重都是一样的。
与在volumes中的卷积不同,本文中的网络没有pooling,不使用pooling的原因为:
- 不用再对点云进行下采样和上采样,当点云被映射到高维空间时,下采样和上采样操作是很麻烦的
- 相邻点的搜寻操作只需要建立一次就行
Point order
在PointNet中,输入点云是无序的,后续处理过程会学习对称函数进行处理。
在我们的方法中,输入点云是有特定顺序的,XYZ或是Morton curve。在object recognition任务中,点的顺序会影响最终的全局特征向量。在semantic segmentation,顺序就无所谓了。
`A-trous convolution
引入stride参数,可以扩展kernel大小,从而扩展感知域,而无需在卷积中处理太多的点。这在不牺牲我们实验中所证明的精度的情况下显著地提升了速度。
Point attributes
为了更容易地实现convolution operator,分别存储了点的坐标和其他 attributes (颜色、法向量、或者其他从前面一层输出的高维度特征)。无论层数有多深,点的坐标都可以被用于相邻点的搜索。
实验
Semantic segmentation
S3DIS dataset:
SceneNN dataset:
Object recognition
Convergence
Ablation experiments
Point order & Neighborhood radius
Morton curve 方法会使得点在内存上的存储离得很近
Deeper networks
Running time
Intel Core i7 6900K with 16 threads:
- forward convolution 1.272 seconds
- backward propagation 2.423 seconds
NVIDIA TITAN X speed up 10%
Layer visualization
【点云处理之论文狂读经典版9】—— Pointwise Convolutional Neural Networks相关推荐
- 【点云处理之论文狂读前沿版3】——Point Transformer
Point Transformer 摘要 1. 引言 2. 相关工作 3. Point Transformer 3.1 Background 3.2 Point Transformer Layer 3 ...
- 【点云处理之论文狂读前沿版7】—— Masked Autoencoders for Point Cloud Self-supervised Learning
Masked Autoencoders for Point Cloud Self-supervised Learning 摘要 1.引言 3. Point-MAE 3.1 Point Cloud Ma ...
- 【点云处理之论文狂读前沿版6】Surface Representation for Point Clouds
用Surface表示点云 摘要 1.引言 2.相关工作 2.1. Learning on Point Clouds 2.2. Detection on Point Clouds 2.3. Graphi ...
- 【点云处理之论文狂读前沿版11】—— Unsupervised Point Cloud Pre-training via Occlusion Completion
OcCo:Unsupervised Point Cloud Pre-training via Occlusion Completion 摘要 引言 方法 Generating Occlusions T ...
- 经典DL论文研读(part4)--ImageNet Classification with Deep Convolutional Neural Networks
学习笔记,仅供参考,有错必纠 文章目录 ImageNet Classification with Deep Convolutional Neural Networks 摘要 Introduction ...
- 【读点论文】EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks网络结构要像身材一样匀称且体量和处理能力匹配
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks Abstract 卷积神经网络(ConvNets)通常 ...
- 【论文详读】Overcoming catastrophic forgetting in neural networks
摘要 为了缓解神经网络灾难性遗忘,作者们提出了一种类似于人工神经网络突触巩固的算法(EWC).该方法通过选择性地放慢对那些任务重要权重的学习来记住旧任务,即该方法会根据权重对之前看到的任务的重要性来减 ...
- 论文笔记 - 《ImageNet Classification with Deep Convolutional Neural Networks》 精典
基于卷积神经网络的图像分类(经典网络) 作者:Alex Krizhevsky(论文中第一作者的名字为网络名字AlexNet) 单位:加拿大多伦多大学 发表会议时间:NIPS 2012 (NIPS:机器 ...
- AlexNet论文翻译《ImageNet Classification with Deep Convolutional Neural Networks》
摘要 我们训练了一个大型深度卷积神经网络来将ImageNet LSVRC-2010竞赛的120万高分辨率的图像分到1000不同的类别中.在测试数据上,我们得到了top-1 37.5%, top-5 1 ...
最新文章
- linux c之用命名管道实现进程通信
- Python自动化运维工具fabric的安装
- Depth-first Search深度优先搜索专题2
- android 查找所有dialog_android 布局文件layout分组的简单使用
- 获取pycharm 2016.1.4 注册码 (window系统) 2016.3注册码(Ubuntu系统)
- (二十六)java版spring cloud+spring boot 社交电子商务平台-Eureka介绍
- prestashop后台如何删除订单
- 367.有效的完全平方数
- Win10升级到最新版本
- 汇编语言c标志位减法,5.2.3-2减法指令 - 汇编语言教程
- 像素和厘米怎么换算_像素 amp;amp; 分辨率的那段剪不断理还乱的关系
- SQL Server上月同期 日期的计算
- 【我的OpenGL学习进阶之旅】学习OpenGL ES 3.0 的实战 Awsome Demo (上)
- python模拟太阳系_模拟太阳系8大行星运行图:matplotlib实现
- 升级笔记本CPU的常见知识汇总
- 【附源码】计算机毕业设计java在线教学系统设计与实现
- Dell 服务器错误代码
- 售价五万,4.6升/百公里,它们是国内油耗最低的车
- 转载:图像滤波概念知识解释
- 会计们,擦亮眼睛,不要因为不能报销的发票让自己成为背锅侠!