-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdemo_admm_modes.jl
83 lines (73 loc) · 2.33 KB
/
demo_admm_modes.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
include("aradmm_image_denoising.jl")
## minimize mu/2 ||x-f||^2 + lam1 |\grad x|
## load image
using FITSIO
using PyPlot
imgfile="2004true137.fits";
x_true = Float64.(read(FITS(imgfile)[1]));#load image
@printf("loaded image size: %d*%d*%d\n", size(x_true, 1), size(x_true, 2), size(x_true, 3));
# 2004true image
sig = maximum(x_true)/20.; # noise
mu = 1.0/sig^2; #constraint
lam1 = 12.0; # l1 regularizer of gradient
x_given = x_true + sig*randn(size(x_true));
## model parameter
opts = optsinfo(1e-3,2000,0.1,1,5,2,2,1000,0.2,2,0.1,1.0); #relaxation parameter
opts.verbose = 0
@printf("ADMM start...\n");
##
# vanilla ADMM
opts.adp_flag = 0;
opts.γ = 1.0;
(sol1, outs1) = aradmm_image_denoising(x_given, x_given, mu, lam1, opts);
@printf("vanilla ADMM complete after %d iterations!\n", outs1.iter);
figure(1)
imshow(sol1)
# relaxed ADMM
opts.adp_flag = 0;
opts.γ = 1.5;
(sol2,outs2) = aradmm_image_denoising(x_given, x_given, mu, lam1, opts);
#t2 = outs2.runtime;
@printf("relaxed ADMM complete after %d iterations!\n", outs2.iter);
figure(2)
imshow(sol2)
# residual balancing
opts.adp_flag = 3; #residual balance
opts.γ = 1.0;
(sol3,outs3) = aradmm_image_denoising(x_given, x_given, mu, lam1, opts);
#t3 = outs2.runtime;
@printf("RB ADMM complete after %d iterations!\n", outs3.iter);
figure(3)
imshow(sol3)
# Adaptive ADMM, AISTATS 2017
opts.adp_flag = 1;
opts.γ = 1.0;
(sol4,outs4) = aradmm_image_denoising(x_given, x_given, mu, lam1, opts);
#t4 = outs4.runtime;
@printf("adaptive ADMM complete after %d iterations!\n", outs4.iter);
figure(4)
imshow(sol4)
# ARADMM
#tic();
opts.adp_flag = 5;
opts.γ = 1.0;
(sol6,outs6) = aradmm_image_denoising(x_given,x_given, mu, lam1, opts);
#t6 = outs6.runtime;
@printf("ARADMM complete after %d iterations!\n", outs6.iter);
figure(5)
imshow(sol6)
##
# legends = {'Vanilla ADMM', 'Relaxed ADMM', 'Residual balance', 'Adaptive ADMM', 'ARADMM'};
# figure,
# semilogy(outs1.tols, '-.g'),
# hold,
# semilogy(outs2.tols, '-.r');
# semilogy(outs3.tols, '--m');
# semilogy(outs4.tols, '--', 'Color',[0.7 0.2 0.2]);
# semilogy(outs6.tols, 'b');
# ylabel('Relative residual', 'FontName','Times New Roman');
# xlabel('Iteration', 'FontName','Times New Roman');
# legend(legends, 'FontName','Times New Roman');
# hold off
# figure(1);
# imshow(outs1.);