部分关键:
对称函数:
在对称函数中,函数的输出值不随输入变数的排列而改变。从函数的形式中可以看出若输入变数排列后,方程式不会改变。例如对于一个球体.若 φ 为其方位角,θ为其天顶角,r为半径,则大圆距离可以表示为
根据上述的距离公式,可以看出一些对称性,在以下变换下,距离不变:
- 天顶角各加某特定角度。
- 其方位角对调、天顶角对调,或是两者都对调。
我们经常看到的SUM和MAX等函数其实都是对称函数。
quantization artifacts:
量化伪影,视频压缩过程中的量化噪声导致称作“伪影” 的特定视觉误差。
变换模型:
变换模型 是指根据待匹配图像与背景图像之间几何畸变的情况,所选择的能最佳拟合两幅图像之间变化的几何变换模型。可采用的变换模型有如下几种:刚性变换、仿射变换、透视变换和非线形变换等,如下图:
如果一幅图像中的两点间的距离经变换到另一幅图像中后仍然保持不变,则这种变换称为刚体变换(Rigid?Transform)。。刚体变换仅局限于平移、旋转和反转。
如果一幅图像中的直线经过后映射到另一幅图像上仍为直线,并且保持平行关系,则这种变换称为仿射变换(Affine?Transform)。。仿射变换适应于平移、旋转、缩放和反转。
如果一幅图像中的直线经过后映射到另一幅图像上仍为直线,但平行关系基本不保持,则这种变换称为投影变换(Projective?Transform?)。
非线性变换又称为弯曲变换,经过非线性变换,一幅图像上的直线映射到另一幅图像上不一定是直线,可能是曲线。
对称不只出现在几何学中,也在数学领域的其他分支中出现,对称其实就是不变量,是指某特性不随数学转换而变化。
若一个物件可以借由另一个物件的不变转换来得到,二个物件借由不变转换有互相对称关系,这是一种等价关系。
在对称函数中,函数的输出值不随输入变数的排列而改变,这些排列形成一个群,也就是对称群。在欧几里得几何中的等距同构中,也有使用“对称群”一词,更广泛的用法是自同构群。
支持向量机:
支持向量机(Support Vector Machine, SVM) 是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane) 。
SVM使用铰链损失函数(hinge loss)计算经验风险(empirical risk)并在求解系统中加入了正则化项以优化结构风险(structural risk),是一个具有稀疏性和稳健性的分类器 。SVM可以通过核方法(kernel method) 进行非线性分类,是常见的核学习(kernel learning) 方法之一。
语义分割说到底还是一个分类任务,既然是分类任务,预测的结果往往就是四种情况:
- true positive(TP)
- false positive(FP)
- true negative(TN)
- false negative(FN)
mIOU的定义:计算真实值和预测值两个集合的交集和并集之比。这个比例可以变形为TP(交集)比上TP、FP、FN之和(并集)。即:mIOU=TP/(FP+FN+TP)。
1.K-Fold 交叉验证概念
在机器学习建模过程中,通行的做法通常是将数据分为训练集和测试集。测试集是与训练独立的数据,完全不参与训练,用于最终模型的评估。在训练过程中,经常会出现过拟合的问题,就是模型可以很好的匹配训练数据,却不能很好在预测训练集外的数据。如果此时就使用测试数据来调整模型参数,就相当于在训练时已知部分测试数据的信息,会影响最终评估结果的准确性。通常的做法是在训练数据再中分出一部分做为验证(Validation)数据,用来评估模型的训练效果。
验证数据取自训练数据,但不参与训练,这样可以相对客观的评估模型对于训练集之外数据的匹配程度。模型在验证数据中的评估常用的是交叉验证,又称循环验证。它将原始数据分成K组(K-Fold),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型。这K个模型分别在验证集中评估结果,最后的误差**MSE(Mean Squared Error)**加和平均就得到交叉验证误差。交叉验证有效利用了有限的数据,并且评估结果能够尽可能接近模型在测试集上的表现,可以做为模型优化的指标使用。
下面举一个具体的例子来说明K-Fold的过程,比如如下的数据
[0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
分为K=3组后
Fold1: [0.5, 0.2]
Fold2: [0.1, 0.3]
Fold3: [0.4, 0.6]
交叉验证的时会使用如下三个模型,分别进行训练和测试,每个测试集误差MSE加和平均就得到了交叉验证的总评分
Model1: Trained on Fold1 + Fold2, Tested on Fold3
Model2: Trained on Fold2 + Fold3, Tested on Fold1
Model3: Trained on Fold1 + Fold3, Tested on Fold2
PointNet:
点云是几何数据结构的重要类型。 由于其格式不规则,大多数研究人员将这些数据转换为规则的三维体素网格或图像集合。 但是,这会导致数据不必要的庞大并导致问题。 他们设计了一种直接消耗点云的新型神经网络,保留了输入点中的点的置换不变性。
在这项工作中,提出了一种新的直接消耗点云的深度神经网络PointNet。 我们的网络为许多3D识别任务提供了一个统一的方法,包括对象分类,零件分割和语义分割,同时获得比标准基准上的艺术状态更好的结果。
PointNet非常高效。 从经验上讲,它表现出强劲的表现,甚至比现有技术更好。
PointNet对输入点的小扰动以及通过点插入(异常值)或删除(缺失数据)的腐败非常稳健。
预处理:
PointNet消耗原始点云(点集) 而不需要体素化或渲染。 这是一个统一的架构,可以学习全局和局部点特征,为大量3D识别任务提供简单,高效和有效的方法。
PointNet直接将点云作为输入,并为输入的每个点输出整个输入的每个分类标签或每个点分段/每个零件标签。在初始阶段,每个点都被相同和独立地处理。 为了简单和清楚,除非另有说明,否则仅仅 使用 ( x,y,z ) 坐标作为点的通道 ,可以通过计算法线和其他本地或全局特征来添加其他维度。
关键方法是使用一个单一的对称函数,最大池。 有效地,网络学习一组优化函数/标准,选择点云的有趣点或信息点并对其选择原因进行编码。 网络的最终完全连接层将这些学习到的最优值汇总为上述整体形状(形状分类)的全局描述符或用于预测每个点标签(形状分割)。
因为输入格式很容易应用刚性或仿射变换(每个点都独立变换)。 因此,添加了一个依赖数据的空间转换网络,在PointNet处理它们之前尝试对数据进行规范化处理,以便进一步改进结果。
模型:
PointNet架构:分类网络将n个点作为输入,应用输入和特征变换,然后通过最大池来聚合点要素。 输出是k类的分类分数。分段网络是分类网络的扩展。 它将每个点的全局和局部特征和输出连接在一起。(“mlp”代表多层感知器,括号中的数字是层大小。 Batchnorm用于ReLU的所有层。Dropout图层用于分类网中的最后一个mlp。)
T-Net:
这个T-Net 就是一个3*3的矩阵,就相当于对点云做了一次旋转变换;
空间变换网络解决旋转问题:三维的STN可以通过学习点云本身的位姿信息学习到一个最有利于网络进行分类或分割的DxD旋转矩阵(D代表特征维度,pointnet中D采用3和64)。至于其中的原理,我的理解是,通过控制最后的loss来对变换矩阵进行调整,pointnet并不关心最后真正做了什么变换,只要有利于最后的结果都可以。pointnet采用了两次STN,第一次input transform是对空间中点云进行调整,直观上理解是旋转出一个更有利于分类或分割的角度,比如把物体转到正面;第二次feature transform是对提取出的64维特征进行对齐,即在特征层面对点云进行变换。
关键技术:
三个关键模块:
无序输入的对称函数: 为了使模型对输入置换不变,存在三种策略: 1) 将输入分类为规范的顺序; 2) 将输入视为训练RNN的序列,但通过各种排列来增加训练数据; 3) 使用简单的对称函数来聚合每个点的信息。 这里,一个对称函数将n个向量作为输入,并输出一个对输入顺序不变的新向量。 通过在集合中的变换元素上应用对称函数来逼近定义在点集上的一般函数。
本地和全局信息汇总 :可以轻松地训练支持分类的全局形状特征的SVM或多层感知器分类器。 但是,点分割需要结合本地和全局知识。解决方案–分割网络。 在计算全局点云特征向量之后,通过将全局特征与每个点特征相连接,将其反馈给每点特征。 然后我们基于组合的点特征提取新的点特征 - 这次点特征都知道本地和全局信息。
联合调整网络 :如果点云经历了某些几何变换,则点云的语义标签必须是不变的。 我们通过微型网络(图2中的T-net)预测仿射变换矩阵,并将该变换直接应用于输入点的坐标。