ISTA与稀疏编码 both python & matlab

ISTA与稀疏编码

本人习惯

注释

我自己的想法或者例子,不必要

代码

function [...] = fun(...)
....
end

稀疏编码

稀疏编码是什么鬼

图像可以认为是 n × m × 3 n \times m \times 3 n×m×3的一个矩阵,随着图像清晰度的提升,以目前主流的1920*1800图像为例,单单一个图片就可能有 1920 × 1080 × 3 ≥ 6 × 1 0 6 1920 \times 1080 \times 3 \geq 6 \times 10^{6} 1920×1080×36×106,在假设每个位置使用256色( 2 8 2^8 28种颜色需要8bit,也就是1B),一张图片的大小已经大于6MB,未经压缩的1080P视频每分钟数据量约为 1920 × 1080 × 3 × 30 × 60 ≥ 1 × 1 0 10 1920 \times 1080 \times 3 \times 30 \times 60 \geq 1 \times 10^{10} 1920×1080×3×30×601×1010,一分钟超过一个G的存储量显然目前的存储技术无法解决,只能从无损压缩图像->无损压缩视频这个思路出发。虽然JPEG提供了一种无损压缩算法,但是速度较慢。一般情况下,对于实时性要求高或数据传输成本高的情况(例如医疗影像\卫星图像),有损压缩成为了一种必要之恶。
稀疏编码是一种依托优化思想出现的压缩方式,他从两个方向出发对图像进行压缩:

  1. 保真度
    对于原始的信号X,我们希望有一个信号Y充分逼近X,有如下关系:
    X = Y + ϵ \begin{aligned} X = Y + \epsilon \end{aligned} X=Y+ϵ
    其中 ϵ \epsilon ϵ为噪声,我们在这里希望噪声造成的影响最小,即:
    Y ∗ = arg ⁡ min ⁡ Y B ( X , Y ) \begin{aligned} Y^* = {\arg\min}_Y B(X,Y) \end{aligned} Y=argminYB(X,Y)
    其中 B ( X , Y ) = ∣ ∣ Y − X ∣ ∣ p p = ∣ ∣ ϵ ∣ ∣ p p B(X,Y)=||Y-X||_p^p = ||\epsilon||_p^p B(X,Y)=YXpp=ϵpp
    从B的定义考虑,若我们选择p=2,B(X,Y)可以认为是均方误差(MSE),我们希望其误差尽量小。 也是一种合理的解释呢!
    接下来,我们给定一个Y的表示方法
    Y = D ⋅ Z \begin{aligned} Y = D \cdot Z \end{aligned} Y=DZ
    显然,如果D是n维空间的一组标准正交基,Z就相当于是Y在D上映射的坐标,且对于指定的D,Z有唯一表示,我们希望Z有某种优秀的性质。那么我们有几个方向可以考虑
    • 推断D的结构,通过数据对D进行优化,保证得到的Z拥有好的性质,但是这太难了,对于不同的数据,很难用矩阵论的方法对D进行推断。
    • 如果上述结构不进行推断,仍可以通过机器学习算法例如BP神经网络优化来优化这个矩阵D,使得D对于一个特定场景具有较好的性质。确实是一种好的思想。但是如果D发生变化,Z将无法通过简单的矩阵乘法变回信号Y,显然如果空间的基发送变化,这组基上的坐标都将失去原来的意义。需要大量的数据才能保证在某一问题上D有良好的效果。只能考虑继续优化思路。
    • 我们先给定一组标准正交基S,再给定一些列向量,写成矩阵P,如果D = [S P], 那么P中所有向量均可由S线性表出,此时D(之后称为字典)可以称为一个超完备的集合,此时Z的表示不再唯一,为后续对于Z某种性质的优化提供了可能性。(*对于ISTA我们考虑到这里就结束了,但是仍然可以对此进行改进,如果有好的想法欢迎私信探讨)
    关于字典,我觉得是他通过一个拥有优秀性质的Z表示了蕴含复杂信息的Y
    
  2. 稀疏性
    对于一个向量Z,Z中非0元素个数为u, 则称Z为u稀疏的(u-Sparse)。对于一个充分稀疏的向量Z,使用Z{Site, Value}表示更加节省空间(类似图论算法中的两种存图结构:邻接矩阵和邻接表),是一种可行的压缩方式。
    Z = [0,0,1,0,0,0,3,0,0,0,0,0,1,0,0,2,0,5,0,0,0,0,0,0,0,0,0,0,0]
    Z{Site, Value} = [{2,1},{6,3},{12,1},{15,2},{17,5}]
    很明显sizeof(Z)>sizeof(Z{Site, Value})
    
    那么如何对通过优化保证稀疏性呢?
    Z ∗ = arg ⁡ min ⁡ Z S ( X , Y ) = ∣ ∣ Z ∣ ∣ 0 \begin{aligned} Z^* = {\arg\min}_Z S(X,Y) = ||Z||_0 \end{aligned} Z=argminZS(X,Y)=Z0
    是一种很好的想法,但是L-0范数显然是非凸的,优化难度巨大,属于NP-Hard问题,只能智取,不可强攻。
    IDEAs:
    1. 使用贪心算法(one can say it nearly always choose all the suboptimal solution)
    2. 使用群体智能算法(some said only works well on low-dimension question)
    3. 放宽条件(some called of ’松弛‘, which may be a good idea)
    根据大佬的证明,将0范数放宽到1范数是可行的,故原问题转化为:
    Z ∗ = arg ⁡ min ⁡ Z S ( Z ) = ∣ ∣ Z ∣ ∣ 1 \begin{aligned} Z^* = {\arg\min}_Z S(Z) = ||Z||_1 \end{aligned} Z
  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值