forked from jaejin-cho/Wave-MoDL-Example-Code-ISMRM-2021
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwave_modl_example.py
More file actions
129 lines (99 loc) · 4.11 KB
/
wave_modl_example.py
File metadata and controls
129 lines (99 loc) · 4.11 KB
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
##########################################################
# %%
# tensorflow version 2.2.0
##########################################################
import os,sys
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
sys.path.append('utils')
##########################################################
# %%
# import some libraries
##########################################################
import numpy as np
import library_common as mf
import library_modl as mm
import library_wave as mw
##########################################################
# %%
# parameters
##########################################################
ry = 3
rz = 3
# wave parameter
zpadf = 3
# network size
num_block = 10
nLayers = 5
num_filters = 24
num_slc, nx, ny, nc = 256, 192, 224, 12
##########################################################
# %%
# load data
##########################################################
data = np.load('data/data_example.npz')
icsm = data['arr_0']
imskw = data['arr_1']
imskc = imskw[:,:nx,]
ipsf = data['arr_2']
iAtbw = data['arr_3']
iAtbc = data['arr_4']
oimg = data['arr_5']
# oseg = data['arr_6']
##########################################################
# %%
# create sense/wave-caipi network
##########################################################
sens_model = mm.create_sense_3d(nx, ny, rz, nc, num_block = num_block)
sens_model.compile(optimizer=[],loss=mf.nrmse_loss)
wave_model = mw.create_wave_caipi(nx, ny, rz, nc, num_block = num_block, zpf = zpadf)
wave_model.compile(optimizer=[],loss=mf.nrmse_loss)
##########################################################
# %%
# create modl network
##########################################################
modl = mm.create_modl( nx = nx,
ny = ny,
nz = rz,
nc = nc,
num_block = num_block,
nLayers = nLayers,
num_filters = num_filters)
modl.compile(optimizer=[],loss=mf.nrmse_loss)
wave_modl = mw.create_wave_modl( nx = nx,
ny = ny,
rz = rz,
nc = nc,
zpf = zpadf,
num_block = num_block,
nLayers = nLayers,
num_filters = num_filters)
wave_modl.compile(optimizer=[],loss=mf.nrmse_loss)
##########################################################
# %%
# loading the network
##########################################################
modl.load_weights('network/modl.hdf5')
wave_modl.load_weights('network/wave_modl.hdf5')
##########################################################
# %%
# Prediction
##########################################################
input_cartesian = [icsm,imskc,iAtbc]
input_wave = [icsm,imskw,ipsf,iAtbw]
P_sens = sens_model.predict(input_cartesian)
P_modl = modl.predict(input_cartesian)
P_wave = wave_model.predict(input_wave)
P_wave_modl = wave_modl.predict(input_wave)
L_sens = sens_model.evaluate(input_cartesian,oimg)
L_modl = modl.evaluate(input_cartesian,oimg)
L_wave = wave_model.evaluate(input_wave,oimg)
L_wave_modl = wave_modl.evaluate(input_wave,oimg)
##########################################################
# %%
# diplay the results
##########################################################
mf.mosaic(np.rot90(np.abs(P_sens[0,...,0]+1j*P_sens[0,...,1])),1,rz,101,[0,1],'SENSE NRMSE : %.2f' % L_sens)
mf.mosaic(np.rot90(np.abs(P_modl[0,...,0]+1j*P_modl[0,...,1])),1,rz,102,[0,1],'MoDL NRMSE : %.2f' % L_modl)
mf.mosaic(np.rot90(np.abs(P_wave[0,...,0]+1j*P_wave[0,...,1])),1,rz,103,[0,1],'Wave-CAIPI NRMSE : %.2f' % L_wave)
mf.mosaic(np.rot90(np.abs(P_wave_modl[0,...,0]+1j*P_wave_modl[0,...,1])),1,rz,104,[0,1],'Wave-MoDL NRMSE : %.2f' % L_wave_modl)