声明

  1. 之前虽然听过压缩感知和稀疏表示,实际上昨天才正式着手开始了解,纯属新手,如有错误,敬请指出,共同进步。

  2. 主要学习资料是 Coursera 上 Duke 大学的公开课——Image and video processing, by Pro.Guillermo Sapiro 第 9 课。

  3. 由于对图像处理的了解也来自与该课程,没正经儿看过几本图像方面的书籍,有些术语只能用视频中的英文来表达,见谅哈!


1. Uniqueness

假设我们已知字典矩阵 D 和稀疏向量 a, 计算出一个信号 x,即 Da = x, x 存在一个关于 D 的稀疏表示。反过来现在已知前面的 D 和 x,根据 L0 的优化问题,可以归纳为:

 的解是唯一的吗?

显然不一定。比如, D 中某些 atoms 恰好相等,或者 column1 = column2 + column3, 以前由 column2 和 column3 现在只用 column1 表示即可。当然也有正面的例子,比如 DCT 变换, 基向量完全正交,解是唯一的。这与 D 中 atoms 的不相关性数目 K 有关。

2. Sparse Coding

和上面一样,现有字典 D 和带有噪声的信号 y,进行稀疏编码的问题可以表示的 L0 优化问题:

这是一个组合优化问题。假设 alpha 的非零项数目为 L (sparse Level), 先令 L = 1, 每一个列向量尝试一遍,看看是否又满足条件的,共有 K 种组合。如果没有,再令 L = 2, 再次尝试,共有 K(K-1)/2 中组合。还没有满足条件的,则令 L = 3......组合的数目呈指数增长,这是一个 NP-hard 的问题。 实际应用中的 K = 1000, L = 10, 要穷尽所有的排列组合大概需要计算几百万年,因此要采用近似算法, 目前主要有 relaxation methods 和 greedy methods。

  1. Relaxation Methods - the Basis Pursuit (BP)
    我们知道, L0 norm 可以数出向量中非零 entries 的数目,具有很好的现实意义,但是由于它数学特性(求导等)极差,非常不适合作为一个优化模型中目标函数。在线性分类器中,你可以把误分点的数目作为目标函数,但是没法优化,所以,我们看到的线性分类器的的目标函数一般是 L1 norm(感知器算法), L2 norm(LMS 算法和最小二乘法)以及最大熵(Logistic Regresson)等,也能达到比较好的效果。在上一篇博客中,可以看到 L1 是菱形, L2 是球体,L1 具有更好的稀疏性(解更靠近坐标轴),所以我们采用松弛方法将 L0 norm 转换为 L1 norm:


    虽然我们把 count number 变成了 count the magnitude, 但是在某些条件下,上式的解与松弛之前的解等价。上述方法也叫 BP,新定义的问题是一个凸优化问题,解决的方法很多,有 Interior Point methods, Sequential shrinkage for union of ortho-bases, Iterative shrinkage 等。

  2. Greedy Methods - Matching Pursuit (MP)
    第一步,找到最接近(平行) y 的 atom, 等效与在 alpha 向量上仅取一个非零项,求出最接近的 atom, 保留下来
    第二步,计算误差是否满足要求,如果满足,算法停止,否则,计算出残差信号,和第一步类似,找到最接近残差向量的 atom, 保留下来
    第三步,调整已选向量的系数,使得 Da 最接近 y,重复第二步 (OMP, Orthogonal Matching Pursuit)

总结一下解决这个问题的算法有:

3. Dictionary Learning - K-SVD

字典学习的一个假设是——字典对于一张 good-behaved 的图像具有稀疏表示。因此,选择字典的原则就有能够稀疏地表达信号。有两种方法来设计字典,一种是从已知的变换基中选择,或者可以称为 beyond wavelet 变换,比如 DCT 实际上就是一个稀疏表示(高频部分系数趋向于 0),这种方法很通用,但是不能够 adapted to the signal。第二种方法是字典学习,即通过已有的大量图片数据进行训练和学习。

比如,现在有 P 个信号(张图片)要进行稀疏表示,如何学习一个字典?

上式字典矩阵 D 和 alpha 组成的稀疏表示 A 矩阵都是可变量,目前有几种算法解决这个问题,下面介绍 K-SVD 算法(K-Means的一种变种),idea 非常简单。假设现在有原始信号矩阵 X^T, 该矩阵的每一行表示一个信号或者一张图片, D 矩阵是字典矩阵,右下方是 sparse coding 矩阵,红色的点表示非零项:

算法步骤如下:

Step 1: Initialize。在 X^T 矩阵中随机挑选一些行向量(一些原图),填满矩阵 D。( K-means 随机选点初始化)

Step 2: Sparse Coding. 用上一小节的方法(松弛或者贪婪法)进行稀疏编码,Row-by-Row 计算出稀疏矩阵。

Step 3: Dictionary Update. 字典以列向量为基,自然要 Column-by-Column 地更新字典。比如现在更新某一列, 下方对应的红点,根据红点找到对应的信号(图像),然后除掉其他不相关的图像,得到示意图如下:

上图中字典的 atom 对四张图片都有贡献,我们调整 atom 的目的是使得这个贡献更大,从而使稀疏性表示效果更好。当然,一个 atom 只能表示一条直线,三张图片的信号极有可能不在这条直线上,我们要做的是将中间的误差降到最小,这其实就是一个最小二乘(MSE)的问题。具体做法是将最右下角的矩阵进行 SVD 分解(SVD 相关知识可参考之前我写的博客),找出主成分,然后回到 Step2, 迭代。

声明

  1. 之前虽然听过压缩感知和稀疏表示,实际上前两天才正式着手开始了解,纯属新手,如有错误,敬请指出,共同进步。

  2. 主要学习资料是 Coursera 上 Duke 大学的公开课——Image and video processing, by Pro.Guillermo Sapiro 第 9 课。

  3. 由于对图像处理的了解也来自与该课程,没正经儿看过几本图像方面的书籍,有些术语只能用视频中的英文来表达,见谅哈!


1. From Local to Global Treatment

图片尺寸有大有小,在 DCT 变换中,我们一般取 8×8 的方块作为一组 64 维的变换信号,在稀疏表示中,我们同样也不能把整张图片作为 X^T 矩阵,而是在大图片中取一定尺寸的 patch (假设是 8×8 的方块)作为一个 signal。对于图片中的所有的 patch (假设 ij 是 patch 的左上角坐标)组成的信号,已知字典 D 和噪声图片 y ,估计公式如下:

y: 带有噪音的图片—— the whole image
x: 要恢复的 clear image
Rij x: 以 i,j 为左上角坐标的 patch, Rij 是从 x 中提取 patch 的 0-1 矩阵
D: 字典 for all the overlapping patches

字典 D 从哪里学习?第一种选择是基于图片的数据库,第二种是直接使用要降噪的图片进行训练。还有一种可能性是:首先基于图片的数据库得到字典 D (off-line),接着来了一张要降噪的图片,我们的做法是新建一个以 D 为初始化的字典,在要处理的图片上再进行迭代(on-line),得到新字典,这个新字典更适合降噪,代价是多一些计算。

2. K-SVD Image Denoising

在上一小节中,我们提出的可能性是 D 也需要根据要降噪的图片进行再适应,所以,图片降噪的公式多了一参数:

有三个变量,处理方法是先固定其中两个,优化一个,然后迭代。从整体上来说,先用 K-SVD 算法得到字典矩阵 D 和系数编码 alpha,保持它们不动,再优化 x:

x 的最优解实际上就是所有包含 x 像素点的 patch 的平均值,比如 patch 的大小是 8×8, 那么包含图片中某一个像素点的 patch 就有 64 个,这个像素点最优解就是取这 64 个patch 对应位置的平均值。当然,你也可以用权重来调节不同位置的 patch 对 pixel 的影响,比如 pixel 在中间的 patch,权重大,pixel 在 patch 边边角角的地方,权重小。

3. Compressed Sensing

前面我们探讨了 sparse represent 的等式,这里主要讲 compressed sensing 的概念,即在稀疏表示的等号两边同时乘以矩阵 Q:

就变成了:

用公式可以表达为:

可以看到,变换后的信号被大大压缩了。在一直 x波浪 和 D波浪 的情况下求 alpha 这个问题和前面 sparse coding 非常类似。一个关键问题是:在什么条件下由已知信号 x波浪 的情况下恢复稀疏表示 alpha?显然,这个问题与矩阵 Q,字典 D 和 alpha 的 sparse level 有关,背后涉及很多数学理论。

4. Structured Sparse Models and GMM

待续...

5. Sparse Modeling and Classification-Activity Recognition

待续...

from:http://www.cnblogs.com/daniel-D/

稀疏表示介绍(中)、(下)相关推荐

  1. 3结构介绍_豹驰(BOACH)声学材料吸隔声方法介绍—(下)材料隔声特性曲线

    基于前两个章节(<豹驰声学材料吸/隔测试方法基础介绍-(上)>&<豹驰声学材料吸/隔声测试方法介绍-(中)>的声学材料吸隔声测试方法介绍,可以了解材料的检测手段及如何有 ...

  2. Socket编程之简单介绍 - 蓝天下的雨 - 博客园

    Socket编程之简单介绍 - 蓝天下的雨 - 博客园 Socket编程之简单介绍 - 蓝天下的雨 - 博客园 Socket编程之简单介绍 2013-03-19 15:27 by 蓝天下的雨, 878 ...

  3. 计算机组成原理中英对照篇,信息科学系课程介绍(中英对照).doc

    文档介绍: 信息科学系课程介绍(中英对照)序号:1课程编码:14001010课程名称:计算机基础学分:1周学时:2开课系部:信息科学系预修课程:无修读对象:信息管理与信息系统专业本科生课程简介:主要介 ...

  4. 多传感器信息融合,介绍中图片为INS+ DVL组合程序

    多传感器信息融合,介绍中图片为INS+ DVL组合程序,此外还有imu+ gps组合等其他程序 YID:6935668339426979

  5. coreldraw x7对齐快捷键_CorelDraw X7快捷键有哪些-CorelDraw X7快捷键介绍-PC下载网

    原创CorelDraw X7快捷键有哪些-CorelDraw X7快捷键介绍-PC下载网 编辑:小禾 来源:PC下载网时间:2020-09-02 15:34:22 对于使用CorelDRAW X7的用 ...

  6. bms中soh计算方式_BMS算法设计之电池SOH介绍(下)

    本期咱们继续来聊聊电池包SOH的算法实现,本次主要聊一聊用电化学阻抗谱法,基于模型的估算和机械疲劳的理论方法来实现SOH的估算.上一篇文章没有看到的朋友不用着急,文章中会有上一篇的链接.趁着周末的大好 ...

  7. 十三、IntelliJ IDEA 中的版本控制介绍(下)

    我们已经简单了解了 IntelliJ IDEA 的版本控制机制,那么接下来,就让我们一起看看在 IntelliJ IDEA 中进行具体的版本控制操作. 标注1:Checkout from Versio ...

  8. CVPR 2022 | QueryDet:使用级联稀疏query加速高分辨率下的小目标检测

    ©作者 | Herschel 虽然在过去的几年中,基于深度学习的通用目标检测已经取得了巨大的成功,但在检测小目标的性能和效率方面却远远不能令人满意.推广小目标检测最常见和有效的方法是使用高分辨率图像或 ...

  9. CVPR 2022 | 图森未来提出小目标检测工作QueryDet:使用级联稀疏query加速高分辨率下的小目标检测...

    作者丨Herschel@知乎 来源丨https://zhuanlan.zhihu.com/p/495892085 编辑丨CVer 论文:https://arxiv.org/abs/2103.09136 ...

最新文章

  1. DevExpress Components16.2.6 Source Code 编译
  2. uniapp定义全局变量方法
  3. mysql附件卸载_彻底卸载mysql
  4. python建站部署_SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台...
  5. Java知多少(28)super关键字
  6. 简约几何艺术海报PSD分层模板,即使简单也足以控制观众的注意力。
  7. 冠军奖 3 万元!CSDN×易观算法大赛火热进行中
  8. JAVA内存释放机制
  9. 收集小型机snap日志文件步骤
  10. Await Async和Thread.waitAll想法?未完待续
  11. Spark RDD、DataFrame和DataSet的区别
  12. Biobank genetic data探析(二)
  13. 51单片机学习路程(一)
  14. 研究鸟类迁徙的目的和意义
  15. php yar 安装失败_全面解析php7安装yar扩展的方法
  16. 如何在网上挣钱,这几个项目让你月入过万元
  17. 无法接收到github邮箱验证码的解决方法
  18. 2021年全球与中国天然气和石油钻头行业市场规模及发展前景分析
  19. 一文教你快速学习搭建属于自己的数据指标体系
  20. IOS 一些小知识点整理

热门文章

  1. TensorFlow贡献者黄文坚:解读对比13个深度学习框架后的选择
  2. RNN 怎么用?给初学者的小教程
  3. 《巴伦周刊》:纳德拉带领微软中兴
  4. 沪港通:利好出尽就是利空
  5. 从一副漫画说编码思维,编码习惯,编码风格 (条件判断,死代码,true 或false)
  6. MyBatis源码-解读Executor的三个实现类之BatchExecutor(批处理执行器)
  7. C++五子棋(一)——开发环境
  8. oracle v$system_event,45.Oracle杂记——Oracle常用动态视图v$system_event
  9. java mysql查询界面_Java GUI小程序 实现数据库查询界面-Go语言中文社区
  10. IDEA 的 LeetCode 刷题插件 leetcode editor