Upload 28 files
Browse files- .gitattributes +1 -0
- AD_Dataset.py +45 -0
- AD_Standard_2DRandomSlicesData.py +101 -0
- AD_Standard_2DSlicesData.py +95 -0
- AD_Standard_2DTestingSlices.py +148 -0
- AD_Standard_3DRandomPatch.py +94 -0
- AD_Standard_CNN_Dataset.py +69 -0
- AlexNet2D.py +74 -0
- AlexNet3D.py +46 -0
- CV final report.pdf +3 -0
- autoencoder.py +17 -0
- cnn_3d_with_ae.py +43 -0
- cnn_3d_wtih_ae.py +25 -0
- custom_transform.py +49 -0
- custom_transform2D.py +47 -0
- imageExtract.py +10 -0
- main_alexnet.py +238 -0
- main_autoencoder.py +103 -0
- main_cnn_autoencoder.py +218 -0
- main_resnet.py +241 -0
- test.py +91 -0
- test.txt +198 -0
- test_2C_new.txt +66 -0
- test_2classes.txt +100 -0
- test_encoder.py +92 -0
- train.txt +486 -0
- train_2C_new.txt +519 -0
- train_2classes.txt +328 -0
- validation_2C_new.txt +100 -0
.gitattributes
CHANGED
@@ -35,3 +35,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
36 |
sample_data/mnist_test.csv filter=lfs diff=lfs merge=lfs -text
|
37 |
sample_data/mnist_train_small.csv filter=lfs diff=lfs merge=lfs -text
|
|
|
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
36 |
sample_data/mnist_test.csv filter=lfs diff=lfs merge=lfs -text
|
37 |
sample_data/mnist_train_small.csv filter=lfs diff=lfs merge=lfs -text
|
38 |
+
CV[[:space:]]final[[:space:]]report.pdf filter=lfs diff=lfs merge=lfs -text
|
AD_Dataset.py
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import nibabel as nib
|
2 |
+
import os
|
3 |
+
from torch.utils.data import Dataset
|
4 |
+
|
5 |
+
class AD_Dataset(Dataset):
|
6 |
+
"""labeled Faces in the Wild dataset."""
|
7 |
+
|
8 |
+
def __init__(self, root_dir, data_file, transform=None):
|
9 |
+
"""
|
10 |
+
Args:
|
11 |
+
root_dir (string): Directory of all the images.
|
12 |
+
data_file (string): File name of the train/test split file.
|
13 |
+
transform (callable, optional): Optional transform to be applied on a sample.
|
14 |
+
data_augmentation (boolean): Optional data augmentation.
|
15 |
+
"""
|
16 |
+
self.root_dir = root_dir
|
17 |
+
self.data_file = data_file
|
18 |
+
self.transform = transform
|
19 |
+
|
20 |
+
def __len__(self):
|
21 |
+
return sum(1 for line in open(self.data_file))
|
22 |
+
|
23 |
+
def __getitem__(self, idx):
|
24 |
+
df = open(self.data_file)
|
25 |
+
lines = df.readlines()
|
26 |
+
lst = lines[idx].split()
|
27 |
+
img_name = lst[0]
|
28 |
+
img_label = lst[1]
|
29 |
+
image_path = os.path.join(self.root_dir, img_name)
|
30 |
+
image = nib.load(image_path)
|
31 |
+
|
32 |
+
|
33 |
+
if img_label == 'Normal':
|
34 |
+
label = 0
|
35 |
+
elif img_label == 'AD':
|
36 |
+
label = 1
|
37 |
+
elif img_label == 'MCI':
|
38 |
+
label = 2
|
39 |
+
|
40 |
+
if self.transform:
|
41 |
+
image = self.transform(image)
|
42 |
+
|
43 |
+
sample = {'image': image, 'label': label}
|
44 |
+
|
45 |
+
return sample
|
AD_Standard_2DRandomSlicesData.py
ADDED
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import nibabel as nib
|
2 |
+
import os
|
3 |
+
from torch.utils.data import Dataset
|
4 |
+
import numpy as np
|
5 |
+
import matplotlib.pyplot as plt
|
6 |
+
from skimage.transform import resize
|
7 |
+
from PIL import Image
|
8 |
+
import random
|
9 |
+
|
10 |
+
|
11 |
+
AX_INDEX = 78
|
12 |
+
COR_INDEX = 79
|
13 |
+
SAG_INDEX = 57
|
14 |
+
AX_SCETION = "[:, :, slice_i]"
|
15 |
+
COR_SCETION = "[:, slice_i, :]"
|
16 |
+
SAG_SCETION = "[slice_i, :, :]"
|
17 |
+
|
18 |
+
|
19 |
+
class AD_Standard_2DRandomSlicesData(Dataset):
|
20 |
+
"""labeled Faces in the Wild dataset."""
|
21 |
+
|
22 |
+
def __init__(self, root_dir, data_file, transform=None, slice = slice):
|
23 |
+
"""
|
24 |
+
Args:
|
25 |
+
root_dir (string): Directory of all the images.
|
26 |
+
data_file (string): File name of the train/test split file.
|
27 |
+
transform (callable, optional): Optional transform to be applied on a sample.
|
28 |
+
data_augmentation (boolean): Optional data augmentation.
|
29 |
+
"""
|
30 |
+
self.root_dir = root_dir
|
31 |
+
self.data_file = data_file
|
32 |
+
self.transform = transform
|
33 |
+
|
34 |
+
def __len__(self):
|
35 |
+
return sum(1 for line in open(self.data_file))
|
36 |
+
|
37 |
+
def __getitem__(self, idx):
|
38 |
+
df = open(self.data_file)
|
39 |
+
lines = df.readlines()
|
40 |
+
lst = lines[idx].split()
|
41 |
+
img_name = lst[0]
|
42 |
+
img_label = lst[1]
|
43 |
+
image_path = os.path.join(self.root_dir, img_name)
|
44 |
+
image = nib.load(image_path)
|
45 |
+
samples = []
|
46 |
+
if img_label == 'Normal':
|
47 |
+
label = 0
|
48 |
+
elif img_label == 'AD':
|
49 |
+
label = 1
|
50 |
+
elif img_label == 'MCI':
|
51 |
+
label = 2
|
52 |
+
|
53 |
+
AXimageList = axRandomSlice(image)
|
54 |
+
CORimageList = corRandomSlice(image)
|
55 |
+
SAGimageList = sagRandomSlice(image)
|
56 |
+
|
57 |
+
for img2DList in (AXimageList, CORimageList, SAGimageList):
|
58 |
+
for image2D in img2DList:
|
59 |
+
if self.transform:
|
60 |
+
image2D = self.transform(image2D)
|
61 |
+
sample = {'image': image2D, 'label': label}
|
62 |
+
samples.append(sample)
|
63 |
+
random.shuffle(samples)
|
64 |
+
return samples
|
65 |
+
|
66 |
+
|
67 |
+
def getRandomSlice(image_array, keyIndex, section, step = 1):
|
68 |
+
slice_p = keyIndex
|
69 |
+
slice_2Dimgs = []
|
70 |
+
slice_select_0 = None
|
71 |
+
slice_select_1 = None
|
72 |
+
slice_select_2 = None
|
73 |
+
|
74 |
+
randomShift = random.randint(-9, 9)
|
75 |
+
slice_p = slice_p + randomShift
|
76 |
+
i = 0
|
77 |
+
for slice_i in range(slice_p-step, slice_p+step+1, step):
|
78 |
+
slice_select = eval("image_array"+section)
|
79 |
+
exec("slice_select_"+str(i)+"=slice_select")
|
80 |
+
i += 1
|
81 |
+
slice_2Dimg = np.stack((slice_select_0, slice_select_1, slice_select_2), axis = 2)
|
82 |
+
slice_2Dimgs.append(slice_2Dimg)
|
83 |
+
return slice_2Dimgs
|
84 |
+
|
85 |
+
def axRandomSlice(image):
|
86 |
+
image_array = np.array(image.get_data())
|
87 |
+
return getRandomSlice(image_array, AX_INDEX, AX_SCETION)
|
88 |
+
|
89 |
+
|
90 |
+
def corRandomSlice(image):
|
91 |
+
image_array = np.array(image.get_data())
|
92 |
+
return getRandomSlice(image_array, COR_INDEX, COR_SCETION)
|
93 |
+
|
94 |
+
|
95 |
+
def sagRandomSlice(image):
|
96 |
+
image_array = np.array(image.get_data())
|
97 |
+
return getRandomSlice(image_array, SAG_INDEX, SAG_SCETION)
|
98 |
+
|
99 |
+
|
100 |
+
|
101 |
+
|
AD_Standard_2DSlicesData.py
ADDED
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import nibabel as nib
|
2 |
+
import os
|
3 |
+
from torch.utils.data import Dataset
|
4 |
+
import numpy as np
|
5 |
+
import matplotlib.pyplot as plt
|
6 |
+
from skimage.transform import resize
|
7 |
+
from PIL import Image
|
8 |
+
import random
|
9 |
+
|
10 |
+
|
11 |
+
AX_SCETION = "[:, :, slice_i]"
|
12 |
+
COR_SCETION = "[:, slice_i, :]"
|
13 |
+
SAG_SCETION = "[slice_i, :, :]"
|
14 |
+
AX_INDEX = 78
|
15 |
+
COR_INDEX = 79
|
16 |
+
SAG_INDEX = 57
|
17 |
+
|
18 |
+
class AD_Standard_2DSlicesData(Dataset):
|
19 |
+
"""labeled Faces in the Wild dataset."""
|
20 |
+
|
21 |
+
def __init__(self, root_dir, data_file, transform=None, slice = slice):
|
22 |
+
"""
|
23 |
+
Args:
|
24 |
+
root_dir (string): Directory of all the images.
|
25 |
+
data_file (string): File name of the train/test split file.
|
26 |
+
transform (callable, optional): Optional transform to be applied on a sample.
|
27 |
+
data_augmentation (boolean): Optional data augmentation.
|
28 |
+
"""
|
29 |
+
self.root_dir = root_dir
|
30 |
+
self.data_file = data_file
|
31 |
+
self.transform = transform
|
32 |
+
|
33 |
+
def __len__(self):
|
34 |
+
return sum(1 for line in open(self.data_file))
|
35 |
+
|
36 |
+
def __getitem__(self, idx):
|
37 |
+
df = open(self.data_file)
|
38 |
+
lines = df.readlines()
|
39 |
+
lst = lines[idx].split()
|
40 |
+
img_name = lst[0]
|
41 |
+
img_label = lst[1]
|
42 |
+
image_path = os.path.join(self.root_dir, img_name)
|
43 |
+
image = nib.load(image_path)
|
44 |
+
samples = []
|
45 |
+
if img_label == 'Normal':
|
46 |
+
label = 0
|
47 |
+
elif img_label == 'AD':
|
48 |
+
label = 1
|
49 |
+
elif img_label == 'MCI':
|
50 |
+
label = 2
|
51 |
+
|
52 |
+
AXimageList = axKeySlice(image)
|
53 |
+
CORimageList = corKeySlice(image)
|
54 |
+
SAGimageList = sagKeySlice(image)
|
55 |
+
|
56 |
+
for img2DList in (AXimageList, CORimageList, SAGimageList):
|
57 |
+
for image2D in img2DList:
|
58 |
+
if self.transform:
|
59 |
+
image2D = self.transform(image2D)
|
60 |
+
sample = {'image': image2D, 'label': label}
|
61 |
+
samples.append(sample)
|
62 |
+
random.shuffle(samples)
|
63 |
+
return samples
|
64 |
+
|
65 |
+
|
66 |
+
def getSlice(image_array, keyIndex, section, step = 1):
|
67 |
+
slice_p = keyIndex
|
68 |
+
slice_2Dimgs = []
|
69 |
+
slice_select_0 = None
|
70 |
+
slice_select_1 = None
|
71 |
+
slice_select_2 = None
|
72 |
+
i = 0
|
73 |
+
for slice_i in range(slice_p-step, slice_p+step+1, step):
|
74 |
+
slice_select = eval("image_array"+section)
|
75 |
+
exec("slice_select_"+str(i)+"=slice_select")
|
76 |
+
i += 1
|
77 |
+
slice_2Dimg = np.stack((slice_select_0, slice_select_1, slice_select_2), axis = 2)
|
78 |
+
slice_2Dimgs.append(slice_2Dimg)
|
79 |
+
return slice_2Dimgs
|
80 |
+
|
81 |
+
|
82 |
+
def axKeySlice(image):
|
83 |
+
image_array = np.array(image.get_data())
|
84 |
+
return getSlice(image_array, AX_INDEX, AX_SCETION)
|
85 |
+
|
86 |
+
|
87 |
+
def corKeySlice(image):
|
88 |
+
image_array = np.array(image.get_data())
|
89 |
+
return getSlice(image_array, COR_INDEX, COR_SCETION)
|
90 |
+
|
91 |
+
|
92 |
+
def sagKeySlice(image):
|
93 |
+
image_array = np.array(image.get_data())
|
94 |
+
return getSlice(image_array, SAG_INDEX, SAG_SCETION)
|
95 |
+
|
AD_Standard_2DTestingSlices.py
ADDED
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import nibabel as nib
|
2 |
+
import os
|
3 |
+
from torch.utils.data import Dataset
|
4 |
+
import numpy as np
|
5 |
+
import matplotlib.pyplot as plt
|
6 |
+
from skimage.transform import resize
|
7 |
+
from PIL import Image
|
8 |
+
import random
|
9 |
+
|
10 |
+
|
11 |
+
AX_INDEX = 78
|
12 |
+
COR_INDEX = 79
|
13 |
+
SAG_INDEX = 57
|
14 |
+
AX_SCETION = "[:, :, slice_i]"
|
15 |
+
COR_SCETION = "[:, slice_i, :]"
|
16 |
+
SAG_SCETION = "[slice_i, :, :]"
|
17 |
+
|
18 |
+
|
19 |
+
class AD_Standard_2DTestingSlices(Dataset):
|
20 |
+
"""labeled Faces in the Wild dataset."""
|
21 |
+
|
22 |
+
def __init__(self, root_dir, data_file, transform=None, slice = slice, size = 9):
|
23 |
+
"""
|
24 |
+
Args:
|
25 |
+
root_dir (string): Directory of all the images.
|
26 |
+
data_file (string): File name of the train/test split file.
|
27 |
+
transform (callable, optional): Optional transform to be applied on a sample.
|
28 |
+
data_augmentation (boolean): Optional data augmentation.
|
29 |
+
"""
|
30 |
+
self.root_dir = root_dir
|
31 |
+
self.data_file = data_file
|
32 |
+
self.transform = transform
|
33 |
+
self.size = size
|
34 |
+
|
35 |
+
def __len__(self):
|
36 |
+
return sum(1 for line in open(self.data_file))
|
37 |
+
|
38 |
+
def __getitem__(self, idx):
|
39 |
+
df = open(self.data_file)
|
40 |
+
lines = df.readlines()
|
41 |
+
lst = lines[idx].split()
|
42 |
+
img_name = lst[0]
|
43 |
+
img_label = lst[1]
|
44 |
+
image_path = os.path.join(self.root_dir, img_name)
|
45 |
+
image = nib.load(image_path)
|
46 |
+
samples = []
|
47 |
+
if img_label == 'Normal':
|
48 |
+
label = 0
|
49 |
+
elif img_label == 'AD':
|
50 |
+
label = 1
|
51 |
+
elif img_label == 'MCI':
|
52 |
+
label = 2
|
53 |
+
|
54 |
+
AXimageList = None
|
55 |
+
CORimageList = None
|
56 |
+
SAGimageList = None
|
57 |
+
|
58 |
+
if self.size == 3:
|
59 |
+
AXimageList = axKeySlice(image)
|
60 |
+
CORimageList = corKeySlice(image)
|
61 |
+
SAGimageList = sagKeySlice(image)
|
62 |
+
elif self.size == 9:
|
63 |
+
AXimageList = ax3Slices(image)
|
64 |
+
CORimageList = cor3Slices(image)
|
65 |
+
SAGimageList = sag3Slices(image)
|
66 |
+
|
67 |
+
|
68 |
+
for img2DList in (AXimageList, CORimageList, SAGimageList):
|
69 |
+
for image2D in img2DList:
|
70 |
+
if self.transform:
|
71 |
+
image2D = self.transform(image2D)
|
72 |
+
sample = {'image': image2D, 'label': label}
|
73 |
+
samples.append(sample)
|
74 |
+
assert len(samples) == self.size
|
75 |
+
random.shuffle(samples)
|
76 |
+
return samples
|
77 |
+
|
78 |
+
|
79 |
+
|
80 |
+
def getSlice(image_array, keyIndex, section, step = 1):
|
81 |
+
slice_p = keyIndex
|
82 |
+
slice_2Dimgs = []
|
83 |
+
slice_select_0 = None
|
84 |
+
slice_select_1 = None
|
85 |
+
slice_select_2 = None
|
86 |
+
i = 0
|
87 |
+
for slice_i in range(slice_p-step, slice_p+step+1, step):
|
88 |
+
slice_select = eval("image_array"+section)
|
89 |
+
exec("slice_select_"+str(i)+"=slice_select")
|
90 |
+
i += 1
|
91 |
+
slice_2Dimg = np.stack((slice_select_0, slice_select_1, slice_select_2), axis = 2)
|
92 |
+
slice_2Dimgs.append(slice_2Dimg)
|
93 |
+
return slice_2Dimgs
|
94 |
+
|
95 |
+
|
96 |
+
def axKeySlice(image):
|
97 |
+
image_array = np.array(image.get_data())
|
98 |
+
return getSlice(image_array, AX_INDEX, AX_SCETION)
|
99 |
+
|
100 |
+
|
101 |
+
def corKeySlice(image):
|
102 |
+
image_array = np.array(image.get_data())
|
103 |
+
return getSlice(image_array, COR_INDEX, COR_SCETION)
|
104 |
+
|
105 |
+
|
106 |
+
def sagKeySlice(image):
|
107 |
+
image_array = np.array(image.get_data())
|
108 |
+
return getSlice(image_array, SAG_INDEX, SAG_SCETION)
|
109 |
+
|
110 |
+
|
111 |
+
|
112 |
+
def get3Slices(image_array, keyIndex, section, step = 1):
|
113 |
+
slice_p = keyIndex
|
114 |
+
slice_2Dimgs = []
|
115 |
+
slice_select_0 = None
|
116 |
+
slice_select_1 = None
|
117 |
+
slice_select_2 = None
|
118 |
+
for shift in (-5, 0, 5):
|
119 |
+
slice_sp = slice_p + shift
|
120 |
+
i = 0
|
121 |
+
slice_select_0 = None
|
122 |
+
slice_select_1 = None
|
123 |
+
slice_select_2 = None
|
124 |
+
for slice_i in range(slice_sp-step, slice_sp+step+1, step):
|
125 |
+
slice_select = eval("image_array"+section)
|
126 |
+
exec("slice_select_"+str(i)+"=slice_select")
|
127 |
+
i += 1
|
128 |
+
slice_2Dimg = np.stack((slice_select_0, slice_select_1, slice_select_2), axis = 2)
|
129 |
+
slice_2Dimgs.append(slice_2Dimg)
|
130 |
+
return slice_2Dimgs
|
131 |
+
|
132 |
+
|
133 |
+
|
134 |
+
def ax3Slices(image):
|
135 |
+
image_array = np.array(image.get_data())
|
136 |
+
return get3Slices(image_array, AX_INDEX, AX_SCETION)
|
137 |
+
|
138 |
+
|
139 |
+
def cor3Slices(image):
|
140 |
+
image_array = np.array(image.get_data())
|
141 |
+
return get3Slices(image_array, COR_INDEX, COR_SCETION)
|
142 |
+
|
143 |
+
|
144 |
+
def sag3Slices(image):
|
145 |
+
image_array = np.array(image.get_data())
|
146 |
+
return get3Slices(image_array, SAG_INDEX, SAG_SCETION)
|
147 |
+
|
148 |
+
|
AD_Standard_3DRandomPatch.py
ADDED
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import nibabel as nib
|
2 |
+
import os
|
3 |
+
from torch.utils.data import Dataset
|
4 |
+
import numpy as np
|
5 |
+
import matplotlib.pyplot as plt
|
6 |
+
from skimage.transform import resize
|
7 |
+
from PIL import Image
|
8 |
+
import random
|
9 |
+
import torch
|
10 |
+
|
11 |
+
NON_AX = (0, 1)
|
12 |
+
NON_COR = (0, 2)
|
13 |
+
NON_SAG = (1, 2)
|
14 |
+
|
15 |
+
|
16 |
+
class AD_Standard_3DRandomPatch(Dataset):
|
17 |
+
"""labeled Faces in the Wild dataset."""
|
18 |
+
|
19 |
+
def __init__(self, root_dir, data_file):
|
20 |
+
"""
|
21 |
+
Args:
|
22 |
+
root_dir (string): Directory of all the images.
|
23 |
+
data_file (string): File name of the train/test split file.
|
24 |
+
"""
|
25 |
+
self.root_dir = root_dir
|
26 |
+
self.data_file = data_file
|
27 |
+
|
28 |
+
def __len__(self):
|
29 |
+
with open(self.data_file) as df:
|
30 |
+
summation = sum(1 for line in df)
|
31 |
+
return summation
|
32 |
+
|
33 |
+
def __getitem__(self, idx):
|
34 |
+
with open(self.data_file) as df:
|
35 |
+
lines = df.readlines()
|
36 |
+
lst = lines[idx].split()
|
37 |
+
img_name = lst[0]
|
38 |
+
image_path = os.path.join(self.root_dir, img_name)
|
39 |
+
image = nib.load(image_path)
|
40 |
+
|
41 |
+
image_array = np.array(image.get_data())
|
42 |
+
patch_samples = getRandomPatches(image_array)
|
43 |
+
patch_dict = {"patch": patch_samples}
|
44 |
+
return patch_dict
|
45 |
+
|
46 |
+
|
47 |
+
def customToTensor(pic):
|
48 |
+
if isinstance(pic, np.ndarray):
|
49 |
+
img = torch.from_numpy(pic)
|
50 |
+
img = torch.unsqueeze(img,0)
|
51 |
+
# backward compatibility
|
52 |
+
return img.float()
|
53 |
+
|
54 |
+
def getRandomPatches(image_array):
|
55 |
+
patches = []
|
56 |
+
mean_ax = np.ndarray.mean(image_array, axis = NON_AX)
|
57 |
+
mean_cor = np.ndarray.mean(image_array, axis = NON_COR)
|
58 |
+
mean_sag = np.ndarray.mean(image_array, axis = NON_SAG)
|
59 |
+
|
60 |
+
first_ax = int(round(list(mean_ax).index(filter(lambda x: x>0, mean_ax)[0])))
|
61 |
+
last_ax = int(round(list(mean_ax).index(filter(lambda x: x>0, mean_ax)[-1])))
|
62 |
+
first_cor = int(round(list(mean_cor).index(filter(lambda x: x>0, mean_cor)[0])))
|
63 |
+
last_cor = int(round(list(mean_cor).index(filter(lambda x: x>0, mean_cor)[-1])))
|
64 |
+
first_sag = int(round(list(mean_sag).index(filter(lambda x: x>0, mean_sag)[0])))
|
65 |
+
last_sag = int(round(list(mean_sag).index(filter(lambda x: x>0, mean_sag)[-1])))
|
66 |
+
|
67 |
+
first_ax = first_ax + 20
|
68 |
+
last_ax = last_ax - 5
|
69 |
+
|
70 |
+
ax_samples = [random.randint(first_ax - 3, last_ax - 3) for r in xrange(10000)]
|
71 |
+
cor_samples = [random.randint(first_cor - 3, last_cor - 3) for r in xrange(10000)]
|
72 |
+
sag_samples = [random.randint(first_sag - 3, last_sag - 3) for r in xrange(10000)]
|
73 |
+
|
74 |
+
for i in range(1000):
|
75 |
+
ax_i = ax_samples[i]
|
76 |
+
cor_i = cor_samples[i]
|
77 |
+
sag_i = sag_samples[i]
|
78 |
+
patch = image_array[ax_i-3:ax_i+4, cor_i-3:cor_i+4, sag_i-3:sag_i+4]
|
79 |
+
while (np.ndarray.sum(patch) == 0):
|
80 |
+
ax_ni = random.randint(first_ax - 3, last_ax - 4)
|
81 |
+
cor_ni = random.randint(first_cor - 3, last_cor - 4)
|
82 |
+
sag_ni = random.randint(first_sag - 3, last_sag - 4)
|
83 |
+
patch = image_array[ax_ni-3:ax_ni+4, cor_ni-3:cor_ni+4, sag_ni-3:sag_ni+4]
|
84 |
+
patch = customToTensor(patch)
|
85 |
+
patches.append(patch)
|
86 |
+
return patches
|
87 |
+
|
88 |
+
|
89 |
+
# plt.imshow(array[i][3,:,:], cmap = 'gray')
|
90 |
+
# plt.savefig('./section.png', dpi=100)
|
91 |
+
|
92 |
+
|
93 |
+
|
94 |
+
|
AD_Standard_CNN_Dataset.py
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import nibabel as nib
|
2 |
+
import os
|
3 |
+
from torch.utils.data import Dataset
|
4 |
+
import numpy as np
|
5 |
+
import torch
|
6 |
+
import random
|
7 |
+
|
8 |
+
class AD_Standard_CNN_Dataset(Dataset):
|
9 |
+
"""labeled Faces in the Wild dataset."""
|
10 |
+
|
11 |
+
def __init__(self, root_dir, data_file, transform=None, noise=True):
|
12 |
+
"""
|
13 |
+
Args:
|
14 |
+
root_dir (string): Directory of all the images.
|
15 |
+
data_file (string): File name of the train/test split file.
|
16 |
+
transform (callable, optional): Optional transform to be applied on a sample.
|
17 |
+
data_augmentation (boolean): Optional data augmentation.
|
18 |
+
"""
|
19 |
+
self.root_dir = root_dir
|
20 |
+
self.data_file = data_file
|
21 |
+
self.transform = transform
|
22 |
+
self.noise = noise
|
23 |
+
|
24 |
+
def __len__(self):
|
25 |
+
return sum(1 for line in open(self.data_file))
|
26 |
+
|
27 |
+
def __getitem__(self, idx):
|
28 |
+
df = open(self.data_file)
|
29 |
+
lines = df.readlines()
|
30 |
+
lst = lines[idx].split()
|
31 |
+
img_name = lst[0]
|
32 |
+
img_label = lst[1]
|
33 |
+
image_path = os.path.join(self.root_dir, img_name)
|
34 |
+
image = nib.load(image_path)
|
35 |
+
|
36 |
+
if img_label == 'Normal':
|
37 |
+
label = 0
|
38 |
+
elif img_label == 'AD':
|
39 |
+
label = 1
|
40 |
+
elif img_label == 'MCI':
|
41 |
+
label = 2
|
42 |
+
|
43 |
+
image_array = np.array(image.get_data())
|
44 |
+
if self.noise:
|
45 |
+
image_array = gaussianNoise(image_array)
|
46 |
+
image_array = customToTensor(image_array)
|
47 |
+
sample = {'image': image_array, 'label': label}
|
48 |
+
|
49 |
+
return sample
|
50 |
+
|
51 |
+
def customToTensor(pic):
|
52 |
+
if isinstance(pic, np.ndarray):
|
53 |
+
img = torch.from_numpy(pic)
|
54 |
+
img = torch.unsqueeze(img,0)
|
55 |
+
# backward compatibility
|
56 |
+
return img.float()
|
57 |
+
|
58 |
+
def gaussianNoise(img_array):
|
59 |
+
var_lst = [0, 0.0005, 0.00075, 0.001, 0.0025, 0.005]
|
60 |
+
w,h,d= img_array.shape
|
61 |
+
mean = 0
|
62 |
+
var = random.choice(var_lst)
|
63 |
+
sigma = var**0.5
|
64 |
+
gauss_noise = np.random.normal(mean,sigma,(w,h,d))
|
65 |
+
gauss_noise = gauss_noise.reshape(w,h,d)
|
66 |
+
noise_image = img_array + gauss_noise
|
67 |
+
return noise_image
|
68 |
+
|
69 |
+
|
AlexNet2D.py
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import torch.nn as nn
|
2 |
+
import torch.utils.model_zoo as model_zoo
|
3 |
+
import math
|
4 |
+
|
5 |
+
|
6 |
+
__all__ = ['AlexNet', 'alexnet']
|
7 |
+
|
8 |
+
|
9 |
+
model_urls = {
|
10 |
+
'alexnet': 'https://download.pytorch.org/models/alexnet-owt-4df8aa71.pth',
|
11 |
+
}
|
12 |
+
|
13 |
+
|
14 |
+
class AlexNet(nn.Module):
|
15 |
+
|
16 |
+
def __init__(self, num_classes=1000):
|
17 |
+
super(AlexNet, self).__init__()
|
18 |
+
self.features = nn.Sequential(
|
19 |
+
nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),
|
20 |
+
nn.ReLU(inplace=True),
|
21 |
+
nn.MaxPool2d(kernel_size=3, stride=2),
|
22 |
+
nn.Conv2d(64, 192, kernel_size=5, padding=2),
|
23 |
+
nn.ReLU(inplace=True),
|
24 |
+
nn.MaxPool2d(kernel_size=3, stride=2),
|
25 |
+
nn.Conv2d(192, 384, kernel_size=3, padding=1),
|
26 |
+
nn.ReLU(inplace=True),
|
27 |
+
nn.Conv2d(384, 256, kernel_size=3, padding=1),
|
28 |
+
nn.ReLU(inplace=True),
|
29 |
+
nn.Conv2d(256, 256, kernel_size=3, padding=1),
|
30 |
+
nn.ReLU(inplace=True),
|
31 |
+
nn.MaxPool2d(kernel_size=3, stride=2),
|
32 |
+
)
|
33 |
+
self.classifier = nn.Sequential(
|
34 |
+
nn.Dropout(),
|
35 |
+
nn.Linear(256 * 6 * 6, 4096),
|
36 |
+
nn.ReLU(inplace=True),
|
37 |
+
nn.Dropout(),
|
38 |
+
nn.Linear(4096, 4096),
|
39 |
+
nn.ReLU(inplace=True),
|
40 |
+
nn.Linear(4096, num_classes),
|
41 |
+
)
|
42 |
+
|
43 |
+
def forward(self, x):
|
44 |
+
x = self.features(x)
|
45 |
+
x = x.view(x.size(0), 256 * 6 * 6)
|
46 |
+
x = self.classifier(x)
|
47 |
+
return x
|
48 |
+
|
49 |
+
|
50 |
+
def alexnet(pretrained=False, **kwargs):
|
51 |
+
r"""AlexNet model architecture from the
|
52 |
+
`"One weird trick..." <https://arxiv.org/abs/1404.5997>`_ paper.
|
53 |
+
|
54 |
+
Args:
|
55 |
+
pretrained (bool): If True, returns a model pre-trained on ImageNet
|
56 |
+
"""
|
57 |
+
model = AlexNet(**kwargs)
|
58 |
+
if pretrained:
|
59 |
+
model.load_state_dict(model_zoo.load_url(model_urls['alexnet']))
|
60 |
+
for p in model.features.parameters():
|
61 |
+
p.requires_grad = False
|
62 |
+
|
63 |
+
# fine-tune the last convolution layer
|
64 |
+
for p in model.features[10].parameters():
|
65 |
+
p.requires_grad = True
|
66 |
+
|
67 |
+
model.classifier.add_module('fc_out', nn.Linear(1000,2))
|
68 |
+
model.classifier.add_module('sigmoid', nn.LogSoftmax())
|
69 |
+
|
70 |
+
stdv = 1.0 / math.sqrt(1000)
|
71 |
+
for p in model.classifier.fc_out.parameters():
|
72 |
+
p.data.uniform_(-stdv, stdv)
|
73 |
+
|
74 |
+
return model
|
AlexNet3D.py
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import torch.nn as nn
|
2 |
+
|
3 |
+
class AlexNet(nn.Module):
|
4 |
+
|
5 |
+
def __init__(self, num_classes=3):
|
6 |
+
super(AlexNet, self).__init__()
|
7 |
+
self.features = nn.Sequential(
|
8 |
+
nn.Conv3d(1, 64, kernel_size=11, stride=4, padding=2),
|
9 |
+
nn.ReLU(inplace=True),
|
10 |
+
nn.MaxPool3d(kernel_size=3, stride=2),
|
11 |
+
nn.Conv3d(64, 192, kernel_size=5, padding=2),
|
12 |
+
nn.ReLU(inplace=True),
|
13 |
+
nn.MaxPool3d(kernel_size=3, stride=2),
|
14 |
+
nn.Conv3d(192, 384, kernel_size=3, padding=1),
|
15 |
+
nn.ReLU(inplace=True),
|
16 |
+
nn.Conv3d(384, 256, kernel_size=3, padding=1),
|
17 |
+
nn.ReLU(inplace=True),
|
18 |
+
nn.Conv3d(256, 256, kernel_size=3, padding=1),
|
19 |
+
nn.ReLU(inplace=True),
|
20 |
+
nn.MaxPool3d(kernel_size=3, stride=2),
|
21 |
+
)
|
22 |
+
self.classifier = nn.Sequential(
|
23 |
+
nn.Dropout(),
|
24 |
+
nn.Linear(256 * 6 * 6 * 6, 4096),
|
25 |
+
nn.ReLU(inplace=True),
|
26 |
+
nn.Dropout(),
|
27 |
+
nn.Linear(4096, 4096),
|
28 |
+
nn.ReLU(inplace=True),
|
29 |
+
nn.Linear(4096, num_classes),
|
30 |
+
)
|
31 |
+
|
32 |
+
self.reset_parameters()
|
33 |
+
|
34 |
+
def reset_parameters(self):
|
35 |
+
for weight in self.parameters():
|
36 |
+
weight.data.uniform_(-0.1, 0.1)
|
37 |
+
|
38 |
+
|
39 |
+
|
40 |
+
|
41 |
+
|
42 |
+
def forward(self, x):
|
43 |
+
x = self.features(x)
|
44 |
+
x = x.view(x.size(0), 256 * 6 * 6 * 6)
|
45 |
+
x = self.classifier(x)
|
46 |
+
return x
|
CV final report.pdf
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:5099301619a38b57ba1afc6e67e92f2dfe0c18e759b4b47e4388bfc321fac146
|
3 |
+
size 1664143
|
autoencoder.py
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import torch
|
2 |
+
import torch.nn as nn
|
3 |
+
|
4 |
+
class AutoEncoder(nn.Module):
|
5 |
+
def __init__(self):
|
6 |
+
super(AutoEncoder, self).__init__()
|
7 |
+
self.encoder = nn.Linear(343, 410)
|
8 |
+
self.sparsify = nn.Sigmoid()
|
9 |
+
self.decoder = nn.Linear(410, 343)
|
10 |
+
|
11 |
+
def forward(self, out):
|
12 |
+
out = out.view(-1, 343)
|
13 |
+
out = self.encoder(out)
|
14 |
+
out = self.sparsify(out)
|
15 |
+
s_ = out
|
16 |
+
out = self.decoder(out)
|
17 |
+
return out, s_
|
cnn_3d_with_ae.py
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import torch
|
2 |
+
from autoencoder import AutoEncoder
|
3 |
+
import torch.nn as nn
|
4 |
+
import math
|
5 |
+
|
6 |
+
class CNN(nn.Module):
|
7 |
+
def __init__(self, num_classes=2):
|
8 |
+
super(CNN, self).__init__()
|
9 |
+
self.conv1 = nn.Conv3d(1, 410, kernel_size=7, stride=7, padding=3)
|
10 |
+
self.relu1 = nn.ReLU(inplace=True)
|
11 |
+
self.pool1 = nn.MaxPool3d(kernel_size=7,stride=7)
|
12 |
+
# self.conv2 = nn.Conv3d(410, 200, kernel_size=3, stride=1, padding=1)
|
13 |
+
# self.relu2 = nn.ReLU(inplace=True)
|
14 |
+
# self.pool2 = nn.MaxPool3d(kernel_size=3, stride=3)
|
15 |
+
# self.fc1 = nn.Linear(5*5*5*200, 800)
|
16 |
+
self.dropout1 = nn.Dropout(0.5)
|
17 |
+
self.fc1 = nn.Linear(2*3*2*410, 80)
|
18 |
+
self.dropout2 = nn.Dropout(0.5)
|
19 |
+
self.fc2 = nn.Linear(80, num_classes)
|
20 |
+
self.softmax = nn.LogSoftmax()
|
21 |
+
self.parameter_initialization()
|
22 |
+
|
23 |
+
|
24 |
+
|
25 |
+
def forward(self, out):
|
26 |
+
out = self.pool1(self.relu1(self.conv1(out)))
|
27 |
+
out = self.dropout1(out)
|
28 |
+
# out = self.pool2(self.relu2(self.conv2(out)))
|
29 |
+
# out = out.view(-1,5*5*5*200)
|
30 |
+
out = out.view(-1, 2*3*2*410)
|
31 |
+
out = self.fc1(out)
|
32 |
+
out = self.dropout2(out)
|
33 |
+
out = self.fc2(out)
|
34 |
+
out = self.softmax(out)
|
35 |
+
return out
|
36 |
+
|
37 |
+
def parameter_initialization(self):
|
38 |
+
stdv = 1.0 / math.sqrt(410)
|
39 |
+
for weight in self.parameters():
|
40 |
+
weight.data.uniform_(-stdv, stdv)
|
41 |
+
|
42 |
+
|
43 |
+
|
cnn_3d_wtih_ae.py
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import torch
|
2 |
+
from autoencoder import AutoEncoder
|
3 |
+
|
4 |
+
class CNN(nn.Module):
|
5 |
+
def __init__(self, num_classes=2):
|
6 |
+
super(CNN, self).__init__()
|
7 |
+
self.conv = nn.Conv3d(1, 410, kernel_size=7, stride=1, padding=1)
|
8 |
+
self.pool = nn.MaxPool3d(kernel_size=7,stride=7)
|
9 |
+
self.fc1 = nn.Linear(15*15*15, 800)
|
10 |
+
self.fc2 = nn.Linear(800, num_classes)
|
11 |
+
self.softmax = nn.Softmax()
|
12 |
+
|
13 |
+
def forward(self, out):
|
14 |
+
out = self.conv(out)
|
15 |
+
out = self.pool(out)
|
16 |
+
out = out.view(1,15*15*15)
|
17 |
+
out = self.fc1(out)
|
18 |
+
out = self.fc2(out)
|
19 |
+
out = self.softmax(out)
|
20 |
+
return out
|
21 |
+
|
22 |
+
def load_ae(self, ae):
|
23 |
+
cnn.state_dict()['conv.weight'] = ae.state_dict()['encoder.weight'].view(410,1,7,7,7)
|
24 |
+
cnn.state_dict()['conv.bias'] = ae.state_dict()['encoder.bias']
|
25 |
+
return cnn
|
custom_transform.py
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
import random
|
3 |
+
import math
|
4 |
+
from PIL import Image
|
5 |
+
from skimage.transform import resize
|
6 |
+
import skimage
|
7 |
+
import torch
|
8 |
+
import matplotlib.pyplot as plt
|
9 |
+
|
10 |
+
|
11 |
+
class CustomResize(object):
|
12 |
+
def __init__(self, network_type, trg_size):
|
13 |
+
|
14 |
+
self.trg_size = trg_size
|
15 |
+
self.network_type = network_type
|
16 |
+
|
17 |
+
def __call__(self, img):
|
18 |
+
resized_img = self.resize_image(img, self.trg_size)
|
19 |
+
return resized_img
|
20 |
+
|
21 |
+
def resize_image(self, img, trg_size):
|
22 |
+
img_array = np.asarray(img.get_data())
|
23 |
+
res = resize(img_array, trg_size, mode='reflect', anti_aliasing=False, preserve_range=True)
|
24 |
+
|
25 |
+
# type check
|
26 |
+
if type(res) != np.ndarray:
|
27 |
+
raise "type error!"
|
28 |
+
|
29 |
+
# PIL image cannot handle 3D image, only return ndarray type, which ToTensor accepts
|
30 |
+
return res
|
31 |
+
|
32 |
+
class CustomToTensor(object):
|
33 |
+
def __init__(self, network_type):
|
34 |
+
|
35 |
+
self.network_type = network_type
|
36 |
+
|
37 |
+
def __call__(self, pic):
|
38 |
+
|
39 |
+
if isinstance(pic, np.ndarray):
|
40 |
+
|
41 |
+
img = torch.from_numpy(pic.transpose((2, 0, 1)))
|
42 |
+
|
43 |
+
# backward compatibility
|
44 |
+
return img.float().div(255)
|
45 |
+
|
46 |
+
|
47 |
+
|
48 |
+
|
49 |
+
|
custom_transform2D.py
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
import random
|
3 |
+
import math
|
4 |
+
from PIL import Image
|
5 |
+
from skimage.transform import resize
|
6 |
+
import skimage
|
7 |
+
import torch
|
8 |
+
import matplotlib.pyplot as plt
|
9 |
+
|
10 |
+
|
11 |
+
class CustomResize(object):
|
12 |
+
def __init__(self, trg_size):
|
13 |
+
|
14 |
+
self.trg_size = trg_size
|
15 |
+
|
16 |
+
|
17 |
+
def __call__(self, img):
|
18 |
+
resized_img = self.resize_image(img, self.trg_size)
|
19 |
+
return resized_img
|
20 |
+
|
21 |
+
def resize_image(self, img_array, trg_size):
|
22 |
+
res = resize(img_array, trg_size, mode='reflect', preserve_range=True, anti_aliasing=False)
|
23 |
+
|
24 |
+
# type check
|
25 |
+
if type(res) != np.ndarray:
|
26 |
+
raise "type error!"
|
27 |
+
|
28 |
+
# PIL image cannot handle 3D image, only return ndarray type, which ToTensor accepts
|
29 |
+
return res
|
30 |
+
|
31 |
+
class CustomToTensor(object):
|
32 |
+
def __init__(self):
|
33 |
+
pass
|
34 |
+
|
35 |
+
def __call__(self, pic):
|
36 |
+
|
37 |
+
if isinstance(pic, np.ndarray):
|
38 |
+
|
39 |
+
img = torch.from_numpy(pic.transpose((2, 0, 1)))
|
40 |
+
|
41 |
+
# backward compatibility
|
42 |
+
return img.float()
|
43 |
+
|
44 |
+
|
45 |
+
|
46 |
+
|
47 |
+
|
imageExtract.py
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import shutil
|
2 |
+
import os
|
3 |
+
|
4 |
+
for d in os.listdir('./Image'):
|
5 |
+
if d[0] != '.':
|
6 |
+
for f in os.listdir('./Image/' + d):
|
7 |
+
if f[-3:] == 'nii':
|
8 |
+
shutil.move("./Image/" + d + '/' + f, './Image1/' + d)
|
9 |
+
shutil.rmtree('./Image')
|
10 |
+
|
main_alexnet.py
ADDED
@@ -0,0 +1,238 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import argparse
|
2 |
+
import logging
|
3 |
+
|
4 |
+
import torch
|
5 |
+
import torch.nn as nn
|
6 |
+
from torch import cuda
|
7 |
+
from torch.autograd import Variable
|
8 |
+
from torch.utils.data import DataLoader, Dataset
|
9 |
+
|
10 |
+
import torchvision
|
11 |
+
import torchvision.datasets as dset
|
12 |
+
import torchvision.transforms as transforms
|
13 |
+
import torchvision.utils
|
14 |
+
from PIL import Image
|
15 |
+
|
16 |
+
import torch.nn.functional as F
|
17 |
+
|
18 |
+
import matplotlib.pyplot as plt
|
19 |
+
import matplotlib.ticker as ticker
|
20 |
+
import numpy as np
|
21 |
+
import random
|
22 |
+
from collections import Counter
|
23 |
+
|
24 |
+
from custom_transform2D import CustomResize
|
25 |
+
from custom_transform2D import CustomToTensor
|
26 |
+
|
27 |
+
from AD_Dataset import AD_Dataset
|
28 |
+
from AD_Standard_2DSlicesData import AD_Standard_2DSlicesData
|
29 |
+
from AD_Standard_2DRandomSlicesData import AD_Standard_2DRandomSlicesData
|
30 |
+
from AD_Standard_2DTestingSlices import AD_Standard_2DTestingSlices
|
31 |
+
|
32 |
+
from AlexNet2D import alexnet
|
33 |
+
|
34 |
+
logging.basicConfig(
|
35 |
+
format='%(asctime)s %(levelname)s: %(message)s',
|
36 |
+
datefmt='%Y-%m-%d %H:%M:%S', level=logging.INFO)
|
37 |
+
|
38 |
+
parser = argparse.ArgumentParser(description="Starter code for JHU CS661 Computer Vision HW3.")
|
39 |
+
|
40 |
+
parser.add_argument("--load",
|
41 |
+
help="Load saved network weights.")
|
42 |
+
parser.add_argument("--save", default="AlexNet",
|
43 |
+
help="Save network weights.")
|
44 |
+
parser.add_argument("--augmentation", default=True, type=bool,
|
45 |
+
help="Save network weights.")
|
46 |
+
parser.add_argument("--epochs", default=20, type=int,
|
47 |
+
help="Epochs through the data. (default=20)")
|
48 |
+
parser.add_argument("--learning_rate", "-lr", default=1e-3, type=float,
|
49 |
+
help="Learning rate of the optimization. (default=0.01)")
|
50 |
+
parser.add_argument('--momentum', default=0.9, type=float, metavar='M',
|
51 |
+
help='momentum')
|
52 |
+
parser.add_argument('--weight-decay', '--wd', default=1e-4, type=float,
|
53 |
+
metavar='W', help='weight decay (default: 1e-4)')
|
54 |
+
parser.add_argument("--estop", default=1e-2, type=float,
|
55 |
+
help="Early stopping criteria on the development set. (default=1e-2)")
|
56 |
+
parser.add_argument("--batch_size", default=1, type=int,
|
57 |
+
help="Batch size for training. (default=1)")
|
58 |
+
parser.add_argument("--optimizer", default="Adam", choices=["SGD", "Adadelta", "Adam"],
|
59 |
+
help="Optimizer of choice for training. (default=Adam)")
|
60 |
+
parser.add_argument("--gpuid", default=[0], nargs='+', type=int,
|
61 |
+
help="ID of gpu device to use. Empty implies cpu usage.")
|
62 |
+
|
63 |
+
|
64 |
+
# feel free to add more arguments as you need
|
65 |
+
|
66 |
+
|
67 |
+
def main(options):
|
68 |
+
# Path configuration
|
69 |
+
TRAINING_PATH = 'train_2classes.txt'
|
70 |
+
TESTING_PATH = 'test_2classes.txt'
|
71 |
+
IMG_PATH = './Image'
|
72 |
+
|
73 |
+
trg_size = (224, 224)
|
74 |
+
|
75 |
+
transformations = transforms.Compose([CustomResize(trg_size),
|
76 |
+
CustomToTensor()
|
77 |
+
])
|
78 |
+
dset_train = AD_Standard_2DRandomSlicesData(IMG_PATH, TRAINING_PATH, transformations)
|
79 |
+
dset_test = AD_Standard_2DSlicesData(IMG_PATH, TESTING_PATH, transformations)
|
80 |
+
|
81 |
+
# Use argument load to distinguish training and testing
|
82 |
+
if options.load is None:
|
83 |
+
train_loader = DataLoader(dset_train,
|
84 |
+
batch_size=options.batch_size,
|
85 |
+
shuffle=True,
|
86 |
+
num_workers=4,
|
87 |
+
drop_last=True
|
88 |
+
)
|
89 |
+
else:
|
90 |
+
# Only shuffle the data when doing training
|
91 |
+
train_loader = DataLoader(dset_train,
|
92 |
+
batch_size=options.batch_size,
|
93 |
+
shuffle=False,
|
94 |
+
num_workers=4,
|
95 |
+
drop_last=True
|
96 |
+
)
|
97 |
+
|
98 |
+
test_loader = DataLoader(dset_test,
|
99 |
+
batch_size=options.batch_size,
|
100 |
+
shuffle=False,
|
101 |
+
num_workers=4,
|
102 |
+
drop_last=True
|
103 |
+
)
|
104 |
+
|
105 |
+
use_cuda = (len(options.gpuid) >= 1)
|
106 |
+
if options.gpuid:
|
107 |
+
cuda.set_device(options.gpuid[0])
|
108 |
+
|
109 |
+
|
110 |
+
# Initial the model
|
111 |
+
model = alexnet(pretrained=True)
|
112 |
+
# model.load_state_dict(torch.load(options.load))
|
113 |
+
|
114 |
+
if use_cuda > 0:
|
115 |
+
model.cuda()
|
116 |
+
else:
|
117 |
+
model.cpu()
|
118 |
+
|
119 |
+
# Binary cross-entropy loss
|
120 |
+
# criterion = torch.nn.CrossEntropyLoss()
|
121 |
+
criterion = torch.nn.NLLLoss()
|
122 |
+
|
123 |
+
lr = options.learning_rate
|
124 |
+
optimizer = eval("torch.optim." + options.optimizer)(filter(lambda x: x.requires_grad, model.parameters()), lr)
|
125 |
+
|
126 |
+
best_accuracy = float("-inf")
|
127 |
+
|
128 |
+
train_loss_f = open("train_loss.txt", "w")
|
129 |
+
test_acu_f = open("test_accuracy.txt", "w")
|
130 |
+
|
131 |
+
for epoch_i in range(options.epochs):
|
132 |
+
|
133 |
+
logging.info("At {0}-th epoch.".format(epoch_i))
|
134 |
+
train_loss, correct_cnt = train(model, train_loader, use_cuda, criterion, optimizer, train_loss_f)
|
135 |
+
# each instance in one batch has 3 views
|
136 |
+
train_avg_loss = train_loss / (len(dset_train) * 3 / options.batch_size)
|
137 |
+
train_avg_acu = float(correct_cnt) / (len(dset_train) * 3)
|
138 |
+
logging.info(
|
139 |
+
"Average training loss is {0:.5f} at the end of epoch {1}".format(train_avg_loss.data[0], epoch_i))
|
140 |
+
logging.info("Average training accuracy is {0:.5f} at the end of epoch {1}".format(train_avg_acu, epoch_i))
|
141 |
+
|
142 |
+
|
143 |
+
correct_cnt = validate(model, test_loader, use_cuda, criterion)
|
144 |
+
dev_avg_acu = float(correct_cnt) / len(dset_test)
|
145 |
+
logging.info("Average validation accuracy is {0:.5f} at the end of epoch {1}".format(dev_avg_acu, epoch_i))
|
146 |
+
|
147 |
+
# write validation accuracy to file
|
148 |
+
test_acu_f.write("{0:.5f}\n".format(dev_avg_acu))
|
149 |
+
|
150 |
+
if dev_avg_acu > best_accuracy:
|
151 |
+
best_accuracy = dev_avg_acu
|
152 |
+
torch.save(model.state_dict(), open(options.save, 'wb'))
|
153 |
+
|
154 |
+
train_loss_f.close()
|
155 |
+
test_acu_f.close()
|
156 |
+
|
157 |
+
def train(model, train_loader, use_cuda, criterion, optimizer, train_loss_f):
|
158 |
+
# main training loop
|
159 |
+
train_loss = 0.0
|
160 |
+
correct_cnt = 0.0
|
161 |
+
model.train()
|
162 |
+
for it, train_data in enumerate(train_loader):
|
163 |
+
for data_dic in train_data:
|
164 |
+
if use_cuda:
|
165 |
+
imgs, labels = Variable(data_dic['image']).cuda(), Variable(data_dic['label']).cuda()
|
166 |
+
else:
|
167 |
+
imgs, labels = Variable(data_dic['image']), Variable(data_dic['label'])
|
168 |
+
integer_encoded = labels.data.cpu().numpy()
|
169 |
+
# target should be LongTensor in loss function
|
170 |
+
ground_truth = Variable(torch.from_numpy(integer_encoded)).long()
|
171 |
+
if use_cuda:
|
172 |
+
ground_truth = ground_truth.cuda()
|
173 |
+
train_output = model(imgs)
|
174 |
+
_, predict = train_output.topk(1)
|
175 |
+
loss = criterion(train_output, ground_truth)
|
176 |
+
train_loss += loss
|
177 |
+
correct_this_batch = (predict.squeeze(1) == ground_truth).sum().float()
|
178 |
+
correct_cnt += correct_this_batch
|
179 |
+
accuracy = float(correct_this_batch) / len(ground_truth)
|
180 |
+
logging.info("batch {0} training loss is : {1:.5f}".format(it, loss.data[0]))
|
181 |
+
logging.info("batch {0} training accuracy is : {1:.5f}".format(it, accuracy))
|
182 |
+
|
183 |
+
# write the training loss to file
|
184 |
+
train_loss_f.write("{0:.5f}\n".format(loss.data[0]))
|
185 |
+
|
186 |
+
optimizer.zero_grad()
|
187 |
+
loss.backward()
|
188 |
+
optimizer.step()
|
189 |
+
|
190 |
+
return train_loss, correct_cnt
|
191 |
+
|
192 |
+
|
193 |
+
|
194 |
+
def validate(model, test_loader, use_cuda, criterion):
|
195 |
+
# validation -- this is a crude estimation because there might be some paddings at the end
|
196 |
+
correct_cnt = 0.0
|
197 |
+
model.eval()
|
198 |
+
for it, test_data in enumerate(test_loader):
|
199 |
+
vote = []
|
200 |
+
for data_dic in test_data:
|
201 |
+
if use_cuda:
|
202 |
+
imgs, labels = Variable(data_dic['image'], volatile=True).cuda(), Variable(data_dic['label'],
|
203 |
+
volatile=True).cuda()
|
204 |
+
else:
|
205 |
+
imgs, labels = Variable(data_dic['image'], volatile=True), Variable(data_dic['label'],
|
206 |
+
volatile=True)
|
207 |
+
test_output = model(imgs)
|
208 |
+
_, predict = test_output.topk(1)
|
209 |
+
vote.append(predict)
|
210 |
+
|
211 |
+
vote = torch.cat(vote, 1)
|
212 |
+
final_vote, _ = torch.mode(vote, 1)
|
213 |
+
ground_truth = test_data[0]['label']
|
214 |
+
correct_this_batch = (final_vote.cpu().data == ground_truth).sum()
|
215 |
+
correct_cnt += correct_this_batch
|
216 |
+
accuracy = float(correct_this_batch) / len(ground_truth)
|
217 |
+
|
218 |
+
logging.info("batch {0} dev accuracy is : {1:.5f}".format(it, accuracy))
|
219 |
+
|
220 |
+
return correct_cnt
|
221 |
+
|
222 |
+
|
223 |
+
|
224 |
+
|
225 |
+
def show_plot(points):
|
226 |
+
plt.figure()
|
227 |
+
fig, ax = plt.subplots()
|
228 |
+
loc = ticker.MultipleLocator(base=0.2) # put ticks at regular intervals
|
229 |
+
ax.yaxis.set_major_locator(loc)
|
230 |
+
plt.plot(points)
|
231 |
+
|
232 |
+
|
233 |
+
if __name__ == "__main__":
|
234 |
+
ret = parser.parse_known_args()
|
235 |
+
options = ret[0]
|
236 |
+
if ret[1]:
|
237 |
+
logging.warning("unknown arguments: {0}".format(parser.parse_known_args()[1]))
|
238 |
+
main(options)
|
main_autoencoder.py
ADDED
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import argparse
|
2 |
+
import logging
|
3 |
+
|
4 |
+
import torch
|
5 |
+
import torch.nn as nn
|
6 |
+
from torch import cuda
|
7 |
+
from torch.autograd import Variable
|
8 |
+
from torch.utils.data import DataLoader,Dataset
|
9 |
+
import torchvision
|
10 |
+
|
11 |
+
from autoencoder import AutoEncoder
|
12 |
+
from AD_Standard_3DRandomPatch import AD_Standard_3DRandomPatch
|
13 |
+
|
14 |
+
logging.basicConfig(
|
15 |
+
format='%(asctime)s %(levelname)s: %(message)s',
|
16 |
+
datefmt='%Y-%m-%d %H:%M:%S', level=logging.INFO)
|
17 |
+
|
18 |
+
parser = argparse.ArgumentParser(description="Starter code for AutoEncoder")
|
19 |
+
|
20 |
+
parser.add_argument("--learning_rate", "-lr", default=1e-3, type=float,
|
21 |
+
help="Learning rate of the optimization. (default=0.01)")
|
22 |
+
parser.add_argument('--momentum', default=0.9, type=float, metavar='M',
|
23 |
+
help='momentum')
|
24 |
+
parser.add_argument('--weight-decay', '--wd', default=1e-4, type=float,
|
25 |
+
metavar='W', help='weight decay (default: 1e-4)')
|
26 |
+
parser.add_argument("--batch_size", default=1, type=int,
|
27 |
+
help="Batch size for training. (default=1)")
|
28 |
+
parser.add_argument("--gpuid", default=[0], nargs='+', type=int,
|
29 |
+
help="ID of gpu device to use. Empty implies cpu usage.")
|
30 |
+
parser.add_argument("--num_classes", default=2, type=int,
|
31 |
+
help="Number of classes.")
|
32 |
+
parser.add_argument("--epochs", default=20, type=int,
|
33 |
+
help="Epochs through the data. (default=20)")
|
34 |
+
parser.add_argument("--estop", default=1e-4, type=float,
|
35 |
+
help="Early stopping criteria on the development set. (default=1e-4)")
|
36 |
+
|
37 |
+
def main(options):
|
38 |
+
|
39 |
+
if options.num_classes == 2:
|
40 |
+
TRAINING_PATH = 'train_2classes.txt'
|
41 |
+
else:
|
42 |
+
TRAINING_PATH = 'train.txt'
|
43 |
+
IMG_PATH = './Whole'
|
44 |
+
|
45 |
+
dset_train = AD_Standard_3DRandomPatch(IMG_PATH, TRAINING_PATH)
|
46 |
+
|
47 |
+
train_loader = DataLoader(dset_train,
|
48 |
+
batch_size = options.batch_size,
|
49 |
+
shuffle = True,
|
50 |
+
num_workers = 4,
|
51 |
+
drop_last = True
|
52 |
+
)
|
53 |
+
sparsity = 0.05
|
54 |
+
beta = 0.5
|
55 |
+
|
56 |
+
mean_square_loss = nn.MSELoss()
|
57 |
+
#kl_div_loss = nn.KLDivLoss(reduce=False)
|
58 |
+
|
59 |
+
use_gpu = len(options.gpuid)>=1
|
60 |
+
autoencoder = AutoEncoder()
|
61 |
+
|
62 |
+
if(use_gpu):
|
63 |
+
autoencoder = autoencoder.cuda()
|
64 |
+
else:
|
65 |
+
autoencoder = autoencoder.cpu()
|
66 |
+
|
67 |
+
#autoencoder.load_state_dict(torch.load("./autoencoder_pretrained_model19"))
|
68 |
+
|
69 |
+
optimizer = torch.optim.Adam(autoencoder.parameters(), lr=options.learning_rate, weight_decay=options.weight_decay)
|
70 |
+
|
71 |
+
last_train_loss = 1e-4
|
72 |
+
f = open("autoencoder_loss", 'a')
|
73 |
+
for epoch in range(options.epochs):
|
74 |
+
train_loss = 0.
|
75 |
+
print("At {0}-th epoch.".format(epoch))
|
76 |
+
for i, patches in enumerate(train_loader):
|
77 |
+
patch = patches['patch']
|
78 |
+
for b, batch in enumerate(patch):
|
79 |
+
batch = Variable(batch).cuda()
|
80 |
+
output, s_ = autoencoder(batch)
|
81 |
+
loss1 = mean_square_loss(output, batch)
|
82 |
+
s = Variable(torch.ones(s_.shape)*sparsity).cuda()
|
83 |
+
loss2 = (s*torch.log(s/(s_+1e-8)) + (1-s)*torch.log((1-s)/((1-s_+1e-8)))).sum()/options.batch_size
|
84 |
+
#kl_div_loss(mean_activitaion, sparsity)
|
85 |
+
loss = loss1 + beta * loss2
|
86 |
+
train_loss += loss
|
87 |
+
logging.info("batch {0} training loss is : {1:.5f}, {2:.5f}".format(i*1000+b, loss1.data[0], loss2.data[0]))
|
88 |
+
f.write("batch {0} training loss is : {1:.3f}\n".format(i*1000+b, loss.data[0]))
|
89 |
+
optimizer.zero_grad()
|
90 |
+
loss.backward()
|
91 |
+
optimizer.step()
|
92 |
+
train_avg_loss = train_loss/(len(train_loader)*1000)
|
93 |
+
print("Average training loss is {0:.5f} at the end of epoch {1}".format(train_avg_loss.data[0], epoch))
|
94 |
+
if (abs(train_avg_loss.data[0] - last_training_loss) <= options.estop) or ((epoch+1)%20==0):
|
95 |
+
torch.save(autoencoder.state_dict(), open("autoencoder_pretrained_model"+str(epoch), 'wb'))
|
96 |
+
last_train_loss = train_avg_loss.data[0]
|
97 |
+
f.close()
|
98 |
+
if __name__ == "__main__":
|
99 |
+
ret = parser.parse_known_args()
|
100 |
+
options = ret[0]
|
101 |
+
if ret[1]:
|
102 |
+
logging.warning("unknown arguments: {0}".format(parser.parse_known_args()[1]))
|
103 |
+
main(options)
|
main_cnn_autoencoder.py
ADDED
@@ -0,0 +1,218 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import argparse
|
2 |
+
import logging
|
3 |
+
|
4 |
+
import torch
|
5 |
+
import torch.nn as nn
|
6 |
+
from torch import cuda
|
7 |
+
from torch.autograd import Variable
|
8 |
+
from torch.utils.data import DataLoader,Dataset
|
9 |
+
|
10 |
+
import torchvision
|
11 |
+
import torchvision.datasets as dset
|
12 |
+
import torchvision.transforms as transforms
|
13 |
+
import torchvision.utils
|
14 |
+
from PIL import Image
|
15 |
+
|
16 |
+
import torch.nn.functional as F
|
17 |
+
|
18 |
+
import matplotlib.pyplot as plt
|
19 |
+
import numpy as np
|
20 |
+
import random
|
21 |
+
|
22 |
+
from custom_transform import CustomResize
|
23 |
+
from custom_transform import CustomToTensor
|
24 |
+
|
25 |
+
from AD_Standard_CNN_Dataset import AD_Standard_CNN_Dataset
|
26 |
+
from cnn_3d_with_ae import CNN
|
27 |
+
|
28 |
+
logging.basicConfig(
|
29 |
+
format='%(asctime)s %(levelname)s: %(message)s',
|
30 |
+
datefmt='%Y-%m-%d %H:%M:%S', level=logging.INFO)
|
31 |
+
|
32 |
+
parser = argparse.ArgumentParser(description="Starter code for CNN .")
|
33 |
+
|
34 |
+
parser.add_argument("--epochs", default=20, type=int,
|
35 |
+
help="Epochs through the data. (default=20)")
|
36 |
+
parser.add_argument("--learning_rate", "-lr", default=1e-3, type=float,
|
37 |
+
help="Learning rate of the optimization. (default=0.01)")
|
38 |
+
parser.add_argument('--weight_decay', '--wd', default=1e-4, type=float,
|
39 |
+
metavar='W', help='weight decay (default: 1e-4)')
|
40 |
+
parser.add_argument("--batch_size", default=1, type=int,
|
41 |
+
help="Batch size for training. (default=1)")
|
42 |
+
parser.add_argument("--gpuid", default=[0], nargs='+', type=int,
|
43 |
+
help="ID of gpu device to use. Empty implies cpu usage.")
|
44 |
+
parser.add_argument("--autoencoder", default=True, type=bool,
|
45 |
+
help="Whether to use the parameters from pretrained autoencoder.")
|
46 |
+
parser.add_argument("--num_classes", default=2, type=int,
|
47 |
+
help="The number of classes, 2 or 3.")
|
48 |
+
parser.add_argument("--estop", default=1e-5, type=float,
|
49 |
+
help="Early stopping criteria on the development set. (default=1e-2)")
|
50 |
+
parser.add_argument("--noise", default=True, type=bool,
|
51 |
+
help="Whether to add gaussian noise to scans.")
|
52 |
+
# feel free to add more arguments as you need
|
53 |
+
|
54 |
+
|
55 |
+
|
56 |
+
def main(options):
|
57 |
+
# Path configuration
|
58 |
+
if options.num_classes == 2:
|
59 |
+
TRAINING_PATH = 'train_2C_new.txt'
|
60 |
+
TESTING_PATH = 'validation_2C_new.txt'
|
61 |
+
else:
|
62 |
+
TRAINING_PATH = 'train.txt'
|
63 |
+
TESTING_PATH = 'test.txt'
|
64 |
+
IMG_PATH = './NewWhole'
|
65 |
+
|
66 |
+
trg_size = (121, 145, 121)
|
67 |
+
|
68 |
+
# transformations = transforms.Compose([CustomResize("CNN", trg_size),
|
69 |
+
# CustomToTensor("CNN")
|
70 |
+
# ])
|
71 |
+
|
72 |
+
dset_train = AD_Standard_CNN_Dataset(IMG_PATH, TRAINING_PATH, noise=True)
|
73 |
+
dset_test = AD_Standard_CNN_Dataset(IMG_PATH, TESTING_PATH, noise=False)
|
74 |
+
|
75 |
+
# Use argument load to distinguish training and testing
|
76 |
+
|
77 |
+
train_loader = DataLoader(dset_train,
|
78 |
+
batch_size = options.batch_size,
|
79 |
+
shuffle = True,
|
80 |
+
num_workers = 4,
|
81 |
+
drop_last = True
|
82 |
+
)
|
83 |
+
|
84 |
+
test_loader = DataLoader(dset_test,
|
85 |
+
batch_size = options.batch_size,
|
86 |
+
shuffle = False,
|
87 |
+
num_workers = 4,
|
88 |
+
drop_last=True
|
89 |
+
)
|
90 |
+
|
91 |
+
use_cuda = (len(options.gpuid) >= 1)
|
92 |
+
# if options.gpuid:
|
93 |
+
# cuda.set_device(options.gpuid[0])
|
94 |
+
|
95 |
+
# Training process
|
96 |
+
model = CNN(options.num_classes)
|
97 |
+
|
98 |
+
if use_cuda > 0:
|
99 |
+
model = model.cuda()
|
100 |
+
else:
|
101 |
+
model.cpu()
|
102 |
+
|
103 |
+
if options.autoencoder:
|
104 |
+
pretrained_ae = torch.load("./autoencoder_pretrained_model39")
|
105 |
+
model.state_dict()['conv1.weight'] = pretrained_ae['encoder.weight'].view(410,1,7,7,7)
|
106 |
+
model.state_dict()['conv1.bias'] = pretrained_ae['encoder.bias']
|
107 |
+
|
108 |
+
for p in model.conv1.parameters():
|
109 |
+
p.requires_grad = False
|
110 |
+
|
111 |
+
criterion = torch.nn.NLLLoss()
|
112 |
+
|
113 |
+
lr = options.learning_rate
|
114 |
+
optimizer = torch.optim.Adam(filter(lambda x: x.requires_grad, model.parameters()), lr, weight_decay=options.weight_decay)
|
115 |
+
|
116 |
+
# main training loop
|
117 |
+
last_dev_loss = 1e-4
|
118 |
+
max_acc = 0
|
119 |
+
max_epoch = 0
|
120 |
+
f1 = open("cnn_autoencoder_loss_train", 'a')
|
121 |
+
f2 = open("cnn_autoencoder_loss_dev", 'a')
|
122 |
+
for epoch_i in range(options.epochs):
|
123 |
+
logging.info("At {0}-th epoch.".format(epoch_i))
|
124 |
+
train_loss = 0.0
|
125 |
+
correct_cnt = 0.0
|
126 |
+
for it, train_data in enumerate(train_loader):
|
127 |
+
data_dic = train_data
|
128 |
+
|
129 |
+
if use_cuda:
|
130 |
+
imgs, labels = Variable(data_dic['image']).cuda(), Variable(data_dic['label']).cuda()
|
131 |
+
else:
|
132 |
+
imgs, labels = Variable(data_dic['image']), Variable(data_dic['label'])
|
133 |
+
|
134 |
+
# add channel dimension: (batch_size, D, H ,W) to (batch_size, 1, D, H ,W)
|
135 |
+
# since 3D convolution requires 5D tensors
|
136 |
+
img_input = imgs#.unsqueeze(1)
|
137 |
+
|
138 |
+
integer_encoded = labels.data.cpu().numpy()
|
139 |
+
# target should be LongTensor in loss function
|
140 |
+
ground_truth = Variable(torch.from_numpy(integer_encoded)).long()
|
141 |
+
if use_cuda:
|
142 |
+
ground_truth = ground_truth.cuda()
|
143 |
+
train_output = model(img_input)
|
144 |
+
train_prob_predict = F.softmax(train_output, dim=1)
|
145 |
+
_, predict = train_prob_predict.topk(1)
|
146 |
+
loss = criterion(train_output, ground_truth)
|
147 |
+
|
148 |
+
train_loss += loss
|
149 |
+
correct_this_batch = (predict.squeeze(1) == ground_truth).sum().float()
|
150 |
+
correct_cnt += correct_this_batch
|
151 |
+
accuracy = float(correct_this_batch) / len(ground_truth)
|
152 |
+
logging.info("batch {0} training loss is : {1:.5f}".format(it, loss.data[0]))
|
153 |
+
logging.info("batch {0} training accuracy is : {1:.5f}".format(it, accuracy))
|
154 |
+
f1.write("batch {0} training loss is : {1:.5f}\n".format(it, loss.data[0]))
|
155 |
+
f1.write("batch {0} training accuracy is : {1:.5f}\n".format(it, loss.data[0]))
|
156 |
+
optimizer.zero_grad()
|
157 |
+
loss.backward()
|
158 |
+
optimizer.step()
|
159 |
+
|
160 |
+
train_avg_loss = train_loss / (len(dset_train) / options.batch_size)
|
161 |
+
train_avg_acu = float(correct_cnt) / len(dset_train)
|
162 |
+
logging.info("Average training loss is {0:.5f} at the end of epoch {1}".format(train_avg_loss.data[0], epoch_i))
|
163 |
+
logging.info("Average training accuracy is {0:.5f} at the end of epoch {1}".format(train_avg_acu, epoch_i))
|
164 |
+
|
165 |
+
# validation -- this is a crude esitmation because there might be some paddings at the end
|
166 |
+
dev_loss = 0.0
|
167 |
+
correct_cnt = 0.0
|
168 |
+
model.eval()
|
169 |
+
for it, test_data in enumerate(test_loader):
|
170 |
+
data_dic = test_data
|
171 |
+
|
172 |
+
if use_cuda:
|
173 |
+
imgs, labels = Variable(data_dic['image'], volatile=True).cuda(), Variable(data_dic['label'], volatile=True).cuda()
|
174 |
+
else:
|
175 |
+
imgs, labels = Variable(data_dic['image'], volatile=True), Variable(data_dic['label'], volatile=True)
|
176 |
+
|
177 |
+
img_input = imgs#.unsqueeze(1)
|
178 |
+
integer_encoded = labels.data.cpu().numpy()
|
179 |
+
ground_truth = Variable(torch.from_numpy(integer_encoded), volatile=True).long()
|
180 |
+
if use_cuda:
|
181 |
+
ground_truth = ground_truth.cuda()
|
182 |
+
test_output = model(img_input)
|
183 |
+
test_prob_predict = F.softmax(test_output, dim=1)
|
184 |
+
_, predict = test_prob_predict.topk(1)
|
185 |
+
loss = criterion(test_output, ground_truth)
|
186 |
+
dev_loss += loss
|
187 |
+
correct_this_batch = (predict.squeeze(1) == ground_truth).sum().float()
|
188 |
+
correct_cnt += (predict.squeeze(1) == ground_truth).sum()
|
189 |
+
accuracy = float(correct_this_batch) / len(ground_truth)
|
190 |
+
logging.info("batch {0} dev loss is : {1:.5f}".format(it, loss.data[0]))
|
191 |
+
logging.info("batch {0} dev accuracy is : {1:.5f}".format(it, accuracy))
|
192 |
+
f2.write("batch {0} dev loss is : {1:.5f}\n".format(it, loss.data[0]))
|
193 |
+
f2.write("batch {0} dev accuracy is : {1:.5f}\n".format(it, accuracy))
|
194 |
+
|
195 |
+
dev_avg_loss = dev_loss / (len(dset_test) / options.batch_size)
|
196 |
+
dev_avg_acu = float(correct_cnt) / len(dset_test)
|
197 |
+
logging.info("Average validation loss is {0:.5f} at the end of epoch {1}".format(dev_avg_loss.data[0], epoch_i))
|
198 |
+
logging.info("Average validation accuracy is {0:.5f} at the end of epoch {1}".format(dev_avg_acu, epoch_i))
|
199 |
+
|
200 |
+
if dev_avg_acu > max_acc:
|
201 |
+
max_acc = dev_avg_acu
|
202 |
+
max_epoch = epoch_i
|
203 |
+
|
204 |
+
#if (abs(dev_avg_loss.data[0] - last_dev_loss) <= options.estop) or ((epoch_i+1)%20==0):
|
205 |
+
if max_acc>=0.75:
|
206 |
+
torch.save(model.state_dict(), open("3DCNN_model_" + str(epoch_i) + '_' + str(max_acc), 'wb'))
|
207 |
+
last_dev_loss = dev_avg_loss.data[0]
|
208 |
+
logging.info("Maximum accuracy on dev set is {0:.5f} for now".format(max_acc))
|
209 |
+
logging.info("Maximum accuracy on dev set is {0:.5f} at the end of epoch {1}".format(max_acc, max_epoch))
|
210 |
+
f1.close()
|
211 |
+
f2.close()
|
212 |
+
|
213 |
+
if __name__ == "__main__":
|
214 |
+
ret = parser.parse_known_args()
|
215 |
+
options = ret[0]
|
216 |
+
if ret[1]:
|
217 |
+
logging.warning("unknown arguments: {0}".format(parser.parse_known_args()[1]))
|
218 |
+
main(options)
|
main_resnet.py
ADDED
@@ -0,0 +1,241 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import argparse
|
2 |
+
import logging
|
3 |
+
|
4 |
+
import torch
|
5 |
+
import torch.nn as nn
|
6 |
+
from torch import cuda
|
7 |
+
from torch.autograd import Variable
|
8 |
+
from torch.utils.data import DataLoader,Dataset
|
9 |
+
|
10 |
+
import torchvision
|
11 |
+
import torchvision.datasets as dset
|
12 |
+
import torchvision.transforms as transforms
|
13 |
+
import torchvision.utils
|
14 |
+
from PIL import Image
|
15 |
+
|
16 |
+
import torch.nn.functional as F
|
17 |
+
|
18 |
+
import matplotlib.pyplot as plt
|
19 |
+
import numpy as np
|
20 |
+
import random
|
21 |
+
|
22 |
+
from custom_transform import CustomResize
|
23 |
+
from custom_transform import CustomToTensor
|
24 |
+
|
25 |
+
from AD_Dataset import AD_Dataset
|
26 |
+
from AD_2DSlicesData import AD_2DSlicesData
|
27 |
+
|
28 |
+
from AlexNet2D import alexnet
|
29 |
+
from AlexNet3D import AlexNet
|
30 |
+
|
31 |
+
import ResNet2D
|
32 |
+
import ResNet3D
|
33 |
+
|
34 |
+
|
35 |
+
logging.basicConfig(
|
36 |
+
format='%(asctime)s %(levelname)s: %(message)s',
|
37 |
+
datefmt='%Y-%m-%d %H:%M:%S', level=logging.INFO)
|
38 |
+
|
39 |
+
parser = argparse.ArgumentParser(description="Starter code for JHU CS661 Computer Vision HW3.")
|
40 |
+
|
41 |
+
parser.add_argument("--network_type", "--nt", default="AlexNet2D", choices=["AlexNet2D", "AlexNet3D", "ResNet2D", "ResNet3D"],
|
42 |
+
help="Deep network type. (default=AlexNet)")
|
43 |
+
parser.add_argument("--load",
|
44 |
+
help="Load saved network weights.")
|
45 |
+
parser.add_argument("--save", default="best_model",
|
46 |
+
help="Save network weights.")
|
47 |
+
parser.add_argument("--augmentation", default=True, type=bool,
|
48 |
+
help="Save network weights.")
|
49 |
+
parser.add_argument("--epochs", default=20, type=int,
|
50 |
+
help="Epochs through the data. (default=20)")
|
51 |
+
parser.add_argument("--learning_rate", "-lr", default=1e-3, type=float,
|
52 |
+
help="Learning rate of the optimization. (default=0.01)")
|
53 |
+
parser.add_argument('--momentum', default=0.9, type=float, metavar='M',
|
54 |
+
help='momentum')
|
55 |
+
parser.add_argument('--weight-decay', '--wd', default=1e-4, type=float,
|
56 |
+
metavar='W', help='weight decay (default: 1e-4)')
|
57 |
+
parser.add_argument("--estop", default=1e-2, type=float,
|
58 |
+
help="Early stopping criteria on the development set. (default=1e-2)")
|
59 |
+
parser.add_argument("--batch_size", default=1, type=int,
|
60 |
+
help="Batch size for training. (default=1)")
|
61 |
+
parser.add_argument("--optimizer", default="Adam", choices=["SGD", "Adadelta", "Adam"],
|
62 |
+
help="Optimizer of choice for training. (default=Adam)")
|
63 |
+
parser.add_argument("--gpuid", default=[0], nargs='+', type=int,
|
64 |
+
help="ID of gpu device to use. Empty implies cpu usage.")
|
65 |
+
# feel free to add more arguments as you need
|
66 |
+
|
67 |
+
|
68 |
+
|
69 |
+
def main(options):
|
70 |
+
# Path configuration
|
71 |
+
TRAINING_PATH = 'train.txt'
|
72 |
+
TESTING_PATH = 'test.txt'
|
73 |
+
IMG_PATH = './Image'
|
74 |
+
|
75 |
+
if options.network_type == 'AlexNet3D':
|
76 |
+
trg_size = (224, 224, 224)
|
77 |
+
elif options.network_type == 'AlexNet2D':
|
78 |
+
trg_size = (224, 224)
|
79 |
+
elif options.network_type == 'ResNet3D':
|
80 |
+
trg_size = (110, 110, 110)
|
81 |
+
elif options.network_type == 'ResNet2D':
|
82 |
+
trg_size = (224, 224)
|
83 |
+
|
84 |
+
if options.network_type == "AlexNet3D" or "ResNet3D":
|
85 |
+
transformations = transforms.Compose([CustomResize(options.network_type, trg_size),
|
86 |
+
CustomToTensor(options.network_type)
|
87 |
+
])
|
88 |
+
dset_train = AD_2DSlicesData(IMG_PATH, TRAINING_PATH, transformations)
|
89 |
+
dset_test = AD_2DSlicesData(IMG_PATH, TESTING_PATH, transformations)
|
90 |
+
|
91 |
+
elif options.network_type == 'AlexNet2D' or "ResNet2D":
|
92 |
+
transformations = transforms.Compose([transforms.Resize(trg_size, Image.BICUBIC),
|
93 |
+
transforms.RandomHorizontalFlip(),
|
94 |
+
transforms.ToTensor()
|
95 |
+
])
|
96 |
+
dset_train = AD_2DSlicesData(IMG_PATH, TRAINING_PATH, transformations)
|
97 |
+
dset_test = AD_2DSlicesData(IMG_PATH, TESTING_PATH, transformations)
|
98 |
+
|
99 |
+
# Use argument load to distinguish training and testing
|
100 |
+
if options.load is None:
|
101 |
+
train_loader = DataLoader(dset_train,
|
102 |
+
batch_size = options.batch_size,
|
103 |
+
shuffle = True,
|
104 |
+
num_workers = 4,
|
105 |
+
drop_last = True
|
106 |
+
)
|
107 |
+
else:
|
108 |
+
# Only shuffle the data when doing training
|
109 |
+
train_loader = DataLoader(dset_train,
|
110 |
+
batch_size=options.batch_size,
|
111 |
+
shuffle=False,
|
112 |
+
num_workers=4,
|
113 |
+
drop_last=True
|
114 |
+
)
|
115 |
+
|
116 |
+
test_loader = DataLoader(dset_test,
|
117 |
+
batch_size = options.batch_size,
|
118 |
+
shuffle = False,
|
119 |
+
num_workers = 4,
|
120 |
+
drop_last=True
|
121 |
+
)
|
122 |
+
|
123 |
+
use_cuda = (len(options.gpuid) >= 1)
|
124 |
+
# if options.gpuid:
|
125 |
+
# cuda.set_device(options.gpuid[0])
|
126 |
+
|
127 |
+
# Training process
|
128 |
+
if options.load is None:
|
129 |
+
# Initial the model
|
130 |
+
if options.network_type == 'AlexNet3D':
|
131 |
+
model = AlexNet()
|
132 |
+
elif options.network_type == 'AlexNet2D':
|
133 |
+
model = alexnet(pretrained=True)
|
134 |
+
elif options.network_type == 'ResNet2D':
|
135 |
+
model = ResNet2D.resnet152(pretrained=True)
|
136 |
+
elif options.network_type == 'ResNet3D':
|
137 |
+
model = ResNet3D.ResNet()
|
138 |
+
|
139 |
+
if use_cuda > 0:
|
140 |
+
model = nn.DataParallel(model, device_ids=options.gpuid).cuda()
|
141 |
+
else:
|
142 |
+
model.cpu()
|
143 |
+
|
144 |
+
# Binary cross-entropy loss
|
145 |
+
criterion = torch.nn.CrossEntropyLoss()
|
146 |
+
|
147 |
+
lr = options.learning_rate
|
148 |
+
optimizer = eval("torch.optim." + options.optimizer)(model.parameters(), lr,
|
149 |
+
#momentum=options.momentum,
|
150 |
+
weight_decay=options.weight_decay)
|
151 |
+
# Prepare for label encoding
|
152 |
+
last_dev_avg_loss = float("inf")
|
153 |
+
best_accuracy = float("-inf")
|
154 |
+
|
155 |
+
# main training loop
|
156 |
+
for epoch_i in range(options.epochs):
|
157 |
+
logging.info("At {0}-th epoch.".format(epoch_i))
|
158 |
+
train_loss = 0.0
|
159 |
+
correct_cnt = 0.0
|
160 |
+
model.train()
|
161 |
+
for it, train_data in enumerate(train_loader):
|
162 |
+
data_dic = train_data
|
163 |
+
|
164 |
+
if use_cuda:
|
165 |
+
imgs, labels = Variable(data_dic['image']).cuda(), Variable(data_dic['label']).cuda()
|
166 |
+
else:
|
167 |
+
imgs, labels = Variable(data_dic['image']), Variable(data_dic['label'])
|
168 |
+
|
169 |
+
# add channel dimension: (batch_size, D, H ,W) to (batch_size, 1, D, H ,W)
|
170 |
+
# since 3D convolution requires 5D tensors
|
171 |
+
img_input = imgs#.unsqueeze(1)
|
172 |
+
|
173 |
+
integer_encoded = labels.data.cpu().numpy()
|
174 |
+
# target should be LongTensor in loss function
|
175 |
+
ground_truth = Variable(torch.from_numpy(integer_encoded)).long()
|
176 |
+
if use_cuda:
|
177 |
+
ground_truth = ground_truth.cuda()
|
178 |
+
train_output = model(img_input)
|
179 |
+
train_prob_predict = F.softmax(train_output, dim=1)
|
180 |
+
_, predict = train_prob_predict.topk(1)
|
181 |
+
loss = criterion(train_output, ground_truth)
|
182 |
+
|
183 |
+
train_loss += loss
|
184 |
+
correct_this_batch = (predict.squeeze(1) == ground_truth).sum()
|
185 |
+
correct_cnt += correct_this_batch
|
186 |
+
accuracy = float(correct_this_batch) / len(ground_truth)
|
187 |
+
logging.info("batch {0} training loss is : {1:.5f}".format(it, loss.data[0]))
|
188 |
+
logging.info("batch {0} training accuracy is : {1:.5f}".format(it, accuracy))
|
189 |
+
optimizer.zero_grad()
|
190 |
+
loss.backward()
|
191 |
+
optimizer.step()
|
192 |
+
|
193 |
+
train_avg_loss = train_loss / (len(dset_train) / options.batch_size)
|
194 |
+
train_avg_acu = float(correct_cnt) / len(dset_train)
|
195 |
+
logging.info("Average training loss is {0:.5f} at the end of epoch {1}".format(train_avg_loss.data[0], epoch_i))
|
196 |
+
logging.info("Average training accuracy is {0:.5f} at the end of epoch {1}".format(train_avg_acu, epoch_i))
|
197 |
+
|
198 |
+
# validation -- this is a crude esitmation because there might be some paddings at the end
|
199 |
+
dev_loss = 0.0
|
200 |
+
correct_cnt = 0.0
|
201 |
+
model.eval()
|
202 |
+
for it, test_data in enumerate(test_loader):
|
203 |
+
data_dic = test_data
|
204 |
+
|
205 |
+
if use_cuda:
|
206 |
+
imgs, labels = Variable(data_dic['image'], volatile=True).cuda(), Variable(data_dic['label'], volatile=True).cuda()
|
207 |
+
else:
|
208 |
+
imgs, labels = Variable(data_dic['image'], volatile=True), Variable(data_dic['label'], volatile=True)
|
209 |
+
|
210 |
+
img_input = imgs#.unsqueeze(1)
|
211 |
+
integer_encoded = labels.data.cpu().numpy()
|
212 |
+
ground_truth = Variable(torch.from_numpy(integer_encoded), volatile=True).long()
|
213 |
+
if use_cuda:
|
214 |
+
ground_truth = ground_truth.cuda()
|
215 |
+
test_output = model(img_input)
|
216 |
+
test_prob_predict = F.softmax(test_output, dim=1)
|
217 |
+
_, predict = test_prob_predict.topk(1)
|
218 |
+
loss = criterion(test_output, ground_truth)
|
219 |
+
dev_loss += loss
|
220 |
+
correct_this_batch = (predict.squeeze(1) == ground_truth).sum()
|
221 |
+
correct_cnt += (predict.squeeze(1) == ground_truth).sum()
|
222 |
+
accuracy = float(correct_this_batch) / len(ground_truth)
|
223 |
+
logging.info("batch {0} dev loss is : {1:.5f}".format(it, loss.data[0]))
|
224 |
+
logging.info("batch {0} dev accuracy is : {1:.5f}".format(it, accuracy))
|
225 |
+
|
226 |
+
dev_avg_loss = dev_loss / (len(dset_test) / options.batch_size)
|
227 |
+
dev_avg_acu = float(correct_cnt) / len(dset_test)
|
228 |
+
logging.info("Average validation loss is {0:.5f} at the end of epoch {1}".format(dev_avg_loss.data[0], epoch_i))
|
229 |
+
logging.info("Average validation accuracy is {0:.5f} at the end of epoch {1}".format(dev_avg_acu, epoch_i))
|
230 |
+
|
231 |
+
torch.save(model.state_dict(), open(options.save + ".nll_{0:.3f}.epoch_{1}".format(dev_avg_loss.data[0], epoch_i), 'wb'))
|
232 |
+
|
233 |
+
last_dev_avg_loss = dev_avg_loss
|
234 |
+
|
235 |
+
|
236 |
+
if __name__ == "__main__":
|
237 |
+
ret = parser.parse_known_args()
|
238 |
+
options = ret[0]
|
239 |
+
if ret[1]:
|
240 |
+
logging.warning("unknown arguments: {0}".format(parser.parse_known_args()[1]))
|
241 |
+
main(options)
|
test.py
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import argparse
|
2 |
+
import logging
|
3 |
+
|
4 |
+
import torch
|
5 |
+
import torch.nn as nn
|
6 |
+
from torch.autograd import Variable
|
7 |
+
from torch.utils.data import DataLoader,Dataset
|
8 |
+
import torchvision
|
9 |
+
|
10 |
+
from autoencoder import AutoEncoder
|
11 |
+
from AD_3DRandomPatch import AD_3DRandomPatch
|
12 |
+
|
13 |
+
logging.basicConfig(
|
14 |
+
format='%(asctime)s %(levelname)s: %(message)s',
|
15 |
+
datefmt='%Y-%m-%d %H:%M:%S', level=logging.INFO)
|
16 |
+
|
17 |
+
parser = argparse.ArgumentParser(description="Starter code for AutoEncoder")
|
18 |
+
|
19 |
+
parser.add_argument("--learning_rate", "-lr", default=1e-3, type=float,
|
20 |
+
help="Learning rate of the optimization. (default=0.01)")
|
21 |
+
parser.add_argument('--momentum', default=0.9, type=float, metavar='M',
|
22 |
+
help='momentum')
|
23 |
+
parser.add_argument('--weight-decay', '--wd', default=1e-4, type=float,
|
24 |
+
metavar='W', help='weight decay (default: 1e-4)')
|
25 |
+
parser.add_argument("--batch_size", default=1, type=int,
|
26 |
+
help="Batch size for training. (default=1)")
|
27 |
+
parser.add_argument("--gpuid", default=[0], nargs='+', type=int,
|
28 |
+
help="ID of gpu device to use. Empty implies cpu usage.")
|
29 |
+
parser.add_argument("--num_classes", default=2, type=int,
|
30 |
+
help="Number of classes.")
|
31 |
+
parser.add_argument("--epochs", default=20, type=int,
|
32 |
+
help="Epochs through the data. (default=20)")
|
33 |
+
|
34 |
+
def main(options):
|
35 |
+
|
36 |
+
if options.num_classes == 2:
|
37 |
+
TRAINING_PATH = 'train_2classes.txt'
|
38 |
+
else:
|
39 |
+
TRAINING_PATH = 'train.txt'
|
40 |
+
IMG_PATH = '/Users/waz/JHU/CV-ADNI/ImageNoSkull'
|
41 |
+
|
42 |
+
dset_train = AD_3DRandomPatch(IMG_PATH, TRAINING_PATH)
|
43 |
+
|
44 |
+
train_loader = DataLoader(dset_train,
|
45 |
+
batch_size = options.batch_size,
|
46 |
+
shuffle = True,
|
47 |
+
num_workers = 4,
|
48 |
+
drop_last = True
|
49 |
+
)
|
50 |
+
|
51 |
+
sparsity = 0.05
|
52 |
+
beta = 0.5
|
53 |
+
|
54 |
+
mean_square_loss = nn.MSELoss()
|
55 |
+
kl_div_loss = nn.KLDivLoss()
|
56 |
+
|
57 |
+
use_gpu = len(options.gpuid)>=1
|
58 |
+
autoencoder = AutoEncoder()
|
59 |
+
|
60 |
+
|
61 |
+
autoencoder = autoencoder.cpu()
|
62 |
+
|
63 |
+
optimizer = torch.optim.Adam(autoencoder.parameters(), lr=options.learning_rate, weight_decay=options.weight_decay)
|
64 |
+
|
65 |
+
train_loss = 0.
|
66 |
+
for epoch in range(options.epochs):
|
67 |
+
print("At {0}-th epoch.".format(epoch))
|
68 |
+
for i, patches in enumerate(train_loader):
|
69 |
+
for b, batch in enumerate(patches):
|
70 |
+
batch = Variable(batch)
|
71 |
+
output, mean_activitaion = autoencoder(batch)
|
72 |
+
loss1 = mean_square_loss(output, batch)
|
73 |
+
loss2 = kl_div_loss(mean_activitaion, Variable(torch.Tensor([sparsity])))
|
74 |
+
print "loss1", loss1
|
75 |
+
print "loss2", loss2
|
76 |
+
loss = loss1 + loss2
|
77 |
+
train_loss += loss
|
78 |
+
logging.info("batch {0} training loss is : {1:.5f}, {1:.5f}".format(b, loss1.data[0], loss2.data[0]))
|
79 |
+
optimizer.zero_grad()
|
80 |
+
loss.backward()
|
81 |
+
optimizer.step()
|
82 |
+
train_avg_loss = train_loss/len(train_loader*1000)
|
83 |
+
print("Average training loss is {0:.5f} at the end of epoch {1}".format(train_avg_loss.data[0], epoch))
|
84 |
+
torch.save(model.state_dict(), open("autoencoder_model", 'wb'))
|
85 |
+
|
86 |
+
if __name__ == "__main__":
|
87 |
+
ret = parser.parse_known_args()
|
88 |
+
options = ret[0]
|
89 |
+
if ret[1]:
|
90 |
+
logging.warning("unknown arguments: {0}".format(parser.parse_known_args()[1]))
|
91 |
+
main(options)
|
test.txt
ADDED
@@ -0,0 +1,198 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
128_S_1409.nii AD
|
2 |
+
116_S_0834.nii MCI
|
3 |
+
109_S_0967.nii Normal
|
4 |
+
009_S_1354.nii AD
|
5 |
+
032_S_0479.nii Normal
|
6 |
+
133_S_0792.nii MCI
|
7 |
+
126_S_0680.nii Normal
|
8 |
+
137_S_0301.nii Normal
|
9 |
+
073_S_1207.nii AD
|
10 |
+
010_S_0067.nii Normal
|
11 |
+
018_S_0155.nii MCI
|
12 |
+
130_S_0783.nii MCI
|
13 |
+
126_S_0891.nii AD
|
14 |
+
007_S_0041.nii MCI
|
15 |
+
036_S_0976.nii MCI
|
16 |
+
018_S_0450.nii MCI
|
17 |
+
082_S_0641.nii MCI
|
18 |
+
094_S_0711.nii Normal
|
19 |
+
021_S_0231.nii MCI
|
20 |
+
002_S_0816.nii AD
|
21 |
+
128_S_0863.nii Normal
|
22 |
+
068_S_0476.nii MCI
|
23 |
+
128_S_0230.nii Normal
|
24 |
+
062_S_1091.nii MCI
|
25 |
+
094_S_1015.nii MCI
|
26 |
+
005_S_1341.nii AD
|
27 |
+
012_S_1292.nii MCI
|
28 |
+
032_S_0095.nii Normal
|
29 |
+
141_S_1244.nii MCI
|
30 |
+
126_S_0865.nii MCI
|
31 |
+
033_S_0513.nii MCI
|
32 |
+
012_S_1133.nii Normal
|
33 |
+
133_S_0488.nii Normal
|
34 |
+
109_S_1343.nii MCI
|
35 |
+
013_S_0699.nii AD
|
36 |
+
114_S_0979.nii AD
|
37 |
+
082_S_1079.nii AD
|
38 |
+
133_S_0913.nii MCI
|
39 |
+
136_S_0300.nii AD
|
40 |
+
027_S_1082.nii AD
|
41 |
+
114_S_0374.nii AD
|
42 |
+
094_S_1027.nii AD
|
43 |
+
109_S_1013.nii Normal
|
44 |
+
027_S_0403.nii Normal
|
45 |
+
132_S_0987.nii MCI
|
46 |
+
100_S_0015.nii Normal
|
47 |
+
036_S_1135.nii MCI
|
48 |
+
002_S_1018.nii AD
|
49 |
+
109_S_1157.nii AD
|
50 |
+
099_S_0958.nii MCI
|
51 |
+
094_S_1090.nii AD
|
52 |
+
127_S_0684.nii Normal
|
53 |
+
027_S_0118.nii Normal
|
54 |
+
057_S_1217.nii MCI
|
55 |
+
082_S_0761.nii Normal
|
56 |
+
141_S_0810.nii Normal
|
57 |
+
100_S_0747.nii AD
|
58 |
+
010_S_0786.nii AD
|
59 |
+
099_S_0054.nii MCI
|
60 |
+
133_S_0771.nii MCI
|
61 |
+
128_S_0701.nii AD
|
62 |
+
133_S_0912.nii MCI
|
63 |
+
098_S_0896.nii Normal
|
64 |
+
023_S_0083.nii AD
|
65 |
+
131_S_0441.nii Normal
|
66 |
+
033_S_0889.nii AD
|
67 |
+
031_S_0568.nii MCI
|
68 |
+
128_S_0272.nii Normal
|
69 |
+
016_S_1263.nii AD
|
70 |
+
114_S_0601.nii Normal
|
71 |
+
130_S_0886.nii Normal
|
72 |
+
006_S_0547.nii AD
|
73 |
+
041_S_0898.nii Normal
|
74 |
+
027_S_1277.nii MCI
|
75 |
+
033_S_0739.nii AD
|
76 |
+
131_S_1301.nii Normal
|
77 |
+
099_S_0111.nii MCI
|
78 |
+
029_S_0824.nii Normal
|
79 |
+
141_S_1024.nii AD
|
80 |
+
022_S_0044.nii MCI
|
81 |
+
027_S_0417.nii MCI
|
82 |
+
022_S_0543.nii AD
|
83 |
+
137_S_0796.nii AD
|
84 |
+
094_S_1188.nii MCI
|
85 |
+
114_S_0173.nii Normal
|
86 |
+
052_S_1054.nii MCI
|
87 |
+
131_S_0436.nii Normal
|
88 |
+
062_S_1294.nii MCI
|
89 |
+
126_S_0405.nii Normal
|
90 |
+
041_S_0282.nii MCI
|
91 |
+
099_S_0880.nii MCI
|
92 |
+
032_S_0400.nii AD
|
93 |
+
021_S_0753.nii AD
|
94 |
+
033_S_0734.nii Normal
|
95 |
+
136_S_0196.nii Normal
|
96 |
+
031_S_0773.nii AD
|
97 |
+
002_S_0955.nii AD
|
98 |
+
021_S_0984.nii Normal
|
99 |
+
033_S_0724.nii AD
|
100 |
+
013_S_1035.nii Normal
|
101 |
+
094_S_1397.nii AD
|
102 |
+
082_S_0469.nii MCI
|
103 |
+
109_S_0840.nii Normal
|
104 |
+
011_S_0856.nii MCI
|
105 |
+
012_S_1212.nii Normal
|
106 |
+
033_S_1098.nii Normal
|
107 |
+
941_S_1194.nii Normal
|
108 |
+
009_S_0842.nii Normal
|
109 |
+
136_S_0086.nii Normal
|
110 |
+
027_S_1387.nii MCI
|
111 |
+
126_S_1221.nii AD
|
112 |
+
082_S_0363.nii Normal
|
113 |
+
067_S_0045.nii MCI
|
114 |
+
098_S_0172.nii Normal
|
115 |
+
072_S_1211.nii MCI
|
116 |
+
109_S_0876.nii Normal
|
117 |
+
141_S_0851.nii MCI
|
118 |
+
011_S_0053.nii AD
|
119 |
+
073_S_0565.nii AD
|
120 |
+
029_S_0878.nii MCI
|
121 |
+
023_S_0061.nii Normal
|
122 |
+
027_S_1385.nii AD
|
123 |
+
100_S_0743.nii AD
|
124 |
+
067_S_0336.nii MCI
|
125 |
+
013_S_0996.nii AD
|
126 |
+
099_S_0090.nii Normal
|
127 |
+
099_S_0060.nii MCI
|
128 |
+
099_S_0470.nii AD
|
129 |
+
023_S_0030.nii MCI
|
130 |
+
057_S_0643.nii Normal
|
131 |
+
033_S_1086.nii Normal
|
132 |
+
100_S_0190.nii MCI
|
133 |
+
006_S_0731.nii Normal
|
134 |
+
100_S_0069.nii Normal
|
135 |
+
141_S_0852.nii AD
|
136 |
+
130_S_1200.nii Normal
|
137 |
+
062_S_1299.nii MCI
|
138 |
+
067_S_0243.nii MCI
|
139 |
+
007_S_0070.nii Normal
|
140 |
+
012_S_1033.nii MCI
|
141 |
+
027_S_0120.nii Normal
|
142 |
+
032_S_0718.nii MCI
|
143 |
+
094_S_1241.nii Normal
|
144 |
+
053_S_0389.nii MCI
|
145 |
+
067_S_0176.nii MCI
|
146 |
+
123_S_0091.nii AD
|
147 |
+
003_S_1059.nii AD
|
148 |
+
123_S_0094.nii AD
|
149 |
+
100_S_1113.nii AD
|
150 |
+
020_S_0899.nii Normal
|
151 |
+
136_S_0195.nii MCI
|
152 |
+
057_S_0779.nii Normal
|
153 |
+
131_S_0123.nii Normal
|
154 |
+
116_S_0392.nii AD
|
155 |
+
010_S_0419.nii Normal
|
156 |
+
012_S_1321.nii MCI
|
157 |
+
116_S_0890.nii MCI
|
158 |
+
023_S_0604.nii MCI
|
159 |
+
094_S_0531.nii MCI
|
160 |
+
126_S_0506.nii Normal
|
161 |
+
130_S_0969.nii Normal
|
162 |
+
023_S_1190.nii Normal
|
163 |
+
114_S_0410.nii MCI
|
164 |
+
007_S_0414.nii MCI
|
165 |
+
052_S_0951.nii Normal
|
166 |
+
141_S_0340.nii AD
|
167 |
+
128_S_0805.nii AD
|
168 |
+
023_S_1104.nii MCI
|
169 |
+
024_S_1400.nii MCI
|
170 |
+
073_S_0445.nii MCI
|
171 |
+
012_S_0712.nii AD
|
172 |
+
128_S_0608.nii MCI
|
173 |
+
018_S_0406.nii MCI
|
174 |
+
129_S_0778.nii Normal
|
175 |
+
100_S_1154.nii MCI
|
176 |
+
031_S_0554.nii AD
|
177 |
+
137_S_0841.nii AD
|
178 |
+
018_S_0633.nii AD
|
179 |
+
033_S_1285.nii AD
|
180 |
+
099_S_1144.nii AD
|
181 |
+
010_S_0829.nii AD
|
182 |
+
006_S_0521.nii MCI
|
183 |
+
033_S_1016.nii Normal
|
184 |
+
141_S_1051.nii MCI
|
185 |
+
114_S_0458.nii MCI
|
186 |
+
128_S_0545.nii Normal
|
187 |
+
094_S_0964.nii MCI
|
188 |
+
022_S_0544.nii MCI
|
189 |
+
941_S_1363.nii MCI
|
190 |
+
037_S_0627.nii AD
|
191 |
+
130_S_1201.nii AD
|
192 |
+
057_S_1007.nii MCI
|
193 |
+
022_S_0219.nii AD
|
194 |
+
016_S_0354.nii MCI
|
195 |
+
002_S_0938.nii AD
|
196 |
+
014_S_0356.nii AD
|
197 |
+
082_S_0640.nii Normal
|
198 |
+
130_S_1337.nii AD
|
test_2C_new.txt
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
131_S_1301.nii Normal
|
2 |
+
109_S_4499.nii Normal
|
3 |
+
128_S_0701.nii AD
|
4 |
+
016_S_4583.nii AD
|
5 |
+
073_S_5016.nii AD
|
6 |
+
070_S_4856.nii Normal
|
7 |
+
023_S_0061.nii Normal
|
8 |
+
109_S_0967.nii Normal
|
9 |
+
036_S_5210.nii AD
|
10 |
+
126_S_0680.nii Normal
|
11 |
+
070_S_4719.nii AD
|
12 |
+
128_S_0230.nii Normal
|
13 |
+
016_S_5032.nii AD
|
14 |
+
109_S_1157.nii AD
|
15 |
+
009_S_0842.nii Normal
|
16 |
+
128_S_0272.nii Normal
|
17 |
+
032_S_4755.nii AD
|
18 |
+
128_S_1409.nii AD
|
19 |
+
114_S_0374.nii AD
|
20 |
+
027_S_4801.nii AD
|
21 |
+
116_S_4453.nii Normal
|
22 |
+
123_S_0094.nii AD
|
23 |
+
022_S_0543.nii AD
|
24 |
+
082_S_4224.nii Normal
|
25 |
+
082_S_4428.nii Normal
|
26 |
+
128_S_4609.nii Normal
|
27 |
+
100_S_0747.nii AD
|
28 |
+
033_S_1086.nii Normal
|
29 |
+
012_S_1212.nii Normal
|
30 |
+
011_S_4912.nii AD
|
31 |
+
130_S_1200.nii Normal
|
32 |
+
011_S_4222.nii Normal
|
33 |
+
051_S_5005.nii AD
|
34 |
+
099_S_4124.nii AD
|
35 |
+
099_S_0090.nii Normal
|
36 |
+
021_S_4276.nii Normal
|
37 |
+
137_S_4482.nii Normal
|
38 |
+
027_S_4938.nii AD
|
39 |
+
023_S_5241.nii AD
|
40 |
+
027_S_0120.nii Normal
|
41 |
+
016_S_4688.nii Normal
|
42 |
+
014_S_4080.nii Normal
|
43 |
+
082_S_0761.nii Normal
|
44 |
+
021_S_0753.nii AD
|
45 |
+
129_S_4369.nii Normal
|
46 |
+
016_S_4121.nii Normal
|
47 |
+
153_S_4125.nii Normal
|
48 |
+
098_S_0172.nii Normal
|
49 |
+
037_S_4410.nii Normal
|
50 |
+
057_S_0779.nii Normal
|
51 |
+
032_S_0095.nii Normal
|
52 |
+
033_S_0724.nii AD
|
53 |
+
114_S_0601.nii Normal
|
54 |
+
013_S_0699.nii AD
|
55 |
+
137_S_0796.nii AD
|
56 |
+
082_S_4208.nii Normal
|
57 |
+
099_S_0470.nii AD
|
58 |
+
023_S_4020.nii Normal
|
59 |
+
006_S_0731.nii Normal
|
60 |
+
094_S_0711.nii Normal
|
61 |
+
128_S_0863.nii Normal
|
62 |
+
006_S_0547.nii AD
|
63 |
+
021_S_4335.nii Normal
|
64 |
+
005_S_1341.nii AD
|
65 |
+
033_S_0734.nii Normal
|
66 |
+
003_S_1059.nii AD
|
test_2classes.txt
ADDED
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
128_S_1409.nii AD
|
2 |
+
109_S_0967.nii Normal
|
3 |
+
009_S_1354.nii AD
|
4 |
+
032_S_0479.nii Normal
|
5 |
+
126_S_0680.nii Normal
|
6 |
+
137_S_0301.nii Normal
|
7 |
+
073_S_1207.nii AD
|
8 |
+
010_S_0067.nii Normal
|
9 |
+
126_S_0891.nii AD
|
10 |
+
094_S_0711.nii Normal
|
11 |
+
002_S_0816.nii AD
|
12 |
+
128_S_0863.nii Normal
|
13 |
+
128_S_0230.nii Normal
|
14 |
+
005_S_1341.nii AD
|
15 |
+
032_S_0095.nii Normal
|
16 |
+
012_S_1133.nii Normal
|
17 |
+
133_S_0488.nii Normal
|
18 |
+
013_S_0699.nii AD
|
19 |
+
114_S_0979.nii AD
|
20 |
+
082_S_1079.nii AD
|
21 |
+
136_S_0300.nii AD
|
22 |
+
027_S_1082.nii AD
|
23 |
+
114_S_0374.nii AD
|
24 |
+
094_S_1027.nii AD
|
25 |
+
109_S_1013.nii Normal
|
26 |
+
027_S_0403.nii Normal
|
27 |
+
100_S_0015.nii Normal
|
28 |
+
002_S_1018.nii AD
|
29 |
+
109_S_1157.nii AD
|
30 |
+
094_S_1090.nii AD
|
31 |
+
127_S_0684.nii Normal
|
32 |
+
027_S_0118.nii Normal
|
33 |
+
082_S_0761.nii Normal
|
34 |
+
141_S_0810.nii Normal
|
35 |
+
100_S_0747.nii AD
|
36 |
+
010_S_0786.nii AD
|
37 |
+
128_S_0701.nii AD
|
38 |
+
098_S_0896.nii Normal
|
39 |
+
023_S_0083.nii AD
|
40 |
+
131_S_0441.nii Normal
|
41 |
+
033_S_0889.nii AD
|
42 |
+
128_S_0272.nii Normal
|
43 |
+
016_S_1263.nii AD
|
44 |
+
114_S_0601.nii Normal
|
45 |
+
130_S_0886.nii Normal
|
46 |
+
006_S_0547.nii AD
|
47 |
+
041_S_0898.nii Normal
|
48 |
+
033_S_0739.nii AD
|
49 |
+
131_S_1301.nii Normal
|
50 |
+
029_S_0824.nii Normal
|
51 |
+
141_S_1024.nii AD
|
52 |
+
022_S_0543.nii AD
|
53 |
+
137_S_0796.nii AD
|
54 |
+
114_S_0173.nii Normal
|
55 |
+
131_S_0436.nii Normal
|
56 |
+
126_S_0405.nii Normal
|
57 |
+
032_S_0400.nii AD
|
58 |
+
021_S_0753.nii AD
|
59 |
+
033_S_0734.nii Normal
|
60 |
+
136_S_0196.nii Normal
|
61 |
+
031_S_0773.nii AD
|
62 |
+
002_S_0955.nii AD
|
63 |
+
021_S_0984.nii Normal
|
64 |
+
033_S_0724.nii AD
|
65 |
+
013_S_1035.nii Normal
|
66 |
+
094_S_1397.nii AD
|
67 |
+
109_S_0840.nii Normal
|
68 |
+
012_S_1212.nii Normal
|
69 |
+
033_S_1098.nii Normal
|
70 |
+
941_S_1194.nii Normal
|
71 |
+
009_S_0842.nii Normal
|
72 |
+
136_S_0086.nii Normal
|
73 |
+
126_S_1221.nii AD
|
74 |
+
082_S_0363.nii Normal
|
75 |
+
098_S_0172.nii Normal
|
76 |
+
109_S_0876.nii Normal
|
77 |
+
011_S_0053.nii AD
|
78 |
+
073_S_0565.nii AD
|
79 |
+
023_S_0061.nii Normal
|
80 |
+
027_S_1385.nii AD
|
81 |
+
100_S_0743.nii AD
|
82 |
+
013_S_0996.nii AD
|
83 |
+
099_S_0090.nii Normal
|
84 |
+
099_S_0470.nii AD
|
85 |
+
057_S_0643.nii Normal
|
86 |
+
033_S_1086.nii Normal
|
87 |
+
006_S_0731.nii Normal
|
88 |
+
100_S_0069.nii Normal
|
89 |
+
141_S_0852.nii AD
|
90 |
+
130_S_1200.nii Normal
|
91 |
+
007_S_0070.nii Normal
|
92 |
+
027_S_0120.nii Normal
|
93 |
+
094_S_1241.nii Normal
|
94 |
+
123_S_0091.nii AD
|
95 |
+
003_S_1059.nii AD
|
96 |
+
123_S_0094.nii AD
|
97 |
+
100_S_1113.nii AD
|
98 |
+
020_S_0899.nii Normal
|
99 |
+
057_S_0779.nii Normal
|
100 |
+
131_S_0123.nii Normal
|
test_encoder.py
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import argparse
|
2 |
+
import logging
|
3 |
+
|
4 |
+
import torch
|
5 |
+
import torch.nn as nn
|
6 |
+
from torch import cuda
|
7 |
+
from torch.autograd import Variable
|
8 |
+
from torch.utils.data import DataLoader,Dataset
|
9 |
+
import torchvision
|
10 |
+
|
11 |
+
from autoencoder import AutoEncoder
|
12 |
+
from AD_3DRandomPatch import AD_3DRandomPatch
|
13 |
+
|
14 |
+
logging.basicConfig(
|
15 |
+
format='%(asctime)s %(levelname)s: %(message)s',
|
16 |
+
datefmt='%Y-%m-%d %H:%M:%S', level=logging.INFO)
|
17 |
+
|
18 |
+
parser = argparse.ArgumentParser(description="Starter code for AutoEncoder")
|
19 |
+
|
20 |
+
parser.add_argument("--learning_rate", "-lr", default=1e-3, type=float,
|
21 |
+
help="Learning rate of the optimization. (default=0.01)")
|
22 |
+
parser.add_argument('--momentum', default=0.9, type=float, metavar='M',
|
23 |
+
help='momentum')
|
24 |
+
parser.add_argument('--weight-decay', '--wd', default=1e-4, type=float,
|
25 |
+
metavar='W', help='weight decay (default: 1e-4)')
|
26 |
+
parser.add_argument("--batch_size", default=1, type=int,
|
27 |
+
help="Batch size for training. (default=1)")
|
28 |
+
parser.add_argument("--gpuid", default=[0], nargs='+', type=int,
|
29 |
+
help="ID of gpu device to use. Empty implies cpu usage.")
|
30 |
+
parser.add_argument("--num_classes", default=2, type=int,
|
31 |
+
help="Number of classes.")
|
32 |
+
parser.add_argument("--epochs", default=20, type=int,
|
33 |
+
help="Epochs through the data. (default=20)")
|
34 |
+
|
35 |
+
def main(options):
|
36 |
+
|
37 |
+
if options.num_classes == 2:
|
38 |
+
TRAINING_PATH = 'train_2classes.txt'
|
39 |
+
else:
|
40 |
+
TRAINING_PATH = 'train.txt'
|
41 |
+
IMG_PATH = './Image'
|
42 |
+
|
43 |
+
dset_train = AD_3DRandomPatch(IMG_PATH, TRAINING_PATH)
|
44 |
+
|
45 |
+
train_loader = DataLoader(dset_train,
|
46 |
+
batch_size = options.batch_size,
|
47 |
+
shuffle = True,
|
48 |
+
num_workers = 4,
|
49 |
+
drop_last = True
|
50 |
+
)
|
51 |
+
|
52 |
+
sparsity = 0.05
|
53 |
+
beta = 0.5
|
54 |
+
|
55 |
+
mean_square_loss = nn.MSELoss()
|
56 |
+
kl_div_loss = nn.KLDivLoss(reduce=False)
|
57 |
+
|
58 |
+
use_gpu = len(options.gpuid)>=1
|
59 |
+
autoencoder = AutoEncoder()
|
60 |
+
|
61 |
+
if(use_gpu):
|
62 |
+
autoencoder = autoencoder.cuda()
|
63 |
+
else:
|
64 |
+
autoencoder = autoencoder.cpu()
|
65 |
+
|
66 |
+
optimizer = torch.optim.Adam(autoencoder.parameters(), lr=options.learning_rate, weight_decay=options.weight_decay)
|
67 |
+
|
68 |
+
train_loss = 0.
|
69 |
+
for epoch in range(options.epochs):
|
70 |
+
print("At {0}-th epoch.".format(epoch))
|
71 |
+
for i, patches in enumerate(train_loader):
|
72 |
+
print i
|
73 |
+
print len(patches)
|
74 |
+
# for batch in patches:
|
75 |
+
# batch = Variable(batch).cuda()
|
76 |
+
# output, mean_activitaion = autoencoder(batch)
|
77 |
+
# loss = mean_square_loss(batch, output) + kl_div_loss(mean_activitaion, sparsity)
|
78 |
+
# train_loss += loss
|
79 |
+
# logging.info("batch {0} training loss is : {1:.5f}".format(i, loss.data[0]))
|
80 |
+
# optimizer.zero_grad()
|
81 |
+
# loss.backward()
|
82 |
+
# optimizer.step()
|
83 |
+
# train_avg_loss = train_loss/len(train_loader*1000)
|
84 |
+
# print("Average training loss is {0:.5f} at the end of epoch {1}".format(train_avg_loss.data[0], epoch))
|
85 |
+
# torch.save(model.state_dict(), open("autoencoder_model", 'wb'))
|
86 |
+
|
87 |
+
if __name__ == "__main__":
|
88 |
+
ret = parser.parse_known_args()
|
89 |
+
options = ret[0]
|
90 |
+
if ret[1]:
|
91 |
+
logging.warning("unknown arguments: {0}".format(parser.parse_known_args()[1]))
|
92 |
+
main(options)
|
train.txt
ADDED
@@ -0,0 +1,486 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
011_S_0005.nii Normal
|
2 |
+
022_S_0014.nii Normal
|
3 |
+
016_S_0769.nii MCI
|
4 |
+
127_S_1382.nii AD
|
5 |
+
033_S_0725.nii MCI
|
6 |
+
067_S_0098.nii MCI
|
7 |
+
023_S_1262.nii AD
|
8 |
+
068_S_0210.nii Normal
|
9 |
+
137_S_0158.nii MCI
|
10 |
+
067_S_0110.nii AD
|
11 |
+
133_S_0629.nii MCI
|
12 |
+
116_S_0657.nii Normal
|
13 |
+
123_S_0113.nii Normal
|
14 |
+
094_S_1102.nii AD
|
15 |
+
137_S_0825.nii MCI
|
16 |
+
003_S_0981.nii Normal
|
17 |
+
114_S_0228.nii AD
|
18 |
+
057_S_0839.nii MCI
|
19 |
+
941_S_1197.nii Normal
|
20 |
+
022_S_0066.nii Normal
|
21 |
+
024_S_1063.nii Normal
|
22 |
+
137_S_1041.nii AD
|
23 |
+
067_S_1185.nii AD
|
24 |
+
035_S_0555.nii Normal
|
25 |
+
068_S_1191.nii Normal
|
26 |
+
116_S_0360.nii Normal
|
27 |
+
010_S_0662.nii MCI
|
28 |
+
033_S_1281.nii AD
|
29 |
+
023_S_0613.nii MCI
|
30 |
+
099_S_0352.nii Normal
|
31 |
+
032_S_0677.nii Normal
|
32 |
+
094_S_0692.nii Normal
|
33 |
+
011_S_0002.nii Normal
|
34 |
+
126_S_0606.nii AD
|
35 |
+
141_S_0696.nii AD
|
36 |
+
131_S_0691.nii AD
|
37 |
+
023_S_0084.nii AD
|
38 |
+
136_S_0299.nii AD
|
39 |
+
023_S_0093.nii AD
|
40 |
+
012_S_1009.nii Normal
|
41 |
+
127_S_0397.nii MCI
|
42 |
+
141_S_0717.nii Normal
|
43 |
+
941_S_1203.nii Normal
|
44 |
+
137_S_0481.nii MCI
|
45 |
+
057_S_1373.nii AD
|
46 |
+
016_S_0991.nii AD
|
47 |
+
128_S_0167.nii AD
|
48 |
+
027_S_0179.nii MCI
|
49 |
+
094_S_0489.nii Normal
|
50 |
+
127_S_0622.nii Normal
|
51 |
+
029_S_1073.nii MCI
|
52 |
+
116_S_1083.nii AD
|
53 |
+
032_S_0147.nii AD
|
54 |
+
027_S_0948.nii MCI
|
55 |
+
037_S_1421.nii MCI
|
56 |
+
073_S_0518.nii MCI
|
57 |
+
018_S_0425.nii Normal
|
58 |
+
128_S_0740.nii AD
|
59 |
+
031_S_0618.nii Normal
|
60 |
+
068_S_0109.nii AD
|
61 |
+
141_S_0853.nii AD
|
62 |
+
011_S_0861.nii MCI
|
63 |
+
057_S_0464.nii MCI
|
64 |
+
073_S_0089.nii Normal
|
65 |
+
137_S_0459.nii Normal
|
66 |
+
067_S_0056.nii Normal
|
67 |
+
014_S_0357.nii AD
|
68 |
+
036_S_0656.nii MCI
|
69 |
+
098_S_0884.nii AD
|
70 |
+
033_S_0516.nii Normal
|
71 |
+
024_S_0985.nii Normal
|
72 |
+
128_S_0310.nii AD
|
73 |
+
024_S_1171.nii AD
|
74 |
+
141_S_0767.nii Normal
|
75 |
+
100_S_1286.nii Normal
|
76 |
+
012_S_0637.nii Normal
|
77 |
+
013_S_1120.nii MCI
|
78 |
+
131_S_0409.nii MCI
|
79 |
+
133_S_0525.nii Normal
|
80 |
+
133_S_1170.nii AD
|
81 |
+
033_S_0511.nii MCI
|
82 |
+
041_S_1002.nii Normal
|
83 |
+
082_S_0928.nii MCI
|
84 |
+
128_S_1181.nii MCI
|
85 |
+
014_S_0328.nii AD
|
86 |
+
018_S_0369.nii Normal
|
87 |
+
029_S_1384.nii MCI
|
88 |
+
029_S_1056.nii AD
|
89 |
+
033_S_1087.nii AD
|
90 |
+
073_S_0386.nii Normal
|
91 |
+
051_S_1040.nii MCI
|
92 |
+
099_S_0551.nii MCI
|
93 |
+
041_S_0446.nii MCI
|
94 |
+
067_S_0284.nii MCI
|
95 |
+
007_S_1222.nii Normal
|
96 |
+
024_S_1307.nii AD
|
97 |
+
032_S_1101.nii AD
|
98 |
+
109_S_0950.nii MCI
|
99 |
+
136_S_0579.nii MCI
|
100 |
+
041_S_0314.nii MCI
|
101 |
+
013_S_0240.nii MCI
|
102 |
+
116_S_0487.nii AD
|
103 |
+
067_S_0077.nii MCI
|
104 |
+
137_S_0972.nii Normal
|
105 |
+
051_S_1131.nii MCI
|
106 |
+
057_S_1379.nii AD
|
107 |
+
011_S_0008.nii Normal
|
108 |
+
041_S_1010.nii MCI
|
109 |
+
123_S_0390.nii MCI
|
110 |
+
018_S_0087.nii MCI
|
111 |
+
012_S_0803.nii AD
|
112 |
+
022_S_0924.nii MCI
|
113 |
+
013_S_0575.nii Normal
|
114 |
+
033_S_1309.nii MCI
|
115 |
+
136_S_0186.nii Normal
|
116 |
+
035_S_0033.nii MCI
|
117 |
+
137_S_0669.nii MCI
|
118 |
+
073_S_1357.nii MCI
|
119 |
+
100_S_0995.nii MCI
|
120 |
+
137_S_0443.nii MCI
|
121 |
+
016_S_1138.nii MCI
|
122 |
+
014_S_0548.nii Normal
|
123 |
+
037_S_0467.nii Normal
|
124 |
+
011_S_0326.nii MCI
|
125 |
+
021_S_0647.nii Normal
|
126 |
+
127_S_0431.nii AD
|
127 |
+
014_S_0519.nii Normal
|
128 |
+
041_S_1391.nii AD
|
129 |
+
029_S_0866.nii Normal
|
130 |
+
033_S_1284.nii MCI
|
131 |
+
033_S_1283.nii AD
|
132 |
+
029_S_1184.nii AD
|
133 |
+
037_S_1225.nii MCI
|
134 |
+
033_S_0567.nii MCI
|
135 |
+
094_S_1164.nii AD
|
136 |
+
053_S_0621.nii MCI
|
137 |
+
020_S_0213.nii AD
|
138 |
+
021_S_1109.nii AD
|
139 |
+
005_S_0221.nii AD
|
140 |
+
022_S_0750.nii MCI
|
141 |
+
114_S_0416.nii Normal
|
142 |
+
006_S_0653.nii AD
|
143 |
+
041_S_1420.nii MCI
|
144 |
+
005_S_0222.nii MCI
|
145 |
+
005_S_0929.nii AD
|
146 |
+
036_S_0672.nii Normal
|
147 |
+
082_S_1256.nii Normal
|
148 |
+
053_S_0507.nii MCI
|
149 |
+
022_S_0130.nii Normal
|
150 |
+
012_S_1175.nii MCI
|
151 |
+
109_S_1183.nii MCI
|
152 |
+
141_S_1231.nii MCI
|
153 |
+
128_S_1430.nii AD
|
154 |
+
141_S_0982.nii MCI
|
155 |
+
005_S_0814.nii AD
|
156 |
+
012_S_0720.nii AD
|
157 |
+
007_S_0128.nii MCI
|
158 |
+
016_S_0359.nii Normal
|
159 |
+
022_S_1366.nii MCI
|
160 |
+
013_S_0325.nii MCI
|
161 |
+
029_S_1038.nii MCI
|
162 |
+
121_S_1322.nii MCI
|
163 |
+
100_S_0006.nii MCI
|
164 |
+
029_S_0871.nii MCI
|
165 |
+
021_S_0642.nii AD
|
166 |
+
137_S_1426.nii MCI
|
167 |
+
057_S_0818.nii Normal
|
168 |
+
073_S_0909.nii MCI
|
169 |
+
137_S_0631.nii MCI
|
170 |
+
023_S_0078.nii MCI
|
171 |
+
116_S_1315.nii MCI
|
172 |
+
012_S_0932.nii MCI
|
173 |
+
062_S_0730.nii AD
|
174 |
+
068_S_0473.nii Normal
|
175 |
+
136_S_0184.nii Normal
|
176 |
+
035_S_0341.nii AD
|
177 |
+
133_S_0727.nii MCI
|
178 |
+
100_S_1062.nii AD
|
179 |
+
123_S_0298.nii Normal
|
180 |
+
022_S_0096.nii Normal
|
181 |
+
067_S_0177.nii Normal
|
182 |
+
130_S_0102.nii MCI
|
183 |
+
109_S_0777.nii AD
|
184 |
+
941_S_1311.nii MCI
|
185 |
+
041_S_0407.nii MCI
|
186 |
+
127_S_1140.nii MCI
|
187 |
+
006_S_0675.nii MCI
|
188 |
+
035_S_0156.nii Normal
|
189 |
+
014_S_0520.nii Normal
|
190 |
+
016_S_1028.nii MCI
|
191 |
+
018_S_0103.nii MCI
|
192 |
+
128_S_0517.nii AD
|
193 |
+
011_S_0016.nii Normal
|
194 |
+
141_S_1094.nii Normal
|
195 |
+
136_S_0426.nii AD
|
196 |
+
021_S_0273.nii MCI
|
197 |
+
067_S_0038.nii MCI
|
198 |
+
068_S_0442.nii MCI
|
199 |
+
128_S_0266.nii AD
|
200 |
+
941_S_1295.nii MCI
|
201 |
+
127_S_0393.nii MCI
|
202 |
+
057_S_0934.nii Normal
|
203 |
+
035_S_0048.nii Normal
|
204 |
+
051_S_1338.nii MCI
|
205 |
+
023_S_0081.nii Normal
|
206 |
+
136_S_0874.nii MCI
|
207 |
+
002_S_0685.nii Normal
|
208 |
+
116_S_1232.nii Normal
|
209 |
+
041_S_0598.nii MCI
|
210 |
+
131_S_0457.nii AD
|
211 |
+
011_S_0362.nii MCI
|
212 |
+
062_S_0793.nii AD
|
213 |
+
027_S_0074.nii Normal
|
214 |
+
133_S_0493.nii Normal
|
215 |
+
057_S_0474.nii AD
|
216 |
+
136_S_0194.nii AD
|
217 |
+
131_S_0497.nii AD
|
218 |
+
010_S_0904.nii MCI
|
219 |
+
062_S_0690.nii AD
|
220 |
+
023_S_0926.nii Normal
|
221 |
+
023_S_0855.nii MCI
|
222 |
+
011_S_0023.nii Normal
|
223 |
+
062_S_0768.nii Normal
|
224 |
+
941_S_1202.nii Normal
|
225 |
+
128_S_0611.nii MCI
|
226 |
+
005_S_0602.nii Normal
|
227 |
+
032_S_1169.nii Normal
|
228 |
+
137_S_0686.nii Normal
|
229 |
+
023_S_1247.nii MCI
|
230 |
+
053_S_1044.nii AD
|
231 |
+
005_S_0610.nii Normal
|
232 |
+
031_S_0821.nii MCI
|
233 |
+
013_S_0860.nii MCI
|
234 |
+
128_S_0522.nii Normal
|
235 |
+
941_S_1195.nii Normal
|
236 |
+
016_S_1149.nii MCI
|
237 |
+
005_S_1224.nii MCI
|
238 |
+
032_S_1037.nii AD
|
239 |
+
067_S_0607.nii MCI
|
240 |
+
007_S_1339.nii AD
|
241 |
+
123_S_0162.nii AD
|
242 |
+
029_S_0845.nii Normal
|
243 |
+
012_S_1165.nii MCI
|
244 |
+
136_S_1227.nii MCI
|
245 |
+
036_S_0577.nii AD
|
246 |
+
003_S_0907.nii Normal
|
247 |
+
033_S_0741.nii Normal
|
248 |
+
018_S_0057.nii MCI
|
249 |
+
099_S_0534.nii Normal
|
250 |
+
035_S_0204.nii MCI
|
251 |
+
073_S_0311.nii Normal
|
252 |
+
082_S_0304.nii Normal
|
253 |
+
027_S_1254.nii AD
|
254 |
+
011_S_0022.nii Normal
|
255 |
+
003_S_0931.nii Normal
|
256 |
+
136_S_0873.nii MCI
|
257 |
+
020_S_0883.nii Normal
|
258 |
+
016_S_0590.nii MCI
|
259 |
+
021_S_0141.nii MCI
|
260 |
+
052_S_1250.nii Normal
|
261 |
+
100_S_0035.nii Normal
|
262 |
+
002_S_0954.nii MCI
|
263 |
+
033_S_0888.nii AD
|
264 |
+
010_S_0420.nii Normal
|
265 |
+
127_S_0754.nii AD
|
266 |
+
099_S_0492.nii AD
|
267 |
+
013_S_0592.nii AD
|
268 |
+
027_S_1081.nii AD
|
269 |
+
007_S_0249.nii MCI
|
270 |
+
128_S_0188.nii MCI
|
271 |
+
041_S_0721.nii MCI
|
272 |
+
116_S_0382.nii Normal
|
273 |
+
009_S_1334.nii AD
|
274 |
+
033_S_0723.nii MCI
|
275 |
+
123_S_0106.nii Normal
|
276 |
+
099_S_0533.nii Normal
|
277 |
+
011_S_0021.nii Normal
|
278 |
+
094_S_0921.nii MCI
|
279 |
+
018_S_0286.nii AD
|
280 |
+
067_S_0076.nii AD
|
281 |
+
029_S_0836.nii AD
|
282 |
+
067_S_0059.nii Normal
|
283 |
+
121_S_1350.nii MCI
|
284 |
+
127_S_0394.nii MCI
|
285 |
+
037_S_0454.nii Normal
|
286 |
+
067_S_0020.nii AD
|
287 |
+
130_S_1290.nii AD
|
288 |
+
041_S_1412.nii MCI
|
289 |
+
094_S_1402.nii AD
|
290 |
+
002_S_0619.nii AD
|
291 |
+
067_S_0257.nii Normal
|
292 |
+
072_S_0315.nii Normal
|
293 |
+
036_S_0748.nii MCI
|
294 |
+
036_S_0576.nii Normal
|
295 |
+
018_S_0682.nii AD
|
296 |
+
027_S_1213.nii MCI
|
297 |
+
033_S_1308.nii AD
|
298 |
+
021_S_0332.nii MCI
|
299 |
+
100_S_0893.nii AD
|
300 |
+
068_S_0127.nii Normal
|
301 |
+
114_S_0166.nii Normal
|
302 |
+
041_S_0125.nii Normal
|
303 |
+
068_S_0401.nii MCI
|
304 |
+
141_S_1137.nii AD
|
305 |
+
094_S_1398.nii MCI
|
306 |
+
082_S_1119.nii MCI
|
307 |
+
067_S_0029.nii AD
|
308 |
+
141_S_1245.nii MCI
|
309 |
+
033_S_0733.nii AD
|
310 |
+
041_S_1411.nii MCI
|
311 |
+
012_S_0689.nii AD
|
312 |
+
098_S_0149.nii AD
|
313 |
+
013_S_1161.nii AD
|
314 |
+
029_S_1215.nii MCI
|
315 |
+
013_S_1275.nii MCI
|
316 |
+
098_S_0171.nii Normal
|
317 |
+
141_S_0726.nii Normal
|
318 |
+
128_S_0500.nii Normal
|
319 |
+
128_S_0216.nii AD
|
320 |
+
007_S_1248.nii AD
|
321 |
+
021_S_0159.nii Normal
|
322 |
+
022_S_0007.nii AD
|
323 |
+
023_S_0139.nii AD
|
324 |
+
121_S_0953.nii AD
|
325 |
+
033_S_0920.nii Normal
|
326 |
+
099_S_0040.nii Normal
|
327 |
+
002_S_1070.nii MCI
|
328 |
+
062_S_0535.nii AD
|
329 |
+
127_S_1210.nii MCI
|
330 |
+
051_S_1296.nii AD
|
331 |
+
005_S_0324.nii MCI
|
332 |
+
011_S_0003.nii AD
|
333 |
+
041_S_1435.nii AD
|
334 |
+
020_S_1288.nii Normal
|
335 |
+
137_S_0973.nii MCI
|
336 |
+
002_S_0782.nii MCI
|
337 |
+
012_S_0917.nii MCI
|
338 |
+
023_S_0058.nii Normal
|
339 |
+
127_S_0259.nii Normal
|
340 |
+
127_S_0844.nii AD
|
341 |
+
141_S_1152.nii AD
|
342 |
+
029_S_1218.nii MCI
|
343 |
+
036_S_0813.nii Normal
|
344 |
+
067_S_1253.nii AD
|
345 |
+
032_S_0187.nii MCI
|
346 |
+
136_S_0429.nii MCI
|
347 |
+
073_S_0312.nii Normal
|
348 |
+
002_S_0295.nii Normal
|
349 |
+
022_S_0004.nii MCI
|
350 |
+
011_S_0183.nii AD
|
351 |
+
036_S_1023.nii Normal
|
352 |
+
036_S_0760.nii AD
|
353 |
+
128_S_0528.nii AD
|
354 |
+
123_S_0072.nii Normal
|
355 |
+
016_S_1121.nii MCI
|
356 |
+
123_S_0088.nii AD
|
357 |
+
010_S_0422.nii MCI
|
358 |
+
067_S_0812.nii AD
|
359 |
+
109_S_1014.nii Normal
|
360 |
+
023_S_0963.nii Normal
|
361 |
+
027_S_0461.nii MCI
|
362 |
+
014_S_0558.nii Normal
|
363 |
+
051_S_1123.nii Normal
|
364 |
+
057_S_1371.nii AD
|
365 |
+
010_S_0788.nii MCI
|
366 |
+
007_S_1206.nii Normal
|
367 |
+
141_S_0790.nii AD
|
368 |
+
052_S_1251.nii Normal
|
369 |
+
137_S_0438.nii AD
|
370 |
+
041_S_1423.nii MCI
|
371 |
+
005_S_0553.nii Normal
|
372 |
+
002_S_1280.nii Normal
|
373 |
+
126_S_0784.nii AD
|
374 |
+
137_S_0366.nii AD
|
375 |
+
007_S_0316.nii AD
|
376 |
+
022_S_0961.nii MCI
|
377 |
+
011_S_0010.nii AD
|
378 |
+
068_S_1075.nii MCI
|
379 |
+
023_S_0625.nii MCI
|
380 |
+
100_S_0047.nii Normal
|
381 |
+
002_S_1261.nii Normal
|
382 |
+
133_S_1031.nii MCI
|
383 |
+
007_S_0344.nii MCI
|
384 |
+
005_S_0223.nii Normal
|
385 |
+
094_S_1293.nii MCI
|
386 |
+
062_S_1099.nii Normal
|
387 |
+
136_S_0695.nii MCI
|
388 |
+
012_S_0634.nii MCI
|
389 |
+
062_S_1182.nii MCI
|
390 |
+
018_S_0277.nii AD
|
391 |
+
010_S_0472.nii Normal
|
392 |
+
020_S_0097.nii Normal
|
393 |
+
009_S_1199.nii MCI
|
394 |
+
014_S_1095.nii AD
|
395 |
+
094_S_0434.nii MCI
|
396 |
+
109_S_1192.nii AD
|
397 |
+
027_S_0485.nii MCI
|
398 |
+
094_S_0526.nii Normal
|
399 |
+
057_S_0957.nii MCI
|
400 |
+
094_S_1314.nii MCI
|
401 |
+
131_S_0319.nii Normal
|
402 |
+
021_S_0337.nii Normal
|
403 |
+
011_S_0241.nii MCI
|
404 |
+
027_S_1335.nii MCI
|
405 |
+
126_S_0605.nii Normal
|
406 |
+
132_S_0339.nii MCI
|
407 |
+
037_S_0182.nii MCI
|
408 |
+
007_S_0293.nii MCI
|
409 |
+
007_S_0068.nii Normal
|
410 |
+
114_S_1103.nii MCI
|
411 |
+
013_S_0502.nii Normal
|
412 |
+
029_S_0999.nii AD
|
413 |
+
027_S_0404.nii AD
|
414 |
+
027_S_0850.nii AD
|
415 |
+
023_S_0031.nii Normal
|
416 |
+
116_S_1249.nii Normal
|
417 |
+
041_S_1368.nii AD
|
418 |
+
099_S_0372.nii AD
|
419 |
+
007_S_1304.nii AD
|
420 |
+
041_S_0262.nii Normal
|
421 |
+
137_S_0283.nii Normal
|
422 |
+
023_S_1289.nii AD
|
423 |
+
067_S_0290.nii MCI
|
424 |
+
133_S_1055.nii AD
|
425 |
+
031_S_1209.nii AD
|
426 |
+
029_S_0843.nii Normal
|
427 |
+
094_S_1267.nii Normal
|
428 |
+
130_S_0423.nii MCI
|
429 |
+
116_S_0370.nii AD
|
430 |
+
041_S_0549.nii MCI
|
431 |
+
033_S_0923.nii Normal
|
432 |
+
094_S_1330.nii MCI
|
433 |
+
022_S_0129.nii AD
|
434 |
+
057_S_0941.nii MCI
|
435 |
+
130_S_0232.nii Normal
|
436 |
+
036_S_1001.nii AD
|
437 |
+
082_S_1377.nii AD
|
438 |
+
133_S_0433.nii Normal
|
439 |
+
021_S_0343.nii AD
|
440 |
+
011_S_0168.nii MCI
|
441 |
+
023_S_0916.nii AD
|
442 |
+
128_S_0245.nii Normal
|
443 |
+
003_S_1257.nii AD
|
444 |
+
016_S_0538.nii Normal
|
445 |
+
126_S_0708.nii MCI
|
446 |
+
036_S_0759.nii AD
|
447 |
+
018_S_0080.nii MCI
|
448 |
+
033_S_1279.nii MCI
|
449 |
+
006_S_0681.nii Normal
|
450 |
+
067_S_0024.nii Normal
|
451 |
+
016_S_1092.nii MCI
|
452 |
+
037_S_0327.nii Normal
|
453 |
+
031_S_0321.nii AD
|
454 |
+
037_S_0303.nii Normal
|
455 |
+
126_S_1077.nii MCI
|
456 |
+
009_S_0862.nii Normal
|
457 |
+
002_S_0413.nii Normal
|
458 |
+
100_S_0930.nii MCI
|
459 |
+
126_S_1340.nii MCI
|
460 |
+
127_S_0260.nii Normal
|
461 |
+
133_S_0638.nii MCI
|
462 |
+
018_S_0335.nii AD
|
463 |
+
002_S_0559.nii Normal
|
464 |
+
128_S_1242.nii Normal
|
465 |
+
129_S_1204.nii MCI
|
466 |
+
130_S_0956.nii AD
|
467 |
+
024_S_1393.nii MCI
|
468 |
+
006_S_0322.nii MCI
|
469 |
+
013_S_1205.nii AD
|
470 |
+
067_S_0828.nii AD
|
471 |
+
036_S_1240.nii MCI
|
472 |
+
067_S_0019.nii Normal
|
473 |
+
003_S_1021.nii Normal
|
474 |
+
130_S_0460.nii MCI
|
475 |
+
052_S_1168.nii MCI
|
476 |
+
123_S_0050.nii MCI
|
477 |
+
009_S_0751.nii Normal
|
478 |
+
006_S_0498.nii Normal
|
479 |
+
021_S_0424.nii MCI
|
480 |
+
062_S_0578.nii Normal
|
481 |
+
116_S_0648.nii Normal
|
482 |
+
023_S_1306.nii Normal
|
483 |
+
057_S_1265.nii MCI
|
484 |
+
013_S_1276.nii Normal
|
485 |
+
018_S_0043.nii Normal
|
486 |
+
011_S_1282.nii MCI
|
train_2C_new.txt
ADDED
@@ -0,0 +1,519 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
006_S_0681.nii Normal
|
2 |
+
129_S_0778.nii Normal
|
3 |
+
099_S_1144.nii AD
|
4 |
+
011_S_0008.nii Normal
|
5 |
+
032_S_4348.nii Normal
|
6 |
+
011_S_0016.nii Normal
|
7 |
+
141_S_0696.nii AD
|
8 |
+
127_S_5028.nii AD
|
9 |
+
067_S_1253.nii AD
|
10 |
+
021_S_1109.nii AD
|
11 |
+
033_S_4508.nii Normal
|
12 |
+
036_S_5149.nii AD
|
13 |
+
041_S_4083.nii Normal
|
14 |
+
098_S_4002.nii Normal
|
15 |
+
098_S_0884.nii AD
|
16 |
+
127_S_1382.nii AD
|
17 |
+
016_S_4951.nii Normal
|
18 |
+
137_S_4632.nii Normal
|
19 |
+
021_S_0337.nii Normal
|
20 |
+
062_S_0535.nii AD
|
21 |
+
023_S_1190.nii Normal
|
22 |
+
128_S_0528.nii AD
|
23 |
+
114_S_4379.nii AD
|
24 |
+
029_S_4385.nii Normal
|
25 |
+
116_S_1083.nii AD
|
26 |
+
141_S_0726.nii Normal
|
27 |
+
009_S_4612.nii Normal
|
28 |
+
003_S_4872.nii Normal
|
29 |
+
009_S_0751.nii Normal
|
30 |
+
041_S_1002.nii Normal
|
31 |
+
128_S_0245.nii Normal
|
32 |
+
116_S_0657.nii Normal
|
33 |
+
005_S_4707.nii AD
|
34 |
+
128_S_4607.nii Normal
|
35 |
+
033_S_1087.nii AD
|
36 |
+
062_S_0730.nii AD
|
37 |
+
005_S_0553.nii Normal
|
38 |
+
010_S_0420.nii Normal
|
39 |
+
024_S_1063.nii Normal
|
40 |
+
002_S_0619.nii AD
|
41 |
+
037_S_4028.nii Normal
|
42 |
+
014_S_4093.nii Normal
|
43 |
+
023_S_0081.nii Normal
|
44 |
+
023_S_0058.nii Normal
|
45 |
+
013_S_1276.nii Normal
|
46 |
+
094_S_1102.nii AD
|
47 |
+
016_S_4952.nii Normal
|
48 |
+
033_S_5017.nii AD
|
49 |
+
941_S_4376.nii Normal
|
50 |
+
136_S_0186.nii Normal
|
51 |
+
121_S_0953.nii AD
|
52 |
+
135_S_4446.nii Normal
|
53 |
+
098_S_0171.nii Normal
|
54 |
+
128_S_0517.nii AD
|
55 |
+
100_S_1062.nii AD
|
56 |
+
013_S_0502.nii Normal
|
57 |
+
067_S_5205.nii AD
|
58 |
+
098_S_4018.nii Normal
|
59 |
+
116_S_4855.nii Normal
|
60 |
+
014_S_0328.nii AD
|
61 |
+
128_S_0310.nii AD
|
62 |
+
036_S_5112.nii AD
|
63 |
+
011_S_0002.nii Normal
|
64 |
+
141_S_0717.nii Normal
|
65 |
+
021_S_4924.nii AD
|
66 |
+
005_S_0929.nii AD
|
67 |
+
024_S_1171.nii AD
|
68 |
+
123_S_4526.nii AD
|
69 |
+
005_S_0223.nii Normal
|
70 |
+
098_S_4215.nii AD
|
71 |
+
116_S_4732.nii AD
|
72 |
+
011_S_4906.nii AD
|
73 |
+
029_S_1184.nii AD
|
74 |
+
073_S_5090.nii AD
|
75 |
+
029_S_4307.nii AD
|
76 |
+
003_S_4900.nii Normal
|
77 |
+
007_S_4637.nii Normal
|
78 |
+
020_S_0097.nii Normal
|
79 |
+
032_S_4277.nii Normal
|
80 |
+
128_S_0805.nii AD
|
81 |
+
013_S_0575.nii Normal
|
82 |
+
073_S_0089.nii Normal
|
83 |
+
018_S_0277.nii AD
|
84 |
+
130_S_0956.nii AD
|
85 |
+
135_S_4676.nii AD
|
86 |
+
051_S_1123.nii Normal
|
87 |
+
024_S_1307.nii AD
|
88 |
+
136_S_0299.nii AD
|
89 |
+
005_S_0610.nii Normal
|
90 |
+
029_S_0843.nii Normal
|
91 |
+
022_S_4266.nii Normal
|
92 |
+
003_S_0907.nii Normal
|
93 |
+
141_S_1152.nii AD
|
94 |
+
141_S_0340.nii AD
|
95 |
+
014_S_0558.nii Normal
|
96 |
+
068_S_0473.nii Normal
|
97 |
+
082_S_0304.nii Normal
|
98 |
+
051_S_1296.nii AD
|
99 |
+
072_S_4103.nii Normal
|
100 |
+
153_S_4139.nii Normal
|
101 |
+
116_S_0487.nii AD
|
102 |
+
012_S_0712.nii AD
|
103 |
+
033_S_1016.nii Normal
|
104 |
+
067_S_0029.nii AD
|
105 |
+
128_S_4774.nii AD
|
106 |
+
116_S_4010.nii Normal
|
107 |
+
100_S_1286.nii Normal
|
108 |
+
094_S_4649.nii Normal
|
109 |
+
067_S_0828.nii AD
|
110 |
+
041_S_1391.nii AD
|
111 |
+
014_S_0520.nii Normal
|
112 |
+
129_S_4422.nii Normal
|
113 |
+
022_S_4196.nii Normal
|
114 |
+
037_S_0327.nii Normal
|
115 |
+
021_S_4558.nii Normal
|
116 |
+
024_S_4280.nii AD
|
117 |
+
109_S_4378.nii AD
|
118 |
+
002_S_0685.nii Normal
|
119 |
+
029_S_0999.nii AD
|
120 |
+
127_S_4645.nii Normal
|
121 |
+
024_S_4223.nii AD
|
122 |
+
031_S_0554.nii AD
|
123 |
+
011_S_4827.nii AD
|
124 |
+
021_S_0159.nii Normal
|
125 |
+
073_S_0386.nii Normal
|
126 |
+
012_S_0637.nii Normal
|
127 |
+
127_S_4749.nii AD
|
128 |
+
023_S_1289.nii AD
|
129 |
+
011_S_0021.nii Normal
|
130 |
+
035_S_4082.nii Normal
|
131 |
+
005_S_0602.nii Normal
|
132 |
+
062_S_0578.nii Normal
|
133 |
+
003_S_4840.nii Normal
|
134 |
+
068_S_5206.nii AD
|
135 |
+
018_S_0043.nii Normal
|
136 |
+
052_S_0951.nii Normal
|
137 |
+
130_S_1337.nii AD
|
138 |
+
029_S_4290.nii Normal
|
139 |
+
022_S_0007.nii AD
|
140 |
+
116_S_4195.nii AD
|
141 |
+
067_S_0110.nii AD
|
142 |
+
128_S_0740.nii AD
|
143 |
+
023_S_1306.nii Normal
|
144 |
+
016_S_0991.nii AD
|
145 |
+
116_S_4537.nii AD
|
146 |
+
029_S_4279.nii Normal
|
147 |
+
021_S_4718.nii AD
|
148 |
+
057_S_0818.nii Normal
|
149 |
+
032_S_4304.nii Normal
|
150 |
+
002_S_0559.nii Normal
|
151 |
+
009_S_4388.nii Normal
|
152 |
+
012_S_1009.nii Normal
|
153 |
+
057_S_0934.nii Normal
|
154 |
+
036_S_1001.nii AD
|
155 |
+
141_S_0790.nii AD
|
156 |
+
016_S_4353.nii AD
|
157 |
+
068_S_4174.nii Normal
|
158 |
+
018_S_0633.nii AD
|
159 |
+
073_S_5023.nii Normal
|
160 |
+
029_S_0866.nii Normal
|
161 |
+
007_S_4911.nii AD
|
162 |
+
057_S_4110.nii AD
|
163 |
+
022_S_0130.nii Normal
|
164 |
+
009_S_1334.nii AD
|
165 |
+
003_S_5187.nii AD
|
166 |
+
128_S_0545.nii Normal
|
167 |
+
032_S_4921.nii Normal
|
168 |
+
037_S_0467.nii Normal
|
169 |
+
027_S_4962.nii AD
|
170 |
+
009_S_0862.nii Normal
|
171 |
+
941_S_1197.nii Normal
|
172 |
+
137_S_4258.nii AD
|
173 |
+
003_S_4892.nii AD
|
174 |
+
137_S_4211.nii AD
|
175 |
+
116_S_0648.nii Normal
|
176 |
+
137_S_0686.nii Normal
|
177 |
+
127_S_5056.nii AD
|
178 |
+
035_S_4783.nii AD
|
179 |
+
011_S_4105.nii Normal
|
180 |
+
136_S_0184.nii Normal
|
181 |
+
094_S_1164.nii AD
|
182 |
+
123_S_0298.nii Normal
|
183 |
+
099_S_0492.nii AD
|
184 |
+
062_S_0690.nii AD
|
185 |
+
094_S_4282.nii AD
|
186 |
+
022_S_0014.nii Normal
|
187 |
+
014_S_4576.nii Normal
|
188 |
+
024_S_0985.nii Normal
|
189 |
+
131_S_0457.nii AD
|
190 |
+
127_S_4604.nii Normal
|
191 |
+
094_S_1267.nii Normal
|
192 |
+
035_S_0555.nii Normal
|
193 |
+
011_S_4845.nii AD
|
194 |
+
032_S_4386.nii Normal
|
195 |
+
037_S_0454.nii Normal
|
196 |
+
068_S_0109.nii AD
|
197 |
+
002_S_0295.nii Normal
|
198 |
+
029_S_4585.nii Normal
|
199 |
+
036_S_0760.nii AD
|
200 |
+
002_S_1261.nii Normal
|
201 |
+
128_S_4586.nii Normal
|
202 |
+
137_S_0841.nii AD
|
203 |
+
067_S_0056.nii Normal
|
204 |
+
036_S_0759.nii AD
|
205 |
+
941_S_4255.nii Normal
|
206 |
+
006_S_0653.nii AD
|
207 |
+
007_S_1339.nii AD
|
208 |
+
135_S_4954.nii AD
|
209 |
+
137_S_0972.nii Normal
|
210 |
+
033_S_4505.nii Normal
|
211 |
+
006_S_0498.nii Normal
|
212 |
+
127_S_0844.nii AD
|
213 |
+
127_S_0754.nii AD
|
214 |
+
116_S_0370.nii AD
|
215 |
+
014_S_0548.nii Normal
|
216 |
+
062_S_1099.nii Normal
|
217 |
+
100_S_0893.nii AD
|
218 |
+
029_S_0845.nii Normal
|
219 |
+
068_S_0210.nii Normal
|
220 |
+
072_S_4391.nii Normal
|
221 |
+
027_S_1254.nii AD
|
222 |
+
003_S_0981.nii Normal
|
223 |
+
032_S_0147.nii AD
|
224 |
+
037_S_4001.nii AD
|
225 |
+
027_S_0850.nii AD
|
226 |
+
023_S_5120.nii AD
|
227 |
+
009_S_5224.nii AD
|
228 |
+
014_S_4039.nii AD
|
229 |
+
007_S_1222.nii Normal
|
230 |
+
137_S_0366.nii AD
|
231 |
+
067_S_0019.nii Normal
|
232 |
+
094_S_0692.nii Normal
|
233 |
+
073_S_4853.nii AD
|
234 |
+
098_S_0149.nii AD
|
235 |
+
037_S_0303.nii Normal
|
236 |
+
041_S_1435.nii AD
|
237 |
+
023_S_0084.nii AD
|
238 |
+
037_S_4879.nii AD
|
239 |
+
082_S_5029.nii AD
|
240 |
+
021_S_0343.nii AD
|
241 |
+
016_S_4887.nii AD
|
242 |
+
099_S_0040.nii Normal
|
243 |
+
024_S_4905.nii AD
|
244 |
+
099_S_0352.nii Normal
|
245 |
+
013_S_1161.nii AD
|
246 |
+
005_S_0221.nii AD
|
247 |
+
011_S_4075.nii Normal
|
248 |
+
014_S_0519.nii Normal
|
249 |
+
007_S_4387.nii Normal
|
250 |
+
116_S_1249.nii Normal
|
251 |
+
141_S_0767.nii Normal
|
252 |
+
137_S_4466.nii Normal
|
253 |
+
016_S_0359.nii Normal
|
254 |
+
067_S_0020.nii AD
|
255 |
+
141_S_1094.nii Normal
|
256 |
+
067_S_1185.nii AD
|
257 |
+
073_S_4739.nii Normal
|
258 |
+
127_S_0622.nii Normal
|
259 |
+
114_S_0416.nii Normal
|
260 |
+
073_S_4552.nii Normal
|
261 |
+
128_S_4832.nii Normal
|
262 |
+
020_S_1288.nii Normal
|
263 |
+
003_S_1257.nii AD
|
264 |
+
037_S_4071.nii Normal
|
265 |
+
137_S_4756.nii AD
|
266 |
+
082_S_1256.nii Normal
|
267 |
+
109_S_1014.nii Normal
|
268 |
+
011_S_0183.nii AD
|
269 |
+
023_S_1262.nii AD
|
270 |
+
041_S_1368.nii AD
|
271 |
+
035_S_0156.nii Normal
|
272 |
+
018_S_0369.nii Normal
|
273 |
+
114_S_0166.nii Normal
|
274 |
+
009_S_4337.nii Normal
|
275 |
+
127_S_4148.nii Normal
|
276 |
+
041_S_4060.nii Normal
|
277 |
+
116_S_0360.nii Normal
|
278 |
+
007_S_0316.nii AD
|
279 |
+
941_S_1203.nii Normal
|
280 |
+
007_S_1304.nii AD
|
281 |
+
067_S_0812.nii AD
|
282 |
+
068_S_0127.nii Normal
|
283 |
+
068_S_4968.nii AD
|
284 |
+
027_S_0404.nii AD
|
285 |
+
068_S_4424.nii Normal
|
286 |
+
032_S_1037.nii AD
|
287 |
+
035_S_0341.nii AD
|
288 |
+
018_S_0335.nii AD
|
289 |
+
023_S_0963.nii Normal
|
290 |
+
098_S_4506.nii Normal
|
291 |
+
073_S_0312.nii Normal
|
292 |
+
007_S_4516.nii Normal
|
293 |
+
005_S_0814.nii AD
|
294 |
+
021_S_0647.nii Normal
|
295 |
+
021_S_0642.nii AD
|
296 |
+
129_S_4396.nii Normal
|
297 |
+
126_S_0784.nii AD
|
298 |
+
135_S_4598.nii Normal
|
299 |
+
133_S_1170.nii AD
|
300 |
+
116_S_0382.nii Normal
|
301 |
+
123_S_0088.nii AD
|
302 |
+
116_S_1232.nii Normal
|
303 |
+
007_S_1248.nii AD
|
304 |
+
130_S_1290.nii AD
|
305 |
+
123_S_0113.nii Normal
|
306 |
+
116_S_0392.nii AD
|
307 |
+
109_S_1192.nii AD
|
308 |
+
130_S_1201.nii AD
|
309 |
+
128_S_0500.nii Normal
|
310 |
+
014_S_1095.nii AD
|
311 |
+
036_S_0576.nii Normal
|
312 |
+
057_S_0474.nii AD
|
313 |
+
018_S_0682.nii AD
|
314 |
+
041_S_4014.nii Normal
|
315 |
+
041_S_4041.nii Normal
|
316 |
+
023_S_0031.nii Normal
|
317 |
+
002_S_1280.nii Normal
|
318 |
+
027_S_1081.nii AD
|
319 |
+
003_S_4839.nii Normal
|
320 |
+
126_S_0606.nii AD
|
321 |
+
036_S_1023.nii Normal
|
322 |
+
128_S_1242.nii Normal
|
323 |
+
123_S_0106.nii Normal
|
324 |
+
116_S_4092.nii Normal
|
325 |
+
114_S_0228.nii AD
|
326 |
+
031_S_0321.nii AD
|
327 |
+
128_S_0266.nii AD
|
328 |
+
016_S_4009.nii AD
|
329 |
+
051_S_4980.nii AD
|
330 |
+
116_S_4483.nii Normal
|
331 |
+
126_S_0506.nii Normal
|
332 |
+
133_S_0525.nii Normal
|
333 |
+
035_S_0048.nii Normal
|
334 |
+
135_S_5275.nii AD
|
335 |
+
128_S_1430.nii AD
|
336 |
+
036_S_0577.nii AD
|
337 |
+
014_S_4615.nii AD
|
338 |
+
041_S_4200.nii Normal
|
339 |
+
003_S_4644.nii Normal
|
340 |
+
131_S_0497.nii AD
|
341 |
+
022_S_0066.nii Normal
|
342 |
+
033_S_1285.nii AD
|
343 |
+
007_S_1206.nii Normal
|
344 |
+
057_S_1371.nii AD
|
345 |
+
126_S_4686.nii AD
|
346 |
+
123_S_4362.nii Normal
|
347 |
+
021_S_4254.nii Normal
|
348 |
+
032_S_1169.nii Normal
|
349 |
+
010_S_0472.nii Normal
|
350 |
+
037_S_4308.nii Normal
|
351 |
+
041_S_0262.nii Normal
|
352 |
+
036_S_0813.nii Normal
|
353 |
+
011_S_4120.nii Normal
|
354 |
+
037_S_4770.nii AD
|
355 |
+
023_S_0916.nii AD
|
356 |
+
941_S_1202.nii Normal
|
357 |
+
127_S_0259.nii Normal
|
358 |
+
002_S_0938.nii AD
|
359 |
+
007_S_4620.nii Normal
|
360 |
+
062_S_0768.nii Normal
|
361 |
+
014_S_4577.nii Normal
|
362 |
+
005_S_4910.nii AD
|
363 |
+
100_S_0047.nii Normal
|
364 |
+
033_S_4179.nii Normal
|
365 |
+
037_S_0627.nii AD
|
366 |
+
130_S_0969.nii Normal
|
367 |
+
133_S_1055.nii AD
|
368 |
+
128_S_5123.nii AD
|
369 |
+
094_S_4560.nii Normal
|
370 |
+
013_S_1205.nii AD
|
371 |
+
131_S_0319.nii Normal
|
372 |
+
012_S_0803.nii AD
|
373 |
+
126_S_0605.nii Normal
|
374 |
+
022_S_0096.nii Normal
|
375 |
+
022_S_0219.nii AD
|
376 |
+
029_S_0836.nii AD
|
377 |
+
073_S_4559.nii Normal
|
378 |
+
010_S_0419.nii Normal
|
379 |
+
016_S_4591.nii AD
|
380 |
+
073_S_4795.nii Normal
|
381 |
+
033_S_0741.nii Normal
|
382 |
+
057_S_1379.nii AD
|
383 |
+
137_S_1041.nii AD
|
384 |
+
033_S_1281.nii AD
|
385 |
+
068_S_4340.nii Normal
|
386 |
+
057_S_1373.nii AD
|
387 |
+
022_S_0129.nii AD
|
388 |
+
099_S_0534.nii Normal
|
389 |
+
099_S_4076.nii Normal
|
390 |
+
127_S_0431.nii AD
|
391 |
+
033_S_5013.nii AD
|
392 |
+
128_S_0522.nii Normal
|
393 |
+
012_S_0689.nii AD
|
394 |
+
033_S_1283.nii AD
|
395 |
+
072_S_0315.nii Normal
|
396 |
+
098_S_4050.nii Normal
|
397 |
+
137_S_0283.nii Normal
|
398 |
+
098_S_4275.nii Normal
|
399 |
+
116_S_4338.nii AD
|
400 |
+
133_S_0493.nii Normal
|
401 |
+
011_S_0003.nii AD
|
402 |
+
141_S_0853.nii AD
|
403 |
+
029_S_1056.nii AD
|
404 |
+
135_S_4657.nii AD
|
405 |
+
009_S_5027.nii AD
|
406 |
+
082_S_1377.nii AD
|
407 |
+
133_S_0433.nii Normal
|
408 |
+
053_S_1044.nii AD
|
409 |
+
002_S_0413.nii Normal
|
410 |
+
031_S_0618.nii Normal
|
411 |
+
067_S_0177.nii Normal
|
412 |
+
011_S_4278.nii Normal
|
413 |
+
016_S_0538.nii Normal
|
414 |
+
062_S_0793.nii AD
|
415 |
+
023_S_0139.nii AD
|
416 |
+
033_S_1308.nii AD
|
417 |
+
135_S_5015.nii AD
|
418 |
+
009_S_5252.nii AD
|
419 |
+
023_S_0093.nii AD
|
420 |
+
127_S_4992.nii AD
|
421 |
+
014_S_0356.nii AD
|
422 |
+
073_S_0311.nii Normal
|
423 |
+
094_S_4737.nii AD
|
424 |
+
099_S_4994.nii AD
|
425 |
+
011_S_0023.nii Normal
|
426 |
+
135_S_4863.nii AD
|
427 |
+
003_S_0931.nii Normal
|
428 |
+
099_S_4104.nii Normal
|
429 |
+
012_S_0720.nii AD
|
430 |
+
027_S_4964.nii AD
|
431 |
+
031_S_1209.nii AD
|
432 |
+
041_S_0125.nii Normal
|
433 |
+
067_S_0024.nii Normal
|
434 |
+
137_S_0438.nii AD
|
435 |
+
007_S_4568.nii AD
|
436 |
+
073_S_4155.nii Normal
|
437 |
+
129_S_4371.nii Normal
|
438 |
+
009_S_5037.nii AD
|
439 |
+
023_S_4501.nii AD
|
440 |
+
052_S_1251.nii Normal
|
441 |
+
052_S_1250.nii Normal
|
442 |
+
128_S_0167.nii AD
|
443 |
+
003_S_1021.nii Normal
|
444 |
+
131_S_0691.nii AD
|
445 |
+
098_S_4003.nii Normal
|
446 |
+
941_S_4066.nii Normal
|
447 |
+
036_S_0672.nii Normal
|
448 |
+
941_S_1195.nii Normal
|
449 |
+
130_S_0232.nii Normal
|
450 |
+
136_S_0194.nii AD
|
451 |
+
011_S_0022.nii Normal
|
452 |
+
022_S_4291.nii Normal
|
453 |
+
033_S_5087.nii AD
|
454 |
+
128_S_4599.nii Normal
|
455 |
+
022_S_4173.nii Normal
|
456 |
+
024_S_5054.nii AD
|
457 |
+
010_S_0829.nii AD
|
458 |
+
033_S_0888.nii AD
|
459 |
+
094_S_0489.nii Normal
|
460 |
+
123_S_0162.nii AD
|
461 |
+
011_S_0010.nii AD
|
462 |
+
073_S_4382.nii Normal
|
463 |
+
153_S_4151.nii Normal
|
464 |
+
032_S_0677.nii Normal
|
465 |
+
100_S_0035.nii Normal
|
466 |
+
094_S_0526.nii Normal
|
467 |
+
109_S_0777.nii AD
|
468 |
+
018_S_0425.nii Normal
|
469 |
+
136_S_0426.nii AD
|
470 |
+
005_S_5038.nii AD
|
471 |
+
116_S_4043.nii Normal
|
472 |
+
099_S_0533.nii Normal
|
473 |
+
041_S_4037.nii Normal
|
474 |
+
099_S_4086.nii Normal
|
475 |
+
007_S_0068.nii Normal
|
476 |
+
067_S_0257.nii Normal
|
477 |
+
094_S_1402.nii AD
|
478 |
+
033_S_4177.nii Normal
|
479 |
+
033_S_0516.nii Normal
|
480 |
+
082_S_4339.nii Normal
|
481 |
+
099_S_0372.nii AD
|
482 |
+
128_S_0216.nii AD
|
483 |
+
013_S_0592.nii AD
|
484 |
+
141_S_1137.nii AD
|
485 |
+
033_S_0733.nii AD
|
486 |
+
094_S_4460.nii Normal
|
487 |
+
033_S_0923.nii Normal
|
488 |
+
137_S_4587.nii Normal
|
489 |
+
067_S_0059.nii Normal
|
490 |
+
016_S_4638.nii Normal
|
491 |
+
067_S_4728.nii AD
|
492 |
+
033_S_0920.nii Normal
|
493 |
+
127_S_4500.nii AD
|
494 |
+
018_S_0286.nii AD
|
495 |
+
014_S_0357.nii AD
|
496 |
+
137_S_4520.nii Normal
|
497 |
+
023_S_0926.nii Normal
|
498 |
+
128_S_4772.nii AD
|
499 |
+
137_S_0459.nii Normal
|
500 |
+
007_S_5196.nii AD
|
501 |
+
073_S_4393.nii Normal
|
502 |
+
067_S_0076.nii AD
|
503 |
+
041_S_4427.nii Normal
|
504 |
+
073_S_4762.nii Normal
|
505 |
+
011_S_0005.nii Normal
|
506 |
+
123_S_0072.nii Normal
|
507 |
+
020_S_0883.nii Normal
|
508 |
+
082_S_0640.nii Normal
|
509 |
+
127_S_4198.nii Normal
|
510 |
+
127_S_0260.nii Normal
|
511 |
+
027_S_0074.nii Normal
|
512 |
+
041_S_4509.nii Normal
|
513 |
+
024_S_4084.nii Normal
|
514 |
+
153_S_4172.nii AD
|
515 |
+
068_S_1191.nii Normal
|
516 |
+
032_S_1101.nii AD
|
517 |
+
020_S_0213.nii AD
|
518 |
+
032_S_4429.nii Normal
|
519 |
+
094_S_4459.nii Normal
|
train_2classes.txt
ADDED
@@ -0,0 +1,328 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
011_S_0005.nii Normal
|
2 |
+
022_S_0014.nii Normal
|
3 |
+
127_S_1382.nii AD
|
4 |
+
023_S_1262.nii AD
|
5 |
+
068_S_0210.nii Normal
|
6 |
+
067_S_0110.nii AD
|
7 |
+
116_S_0657.nii Normal
|
8 |
+
123_S_0113.nii Normal
|
9 |
+
094_S_1102.nii AD
|
10 |
+
003_S_0981.nii Normal
|
11 |
+
114_S_0228.nii AD
|
12 |
+
941_S_1197.nii Normal
|
13 |
+
022_S_0066.nii Normal
|
14 |
+
024_S_1063.nii Normal
|
15 |
+
137_S_1041.nii AD
|
16 |
+
067_S_1185.nii AD
|
17 |
+
035_S_0555.nii Normal
|
18 |
+
068_S_1191.nii Normal
|
19 |
+
116_S_0360.nii Normal
|
20 |
+
033_S_1281.nii AD
|
21 |
+
099_S_0352.nii Normal
|
22 |
+
032_S_0677.nii Normal
|
23 |
+
094_S_0692.nii Normal
|
24 |
+
011_S_0002.nii Normal
|
25 |
+
126_S_0606.nii AD
|
26 |
+
141_S_0696.nii AD
|
27 |
+
131_S_0691.nii AD
|
28 |
+
023_S_0084.nii AD
|
29 |
+
136_S_0299.nii AD
|
30 |
+
023_S_0093.nii AD
|
31 |
+
012_S_1009.nii Normal
|
32 |
+
141_S_0717.nii Normal
|
33 |
+
941_S_1203.nii Normal
|
34 |
+
057_S_1373.nii AD
|
35 |
+
016_S_0991.nii AD
|
36 |
+
128_S_0167.nii AD
|
37 |
+
094_S_0489.nii Normal
|
38 |
+
127_S_0622.nii Normal
|
39 |
+
116_S_1083.nii AD
|
40 |
+
032_S_0147.nii AD
|
41 |
+
018_S_0425.nii Normal
|
42 |
+
128_S_0740.nii AD
|
43 |
+
031_S_0618.nii Normal
|
44 |
+
068_S_0109.nii AD
|
45 |
+
141_S_0853.nii AD
|
46 |
+
073_S_0089.nii Normal
|
47 |
+
137_S_0459.nii Normal
|
48 |
+
067_S_0056.nii Normal
|
49 |
+
014_S_0357.nii AD
|
50 |
+
098_S_0884.nii AD
|
51 |
+
033_S_0516.nii Normal
|
52 |
+
024_S_0985.nii Normal
|
53 |
+
128_S_0310.nii AD
|
54 |
+
024_S_1171.nii AD
|
55 |
+
141_S_0767.nii Normal
|
56 |
+
100_S_1286.nii Normal
|
57 |
+
012_S_0637.nii Normal
|
58 |
+
133_S_0525.nii Normal
|
59 |
+
133_S_1170.nii AD
|
60 |
+
041_S_1002.nii Normal
|
61 |
+
014_S_0328.nii AD
|
62 |
+
018_S_0369.nii Normal
|
63 |
+
029_S_1056.nii AD
|
64 |
+
033_S_1087.nii AD
|
65 |
+
073_S_0386.nii Normal
|
66 |
+
007_S_1222.nii Normal
|
67 |
+
024_S_1307.nii AD
|
68 |
+
032_S_1101.nii AD
|
69 |
+
116_S_0487.nii AD
|
70 |
+
137_S_0972.nii Normal
|
71 |
+
057_S_1379.nii AD
|
72 |
+
011_S_0008.nii Normal
|
73 |
+
012_S_0803.nii AD
|
74 |
+
013_S_0575.nii Normal
|
75 |
+
136_S_0186.nii Normal
|
76 |
+
014_S_0548.nii Normal
|
77 |
+
037_S_0467.nii Normal
|
78 |
+
021_S_0647.nii Normal
|
79 |
+
127_S_0431.nii AD
|
80 |
+
014_S_0519.nii Normal
|
81 |
+
041_S_1391.nii AD
|
82 |
+
029_S_0866.nii Normal
|
83 |
+
033_S_1283.nii AD
|
84 |
+
029_S_1184.nii AD
|
85 |
+
094_S_1164.nii AD
|
86 |
+
020_S_0213.nii AD
|
87 |
+
021_S_1109.nii AD
|
88 |
+
005_S_0221.nii AD
|
89 |
+
114_S_0416.nii Normal
|
90 |
+
006_S_0653.nii AD
|
91 |
+
005_S_0929.nii AD
|
92 |
+
036_S_0672.nii Normal
|
93 |
+
082_S_1256.nii Normal
|
94 |
+
022_S_0130.nii Normal
|
95 |
+
128_S_1430.nii AD
|
96 |
+
005_S_0814.nii AD
|
97 |
+
012_S_0720.nii AD
|
98 |
+
016_S_0359.nii Normal
|
99 |
+
021_S_0642.nii AD
|
100 |
+
057_S_0818.nii Normal
|
101 |
+
062_S_0730.nii AD
|
102 |
+
068_S_0473.nii Normal
|
103 |
+
136_S_0184.nii Normal
|
104 |
+
035_S_0341.nii AD
|
105 |
+
100_S_1062.nii AD
|
106 |
+
123_S_0298.nii Normal
|
107 |
+
022_S_0096.nii Normal
|
108 |
+
067_S_0177.nii Normal
|
109 |
+
109_S_0777.nii AD
|
110 |
+
035_S_0156.nii Normal
|
111 |
+
014_S_0520.nii Normal
|
112 |
+
128_S_0517.nii AD
|
113 |
+
011_S_0016.nii Normal
|
114 |
+
141_S_1094.nii Normal
|
115 |
+
136_S_0426.nii AD
|
116 |
+
128_S_0266.nii AD
|
117 |
+
057_S_0934.nii Normal
|
118 |
+
035_S_0048.nii Normal
|
119 |
+
023_S_0081.nii Normal
|
120 |
+
002_S_0685.nii Normal
|
121 |
+
116_S_1232.nii Normal
|
122 |
+
131_S_0457.nii AD
|
123 |
+
062_S_0793.nii AD
|
124 |
+
027_S_0074.nii Normal
|
125 |
+
133_S_0493.nii Normal
|
126 |
+
057_S_0474.nii AD
|
127 |
+
136_S_0194.nii AD
|
128 |
+
131_S_0497.nii AD
|
129 |
+
062_S_0690.nii AD
|
130 |
+
023_S_0926.nii Normal
|
131 |
+
011_S_0023.nii Normal
|
132 |
+
062_S_0768.nii Normal
|
133 |
+
941_S_1202.nii Normal
|
134 |
+
005_S_0602.nii Normal
|
135 |
+
032_S_1169.nii Normal
|
136 |
+
137_S_0686.nii Normal
|
137 |
+
053_S_1044.nii AD
|
138 |
+
005_S_0610.nii Normal
|
139 |
+
128_S_0522.nii Normal
|
140 |
+
941_S_1195.nii Normal
|
141 |
+
032_S_1037.nii AD
|
142 |
+
007_S_1339.nii AD
|
143 |
+
123_S_0162.nii AD
|
144 |
+
029_S_0845.nii Normal
|
145 |
+
036_S_0577.nii AD
|
146 |
+
003_S_0907.nii Normal
|
147 |
+
033_S_0741.nii Normal
|
148 |
+
099_S_0534.nii Normal
|
149 |
+
073_S_0311.nii Normal
|
150 |
+
082_S_0304.nii Normal
|
151 |
+
027_S_1254.nii AD
|
152 |
+
011_S_0022.nii Normal
|
153 |
+
003_S_0931.nii Normal
|
154 |
+
020_S_0883.nii Normal
|
155 |
+
052_S_1250.nii Normal
|
156 |
+
100_S_0035.nii Normal
|
157 |
+
033_S_0888.nii AD
|
158 |
+
010_S_0420.nii Normal
|
159 |
+
127_S_0754.nii AD
|
160 |
+
099_S_0492.nii AD
|
161 |
+
013_S_0592.nii AD
|
162 |
+
027_S_1081.nii AD
|
163 |
+
116_S_0382.nii Normal
|
164 |
+
009_S_1334.nii AD
|
165 |
+
123_S_0106.nii Normal
|
166 |
+
099_S_0533.nii Normal
|
167 |
+
011_S_0021.nii Normal
|
168 |
+
018_S_0286.nii AD
|
169 |
+
067_S_0076.nii AD
|
170 |
+
029_S_0836.nii AD
|
171 |
+
067_S_0059.nii Normal
|
172 |
+
037_S_0454.nii Normal
|
173 |
+
067_S_0020.nii AD
|
174 |
+
130_S_1290.nii AD
|
175 |
+
094_S_1402.nii AD
|
176 |
+
002_S_0619.nii AD
|
177 |
+
067_S_0257.nii Normal
|
178 |
+
072_S_0315.nii Normal
|
179 |
+
036_S_0576.nii Normal
|
180 |
+
018_S_0682.nii AD
|
181 |
+
033_S_1308.nii AD
|
182 |
+
100_S_0893.nii AD
|
183 |
+
068_S_0127.nii Normal
|
184 |
+
114_S_0166.nii Normal
|
185 |
+
041_S_0125.nii Normal
|
186 |
+
141_S_1137.nii AD
|
187 |
+
067_S_0029.nii AD
|
188 |
+
033_S_0733.nii AD
|
189 |
+
012_S_0689.nii AD
|
190 |
+
098_S_0149.nii AD
|
191 |
+
013_S_1161.nii AD
|
192 |
+
098_S_0171.nii Normal
|
193 |
+
141_S_0726.nii Normal
|
194 |
+
128_S_0500.nii Normal
|
195 |
+
128_S_0216.nii AD
|
196 |
+
007_S_1248.nii AD
|
197 |
+
021_S_0159.nii Normal
|
198 |
+
022_S_0007.nii AD
|
199 |
+
023_S_0139.nii AD
|
200 |
+
121_S_0953.nii AD
|
201 |
+
033_S_0920.nii Normal
|
202 |
+
099_S_0040.nii Normal
|
203 |
+
062_S_0535.nii AD
|
204 |
+
051_S_1296.nii AD
|
205 |
+
011_S_0003.nii AD
|
206 |
+
041_S_1435.nii AD
|
207 |
+
020_S_1288.nii Normal
|
208 |
+
023_S_0058.nii Normal
|
209 |
+
127_S_0259.nii Normal
|
210 |
+
127_S_0844.nii AD
|
211 |
+
141_S_1152.nii AD
|
212 |
+
036_S_0813.nii Normal
|
213 |
+
067_S_1253.nii AD
|
214 |
+
073_S_0312.nii Normal
|
215 |
+
002_S_0295.nii Normal
|
216 |
+
011_S_0183.nii AD
|
217 |
+
036_S_1023.nii Normal
|
218 |
+
036_S_0760.nii AD
|
219 |
+
128_S_0528.nii AD
|
220 |
+
123_S_0072.nii Normal
|
221 |
+
123_S_0088.nii AD
|
222 |
+
067_S_0812.nii AD
|
223 |
+
109_S_1014.nii Normal
|
224 |
+
023_S_0963.nii Normal
|
225 |
+
014_S_0558.nii Normal
|
226 |
+
051_S_1123.nii Normal
|
227 |
+
057_S_1371.nii AD
|
228 |
+
007_S_1206.nii Normal
|
229 |
+
141_S_0790.nii AD
|
230 |
+
052_S_1251.nii Normal
|
231 |
+
137_S_0438.nii AD
|
232 |
+
005_S_0553.nii Normal
|
233 |
+
002_S_1280.nii Normal
|
234 |
+
126_S_0784.nii AD
|
235 |
+
137_S_0366.nii AD
|
236 |
+
007_S_0316.nii AD
|
237 |
+
011_S_0010.nii AD
|
238 |
+
100_S_0047.nii Normal
|
239 |
+
002_S_1261.nii Normal
|
240 |
+
005_S_0223.nii Normal
|
241 |
+
062_S_1099.nii Normal
|
242 |
+
018_S_0277.nii AD
|
243 |
+
010_S_0472.nii Normal
|
244 |
+
020_S_0097.nii Normal
|
245 |
+
014_S_1095.nii AD
|
246 |
+
109_S_1192.nii AD
|
247 |
+
094_S_0526.nii Normal
|
248 |
+
131_S_0319.nii Normal
|
249 |
+
021_S_0337.nii Normal
|
250 |
+
126_S_0605.nii Normal
|
251 |
+
007_S_0068.nii Normal
|
252 |
+
013_S_0502.nii Normal
|
253 |
+
029_S_0999.nii AD
|
254 |
+
027_S_0404.nii AD
|
255 |
+
027_S_0850.nii AD
|
256 |
+
023_S_0031.nii Normal
|
257 |
+
116_S_1249.nii Normal
|
258 |
+
041_S_1368.nii AD
|
259 |
+
099_S_0372.nii AD
|
260 |
+
007_S_1304.nii AD
|
261 |
+
041_S_0262.nii Normal
|
262 |
+
137_S_0283.nii Normal
|
263 |
+
023_S_1289.nii AD
|
264 |
+
133_S_1055.nii AD
|
265 |
+
031_S_1209.nii AD
|
266 |
+
029_S_0843.nii Normal
|
267 |
+
094_S_1267.nii Normal
|
268 |
+
116_S_0370.nii AD
|
269 |
+
033_S_0923.nii Normal
|
270 |
+
022_S_0129.nii AD
|
271 |
+
130_S_0232.nii Normal
|
272 |
+
036_S_1001.nii AD
|
273 |
+
082_S_1377.nii AD
|
274 |
+
133_S_0433.nii Normal
|
275 |
+
021_S_0343.nii AD
|
276 |
+
023_S_0916.nii AD
|
277 |
+
128_S_0245.nii Normal
|
278 |
+
003_S_1257.nii AD
|
279 |
+
016_S_0538.nii Normal
|
280 |
+
036_S_0759.nii AD
|
281 |
+
006_S_0681.nii Normal
|
282 |
+
067_S_0024.nii Normal
|
283 |
+
037_S_0327.nii Normal
|
284 |
+
031_S_0321.nii AD
|
285 |
+
037_S_0303.nii Normal
|
286 |
+
009_S_0862.nii Normal
|
287 |
+
002_S_0413.nii Normal
|
288 |
+
127_S_0260.nii Normal
|
289 |
+
018_S_0335.nii AD
|
290 |
+
002_S_0559.nii Normal
|
291 |
+
128_S_1242.nii Normal
|
292 |
+
130_S_0956.nii AD
|
293 |
+
013_S_1205.nii AD
|
294 |
+
067_S_0828.nii AD
|
295 |
+
067_S_0019.nii Normal
|
296 |
+
003_S_1021.nii Normal
|
297 |
+
009_S_0751.nii Normal
|
298 |
+
006_S_0498.nii Normal
|
299 |
+
062_S_0578.nii Normal
|
300 |
+
116_S_0648.nii Normal
|
301 |
+
023_S_1306.nii Normal
|
302 |
+
013_S_1276.nii Normal
|
303 |
+
018_S_0043.nii Normal
|
304 |
+
116_S_0392.nii AD
|
305 |
+
010_S_0419.nii Normal
|
306 |
+
126_S_0506.nii Normal
|
307 |
+
130_S_0969.nii Normal
|
308 |
+
023_S_1190.nii Normal
|
309 |
+
052_S_0951.nii Normal
|
310 |
+
141_S_0340.nii AD
|
311 |
+
128_S_0805.nii AD
|
312 |
+
012_S_0712.nii AD
|
313 |
+
129_S_0778.nii Normal
|
314 |
+
031_S_0554.nii AD
|
315 |
+
137_S_0841.nii AD
|
316 |
+
018_S_0633.nii AD
|
317 |
+
033_S_1285.nii AD
|
318 |
+
099_S_1144.nii AD
|
319 |
+
010_S_0829.nii AD
|
320 |
+
033_S_1016.nii Normal
|
321 |
+
128_S_0545.nii Normal
|
322 |
+
037_S_0627.nii AD
|
323 |
+
130_S_1201.nii AD
|
324 |
+
022_S_0219.nii AD
|
325 |
+
002_S_0938.nii AD
|
326 |
+
014_S_0356.nii AD
|
327 |
+
082_S_0640.nii Normal
|
328 |
+
130_S_1337.nii AD
|
validation_2C_new.txt
ADDED
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
012_S_1133.nii Normal
|
2 |
+
021_S_4421.nii Normal
|
3 |
+
029_S_4652.nii Normal
|
4 |
+
100_S_0743.nii AD
|
5 |
+
126_S_4494.nii AD
|
6 |
+
007_S_4488.nii Normal
|
7 |
+
010_S_0786.nii AD
|
8 |
+
136_S_0086.nii Normal
|
9 |
+
128_S_4792.nii AD
|
10 |
+
127_S_4940.nii AD
|
11 |
+
009_S_1354.nii AD
|
12 |
+
137_S_4672.nii AD
|
13 |
+
024_S_4158.nii Normal
|
14 |
+
109_S_1013.nii Normal
|
15 |
+
016_S_1263.nii AD
|
16 |
+
021_S_0984.nii Normal
|
17 |
+
070_S_4692.nii AD
|
18 |
+
068_S_5146.nii AD
|
19 |
+
131_S_0436.nii Normal
|
20 |
+
011_S_4949.nii AD
|
21 |
+
002_S_0955.nii AD
|
22 |
+
029_S_0824.nii Normal
|
23 |
+
082_S_4090.nii Normal
|
24 |
+
014_S_4401.nii Normal
|
25 |
+
073_S_1207.nii AD
|
26 |
+
082_S_0363.nii Normal
|
27 |
+
033_S_1098.nii Normal
|
28 |
+
010_S_0067.nii Normal
|
29 |
+
114_S_0173.nii Normal
|
30 |
+
153_S_4372.nii Normal
|
31 |
+
094_S_1090.nii AD
|
32 |
+
094_S_1027.nii AD
|
33 |
+
027_S_1385.nii AD
|
34 |
+
109_S_0876.nii Normal
|
35 |
+
094_S_1397.nii AD
|
36 |
+
022_S_4320.nii Normal
|
37 |
+
027_S_0118.nii Normal
|
38 |
+
141_S_1024.nii AD
|
39 |
+
941_S_4100.nii Normal
|
40 |
+
094_S_4503.nii Normal
|
41 |
+
126_S_0891.nii AD
|
42 |
+
027_S_0403.nii Normal
|
43 |
+
131_S_0123.nii Normal
|
44 |
+
136_S_0196.nii Normal
|
45 |
+
094_S_1241.nii Normal
|
46 |
+
126_S_0405.nii Normal
|
47 |
+
100_S_1113.nii AD
|
48 |
+
123_S_0091.nii AD
|
49 |
+
127_S_4843.nii Normal
|
50 |
+
057_S_0643.nii Normal
|
51 |
+
141_S_0852.nii AD
|
52 |
+
136_S_0300.nii AD
|
53 |
+
068_S_4859.nii AD
|
54 |
+
023_S_0083.nii AD
|
55 |
+
020_S_0899.nii Normal
|
56 |
+
016_S_5057.nii AD
|
57 |
+
098_S_4201.nii AD
|
58 |
+
013_S_1035.nii Normal
|
59 |
+
023_S_4448.nii Normal
|
60 |
+
114_S_0979.nii AD
|
61 |
+
094_S_4089.nii AD
|
62 |
+
035_S_4464.nii Normal
|
63 |
+
033_S_0889.nii AD
|
64 |
+
029_S_4384.nii Normal
|
65 |
+
137_S_0301.nii Normal
|
66 |
+
011_S_0053.nii AD
|
67 |
+
041_S_0898.nii Normal
|
68 |
+
002_S_1018.nii AD
|
69 |
+
131_S_0441.nii Normal
|
70 |
+
032_S_0400.nii AD
|
71 |
+
003_S_5165.nii AD
|
72 |
+
082_S_1079.nii AD
|
73 |
+
126_S_1221.nii AD
|
74 |
+
109_S_0840.nii Normal
|
75 |
+
016_S_5251.nii AD
|
76 |
+
013_S_0996.nii AD
|
77 |
+
127_S_0684.nii Normal
|
78 |
+
116_S_4625.nii AD
|
79 |
+
133_S_0488.nii Normal
|
80 |
+
082_S_5184.nii AD
|
81 |
+
100_S_0015.nii Normal
|
82 |
+
023_S_4164.nii Normal
|
83 |
+
016_S_4963.nii AD
|
84 |
+
941_S_4292.nii Normal
|
85 |
+
033_S_0739.nii AD
|
86 |
+
141_S_0810.nii Normal
|
87 |
+
031_S_0773.nii AD
|
88 |
+
094_S_4234.nii Normal
|
89 |
+
033_S_4176.nii Normal
|
90 |
+
073_S_0565.nii AD
|
91 |
+
002_S_0816.nii AD
|
92 |
+
007_S_0070.nii Normal
|
93 |
+
016_S_4097.nii Normal
|
94 |
+
941_S_1194.nii Normal
|
95 |
+
100_S_0069.nii Normal
|
96 |
+
027_S_1082.nii AD
|
97 |
+
027_S_4802.nii AD
|
98 |
+
130_S_0886.nii Normal
|
99 |
+
098_S_0896.nii Normal
|
100 |
+
032_S_0479.nii Normal
|