From 46c15756afbe21557b674950d0a0a40d1e18211b Mon Sep 17 00:00:00 2001 From: Andrews Cordolino Sobral Date: Fri, 29 Jul 2022 12:51:49 +0200 Subject: [PATCH] Fixed IALM with LMSVDS IALM with LMSVDS crashed with bigger videos --- README.md | 6 +- .../inexact_alm_rpca_with_lmsvds.m | 5 +- gui/main_about.fig | Bin 21042 -> 22179 bytes libs/SVD/LMSVDS.m | 94 +++++++++--------- 4 files changed, 51 insertions(+), 54 deletions(-) diff --git a/README.md b/README.md index 52d9254..1646051 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ [![View LRSLibrary on File Exchange](https://www.mathworks.com/matlabcentral/images/matlab-file-exchange.svg)](https://www.mathworks.com/matlabcentral/fileexchange/48404-lrslibrary) -Last Page Update: **07/03/2020** +Last Page Update: **29/07/2022**, Previous Page Update: **07/03/2020** -Latest Library Version: **1.0.10** (see Release Notes for more info) +Latest Library Version: **1.0.11** (see Release Notes for more info) LRSLibrary ---------- @@ -444,6 +444,8 @@ If you have any problems or questions, please contact the author: Andrews Sobral Release Notes: -------------- +* Version 1.0.11: Fixed IALM with LMSVDS (Liu et al. 2012). + * Version 1.0.10: Added ReProCS (Narayanamurthy and Vaswani, 2017a) and MEDRoP (Narayanamurthy and Vaswani, 2017b). Thanks to Praneeth Narayanamurthy. * Version 1.0.9: Fixed some issues for matrix completion methods. diff --git a/algorithms/rpca/IALM_LMSVDS/inexact_alm_rpca_with_lmsvds.m b/algorithms/rpca/IALM_LMSVDS/inexact_alm_rpca_with_lmsvds.m index 18e2f2a..38a1c53 100644 --- a/algorithms/rpca/IALM_LMSVDS/inexact_alm_rpca_with_lmsvds.m +++ b/algorithms/rpca/IALM_LMSVDS/inexact_alm_rpca_with_lmsvds.m @@ -63,7 +63,6 @@ iter = 0; total_svd = 0; converged = false; -stopCriterion = 1; sv = 10; while ~converged iter = iter + 1; @@ -73,8 +72,8 @@ E_hat = E_hat+min(temp_T + lambda/mu, 0); myA = D - E_hat + (1/mu)*Y; - [myM,myN] = size(myA); - myR = 2*myM/100; + [myM, ~] = size(myA); + myR = (myM/100)/2; [U,S,V] = LMSVDS(myA, myR, []); diagS = diag(S); diff --git a/gui/main_about.fig b/gui/main_about.fig index 4b25b766877610472e895356d7c3d847b72f1100..f8a11ee68b6ec41af6f2a0796d880d1b0667f6f3 100644 GIT binary patch literal 22179 zcma&Nb!?rz4=`G0W`>oSncJ0_nHg4Q#+A7%(~2w8R%Yf?W@bKRKJD%M{q#xqpDW!c zdF&`s5?gkh*nSknG!(?d$+(zV$rQyjn5=9aEE&mE98BG4uq+LFn6IFPaPk+HG!b8_&r@shE#va^%@|15+=VE-%NvWlo*7>EE2 z%scl2PtnFe(mT87!$zVPK~iYY=zI8;79zT8f>*S5=B~ZF+jzcdUM*o1oU{SxYHZ{+6BCryTrfO68*M9bvx+- zbT1zp-DE6qC19_0jf~5^K#nXjAGN83Nvpr z32c-6M4D(hwijZlM1<|L4|k&#h9NG}#=mbNFelHggn{i)`YP>$ z$b3jkEPZk*-t`ycIC_6f(S5uH`o3X*h8I@8nB_`Nv2dYOh3HzV6D{D6j^lWo$G;Q} zp}8V>Bcj&@uT-0B9^2wqxMe`r0BYJuF^2C~#8F1L_o80Pi!u4EzquZ)REopYh{mO; zgVg~0(BQViTy9oTuhvjM45zxvO~}2-cGpo|ow}HI)s)7knj4(REVjXt2+3cp)>b(1 z8l<DLi%-=S)EU@H#c-B^K^eB~Fb1T#cEeCfkPRcUKCn;J7$*QdBxpEuGJ(o

)!k+PCt$?-jQ*H9m*t{5Jw*CRNf>{*DL*fF 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 XxfG$|L~C%@1{lrF@(yIfM0WUptb!d{ literal 21042 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 m@6_<0t>-(14}xe^^7i*{lkb= mn*0.015 && r <= mn*0.035 + sub = 1; +else + sub = 2; +end + +if isfield(opts, 'gvk'); tau = opts.gvk; else tau = 10; end +% working size +k = min([2*r,r+tau,m,n]); +% initial guess +% disp(n) +% disp(['k=', num2str(k)]) +% Y = randn(n,k); +Y = randn(n,round(k)); + +if mainargin < 3; return; end + +if isfield(opts, 'tol'); tol = opts.tol; end +if isfield(opts,'maxit'); maxit = opts.maxit; end +if isfield(opts, 'memo'); memo = opts.memo; end +if isfield(opts,'idisp'); idisp = opts.idisp; end +if isfield(opts,'initY'); Y = opts.initY(:,1:k); end +if isfield(opts, 'sub'); sub = opts.sub; end % initialize if isnumeric(A) @@ -80,55 +116,15 @@ %% %%%%%%% nested functions %%%%%%% %% - function set_param - - tol = 1e-8; - maxit = 300; - idisp = 0; - mn = min(m,n); - - if r <= mn*0.02; - memo = 5; - elseif r <= mn*0.03; - memo = 4; - else - memo = 3; - end - - if r >= mn*0.015 & r <= mn*0.035 - sub = 1; - else - sub = 2; - end - - if isfield(opts, 'gvk'); tau = opts.gvk; else tau = 10; end - % working size - k = min([2*r,r+tau,m,n]); - % initial guess - %disp(n) - %disp(k) - %Y = randn(n,k); - Y = randn(n,round(k)); - - if mainargin < 3; return; end - - if isfield(opts, 'tol'); tol = opts.tol; end - if isfield(opts,'maxit'); maxit = opts.maxit; end - if isfield(opts, 'memo'); memo = opts.memo; end - if isfield(opts,'idisp'); idisp = opts.idisp; end - if isfield(opts,'initY'); Y = opts.initY(:,1:k); end - if isfield(opts, 'sub'); sub = opts.sub; end - - end % set_param %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [U,S,V] = get_svd(X,Y) method = 2; switch method - case 1; + case 1 [V,S,W] = svd(Y,0); U = X*W; - case 2; + case 2 [V,R] = qr(Y,0); [W,S,Z] = svd(R'); U = X*W; V = V*Z; @@ -187,7 +183,6 @@ Ym(:,k+1:2*k) = Y; Lm = k; - rvr = zeros(r,1); chg_rvr = 1; chgv = zeros(maxit,1); @@ -261,7 +256,7 @@ %portion = csum/csum(end); %L = find(portion > .999,1) L = sum(sdT > 5e-8,1); - if L < .95*Lm; %disp([L Lm]) + if L < .95*Lm %disp([L Lm]) Lm = L; Icut = idx(1:Lm); Py = Py(:,Icut); @@ -326,6 +321,7 @@ n = size(Y,1); mn = min(m,n); k = size(Y,2); +% disp(['k=', num2str(k), ' : r=', num2str(r)]) if k < r; error('working size too small'); end if memo > 0 @@ -337,13 +333,13 @@ else Lm = 0; end -%disp(r) -%rvr = zeros(r,1); +% disp(r) +% rvr = zeros(r,1); rvr = zeros(round(r),1); chg_rvr = 1; chgv = zeros(maxit,1); xtrm = zeros(maxit,1); -%hrvs = zeros(maxit,r); +% hrvs = zeros(maxit,r); hrvs = zeros(maxit,round(r)); kktc = zeros(maxit,1); disp_str = 'iter %3i: memo used %i, chg_rvr %8.4e\n'; @@ -413,7 +409,7 @@ dT = diag(T); [sdT,idx] = sort(dT,'descend'); L = sum(sdT > 5e-10,1); - if L < .95*Lm; %disp([L Lm]) + if L < .95*Lm %disp([L Lm]) Lm = L; Icut = idx(1:Lm); Px = Px(:,Icut);