程欣宇++龙慧云++李智++王丽会
摘 要:针对人工智能和大数据处理学习中存在的误区,提出一组有关SVD方法的图像处理教学实验,具体阐述实验步骤并详细说明如何引导学生自行设计该类实验。
关键词:机器学习;SVD算法;实验设计;矩阵分解;去噪
0 引 言
随着大数据和人工智能的兴起,计算机教学及大学生科技创新活动越来越需要学生掌握好线性代数、微积分、概率论等数学工具。传统线性代数一课高度抽象,教学过程中几乎不联系信息学科进行举例和实验。这导致计算机专业的学生即使理论课程考核分数高、程序设计动手能力强,也仍然容易误用理论。在本文中,我们设计了几例SVD用于图像处理的实验,既能够帮助学生直观地理解SVD的作用,又能够避免对矩阵分解性质错误套用。
1 SVD算法在应用中的误区
1.1 SVD算法简介
SVD也叫奇异值分解,是将一个矩阵A分解为正交阵V、U和对角阵S,使得
A = Vn×n Sn×m Um×m* (1)
其中V和U的列向量分别是左右奇异向量,对角阵的对角元素是奇异值。SVD具有很多很好的性质,如可以对非方阵进行分解,大的奇异值和对应的奇异向量可以近似表达原矩阵。这些性质也给SVD带来了数据压缩、去噪、主成分分析等功能。
为了便于理解SVD在图像处理中的物理意义,我们将式(1)展开,可以得到
A=Vn×n Sn×m Um×m*=v1s1u1*+ v2s2u2*+…+ vkskuk* (2)
其中vi是V中的第i列,ui*是U*中的第i行,si是第i个奇异值,k是原始图像矩阵的秩。一个长度为n的列向量乘以一个长度为m的行向量,将会得到一个n×m矩阵,和原始图像尺寸一样。原图A可以看成是k个图像的叠加,随着k的增加,sk逐渐变小,对A的影响也越来越小。
叠加的反向操作也就是分解,因此一副图像可以分解为若干个图像的叠加,也就是说,SVD图像分解考查的是图像的线性无关组,并且把线性无关组规范化为正交矩阵,然后用对角阵中的元素表示每幅子图像占原始图像量化数值的比重。这和DCT、FFT以及DWT做信号分解和重构处理,有一定的相似之处,不同之处在于DCT等用标准的正交基去分解图像,SVD更看重图像自身隐含的正交基,以解释/表达/重构图像。
1.2 误区1:只看效果却不深刻理解原理,任意用SVD“去噪”
噪声的概念比较主观,最早是指声音中起干扰作用的部分,然后逐步泛化到信号、图像乃至任意类型的信息中起干扰作用的成分。SVD将数据转换成若干主要成分(大的奇异值对应的奇异向量)来线性组合进行表达;对于主要成分不能线性表达的微弱部分,在应用中經常忽略。图1是文献[1]举例对图像去噪的实验截图。
文献[1]用k=3去噪,效果非常理想:噪点得到很好的平滑,边缘得到很好的保留。这符合人类认识字符图案的先验知识,因为无论从行或者列来看,该图的清晰图像,仅存在3个线性无关向量,所以这样去噪具有两个前提条件:一个是该图像行列的线性相关性,恰好是图像内在的规律;另一个是该图像行列的线性无关性,恰好集中了图像的噪声。这也是很多机器学习算法的教学中只展示算法神奇的一面,而对算法局限性未作分析的问题所在。
1.3 误区2:SVD的“旋转不变性”被误解为图像块发生旋转前后,进行SVD分解具有稳定的成分
在很多图像处理算法和图像特征提取算法如SIFT[2]、ORB[3]中,我们希望算法对图像发生了旋转后的处理效果是鲁棒的。碰巧的是,很多图像处理算法的资料如文献[4]中,在图像特征提取这节介绍了SVD具有旋转不变性,并未指出两种旋转的本质区别,导致缺少实验验证的学生会将两种旋转不变性混淆为一个概念。我们将通过实验和理论分析对此概念给予澄清。
2 演示实验步骤
2.1 展示SVD的显著效果
根据SVD能将图像在行/列向量上的主成分提取出来抽象表达的特点,教师可设计一张行列重复度比较高同时加上随机噪声的图像,如图2(a),再使用SVD进行去噪实验,可以得到图2(b)和2(c)。实验的matlab关键代码如下:
[V S U] =svd(A);%作SVD分解
k=1;v=V(:,1:k);s=S(1:k,1:k);u=U(:,1:k);%提取主要成分
B=v*s*u';%重构
图2(a)中的白点可以看成对计算机视觉中标定棋盘角点的检测结果,我们模拟了角点的缺失和外部的干扰有缺失。从中可以看到,简单几行代码就能够将原图缺失的白点补上,多余的白点消除。这个实验数据不是凭空构想的,而是在相机棋盘标定中实际可能碰到的数据处理问题。通过实验,我们也看到k=2时效果并不那么好。这时候可以将问题留给学生分析,最多提示从线性相关的角度进行考虑,并且可以让学生将上图改成浅灰的底色,结果k=2才能够效果完美,继续让学生分析原因。
学生可能从SVD分解得到的对角阵包含的奇异值大小中找到原因,也可能提出用一个固定阈值如95%筛选出前面比较重要的k个特征值,以给予算法更好的适用性。
2.2 分析背后存在的缺陷
将以上SVD接近完美去噪的用例稍作改变,如图3所示,可用于验证SVD对去噪和图像旋转的局限性。
对比图像旋转前后的奇异值,发现奇异值不像之前那样集中,去噪参数也很难调节,最好的效果介于k=35和k=36之间;然后再启发学生分析为什么图像仅仅旋转了2度,SVD的去噪效果就变得如此之差。
实验之后的理论分析:对一个矩阵A进行“旋转”,是对其所有行向量或者列向量施以相同的旋转变换。以对矩阵A的列向量旋转为例,就是对矩阵A左乘一个旋转阵P。因为A=VSU*,所以PA= PVSU*,其中PV是两个正交阵的乘积,仍然是一个正交阵,因而PV、S、U是PA的SVD,也就是说,A矩阵经过P旋转,再分解后的S和U是不变的,这才是SVD的旋转不变性。通过上述分析加深学生对矩阵变换的理解以后,还可以简单地澄清:图像旋转是2维/3维空间的旋转,矩阵旋转是n维空间的旋转,是两个不同的概念。这也是本次轻微的图像旋转实验中去噪效果骤降的原因。endprint
3 引导学生自行设计实验
3.1 补充理论和让学生提出假设
通过上述实验对比,学生已经认识到无论用SVD做图像去噪,还是用SVD做其他应用,都不能够随意地套用,需要注意其应用条件的限制。教师可让学生重新思考这个问题:将图像视为矩阵,进行矩阵分解,其本质是什么?效果是什么?通过启发学生进行假设和实验验证,学生会慢慢认识到图像矩阵的分解和重构,其運算的基本单位是行列向量。SVD去噪是利用行列向量之间存在的相关性,用奇异向量对应的行列线性组合后得到其他的行列,从线性相关的角度消除一定的数据冗余和噪声。
3.2 引导学生做验证实验的两种方向
为了进一步让学生加深理解,教师可以让学生自行设计实验,引导学生朝两个方向进行实验:①数据可以看成矩阵,并且数据的行列之间本身有较高的线性相关性,如推荐算法中,行坐标是用户,列坐标是商品,矩阵元素是用户对商品的评价值,则相同模式的用户对相同的商品评价和够买欲望,可以呈线性相关关系;②数据可以看成矩阵,但是数据的模式(规律)并不集中在行列的线性相关性上。强行用SVD分解会导致去噪、预测产生明显的错误。
4 结 语
学生从教师讲授中获取知识也好,从文献资料中自学也罢,由于知识表达不精准,使得知识本身也有“噪声”,特别是在抽象概念的教学上,这种误差极易被放大表达。在计算科学的教学中,我们既应该重视表达的准确性,又应该让学生注意到知识传递中可能存在的误差,利用好计算机方便构造实验进行验证的特点,培养学生质疑的精神和验证的能力。
参考文献:
[1] AMS. We recommend a singular value decomposition[EB/OL]. [2017-04-25]. http://www.ams.org/samplings/feature-column/fcarc-svd.
[2] Lowe D G. Distinctive image features from scale-invariant keypoints[J]. International Journal of Computer Vision, 2004(2): 91-110.
[3] Rublee E, Rabaud V, Konolige K, et al. ORB: An efficient alternative to SIFT or SURF[C]//ICCV. Barcelona: IEEE, 2011: 2564-2571.
[4] 刘海波, 沈晶, 岳振勋, 等. Visual C++ 数字图像处理[M]. 2版. 北京: 机械工业出版社, 2014: 392-423.
(编辑:宋文婷)endprint