压缩感知重构算法--MMP-BF和MMP-DF算法及其改进思路

2023-11-03 19:40

本文主要是介绍压缩感知重构算法--MMP-BF和MMP-DF算法及其改进思路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MMP算法提出的文献:

Multipath Matching Pursuit----IEEE TRANSACTIONS ON INFORMATION THEORY
文章的作者也是gOMP算法的作者,现在在复旦大学任教

主要贡献:文章将传统贪婪算法的原子选择问题建模为组合树的搜索问题,为原子选择提供了新的思路。

在传统贪婪算法的改进中,不外乎以下几个方面:调整原子选择策略,调整原子相似性的准则等

其中调整原子选择策略又分为以下几种:

每次迭代选择单个原子(OMP),每次迭代选择多个原子(如:选择K个的CoSaMP算法,选择2K个的SP算法,选择S个的gOMP算法),通过阈值门限来进行原子选择,这样保证了每次迭代原子选择的灵活性,阈值则更贴近于观测矩阵和残差的内积变化规律(StOMP算法,SWOMP算法,TOMP算法等等)

在原子选择过程中,许多单向执行的算法可以结合CoSaMP算法中的回溯思想,来进一步提高重构精度。

在有步长设置的算法中,如何设置步长大小,是固定步长还是变步长,如果变的话,该如何改变,到目前为止均有学者做研究。而以上提到的算法都有一个共同的问题,就是只有一个候选集,单个候选集的原子选择模式会使得问题陷入局部最优解。而设置多个候选集则增大了搜索空间,提高了原子被正确选择的概率。这也是MMP算法的核心思想所在。

在论文中,作者提出了两种算法:MMP-DF和MMP-BF,分别是基于广度优先和深度优先的搜索策略。

所谓基于广度优先的多路径匹配追踪算法MMP-BF,顾名思义,我们在每次迭代的过程中,都有选出不同的原子放入多个候选集中,就如多叉数一样,基于根节点,每次迭代分出多少个子节点,可以人为设定。

上图展示了OMP算法和MMP算法的区别所在,在左图的OMP算法中,我们第一次选择出次序为2的原子,基于此,我们又选择出次序为1的原子,以此类推,当迭代次数为3的时候,我们会选出次序为2,1,4的三个原子放入支撑集中。

而对于MMP-BF算法来说,第一次选出了两个原子,分别为2和4,我们将其放入到两个不同的候选集中。第二次迭代的时候,我们以原子2为基础,选出了1和5,放入不同的候选集中,以原子4为基础,选出了1和5,放入到不同的候选集中。这样,我们在第二次迭代中就产生了4个包含不同原子的候选集,重复上述步骤,直到达到稀疏度K为止。

上图为MMP-BF的算法步骤,从算法步骤可以看出,当迭代停止的时候,算法会产中很多候选集,每个候选集中的原子数均为K个,我们会在所有候选集中选出残差最小的一个作为我们最终的支撑集,这比单个候选集的原子选择模式精度更高。

但是上述算法有个很大的问题,就是随着迭代次数的增加,产生的候选集是指数增加的,即使每个节点产生两个子节点,当K比较大的时候,迭代停止时我们拥有的候选集个数是2^K个,这个数量级的计算复杂度在实际中显然不适用。

为了解决上述问题,作者提出了基于深度优先的MMP-DF算法

算法操作图如上图所示,我们先对一个候选集进行原子填充,填充的顺序遵循下面的公式

 如给出L=2,K=4,则我们有16个候选集。对于第一个候选集,遵循的次序为(1,1,1,1),意思是我们在每次迭代都选出最优的原子放入候选集。而对于次序(2,1,1,1),意思是第一次迭代的时候选出次优的原子放入候选集,第二次迭代选出最优的原子放入候选集,次序中数字代表了当前迭代中所选原子是第几优的。

算法步骤如下:

基于深度优先的选择模式对于每个候选集,可以一次性的将原子选完,不进行原子的分裂和遍历。由于每次迭代所选用的内积准则未必是最优准则,同时贪婪算法所取得也是每次迭代的最优解,而不是整体最优解,所以根据次序进行原子选择的规则一定程度上可以提高获取最优解的概率。因为当前最优的原子未必是下次迭代最优的原子。

此外,为了避免计算复杂度的剧增,文章中也限制了候选集的数量,不管是MMP-DF算法还是MMP-BF算法,最大的候选集数量均设置为50。

上图仿真了无噪环境的ERR和有噪环境的MSE 

从运行时间上可以看出,MMP-DF算法相较于MMP-BF算法单次迭代的运行时间减少了很多。 

改进思路:

广度优先和深度优先的搜索策略属于比较传统的搜索策略,如何确定更优的搜索策略且更贴近于贪婪算法的计算框架是一个可以优化的方向。其次,如何进行剪枝,来减少MMP算法的计算复杂度也是值得考究的问题。可以从这两个方面入手,和之前的一些阈值策略,选择策略等结合。

这篇关于压缩感知重构算法--MMP-BF和MMP-DF算法及其改进思路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/340459

相关文章

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

Python MCPInspector调试思路详解

《PythonMCPInspector调试思路详解》:本文主要介绍PythonMCPInspector调试思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录python-MCPInspector调试1-核心知识点2-思路整理1-核心思路2-核心代码3-参考网址

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比