• 初识压缩感知Compressive Sensing


    压缩感知是近年来极为热门的研究前沿,在若干应用领域中都引起瞩目。最近粗浅地看了这方面一些研究,对于Compressive Sensing有了初步理解,在此分享一些资料与精华。本文针对陶哲轩和Emmanuel Candes上次到北京的讲座中对压缩感知的讲解进行讲解,让大家能够对这个新兴领域有一个初步概念。

    compressive sensing(CS) 又称 compressived sensing ,compressived sample,大意是在采集信号的时候(模拟到数字),同时完成对信号压缩之意。中文的翻译成“压缩感知”,意思变得至少不太好理解了。

    Compressed sensing is a mathematical tool that creates hi-res data sets from lo-res samples. It can be used to resurrect old musical recordings, find enemy radio signals, and generate MRIs much more quickly. Here’s how it would work with a photograph.

     

     

     

     

    /***********************Compressive Sensing研究背景***********************/

    (1)CS大约是2000年左右的一篇博士论文中,已经出现了雏形。后来被陶哲轩,C牛(Emmanuel Candes)和D(Donoho)牛,完善理论。这几位顶尖高手联手挖出了信号处理领域、机器学习领域,近10年最大的学术大坑。
    2004年左右,大牛们聊天,觉得要起一个简单的名字,因为理论本身是“通过对信号的高度不完备线性测量的高精确的重建”,如果这样名字不响,不能起到理论推广作用。所以就成了现在的名字"compressive sensing"。


    (2)陶哲轩,是这个世界上最聪明的人,他怎么会关注到CS呢?陶哲轩是这个世界上搞调和分析的顶尖高手之一(当然他别的方面也很厉害)。 压缩感知的发现是一次意外,话说一天,当时是加州理工学院教授(现在去了斯坦福)的Emmanuel Candès在研究名叫Shepp-Logan Phantom的图像,这种标准图像常被计算机科学家和工程师测试图像算法。Candès检查的图像质量非常差,充满了噪声,他认为名叫L1-minimization的数学算法能去除掉噪声条纹,结果算法真的起作用了,突然就觉得好神奇哦,“It was as if you gave me the first three digits of a 10-digit bank account number — and then I was able to guess the next seven,” he says.  He tried rerunning the experiment on different kinds of phantom images; they resolved perfectly every time.。而且在图像变干净的同时,他发现图像的细节出人意料的完美起来。

    某一日Candes去幼儿园接孩子,正好遇上了也在接孩子的陶哲轩,两人攀谈的过程中他提到了自己手头的困难,于是陶哲轩也开始想这个问题,它们成为两人合作的压缩感知领域第一篇论文的基础。Emmanuel Candès认为压缩感知(简写CS)技术具有广阔的应用前景,比如MRI,数码相机。数码相机镜头收集了大量的数据,然后再压缩,压缩时丢弃掉90%的数据。如果有CS,如果你的照相机收集了如此多的数据只是为了随后的删除,那么为什么不一开始就丢弃那90%的数据,直接去除冗余信息不仅可以节省电池电量,还能节省空间。

     

     

     

    /***********************大牛介绍***********************/

    陶哲轩澳籍华人数学家,童年时期即天资过人,目前主要研究调和分析偏微分方程组合数学解析数论表示论。24岁起,他在加利福尼亚大学洛杉矶分校担任教授。他现在为该校终身数学教授。

    Emmanuel Candes (C牛)是斯坦福大学的数学、统计学,电子工程荣誉教授,同时也是应用计算数学领域的教授。他的 研究领域主要是在这种数学协调分析、数学优化、统计估测,以及在影像科学、信号研究。 Emmanuel Candes 教 授曾获数项国际奖项,包括国家科学基金会最高个人奖项(该奖项主要奖励 35 岁以下的学者)、 2008 年信息社 会理论论文奖,以及国际行业应用数学学会授予的奖项等等。

    David Donoho   WaveLab是小波和相关的时频变换的一个Matlab例程库,由美国斯坦福大学的donoho维护

     

     

     

     


    /***********************基本思想***********************/

    压缩感知的概念:

    将未知的要获得的信号记为AK,它是一个波形。我们希望它越不连续越好,越扩散越好,而我所要做的是按照 一定的顺序获得图像信号的信息。我们按照高斯分布来收集数据,而不是线性的,所以我们只会有少量的感测次数,而这些数据 的相关性非常低。

    压缩的意思,是指比较先前及当前数据的差异,并记录下这些差异而减少 需储存的资料量。对于压缩感知的问题比压缩难多了,像是我们要收集怎样分布的数据、如何收集、保留一些什 么系数,从而得到最佳的结果。我们会得到一些机变,保留最大的,最有意义的系数在里头。我们可以做一些抽样,把最重要的保留下来。一个信号,我们知道它是非常好的,但这个信号完全是稀疏的,可能并不是我们要损失掉的。

    对核磁共振的图像,来看一下这些系数, 6000 个不连续性系数,我说我们只 要看 1800 不连续的测量,让我们看有什么变化,让我们看看重建后的图片,这些图片是非常接近真实图像的, 我们可以用少于三倍或甚至四倍的测量次数而得到一个非常接近的结果。


     

    感知压缩难点在于,压缩后的数据并不是压缩前的数据的一个子集,并不是说,本来有照相机的感光器上有一千万个像素,扔掉其中八百万个,剩下的两百万个采集到的就是压缩后的图像,──这样只能采集到不完整的一小块图像,有些信息被永远的丢失了而且不可能被恢复。

    如果要想采集很少一部分数据并且指望从这些少量数据中「解压缩」出大量信息,就需要保证:第一:这些少量的采集到的数据包含了原信号的全局信息,第二:存在一种算法能够从这些少量的数据中还原出原先的信息来。


    有趣的是,在某些特定的场合,上述第一件事情是自动得到满足的。最典型的例子就是医学图像成像,例如断层扫描(CT)技术和核磁共振(MRI)技术。对这两种技术稍有了解的人都知道,这两种成像技术中,仪器所采集到的都不是直接的图像像素,而是图像经历过全局傅立叶变换后的数据。也就是说,每一个单独的数据都在某种程度上包含了全图像的信息。在这种情况下,去掉一部分采集到的数据并不会导致一部分图像信息永久的丢失(它们仍旧被包含在其它数据里)。这正是我们想要的情况。
    上述第二件事就要归功于陶哲轩和坎戴的工作了。他们的工作指出,如果假定信号(无论是图像还是声音还是其他别的种类的信号)满足某种特定的「稀疏性」,那么从这些少量的测量数据中,确实有可能还原出原始的较大的信号来,其中所需要的计算部分是一个复杂的迭代优化过程,即所谓的「L1-最小化」算法。

    把上述两件事情放在一起,我们就能看到这种模式的优点所在。它意味着:我们可以在采集数据的时候只简单采集一部分数据(「压缩感知」),然后把复杂的部分交给数据还原的这一端来做,正好匹配了我们期望的格局。在医学图像领域里,这个方案特别有好处,因为采集数据的过程往往是对病人带来很大麻烦甚至身体伤害的过程。以 X 光断层扫描为例,众所周知 X 光辐射会对病人造成身体损害,而「压缩感知」就意味着我们可以用比经典方法少得多的辐射剂量来进行数据采集,这在医学上的意义是不言而喻的。

     

     

     



    /***********************基本概念详细说明举例***********************/

    本部分为陶哲轩在一篇blog中对于comprehensive sensing 文章翻译过来的精华部分,提取了重点,并加入了一些理解,这里用来解释CS的概念堪称经典。

     

    相机的用途,自然是记录图像。为了简化论述,我们把图像假设成一个长方形阵列,比如说一个1024×2048像素的阵列(这样就总共是二百万像素)。为了省略彩色的问题(这个比较次要),我们就假设只需要黑白图像,那么每个像素就可以用一个整型的灰度值来计量其亮度(例如用八位整型数表示0到255,16位表示0到65535)。接下来,按照最最简化的说法,传统相机会测量每一个像素的亮度(在上述例子中就是二百万个测量值),结果得到的图片文件就比较大(用8位灰度值就是2MB(1024*2048*8b),16位灰度就是4MB)。数学上就认为这个文件是用超高维矢量值描绘的(在本例中就是约二百万维),进行。
    在我开始讲“压缩感知”这个新故事之前,必须先快速回顾一下“老式压缩”的旧故事。(已经了解图像压缩算法的读者可以跳过这几段。)

     

    老式压缩:

    怎么样压缩图像?方式多种多样,其中有些非常先进,不过我来试试用一种不太高科技的(而且也不太精确的)说法来描述一下这些先进技术。图像通常都含有大片无细节部分–比如在风景照里面,将近一半的画面都可能被单色的天空背景占据。我们假设提取一个大方块,比方说100×100像素,其中完全是同一颜色的——假设是全白的吧。无压缩时,这个方块要占10000字节存储空间(按照8位灰度算);但是我们可以只记录这个方块的维度和坐标,还有填充整个方块的单一颜色;这样总共也只要记录四五个字节,省下了可观的空间。不过在现实中,压缩效果没有这么好,因为表面看来没有细节的地方其实是有着细微的色差的。所以,给定一个无细节方块,我们记录其平均色值,就把图片中这一块区域提取出来,只留下微小的残余误差。接下来就可以继续选取更多无细节的方块,抽象成单色色块。最后剩下的是亮度(色彩强度)很小的,肉眼无法察觉的细节。于是就可以抛弃这些剩余的细节,只需要记录那些“可见”色块的大小,位置和亮度。日后则可以反向操作,重建出比原始图像质量稍低一些,占空间却小得多的复制图片。

    其实上述的算法并不适合处理颜色剧烈变动的情况,所以在实际应用中不很有效。事实上,更好的办法不是用均匀色块,而是用“不均匀”的色块——比方说右半边色彩强度平均值大于左半边这样的色块。这种情况可以用(二维)Haar小波系统来描述。后来人们又发现一种”更平滑的”小波系统更能够避免误差,不过这都是技术细节,我们就不深入讨论了。然而所有这些系统的原理都是相同的:把原始图像表示为不同“小波(类似于上文中的色块)”的线性叠加,记录显著的(高强度的)小波的系数,放弃掉(或者用阈值排除掉)剩下的小波系数。这种“小波系数硬阈值”压缩算法没有实际应用的算法(比如JPEG 2000标准中所定义的)那么精细,不过多少也能描述压缩的普遍原理。

     

    总体来讲(也是非常简化的说法),原始的1024×2048图像可能含有两百万自由度,想要用小波来表示这个图像的人需要两百万个不同小波才能完美重建。但是典型的有意义的图像,从小波理论的角度看来是非常稀疏的,也就是可压缩的:可能只需要十万个小波就已经足够获取图像所有的可见细节了,其余一百九十万小波只贡献很少量的,大多数观测者基本看不见的“随机噪声”。(这也不是永远适用:含有大量纹理的图像–比如毛发、毛皮的图像——用小波算法特别难压缩,也是图像压缩算法的一大挑战。But that is another story。)


    接下来呢,如果我们(或者不如说是相机)事先知道两百万小波系数里面哪十万个是重要的,那camera就可以只计算这十万个系数,别的就不管了。(对于单个系数的计算,可以在图像上应用一种合适的filter“滤波器”或叫mask“滤镜/掩模”,然后计量过滤出来的每个像素的色彩强度)但是,相机是不会知道哪个系数是重要的,所以它只好计量全部两百万个像素,把整个图像转换成基本小波,找出需要留下的那十万个主导基本小波,再删掉其余的。(这当然只是真正的图像压缩算法的一个草图,不过为了便于讨论我们还是就这么用吧。)


    PS: 经典的数据压缩技术,无论是音频压缩(例如 mp3),图像压缩(例如 jpeg),视频压缩(mpeg),还是一般的编码压缩(zip),都是从数据本身的特性出发,寻找并剔除数据中隐含的冗余度,从而达到压缩的目的。这样的压缩有两个特点:第一、它是发生在数据已经被完整采集到之后;第二、它本身需要复杂的算法来完成。相较而言,解码过程反而一般来说在计算上比较简单,以音频压缩为例,压制一个 mp3 文件的计算量远大于播放(即解压缩)一个 mp3 文件的计算量。

    那么,如今的数码相机当然已经很强大了,没什么问题干吗还要改进?事实上,上述的算法,需要收集大量数据,但是只需要存储一部分,在消费摄影中是没有问题的。尤其是随着数据存储变得很廉价,现在拍一大堆完全不压缩的照片也无所谓。而且,尽管出了名地耗电,压缩所需的运算过程仍然算得上轻松。但是,在非消费领域的某些应用中,这种数据收集方式并不可行,特别是在传感器网络中。如果打算用上千个传感器来收集数据,而这些传感器需要在固定地点呆上几个月那么长的时间,那么就需要尽可能地便宜和节能的传感器——这首先就排除了那些有强大运算能力的传感器(然而——这也相当重要——我们在接收处理数据的接收端仍然需要现代科技提供的奢侈的运算能力)。在这类应用中,数据收集方式越“傻瓜”越好(而且这样的系统也需要很强壮,比如说,能够忍受10%的传感器丢失或者各种噪声和数据缺损)。所谓的「压缩感知」,也就是说,直接感知压缩了的信息。

     

    压缩感知:

    这就是压缩感知的用武之地了。其理论依据是:如果只需要10万个分量就可以重建绝大部分的图像,那何必还要做所有的200万次测量,只做10万次不就够了吗?(在实际应用中,我们会留一个安全余量,比如说测量30万像素,以应付可能遭遇的所有问题,从干扰到量化噪声,以及恢复算法的故障。)这样基本上能使节能上一个数量级,这对消费摄影没什么意义,对感知器网络而言却有实实在在的好处。

    不过,正像我前面说的,相机自己不会预先知道两百万小波系数中需要记录哪十万个。要是相机选取了另外10万(或者30万),反而把图片中所有有用的信息都扔掉了怎么办?

    ※※※※※※※※※※※※※※※

     

    解决的办法简单但是不太直观。就是用非小波的算法来做30万个测量——尽管我前面确实讲过小波算法是观察和压缩图像的最佳手段。实际上最好的测量其实应该是(伪)随机测量——比如说随机生成30万个滤镜(mask)图像并测量真实图像与每个mask的相关程度。这样,图像与mask之间的这些测量结果(也就是“相关性”)很有可能是非常小非常随机的。但是——这是关键所在——构成图像的2百万种可能的小波函数会在这些随机的mask的测量下生成自己特有的“特征”,它们每一个都会与某一些mask成正相关,与另一些mask成负相关,但是与更多的mask不相关。可是(在极大的概率下)2百万个特征都各不相同;这就导致,其中任意十万个的线性组合仍然是各不相同的(以线性代数的观点来看,这是因为一个30万维线性子空间中任意两个10万维的子空间几乎互不相交)。因此,理论上是有可能从这30万个随机mask数据中恢复图像的(至少可以恢复图像中的10万个主要细节)。简而言之,我们是在讨论一个哈希函数的线性代数版本。

    PS: 这里的原理就是说,如果3维线性子空间中的任意两个2维子空间是线性相关的话,比如:

    ①3x+2y=8

    ②6x+4y=16

    ③4x+5y=10

    中,①②就是线性相关的,①③不是线性相关的。将200万个小波函数降维到30万个掩模基的过程就是类似去掉①②中冗余基的过程。


    然而这种方式仍然存在两个技术问题。首先是噪声问题:10万个小波系数的叠加并不能完全代表整幅图像,另190万个系数也有少许贡献。这些小小贡献有可能会干扰那10万个小波的特征,这就是所谓的“失真”问题。第二个问题是如何运用得到的30万测量数据来重建图像。

    我们先来关注后一个问题(怎样恢复图像)。如果我们知道了2百万小波中哪10万个是有用的,那就可以使用标准的线性代数方法(高斯消除法,最小二乘法等等)来重建信号。(这正是线性编码最大的优点之一——它们比非线性编码更容易求逆。大多数哈希变换实际上是不可能求逆的——这在密码学上是一大优势,在信号恢复中却不是。)可是,就像前面说的那样,我们事前并不知道哪些小波是有用的。怎么找出来呢?一个单纯的最小二乘近似法会得出牵扯到全部2百万系数的可怕结果,生成的图像也含有大量颗粒噪点。要不然也可以代之以一种强力搜索,为每一组可能的10万关键系数都做一次线性代数处理,不过这样做的耗时非常恐怖(总共要考虑大约10的17万次方个组合!),而且这种强力搜索通常是NP完备的(其中有些特例是所谓的“子集合加总”问题)。不过还好,还是有两种可行的手段来恢复数据:

     

    •匹配追踪:找到一个其标记看上去与收集到的数据相关的小波;在数据中去除这个标记的所有印迹;不断重复直到我们能用小波标记“解释”收集到的所有数据。

    Matching pursuit: locate a wavelet whose signature seems to correlate with the data collected; remove all traces of that signature from the data; and repeat until we have totally “explained” the data collected in terms of wavelet signatures. 就是先找出一个貌似是基的小波,然后去掉该小波在图像中的分量,迭代直到找出所有10w个小波.

     

    •基追踪(又名L1模最小化):在所有与(image)数据匹配的小波组合中,找到一个“最稀疏的”基,也就是其中所有系数的绝对值总和越小越好。(这种最小化的结果趋向于迫使绝大多数系数都消失了。)这种最小化算法可以利用单纯形法之类的凸规划算法,在合理的时间内计算出来。
    Basis pursuit (or l^1 minimisation): Out of all the possible combinations of wavelets which would fit the data collected, find the one which is “sparsest” in the sense that the total sum of the magnitudes of all the coefficients is as small as possible. (It turns out that this particular minimisation tends to force most of the coefficients to vanish.) This type of minimisation can be computed in reasonable time via convex optimisationmethods such as the simplex method.

    需要注意到的是,这类图像恢复算法还是需要相当的运算能力的(不过也还不是太变态),不过在传感器网络这样的应用中这不成问题,因为图像恢复是在接收端(这端有办法连接到强大的计算机)而不是传感器端(这端就没办法了)进行的。

    现在已经有严密的结果显示,对原始图像设定不同的压缩率或稀疏性,这两种算法完美或近似完美地重建图像的成功率都很高。匹配追踪法通常比较快,而基追踪算法在考虑到噪声时则显得比较准确。这些算法确切的适用范围问题在今天仍然是非常热门的研究领域。(说来遗憾,目前还没有出现对P不等于NP问题的应用;如果一个重建问题(在考虑到测量矩阵时)是NP完备的,那它刚好就不能用上述算法解决。)

     

    由于压缩感知还是一个相当新的领域(尤其是严密的数学结果刚刚出现),现在就期望这个技术应用到实用的传感器上还为时尚早。不过已经有概念验证模型出现了,其中最著名的是Rice大学研制的单像素相机。

    最后必须提到的是,压缩感知技术是一种抽象的数学概念,而不是具体的操作方案,它可以应用到成像以外的许多领域。以下只是其中几个例子:

    • 磁共振成像(MRI)。在医学上,磁共振的工作原理是做许多次(但次数仍是有限的)测量(基本上就是对人体图像进行离散拉东变换(也叫X光变换)),再对数据进行加工来生成图像(在这里就是人体内水的密度分布图像)。由于测量次数必须很多,整个过程对患者来说太过漫长。压缩感知技术可以显著减少测量次数,加快成像(甚至有可能做到实时成像,也就是核磁共振的视频而非静态图像)。此外我们还可以以测量次数换图像质量,用与原来一样的测量次数可以得到好得多的图像分辨率。ps:在C牛的video中也有提到

    •天文学。许多天文现象(如脉冲星)具有多种频率震荡特性,使其在频域上是高度稀疏也就是可压缩的。压缩感知技术将使我们能够在时域内测量这些现象(即记录望远镜数据)并能够精确重建原始信号,即使原始数据不完整或者干扰严重(原因可能是天气不佳,上机时间不够,或者就是因为地球自传使我们得不到全时序的数据)。

    •线性编码。压缩感知技术提供了一个简单的方法,让多个传送者可以将其信号带纠错地合并传送,这样即使输出信号的一大部分丢失或毁坏,仍然可以恢复出原始信号。例如,可以用任意一种线性编码把1000比特信息编码进一个3000比特的流;那么,即使其中300位被(恶意)毁坏,原始信息也能完全无损失地完美重建。这是因为压缩感知技术可以把破坏动作本身看作一个稀疏的信号(只集中在3000比特中的300位)。

    许多这种应用都还只停留在理论阶段,可是这种算法能够影响测量和信号处理中如此之多的领域,其潜力实在是振奋人心。笔者自己最有成就感的就是能看到自己在纯数学领域的工作(例如估算傅立叶子式的行列式或单数值)最终具备造福现实世界的前景。

    /***********************CS研究内容***********************/

    研究压缩感知的内容有几块呢?
    (1)压缩感知理论,比如测量矩阵,重建性能分析,测量数据量化影响;
    (2)优化算法,本质上是重建算法优化,比如线性规划(LP)、贝叶斯优化等等;
    (3)实际的应用,压缩?后处理?分类?等等

     

    The main theoretical findings in this recent field have mostly centered on how many multiplexed measurements are necessary to reconstruct the original signal and the attendant nonlinear reconstruction techniques needed to demultiplex these signals. 

    最近的理论研究主要集中在 ①需要多少多维测度才能重建原始信号 ②分解信号所需的非线性重建技术;还有能够直接进行多维信号选择的感知硬件(sensing hardware)。

     
    /***********************CS的压缩/解压效果***********************/


    由于刚刚看这一方面的资料,未免经验不足,就借鉴了其他人(Ganer)在该领域的探究结果,他的博客中写到:

    很多mpressive sensing的实际用于信号采集效果其实并不是很好。
    就从我的实验而言,对于图像压缩甚至会差的很,远远低于传统的压缩方式。
    那就不难有学者发出感叹,实际上compressive sensing 就是depressive sensing了。

    我的理解是什么呢?有2点牢牢记住的
    (1)compressive sensing实际上是对信号采集的颠覆性的理论,打破了乃奎斯特采样(也称香农采样)。
            实际上,大部分信号是稀疏的,没有必要用乃奎斯特采样,进行时间离散化。
            注意两点:(1)乃奎斯特采样对信号没有稀疏性的假设;
                             (2)CS对信号有稀疏性假设,既K稀疏;
           那么,信号采集过程也就是说从A2D,变成了A2I。
          但是在实际应用角度,2者结合会有很大的收益。(个人观点)
    (2)compressive sensing本事是最大后验(MAP)解码,这点比传统的方式要更为”先进“,也更为”危险“。

    关于Compressive Sensing更多的学习资料将继续更新,敬请关注本博客和新浪微博Sophia_qing

    References:

    1. Compressed sensing and single-pixel cameras - Terrytao

    2. 斯坦福大学Emmanuel Candes教授:压缩感知 video2

    3. An Introduction to Compressed Sensing (斯坦福课程,可根据syllabus分块啃食)

    4.Near Optimal Signal Recovery From Random Projections: Universal Encoding Strategies?-Emmanuel CandesTerence Tao

    5. http://blog.163.com/gan_research/blog/static/16534814820107912256225/

    6. C牛在Stanford的课程

    7. 中国压缩传感资源(China Compressive Sensing Resources)

    8.Using Math to Turn Lo-Res Datasets Into Hi-Res Samples  - Jordan Ellenberg 

    (ellenber@math.wisc.edu), an associate professor of mathematics at the University of Wisconsin, wrote about theNetflix Prize in issue 16.03.

     

  • 相关阅读:
    jsp带参转链接
    HTML select 操作
    HTML5 微信二维码提示框
    IOS 开发 【objective-c 基础1】
    {每日一题}:一个整数,它加上100和加上268后都是一个完全平方数,请问该数是多少?
    python编程系列---多线程共享全局变量出现了安全问题的解决方法
    3.如何理解开多线程可以充分利用CPU?
    python编程系列---最详细的讲解进程与线程的关系
    {每日一题}:随机输入四个不同的数字,求:能组成多少个互不相同且无重复数字的三位数?各是多少?
    2.单核CPU是如何实现多进程的?
  • 原文地址:https://www.cnblogs.com/Eufisky/p/7798767.html
Copyright © 2020-2023  润新知