低秩表示的学习--Latent Low-Rank Representation(LatLLR)

最近读了LLR(Low Rank Representation)的文章,所以整理一下。本文的主线是LLR-->LantLLR-->RobustLLR

************ 代码我已经下载了,也就直接贴出来了~~~~~***********

%% Latent Low-Rank Representation
function [Z,L,E] = latent_lrr(X,lambda)
% Latent Low-Rank Representation for Subspace Segmentation and Feature Extraction
% Guangcan Liu, Shuicheng Yan. ICCV 2011.
% Problem:
%   min_Z,L,E ||Z||_* + ||L||_* +¡¡lambda||E||_1,
%           s.t. X = XZ + LX +E.
% Solning problem by Inexact ALM

A = X;
tol = 1e-6;
rho = 1.1;
max_mu = 1e6;
mu = 1e-6;
maxIter = 1e6;
[d n] = size(X);
m = size(A,2);
atx = X'*X;
inv_a = inv(A'*A+eye(m));
inv_b = inv(A*A'+eye(d));
%% Initializing optimization variables
J = zeros(m,n);
Z = zeros(m,n);
L = zeros(d,d);
S = zeros(d,d);

% E = sparse(d,n);
E = zeros(d,n);

Y1 = zeros(d,n);
Y2 = zeros(m,n);
Y3 = zeros(d,d);

%% Start main loop
iter = 0;
disp('initial');

while iter<maxIter
    iter = iter + 1;
%     disp(['iter====>>>>' num2str(iter)]);
    %updating J by the Singular Value Thresholding(SVT) operator
    temp_J = Z + Y2/mu;
    [U_J,sigma_J,V_J] = svd(temp_J,'econ');
    sigma_J = diag(sigma_J);
    svp_J = length(find(sigma_J>1/mu));
    if svp_J>=1
        sigma_J = sigma_J(1:svp_J)-1/mu;
    else
        svp_J = 1;
        sigma_J = 0;
    end
    J = U_J(:,1:svp_J)*diag(sigma_J)*V_J(:,1:svp_J)';
    
    %updating S by the Singular Value Thresholding(SVT) operator
    temp_S = L + Y3/mu;
    [U_S,sigma_S,V_S] = svd(temp_S,'econ');
    sigma_S = diag(sigma_S);
    svp_S = length(find(sigma_S>1/mu));
    if svp_S>=1
        sigma_S = sigma_S(1:svp_S)-1/mu;
    else
        svp_S = 1;
        sigma_S = 0;
    end
    S = U_S(:,1:svp_S)*diag(sigma_S)*V_S(:,1:svp_S)';
    
    %udpate Z
    Z = inv_a*(atx-X'*L*X-X'*E+J+(X'*Y1-Y2)/mu);
    
    %udpate L
    L = ((X-X*Z-E)*X'+S+(Y1*X'-Y3)/mu)*inv_b;
    
    %update E
    xmaz = X-X*Z-L*X;
    temp = xmaz+Y1/mu;
    E = max(0,temp - lambda/mu)+min(0,temp + lambda/mu);
    
    leq1 = xmaz-E;
    leq2 = Z-J;
    leq3 = L-S;
    max_l1 = max(max(abs(leq1)));
    max_l2 = max(max(abs(leq2)));
    max_l3 = max(max(abs(leq3)));
    
    stopC1 = max(max_l1, max_l2);
    stopC = max(stopC1, max_l3);
    if stopC<tol
        disp('LRR done.');
        break;
    else
        Y1 = Y1 + mu*leq1;
        Y2 = Y2 + mu*leq2;
        Y3 = Y3 + mu*leq3;
        mu = min(max_mu,mu*rho);
    end
    
end
end

一、低秩表示

刚开始接触低秩表示是看到一篇论文里面对公式进行了低秩约束,感觉很好奇,查了一下后,发现低秩很神奇,可以将噪声和干净数据自动分割出来。因为这一部分比较基础所以参考一篇中文论文[1]

 

稀疏表示也是将数据集矩阵表示成字典的线性组合,但是不同的是稀疏表示希望系数是稀疏的。

举例:

 

可以把Ui理解为空间里的基,然后Q是系数,相当于坐标点,20个4维的坐标点。X是100个数据,随机选20个加噪声,最后用低秩表示,可以看到相似度矩阵的块效应非常显著,这个和定义的5个子空间是吻合,这说明,对子空间的分割具有鲁棒性,同时可以看到近乎完美的恢复了噪声,所以具有良好的去噪性。

 

二、低秩子空间恢复的联合稀疏表示

本部分参考的论文也是一篇中文论文[2]

 

最后计算测试样本对各类训练样本的残差,测试样本属于残差最小的那个类。

三、Latent Low-Rank Representation(LatLLR)[3]

下面按照这两个问题讨论

1)无噪声数据

先给出一个定理并证明

 

接下来还是用举例证明

一共是10个空间,选择了9个所以样本是不充分的,但是我们使用lantLLR,从效果可以看出能鲁棒的分割出9个子空间,其中b图因为是不充分的LLR只能是对角线为1矩阵。

本例中样本是充分的,只是在噪声不同的情况下,比较LLR和LatLLR

 

最后一部分是在真实场景中的实验应用

三种不同的点代表不同的空间,红色左右转,蓝色的上下转,黄色的不动。

整个视频序列是29帧,459个点,3个motion,一个motion对应一个子空间

[1]史加荣,低秩矩阵恢复算法综述,[J]计算机应用研究,2013

[2]胡正平,基于低秩子空间恢复的联合稀疏表示人脸识别算法,[J]电子学报,2013

[3]Guangcan Liu, Latent Low-Rank Representation for Subspace Segmentation and Feature Extraction,ICCV,2011

 

代码地址:https://download.csdn.net/download/smilebluesky/10555664

 

 

转自

Stable-Diffusion是一种用于图像生成、插值和修复的深度学习模型。其中,Latent Diffusion是Stable-Diffusion模型的一部分,用于对图像的表示进行扰动和采样,从而实现图像生成和插值。 具体来说,Latent Diffusion是一种基于扰动的采样方法,用于对图像的表示进行采样。在Latent Diffusion中,我们将原始的维向量表示视为一个潜在状态,然后对这个潜在状态进行扰动,得到一系列新的潜在状态。接着,我们可以使用这些新的潜在状态来生成新的图像。 Latent Diffusion的作用是实现对图像表示的随机采样,从而实现图像生成和插值。通过对表示进行扰动,我们可以生成出多个不同的潜在状态,从而实现多样化的图像生成和插值。此外,Latent Diffusion还可以应用于图像修复,例如在图像中添加噪声或遮挡时,我们可以使用Latent Diffusion来恢复原始图像。 举个例子,假设我们想要生成一张全新的室内场景图像,我们可以使用Stable-Diffusion模型和Latent Diffusion来实现。首先,我们可以使用训练好的Stable-Diffusion模型生成一个初始的维向量表示,并对这个维向量表示进行扰动,得到一系列新的维向量表示。接下来,我们可以使用Autoencoder模型对这些新的维向量表示进行解码,生成一系列新的室内场景图像。这样,我们就可以生成出多样化的、具有室内场景特征的图像。同时,我们也可以使用Latent Diffusion来实现图像插值,例如将两个不同的维向量表示进行线性插值,得到两张室内场景图像之间的中间图像。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值