稀疏表示和字典学习

1. 引言

  近年来,随着芯片、传感器、存储器以及其他硬件设备的快速发展,很多领域都面临着数据量过大、处理时间过长的问题。传统的信号处理方式已经无法满足人们对大量数据处理的需求,简洁、高效、稀疏的信号表示方法是人们研究、关注的热点。稀疏表示和字典学习方法在解决数据量过大的问题上有独特的优势,稀疏表示和字典学习方法最早用于压缩感知中信号处理问题,现在越来越多的研究者把稀疏表示用在图像处理、目标识别、机器视觉、音频处理等领域中。将稀疏表示和字典学习方法应用到图像处理上,可以简单、高效地将图像中的噪声分离,实现图像品质的提升。

2. 稀疏表示理论

2.1 简介

  稀疏表示本质上是一种信号表示方法,它从原始信号中尽可能少地选取基本信号,并将这些基本信号通过线性组合来表达大部分或全部的原始信号。通过稀疏表示可以获得信号更为简洁的表示方式,从而使我们更容易地获取信号中所蕴含的信息,更方便进一步对信号进行加工处理。

  典型的稀疏表示过程可用图1.1形象的表示如下:

2.2 稀疏表示模型

  一般的稀疏模型主要是在线性方程组的基础上进行构建的,通过线性方程求解得到的结果是确定的、合理的,线性方程在稀疏表示中具有重要作用。一般的稀疏信号是指在实数空间中,信号Y可以由长度有限的离散信号进行线性表示。一般稀疏表示中的线性方程为:

  

  式中信号,字典为一个内部原子相互正交的基矩阵,是信号Y在字典D的映射下的稀疏系数矩阵。如果n<m,则无法用字典D对信号Y进行线性表示;如果n=m,则有唯一的系数矩阵X使得字典D对信号Y进行线性表示;如果n>m,则存在无数种系数矩阵X使得字典D对信号Y进行线性表示。当n>m时,字典D是一个过完备字典矩阵,线性方程组是非正定的,可以得到无数个稀疏系数矩阵X,从中寻找最稀疏的矩阵X。系数矩阵X中的大部分元素值是零,只有很少一部分能够对信号特征进行表示的元素值是非零的。用稀疏度k表示稀疏系数矩阵X中非零元素的总个数,则信号的稀疏能力可用稀疏度k来体现:

  式中p是范数的度量。在信号Y和字典D已知的情况下,构建稀疏模型对其进行求解,得到稀疏系数矩阵X,从而实现信号Y的稀疏表示,即稀疏度k确定的情况下,求上式的最优解。主要的范数求解模型有L0,L1,L2求解模型,不同的求解方式决定着信号Y稀疏程度的不同。有关范数求解模型就不在此赘述,具体可以参考机器学习中的范数规则化之(一)L0、L1与L2范数

2.3 稀疏表示求解算法

  稀疏表示求解算法的目的是对信号的优化求解,主要有松弛算法和贪婪算法两大类。

  松弛算法是指通过具有凸特性的高阶范数如L1范数或者其他合适的具有稀疏性的度量对非凸的L0范数进行替换,实现将对NP问题的求解转化为凸优化问题的求解,从而简化运算方程,降低算法运算的复杂度。典型的松弛优化算法主要有基追踪算法(Basis Pursuit,BP)、交替投影算法(Alternate Projection,AP)、梯度投影算法(Gradient Projection for Sparse Reconstruction,GPSR)以及基于框架的算法(Method of Frame,MF)等。

  贪婪算法是对稀疏模型进行迭代的算法,根据迭代前选择的参数标准进行不断地迭代计算,对局部的最优结果进行追踪,最终得到最优的稀疏表示结果。经典的贪婪算法主要有匹配追踪算法(Matching Pursuit,MP)、正交匹配追踪算法(Orthogonal Matching Pursuit,OMP)、稀疏自适应匹配追踪算法(Compressive Sampling Matching Pursuit,CoSaMP)等。

3. 稀疏表示应用

  随着稀疏理论的发展,稀疏表示得以在诸多场景中应用,如雷达目标识别、视觉追踪等,这里举例稀疏表示在视觉追踪方面的应用。

  视觉追踪是在图像序列中对特定目标的运动轨迹以及相对于周边环境位置信息进行确定。在复杂环境中进行目标追踪时易受到环境、外观相似目标的影响导致追踪失败,一般的目标追踪方法可以分为目标确定、环境区域确定、位置确定、模型更新等四个部分。稀疏表示方法用在视觉追踪中主要是通过贝叶斯结构体系求得目标的先验状态,然后对目标的下一状态的后验概率进行求解从而实现准确定位。在稀疏表示方法下的视觉追踪更容易获取目标的特征及位置信息,且能够在最少的数据情况下进行高精度的目标定位、追踪,能够达到实时追踪的要求。

原文地址:https://www.cnblogs.com/Godzilla-w/p/10200570.html

时间: 2024-10-27 11:36:28

稀疏表示和字典学习的相关文章

稀疏表示、字典学习和压缩感知(基本概念)

稀疏表示与字典学习 当样本数据是一个稀疏矩阵时,对学习任务来说会有不少的好处,例如很多问题变得线性可分,储存更为高效等.这便是稀疏表示与字典学习的基本出发点. 稀疏矩阵即矩阵的每一行/列中都包含了大量的零元素,且这些零元素没有出现在同一行/列,对于一个给定的稠密矩阵,若我们能通过某种方法找到其合适的稀疏表示,则可以使得学习任务更加简单高效,我们称之为稀疏编码(sparse coding)或字典学习(dictionary learning). 给定一个数据集,字典学习/稀疏编码指的便是通过一个字典

稀疏编码之字典学习

稀疏信号的一个最重要的部分就是字典A.那么选择A?怎么样选择才是合理? 一.字典的选择和学习 如何选择合适的字典,一种基本的方法是选择预定义的字典,如无抽样小波.可操纵小波.轮廓博.曲波,等等.近期很多学者提出来主要针对图像的字典,特别是类似于“卡通”的图像内容,假设分段平滑并具有平滑边界. 这些提出的字典附有详细的理论分析,能够对简单信号建立稀疏表示系数.一个典型的应用时M项近似衰减率——用M个最佳的非零系数表示信号. 另一种选择字典的方法是可调节的——通过在特定参数(连续或者离散的)控制下生

稀疏表达和字典学习算法

LCKSVD  Label Consistent K-SVD: Learning A Discriminative Dictionary for Recognition   http://www.umiacs.umd.edu/~zhuolin/projectlcksvd.html The source code for submodular reranking for retrieval is released now! [project page] One paper is accepted

Dictionary Learning(字典学习、稀疏表示以及其他)

第一部分 字典学习以及稀疏表示的概要 字典学习(Dictionary Learning)和稀疏表示(Sparse Representation)在学术界的正式称谓应该是稀疏字典学习(Sparse Dictionary Learning).该算法理论包含两个阶段:字典构建阶段(Dictionary Generate)和利用字典(稀疏的)表示样本阶段(Sparse coding with a precomputed dictionary).这两个阶段(如下图)的每个阶段都有许多不同算法可供选择,每种

字典学习(Dictionary Learning)

0 - 背景 0.0 - 为什么需要字典学习? 这里引用这个博客的一段话,我觉得可以很好的解释这个问题. 回答这个问题实际上就是要回答“稀疏字典学习 ”中的字典是怎么来的.做一个比喻,句子是人类社会最神奇的东西,人类社会的一切知识无论是已经发现的还是没有发现的都必然要通过句子来表示出来(从某种意义上讲,公式也是句子).这样说来,人类懂得的知识可要算是极为浩繁的.有人统计过人类每天新产生的知识可以装满一个2T(2048G)大小的硬盘.但无论有多少句子需要被书写,对于一个句子来说它最本质的特征是什么

Python笔记4_字典学习

#dict:字典以"{}"包围的以"键:值"数据集合 # 成员之间用","分隔 # 可包含任何数据类型,包括列表 # 无序,数据项可改变 # 键必须是为唯一的,值不必 dict1={'name':'sjl','age':20} #查看对象的类,或对象所具备的功能 print(dir(dict1)) #查看对象功能的详细信息 print(help(type(dict1))) #空字典和一个元素的字典建立 print('空字典:',{}) print

python列表、字典学习之一

1.列表: (1)定义:列表是一个任意类型的对象的位置相关的集合,没有固定类型的约束(一个列表中可以包含不同类型的对象),也没有固定大小,列表是可变的. (2)常用方法: append():在列表的尾部插入一项 pop():移除给定偏移量的一项 insert():在任意位置插入元素 remove():按照值移除元素 sort():对列表进行排序,默认为升序,且列表里必须要是同一类型的对象,否则会报错 reverse():对列表进行翻转 (3)嵌套:可以任意的嵌套,列表里面可以嵌套字典.也可以嵌套

python——元组和字典学习笔记

1.count返回值的次数 list=[2,2,2,3,3,3,3,4,4,4] a={} for i in list: if list.count(i)>1: a[i]=list.count(i) print(a) 将具体的某个数的在列表中的次数返回 list=[2,2,2,3,3,3,3,4,4,4] print(list) print(list.count(2)) 2.set 将list中不重复的所有值遍历出来 list=[2,2,2,3,3,3,3,4,4,4] print(list)

学习python第六天-字典学习

1.字典主要分由键值对组成,使用大括号表示可以存储一些信息使用.访问字典中的值,只需要通过字典中的键,便可以访问键所关联的值. 2.添加键值对 只需要对字典新键关联相关值即可 3.修改字典中的值 只需要对字典中的键重新关联赋值即可 4.删除键值对 使用del 删除某个键值对 原文地址:https://www.cnblogs.com/xiaobai-yang/p/11620325.html