From 61b912deb01d67b45f0e8c223a8b89554debd513 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 19 Sep 2023 15:21:01 +1000 Subject: [PATCH 01/34] Create MRI_TimothyTjipto Q5 MRI --- recognition/MRI_TimothyTjipto | 1 + 1 file changed, 1 insertion(+) create mode 100644 recognition/MRI_TimothyTjipto diff --git a/recognition/MRI_TimothyTjipto b/recognition/MRI_TimothyTjipto new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/recognition/MRI_TimothyTjipto @@ -0,0 +1 @@ + From b8a530889b524907e57dba5e87309c0c7b1607cc Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 19 Sep 2023 15:33:52 +1000 Subject: [PATCH 02/34] Delete recognition/MRI_TimothyTjipto --- recognition/MRI_TimothyTjipto | 1 - 1 file changed, 1 deletion(-) delete mode 100644 recognition/MRI_TimothyTjipto diff --git a/recognition/MRI_TimothyTjipto b/recognition/MRI_TimothyTjipto deleted file mode 100644 index 8b1378917..000000000 --- a/recognition/MRI_TimothyTjipto +++ /dev/null @@ -1 +0,0 @@ - From 0fc33ac23d3126f5803d519f331ba04c2a74dfe0 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 19 Sep 2023 15:45:07 +1000 Subject: [PATCH 03/34] Create folder for Project --- recognition/MRI_TimothyTjipto/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 recognition/MRI_TimothyTjipto/README.md diff --git a/recognition/MRI_TimothyTjipto/README.md b/recognition/MRI_TimothyTjipto/README.md new file mode 100644 index 000000000..89ac8b5e2 --- /dev/null +++ b/recognition/MRI_TimothyTjipto/README.md @@ -0,0 +1 @@ +Created Project From dddc179e824979b86336db70489cbd137b33bdae Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 19 Sep 2023 19:13:14 +1000 Subject: [PATCH 04/34] Necessary python template --- recognition/MRI_TimothyTjipto/README.md | 6 +++++- recognition/MRI_TimothyTjipto/dataset.py | 1 + recognition/MRI_TimothyTjipto/modules.py | 3 +++ recognition/MRI_TimothyTjipto/predict.py | 1 + recognition/MRI_TimothyTjipto/train.py | 3 +++ 5 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 recognition/MRI_TimothyTjipto/dataset.py create mode 100644 recognition/MRI_TimothyTjipto/modules.py create mode 100644 recognition/MRI_TimothyTjipto/predict.py create mode 100644 recognition/MRI_TimothyTjipto/train.py diff --git a/recognition/MRI_TimothyTjipto/README.md b/recognition/MRI_TimothyTjipto/README.md index 89ac8b5e2..25a0f2876 100644 --- a/recognition/MRI_TimothyTjipto/README.md +++ b/recognition/MRI_TimothyTjipto/README.md @@ -1 +1,5 @@ -Created Project +This project is about implementing a brain MRI super-resolution network (see Efficient Sub-Pixel CNN [7] and a Keras implementation) by training on the ADNI brain dataset (see Appendix for link). Create down-sampled data +(approximately by factor of 4) using either PyTorch or Tensorflow implementations. Network should +be trained to up-scale from 4x down-sampled input and produce a “reasonably clear image". [Normal +Difficulty] + diff --git a/recognition/MRI_TimothyTjipto/dataset.py b/recognition/MRI_TimothyTjipto/dataset.py new file mode 100644 index 000000000..efd310ee6 --- /dev/null +++ b/recognition/MRI_TimothyTjipto/dataset.py @@ -0,0 +1 @@ +'''Data loader for loading and preprocessing data''' \ No newline at end of file diff --git a/recognition/MRI_TimothyTjipto/modules.py b/recognition/MRI_TimothyTjipto/modules.py new file mode 100644 index 000000000..f0a7684a1 --- /dev/null +++ b/recognition/MRI_TimothyTjipto/modules.py @@ -0,0 +1,3 @@ +'''Source code of the components of your model. Each component must be +implementated as a class or a function +''' \ No newline at end of file diff --git a/recognition/MRI_TimothyTjipto/predict.py b/recognition/MRI_TimothyTjipto/predict.py new file mode 100644 index 000000000..9b29d058c --- /dev/null +++ b/recognition/MRI_TimothyTjipto/predict.py @@ -0,0 +1 @@ +'''Shows example usage of trained model. Print out any results and/ or provide visualisations where applicable''' \ No newline at end of file diff --git a/recognition/MRI_TimothyTjipto/train.py b/recognition/MRI_TimothyTjipto/train.py new file mode 100644 index 000000000..da46e6b63 --- /dev/null +++ b/recognition/MRI_TimothyTjipto/train.py @@ -0,0 +1,3 @@ +'''Source code for training, validating, testing and saving your model. The model +should be imported from “modules.py” and the data loader should be imported from “dataset.py”. Make +sure to plot the losses and metrics during training''' From 245fe3962ee189f4a6b59dc88b061fbbfb3c1751 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 3 Oct 2023 15:40:32 +1000 Subject: [PATCH 05/34] change to question 7 and added .gitignore --- recognition/MRI_TimothyTjipto/.gitignore | 1 + recognition/MRI_TimothyTjipto/README.md | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 recognition/MRI_TimothyTjipto/.gitignore diff --git a/recognition/MRI_TimothyTjipto/.gitignore b/recognition/MRI_TimothyTjipto/.gitignore new file mode 100644 index 000000000..cc48cea58 --- /dev/null +++ b/recognition/MRI_TimothyTjipto/.gitignore @@ -0,0 +1 @@ +recognition/MRI_TimothyTjipto/README.md diff --git a/recognition/MRI_TimothyTjipto/README.md b/recognition/MRI_TimothyTjipto/README.md index 25a0f2876..d2c2e8778 100644 --- a/recognition/MRI_TimothyTjipto/README.md +++ b/recognition/MRI_TimothyTjipto/README.md @@ -1,5 +1,4 @@ -This project is about implementing a brain MRI super-resolution network (see Efficient Sub-Pixel CNN [7] and a Keras implementation) by training on the ADNI brain dataset (see Appendix for link). Create down-sampled data -(approximately by factor of 4) using either PyTorch or Tensorflow implementations. Network should -be trained to up-scale from 4x down-sampled input and produce a “reasonably clear image". [Normal +7. Create a classifier based on Siamese network [10] to classify Alzheimer’s disease (normal and AD) of the +ADNI brain data set (see Appendix for link) having a minimum accuracy of 0.8 on the test set. [Hard Difficulty] From 2d1ffe38ac6436bf8da2fdd3be05920eed46521d Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 3 Oct 2023 15:47:12 +1000 Subject: [PATCH 06/34] Ignore dataset --- recognition/MRI_TimothyTjipto/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/recognition/MRI_TimothyTjipto/.gitignore b/recognition/MRI_TimothyTjipto/.gitignore index cc48cea58..e41de8408 100644 --- a/recognition/MRI_TimothyTjipto/.gitignore +++ b/recognition/MRI_TimothyTjipto/.gitignore @@ -1 +1,3 @@ recognition/MRI_TimothyTjipto/README.md + +recognition/MRI_TimothyTjipto/AD_NC/ \ No newline at end of file From c72df9ce44960c67f816f601370c7dfc6ed8ec9c Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 3 Oct 2023 15:53:25 +1000 Subject: [PATCH 07/34] Ignore database and its content --- recognition/MRI_TimothyTjipto/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recognition/MRI_TimothyTjipto/.gitignore b/recognition/MRI_TimothyTjipto/.gitignore index e41de8408..fa406cc50 100644 --- a/recognition/MRI_TimothyTjipto/.gitignore +++ b/recognition/MRI_TimothyTjipto/.gitignore @@ -1,3 +1,3 @@ recognition/MRI_TimothyTjipto/README.md -recognition/MRI_TimothyTjipto/AD_NC/ \ No newline at end of file +recognition/MRI_TimothyTjipto/AD_NC/* \ No newline at end of file From e796bf95bf75efe6f2ce8b2c568f89753f1bc3c9 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 3 Oct 2023 15:55:09 +1000 Subject: [PATCH 08/34] --- --- recognition/MRI_TimothyTjipto/.gitignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/recognition/MRI_TimothyTjipto/.gitignore b/recognition/MRI_TimothyTjipto/.gitignore index fa406cc50..cc48cea58 100644 --- a/recognition/MRI_TimothyTjipto/.gitignore +++ b/recognition/MRI_TimothyTjipto/.gitignore @@ -1,3 +1 @@ recognition/MRI_TimothyTjipto/README.md - -recognition/MRI_TimothyTjipto/AD_NC/* \ No newline at end of file From fd85dd3e4a2f9e5136afa12e4792b28f9f964260 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 3 Oct 2023 16:23:39 +1000 Subject: [PATCH 09/34] brief change on dataset.py --- recognition/MRI_TimothyTjipto/.gitignore | 2 ++ recognition/MRI_TimothyTjipto/dataset.py | 13 ++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/recognition/MRI_TimothyTjipto/.gitignore b/recognition/MRI_TimothyTjipto/.gitignore index cc48cea58..e41de8408 100644 --- a/recognition/MRI_TimothyTjipto/.gitignore +++ b/recognition/MRI_TimothyTjipto/.gitignore @@ -1 +1,3 @@ recognition/MRI_TimothyTjipto/README.md + +recognition/MRI_TimothyTjipto/AD_NC/ \ No newline at end of file diff --git a/recognition/MRI_TimothyTjipto/dataset.py b/recognition/MRI_TimothyTjipto/dataset.py index efd310ee6..acd1f3b54 100644 --- a/recognition/MRI_TimothyTjipto/dataset.py +++ b/recognition/MRI_TimothyTjipto/dataset.py @@ -1 +1,12 @@ -'''Data loader for loading and preprocessing data''' \ No newline at end of file +'''Data loader for loading and preprocessing data''' + +import torch +import numpy as np +import matplotlib.pyplot as plt +from torchvision import datasets,transforms +from torch.utils.data import DataLoader + +# Load and return normalized data +def load_data(path, img_size, colour): + + dataset = datasets.ImageFolder(root=path, transform=transforms) \ No newline at end of file From 2dbc2b99d8b674cec45c8fde9ecf7c4759785b2c Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 3 Oct 2023 16:28:45 +1000 Subject: [PATCH 10/34] Ignore jpeg --- recognition/MRI_TimothyTjipto/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recognition/MRI_TimothyTjipto/.gitignore b/recognition/MRI_TimothyTjipto/.gitignore index e41de8408..d37fe9096 100644 --- a/recognition/MRI_TimothyTjipto/.gitignore +++ b/recognition/MRI_TimothyTjipto/.gitignore @@ -1,3 +1,3 @@ recognition/MRI_TimothyTjipto/README.md -recognition/MRI_TimothyTjipto/AD_NC/ \ No newline at end of file +recognition/MRI_TimothyTjipto/AD_NC/*.jpeg \ No newline at end of file From e58b258afab97ecd45c3d9c68f61c55ef95b11c1 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 3 Oct 2023 16:30:55 +1000 Subject: [PATCH 11/34] deleted gitignore --- recognition/MRI_TimothyTjipto/.gitignore | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 recognition/MRI_TimothyTjipto/.gitignore diff --git a/recognition/MRI_TimothyTjipto/.gitignore b/recognition/MRI_TimothyTjipto/.gitignore deleted file mode 100644 index d37fe9096..000000000 --- a/recognition/MRI_TimothyTjipto/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -recognition/MRI_TimothyTjipto/README.md - -recognition/MRI_TimothyTjipto/AD_NC/*.jpeg \ No newline at end of file From 58f23acd12ae69bd6661f69fc222994b4beccb68 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Sat, 14 Oct 2023 15:44:30 +1000 Subject: [PATCH 12/34] Implemented Dataset --- recognition/MRI_TimothyTjipto/README.md | 7 ++ .../__pycache__/train.cpython-310.pyc | Bin 0 -> 1658 bytes recognition/MRI_TimothyTjipto/dataset.py | 100 +++++++++++++++++- recognition/MRI_TimothyTjipto/train.py | 8 ++ 4 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 recognition/MRI_TimothyTjipto/__pycache__/train.cpython-310.pyc diff --git a/recognition/MRI_TimothyTjipto/README.md b/recognition/MRI_TimothyTjipto/README.md index d2c2e8778..b5d74d17a 100644 --- a/recognition/MRI_TimothyTjipto/README.md +++ b/recognition/MRI_TimothyTjipto/README.md @@ -2,3 +2,10 @@ ADNI brain data set (see Appendix for link) having a minimum accuracy of 0.8 on the test set. [Hard Difficulty] + + + + +Data Augmentations + +Black area around the brain we want to reduce it. diff --git a/recognition/MRI_TimothyTjipto/__pycache__/train.cpython-310.pyc b/recognition/MRI_TimothyTjipto/__pycache__/train.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..337d8ab709123bb61e4d6c8e06731530e3a6ab42 GIT binary patch literal 1658 zcmaJ>TWjM+6xL-V%d+FmZZGt4=$m2dT$Z*FN@=iL2qez3abE_3kTv62SxF;i#z`IQ z5=dY34_eqjU;3ByxP8h?f51XZ&y13E+lP+O%$du%%=x}Ed}AZDpmjTa_Ginoe%F)t zn*)_;Lp5z%#l#vyaTEIz3 zu}sdjxCBL9fLcDllR0a|P|o=xr+CV6R#aRlM)6GW0>8cb8O|?bR>Fk^(jG zkl>srlnMMl%KDgOs!<-`qvSOUf(QQ)e)%JG)LvW4dSk=yQ0G>U?yYqS(%M$&%v)J2!1=~m zJIY@<6j6`*H}2Y1EfuWXYx~-coHbf|s!dxeTp?I-Y)f^{x+|nnzR|Nbg`GDWx0cy! zue@s;_+SC%ow3m2++9HjSwMnwRkt5AaJLETlfFa3X`<43EVD~ST5`Ua&2o16Y`iF@ z027}92Z{=?+#~2zB+I@{P+BC_Wq42|rwpHfTE8b;Fh*KK4n&ZQ_^+5T7fkqsm68jg zsZKgZ1)-GtWs)ytCO_NV-hB}Xmh#gwQyDL#qgMyuxI*eGy z^90<=PoP5%LV@ku{$IUL&)f8Sw*I=d_y9KlMIM-2I!A^)T@Vz|$3Use*BujY{_Wx6 z@tqA@eOu@g=63IO&tR<%bg9M#FLq!ib&dlYIpQM_Qf>dCX}q*8<4>m)$O(k|&$Jd=RhIg9m8 z{+p?G0q=_0`2s9Sot(fEAH&e!tXpwRc^b#WQ(UBT(lNt1*yE+)azpq{vpiU+ESCcv zf?+lB%0*EviBneOX^|-XX64xwIHD!uH>2o*E7H-Nj)6CjOT!8Sl?mg$fHjXrgYQ?( a)B3drPwE^XD?ppTsQ`ZD25#_a*ZUi9d&MyT literal 0 HcmV?d00001 diff --git a/recognition/MRI_TimothyTjipto/dataset.py b/recognition/MRI_TimothyTjipto/dataset.py index acd1f3b54..eecd40769 100644 --- a/recognition/MRI_TimothyTjipto/dataset.py +++ b/recognition/MRI_TimothyTjipto/dataset.py @@ -4,9 +4,103 @@ import numpy as np import matplotlib.pyplot as plt from torchvision import datasets,transforms -from torch.utils.data import DataLoader +from torch.utils.data import DataLoader,ConcatDataset,Dataset +from torchdata.datapipes.map import SequenceWrapper # Load and return normalized data -def load_data(path, img_size, colour): +def normalise_data(path, size): - dataset = datasets.ImageFolder(root=path, transform=transforms) \ No newline at end of file + transform = transforms.Compose([ + transforms.Grayscale(num_output_channels=1), # Convert to grayscale with one channel + transforms.Resize(size), # img_size should be a tuple like (128, 128) + transforms.ToTensor(), + # You can add more transformations if needed + ]) + + + + dataset = datasets.ImageFolder(root=path, transform=transform) + + + return dataset + +# # DO NOT SHUFFLE +# def make_pair(dataset1, dataset2): + +# # postive_pair1 = torch.cat((dataset1,dataset1),1) +# # postive_pair2 = torch.cat((dataset2,dataset2),1) +# # negative_pair1 = torch.cat((dataset1,dataset2),1) +# # negative_pair2 = torch.cat((dataset2,dataset1),1) + +# postive_pair1 = ConcatDataset([dataset1,dataset2]) + + +class PairDataset(Dataset): + def __init__(self,dataset1,dataset2, label): + self.dataset1 = dataset1 + self.dataset2 = dataset2 + self.label = label + + def __len__(self): + return min(len(self.dataset1), len(self.dataset2)) + + def __getitem__(self, index): + img1,_ = self.dataset1[index] + img2,_ = self.dataset2[index] + + return img1, img2, self.label + + +def make_pair(dataset1, dataset2): + positive_pair1 = PairDataset(dataset1,dataset1,0) + positive_pair2 = PairDataset(dataset2,dataset2,0) + negative_pair1 = PairDataset(dataset1,dataset2,1) + negative_pair2 = PairDataset(dataset2,dataset1,1) + return positive_pair1,positive_pair2,negative_pair1,negative_pair2 + +def test_pair(test_dataset1, train_dataset1, test_dataset2, train_dataset2): + test_positive_pair1 = PairDataset(test_dataset1,train_dataset1,0) + test_positive_pair2 = PairDataset(test_dataset2,train_dataset2,0) + test_negative_pair1 = PairDataset(test_dataset1,train_dataset2,1) + test_negative_pair2 = PairDataset(test_dataset2,train_dataset1,1) + return test_positive_pair1, test_positive_pair2, test_negative_pair1, test_negative_pair2 + + +def shuffle(pos_pair1, pos_pair2, neg_pair1, neg_pair2): + concatenated_dataset = ConcatDataset([pos_pair1, pos_pair2, neg_pair1, neg_pair2]) + return concatenated_dataset + + +def split_dataset(dataset, val_size, train_size): + train_set, val_set = torch.utils.data.random_split(dataset, [train_size,val_size]) + return train_set,val_set + +def visualise(img1, img2, labels, to_show=6, num_col=3, prediction=None, test=False): + + num_row = to_show // num_col if to_show // num_col != 0 else 1 + + to_show = num_row * num_col + + # Plot the images + fig, axes = plt.subplots(num_row, num_col, figsize=(10, 10)) + for i in range(to_show): + + # If the number of rows is 1, the axes array is one-dimensional + if num_row == 1: + ax = axes[i % num_col] + else: + ax = axes[i // num_col, i % num_col] + + ax.imshow((tf.concat([img1[i], img2[i]], axis=1).numpy()*255.0).astype("uint8")) + ax.set_axis_off() + if test: + ax.set_title("True: {} | Pred: {:.5f}".format(labels[i], predictions[i][0])) + else: + ax.set_title("Label: {}".format(labels[i])) + if test: + plt.tight_layout(rect=(0, 0, 1.9, 1.9), w_pad=0.0) + else: + plt.tight_layout(rect=(0, 0, 1.5, 1.5)) + plt.show() + +def load_data(dataset,) \ No newline at end of file diff --git a/recognition/MRI_TimothyTjipto/train.py b/recognition/MRI_TimothyTjipto/train.py index da46e6b63..8b33f465c 100644 --- a/recognition/MRI_TimothyTjipto/train.py +++ b/recognition/MRI_TimothyTjipto/train.py @@ -1,3 +1,11 @@ '''Source code for training, validating, testing and saving your model. The model should be imported from “modules.py” and the data loader should be imported from “dataset.py”. Make sure to plot the losses and metrics during training''' + +import torch +from torchvision import datasets, transforms +from torch.utils.data import DataLoader +import numpy as np +import matplotlib.pyplot as plt + + From 9f8af169370a565cb84e49f257394bfb7cadbbc9 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Mon, 16 Oct 2023 18:13:12 +1000 Subject: [PATCH 13/34] training set --- .../__pycache__/dataset.cpython-310.pyc | Bin 0 -> 3642 bytes .../__pycache__/modules.cpython-310.pyc | Bin 0 -> 3724 bytes .../__pycache__/predict.cpython-310.pyc | Bin 0 -> 470 bytes recognition/MRI_TimothyTjipto/dataset.py | 118 +++++++++++----- recognition/MRI_TimothyTjipto/modules.py | 129 +++++++++++++++++- recognition/MRI_TimothyTjipto/predict.py | 7 +- recognition/MRI_TimothyTjipto/train.py | 122 +++++++++++++++++ 7 files changed, 343 insertions(+), 33 deletions(-) create mode 100644 recognition/MRI_TimothyTjipto/__pycache__/dataset.cpython-310.pyc create mode 100644 recognition/MRI_TimothyTjipto/__pycache__/modules.cpython-310.pyc create mode 100644 recognition/MRI_TimothyTjipto/__pycache__/predict.cpython-310.pyc diff --git a/recognition/MRI_TimothyTjipto/__pycache__/dataset.cpython-310.pyc b/recognition/MRI_TimothyTjipto/__pycache__/dataset.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..207db13cdc04e397d4961a642af6b3f197428832 GIT binary patch literal 3642 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 Zk5T|=q0KV8gyEO|=FM&}|C7b#ZvdKof7bv2 literal 0 HcmV?d00001 diff --git a/recognition/MRI_TimothyTjipto/__pycache__/predict.cpython-310.pyc b/recognition/MRI_TimothyTjipto/__pycache__/predict.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85ddb4160c1e02acfc0befe2e4cc340b77fa6769 GIT binary patch literal 470 zcmYk2yGlec5QdYp2XCxkX_DiZ&MN;-!(mA)btGG@FD>&gzP#52B?n;saQo z)_1V5a`~$ZiDp+!b6vc!E3P}|tXDqW zpAY;43V2k*U_msfZbA4Pk)kpVv>18~c184~aY^_l3FXEj0yZ`wdA%xp6e0SN(I7?! z8)XfuWV}Q1Fn|a`g+~FTfwt0-WVrfg5)Q?PTL7K zwPmoL6bZRkw6i8boIKT*)+4^NI7M@Q2KBbQM2IM_RlI+arw$II8G$_Xbu$E)P#&Bf z_cyoJ*JNKM8sheyvST#3ys@^iDI?VW)|tG7JU% Date: Wed, 18 Oct 2023 22:38:54 +1000 Subject: [PATCH 14/34] visual changes --- recognition/MRI_TimothyTjipto/dataset.py | 145 ++++++++++++++++++----- recognition/MRI_TimothyTjipto/predict.py | 1 + 2 files changed, 115 insertions(+), 31 deletions(-) diff --git a/recognition/MRI_TimothyTjipto/dataset.py b/recognition/MRI_TimothyTjipto/dataset.py index 046dd0bf7..500659b00 100644 --- a/recognition/MRI_TimothyTjipto/dataset.py +++ b/recognition/MRI_TimothyTjipto/dataset.py @@ -4,27 +4,16 @@ import numpy as np import matplotlib.pyplot as plt from torchvision import datasets,transforms -from torch.utils.data import DataLoader,ConcatDataset,Dataset,TensorDataset -from torchdata.datapipes.map import SequenceWrapper +from torch.utils.data import DataLoader,ConcatDataset,Dataset,TensorDataset, Subset + import random # Load and return normalized data -def normalise_data(path, size): - - transform = transforms.Compose([ - transforms.Grayscale(num_output_channels=1), # Convert to grayscale with one channel - transforms.Resize(size), # img_size should be a tuple like (128, 128) actual img(256x240) - transforms.ToTensor(), - # You can add more transformations if needed - ]) +def normalise_data(path, transform = None): - # raw_dataset = datasets.ImageFolder(root=path) dataset = datasets.ImageFolder(root=path, transform=transform) - - - - # Return the data set of Img, Label +# Return the data set of Img, Label return dataset def load_data(dataset,batch_size, num_worker = 0, shuffle=True): @@ -60,7 +49,7 @@ def filter_labels(dataset): # postive_pair1 = ConcatDataset([dataset1,dataset2]) - +# Pairs up dataset class PairDataset(Dataset): def __init__(self,dataset1,dataset2, label): self.dataset1 = dataset1 @@ -77,13 +66,14 @@ def __getitem__(self, index): return img1, img2, self.label -# def make_pair(dataset1, dataset2): +# Makes pairs of dataset +def make_pair(dataset1, dataset2): -# positive_pair1 = PairDataset(dataset1,dataset1,0) -# positive_pair2 = PairDataset(dataset2,dataset2,0) -# negative_pair1 = PairDataset(dataset1,dataset2,1) -# negative_pair2 = PairDataset(dataset2,dataset1,1) -# return positive_pair1,positive_pair2,negative_pair1,negative_pair2 + positive_pair1 = PairDataset(dataset1,dataset1,0) + positive_pair2 = PairDataset(dataset2,dataset2,0) + negative_pair1 = PairDataset(dataset1,dataset2,1) + negative_pair2 = PairDataset(dataset2,dataset1,1) + return positive_pair1,positive_pair2,negative_pair1,negative_pair2 def test_pair(test_dataset1, train_dataset1, test_dataset2, train_dataset2): @@ -99,7 +89,8 @@ def shuffle(pos_pair1, pos_pair2, neg_pair1, neg_pair2): return concatenated_dataset -def split_dataset(dataset, val_size, train_size): +# Gets dataset with val size and train size Outputs the shuffle split train_set and val_set +def split_dataset(dataset, train_size, val_size): train_set, val_set = torch.utils.data.random_split(dataset, [train_size,val_size]) return train_set,val_set @@ -136,27 +127,119 @@ def visualise_1(dataset): plt.title(lab) plt.imshow(img) plt.axis('off') + plt.savefig("visualise_1") plt.show() def visualise_batch(dataloader): - LABELS = ['AD','ND'] + LABELS = ['POS','NEG'] example_batch = iter(dataloader) - images,labels = next(example_batch) + images1,images2,labels = next(example_batch) - plt.figure(figsize=(8,2)) # width x height - batch_size = dataloader.batch_size + plt.figure(figsize=(16,4)) # width x height + batch_size = dataloader.batchsize for idx in range(batch_size): - image = transforms.ToPILImage()(images[idx]) - label = LABELS[labels[idx].item()] + image1 = transforms.ToPILImage()(images1[idx]) + image2 = transforms.ToPILImage()(images2[idx]) + label = LABELS[int(labels[idx].item())] - plt.subplot(2,8,idx+1) + plt.subplot(2,batch_size,idx+1) - plt.imshow(image) + plt.imshow(image1,cmap='gray') + plt.axis('off') + + plt.subplot(2,batch_size,idx+1+batch_size) + plt.imshow(image2,cmap='gray') plt.title(label) plt.axis('off') + plt.savefig("visualise_batch") + plt.show() + + +def split_dataset_by_class(dataset): + """ + Split a dataset into separate datasets for each class using PyTorch's Subset. + + Args: + - dataset: The dataset to split. + + Returns: + - dict of Subsets, where keys are class labels and values are the Subsets for that class. + """ + + class_datasets = {} + # Get the class-to-index mapping from the dataset + class_to_idx = dataset.class_to_idx + for class_label, class_idx in class_to_idx.items(): + # Get the indices of samples for the current class + indices = [i for i, (_, label) in enumerate(dataset) if label == class_idx] + + # Create a Subset for the current class + class_subset = Subset(dataset, indices) + class_datasets[class_label] = class_subset + + return class_datasets + + + +class SiameseDataset(Dataset): + def __init__(self, data, transform=None): + self.data = data + self.transform = transform + + def __len__(self): + return len(self.data) + + def __getitem__(self, idx): + # Fetching a pair of data samples and a label indicating if they are similar or not + img1, img2, label = self.data[idx] + + if self.transform: + img1 = self.transform(img1) + img2 = self.transform(img2) + + return img1, img2, torch.tensor(label, dtype=torch.float32) + +class SiameseNetworkDataset1(Dataset): + def __init__(self,imageFolderDataset,transform=None): + self.imageFolderDataset = imageFolderDataset + self.transform = transform + + def __getitem__(self,index): + img0_tuple = random.choice(self.imageFolderDataset.imgs) + + #We need to approximately 50% of images to be in the same class + should_get_same_class = random.randint(0,1) + if should_get_same_class: + while True: + #Look untill the same class image is found + img1_tuple = random.choice(self.imageFolderDataset.imgs) + if img0_tuple[1] == img1_tuple[1]: + break + else: + + while True: + #Look untill a different class image is found + img1_tuple = random.choice(self.imageFolderDataset.imgs) + if img0_tuple[1] != img1_tuple[1]: + break + + img0 = Image.open(img0_tuple[0]) + img1 = Image.open(img1_tuple[0]) + + img0 = img0.convert("L") + img1 = img1.convert("L") + + if self.transform is not None: + img0 = self.transform(img0) + img1 = self.transform(img1) + + return img0, img1, torch.from_numpy(np.array([int(img1_tuple[1] != img0_tuple[1])], dtype=np.float32)) + + def __len__(self): + return len(self.imageFolderDataset.imgs) \ No newline at end of file diff --git a/recognition/MRI_TimothyTjipto/predict.py b/recognition/MRI_TimothyTjipto/predict.py index 41a4717db..87868dec9 100644 --- a/recognition/MRI_TimothyTjipto/predict.py +++ b/recognition/MRI_TimothyTjipto/predict.py @@ -1,4 +1,5 @@ '''Shows example usage of trained model. Print out any results and/ or provide visualisations where applicable''' +import matplotlib.pyplot as plt # Plotting data def show_plot(iteration,loss): From c5f54e830f559242c1bc2bd976fbb817cf6126c3 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Mon, 23 Oct 2023 16:47:31 +1000 Subject: [PATCH 15/34] Import Model from Cluster --- .gitignore | 8 + .../__pycache__/dataset.cpython-310.pyc | Bin 3642 -> 7035 bytes .../__pycache__/modules.cpython-310.pyc | Bin 3724 -> 4329 bytes .../__pycache__/predict.cpython-310.pyc | Bin 470 -> 521 bytes recognition/MRI_TimothyTjipto/dataset.py | 84 +++-- recognition/MRI_TimothyTjipto/modules.py | 78 +---- recognition/MRI_TimothyTjipto/predict.py | 40 ++- recognition/MRI_TimothyTjipto/train.py | 298 +++++++++++++----- 8 files changed, 319 insertions(+), 189 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..f0df6e0bc --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +recognition/MRI_TimothyTjipto/bin/FUCKYOUMOM.png +recognition/MRI_TimothyTjipto/bin/lol.png +recognition/MRI_TimothyTjipto/bin/Note.txt +recognition/MRI_TimothyTjipto/bin/TEST.ipynb +recognition/MRI_TimothyTjipto/bin/test2.ipynb +recognition/MRI_TimothyTjipto/bin/Test3.ipynb +recognition/MRI_TimothyTjipto/bin/Tester3.ipynb +recognition/MRI_TimothyTjipto/bin/visualise_batch.png diff --git a/recognition/MRI_TimothyTjipto/__pycache__/dataset.cpython-310.pyc b/recognition/MRI_TimothyTjipto/__pycache__/dataset.cpython-310.pyc index 207db13cdc04e397d4961a642af6b3f197428832..9dd4906e41fed448d93e8c93754ed787c18bf302 100644 GIT binary patch literal 7035 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 literal 3642 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 literal 3724 zcmaJ^TTdLx74G}=^bEs*FW{^%lY1uGuz(dM+C-5z_IlR|#@5=KNG+mH(_KJAU&d86 zU`Aspk}d6%{{uYwPvk%3wUoC+iuePO5=GkmPW221>`kFMbL!No>Qm=VH8T?!7=QZP zhwSHbhVc(toE;7pcQD020a7D0QZu!3v#>(jtZ^rFHO&h>{Mvb=@I!yH*9;qaF9-wu z+bY^&d$KoEbi$6toqV?FhTUQ=oSW>;Pxvo|mvGL_FBezBE0eve#X`8CaWB7AEQX5{ z`n6)gGEAfRPWXXod}gGL)PH59KAU@Khu5)grUBLgTiCq;%1uyOX&aO_yR=)=Zl%@} zqdzm+dr}Q~!g@)SvR<{-lRJbLgQ{eu6ht`$L$APgzSR3PPIlgI_llvAy-gNm#UN(| z4#bkBy;$_(UXsTG$2rigVVTIRDuWZK)mZPF%6(A8+pKS?;9e}_wJJ^-R}I1ili2tF z5c4eF%o*`k1DO>G9X&g2Ebd^69|15UG+{3*^;0XgUzwquI;s202%XeR8~BCQ@Y<%j z@+6B3CfGWY2NmC&d~rRY+opqX3-d0f=mLz*u@M<#3lLv2O^ClXk*tp zHeXo4ZSwSE>xDhG`K{*JU1w~i)-_}75Ztr)&1cKcX8#X|%|8N1PdY~~PMX&Ye8JT# zXR`9f?va-|L?3$-%!4eA)EJulk7MJgF?RJXVIDA?7<nH*ws=)U<*9^3-1f$|NufFGn?3URk`xrFAd2c(0N#$GXTvzJ zcX$UE@*aWj6QHO(14w0@{Qd@}Ac1{+-gnx!G&KR?+^{Dr@gb0DBKpeMGAT4(`A9`b zMmiO_sYj{kE5k8D5AN1bo%3&cM~x&Y-7o$MAPtGodubh6$4LFsK60eJtIH960d7od zj}qQ%6BtSYm4Vlm=CY^&P#08f91y}}s8vT}X#c;ql|1s#=#0a!f1y9(sA(Cnq=gPZ_$Xrd8 z^95V`QZ*mO&mUJ+PK2Z^SCqGwl`Q7U-bz+D#mO5}HKRJzqNw%|?Hpv4&oIRg06L~) zcac`xW*0G2L+{^C2k|qFqW_E*&fEF@xt5+uD!EHn(>syTPZUdOJ9)cQJ8{EAq#ACRYgiaALVZOgyj^|k+z=FSbWD~4qpWie?WjdS$Rdw zx3jWu)v5URw4ooVpL^=@`=IM40@cABEnX1qtxHdz3U))=0l(S})`3VA0tkcxpIWc& z7ml>hLZEqAG=MoM(9W@S*%;fjlGZM=$F4Va7L63S^R-p)F6h=^tW~tG6U825gET92 ze&HYCGuxPYAdT1s-quj&eKj|TGk%Z>7NwbxF+7|vfJ-?Ai%Vq>ssrVsuoeSOI_P_~ zKFGrSKJmGEyvg!#o(+>6IVvts?@`?x=7~`Gr{=ogp4z8IxI|Dv>{?f?o2K`*T%-6NOivhCxm#Po05m}&k1N7UGPgX?GRIkfsYK;b+ozrJ%z%WRtYNNToKDbUdcS$ zM5{=c@+QCbAeYM3y$ZiZ-%8(F>Q1_@Cpuc*>iRS?l>h6x$@mR*JvzD_qiy@9 Zk5T|=q0KV8gyEO|=FM&}|C7b#ZvdKof7bv2 diff --git a/recognition/MRI_TimothyTjipto/__pycache__/predict.cpython-310.pyc b/recognition/MRI_TimothyTjipto/__pycache__/predict.cpython-310.pyc index 85ddb4160c1e02acfc0befe2e4cc340b77fa6769..776afc9885a57f73446b79676af1f5c1dc63100f 100644 GIT binary patch delta 187 zcmcb{+{wb5&&$ij00aTTx~ZQh^2#d7068fPQ4A@JDNH$xxlB>aj0`EvDJ(4vQ7kD; z!3>(L6CHBdUV`-aOJR_W1ae{N(ufTY|ZX zB?US8B{`W%dIgmr)-5&&UBm=b3RYjl4q_n)4j}gyhfQvNN@-529V3ue%myS_KsGP~ E0LW@5lmGw# delta 135 zcmeBVxyH3?8Mgoc diff --git a/recognition/MRI_TimothyTjipto/dataset.py b/recognition/MRI_TimothyTjipto/dataset.py index 500659b00..c853828cc 100644 --- a/recognition/MRI_TimothyTjipto/dataset.py +++ b/recognition/MRI_TimothyTjipto/dataset.py @@ -5,7 +5,7 @@ import matplotlib.pyplot as plt from torchvision import datasets,transforms from torch.utils.data import DataLoader,ConcatDataset,Dataset,TensorDataset, Subset - +from PIL import Image import random # Load and return normalized data @@ -94,33 +94,6 @@ def split_dataset(dataset, train_size, val_size): train_set, val_set = torch.utils.data.random_split(dataset, [train_size,val_size]) return train_set,val_set -# def visualise(img1, img2, labels, to_show=6, num_col=3, prediction=None, test=False): - -# num_row = to_show // num_col if to_show // num_col != 0 else 1 - -# to_show = num_row * num_col - -# # Plot the images -# fig, axes = plt.subplots(num_row, num_col, figsize=(10, 10)) -# for i in range(to_show): - -# # If the number of rows is 1, the axes array is one-dimensional -# if num_row == 1: -# ax = axes[i % num_col] -# else: -# ax = axes[i // num_col, i % num_col] - -# ax.imshow((tf.concat([img1[i], img2[i]], axis=1).numpy()*255.0).astype("uint8")) -# ax.set_axis_off() -# if test: -# ax.set_title("True: {} | Pred: {:.5f}".format(labels[i], predictions[i][0])) -# else: -# ax.set_title("Label: {}".format(labels[i])) -# if test: -# plt.tight_layout(rect=(0, 0, 1.9, 1.9), w_pad=0.0) -# else: -# plt.tight_layout(rect=(0, 0, 1.5, 1.5)) - plt.show() def visualise_1(dataset): img,lab = random.choice(dataset) @@ -138,7 +111,7 @@ def visualise_batch(dataloader): images1,images2,labels = next(example_batch) plt.figure(figsize=(16,4)) # width x height - batch_size = dataloader.batchsize + batch_size = len(images1) for idx in range(batch_size): image1 = transforms.ToPILImage()(images1[idx]) @@ -186,26 +159,47 @@ def split_dataset_by_class(dataset): return class_datasets - -class SiameseDataset(Dataset): - def __init__(self, data, transform=None): - self.data = data +class SiameseNetworkDataset1(Dataset): + def __init__(self,imageFolderDataset,transform=None): + self.imageFolderDataset = imageFolderDataset self.transform = transform - def __len__(self): - return len(self.data) - - def __getitem__(self, idx): - # Fetching a pair of data samples and a label indicating if they are similar or not - img1, img2, label = self.data[idx] + def __getitem__(self,index): + img0_tuple = random.choice(self.imageFolderDataset.imgs) - if self.transform: + #We need to approximately 50% of images to be in the same class + should_get_same_class = random.randint(0,1) + if should_get_same_class: + while True: + #Look untill the same class image is found + img1_tuple = random.choice(self.imageFolderDataset.imgs) + if img0_tuple[1] == img1_tuple[1]: + break + else: + + while True: + #Look untill a different class image is found + img1_tuple = random.choice(self.imageFolderDataset.imgs) + if img0_tuple[1] != img1_tuple[1]: + break + + img0 = Image.open(img0_tuple[0]) + img1 = Image.open(img1_tuple[0]) + + img0 = img0.convert("L") + img1 = img1.convert("L") + + if self.transform is not None: + img0 = self.transform(img0) img1 = self.transform(img1) - img2 = self.transform(img2) - return img1, img2, torch.tensor(label, dtype=torch.float32) + return img0, img1, torch.from_numpy(np.array([int(img1_tuple[1] != img0_tuple[1])], dtype=np.float32)) -class SiameseNetworkDataset1(Dataset): + def __len__(self): + return len(self.imageFolderDataset.imgs) + + +class SiameseNetworkDataset_test(Dataset): def __init__(self,imageFolderDataset,transform=None): self.imageFolderDataset = imageFolderDataset self.transform = transform @@ -239,7 +233,7 @@ def __getitem__(self,index): img0 = self.transform(img0) img1 = self.transform(img1) - return img0, img1, torch.from_numpy(np.array([int(img1_tuple[1] != img0_tuple[1])], dtype=np.float32)) + return img0, img1, torch.from_numpy(np.array([int(img1_tuple[1] != img0_tuple[1])], dtype=np.float32)), img0_tuple[1],img1_tuple[1] def __len__(self): - return len(self.imageFolderDataset.imgs) \ No newline at end of file + return len(self.imageFolderDataset.imgs) diff --git a/recognition/MRI_TimothyTjipto/modules.py b/recognition/MRI_TimothyTjipto/modules.py index b362b3fc8..b7682a93b 100644 --- a/recognition/MRI_TimothyTjipto/modules.py +++ b/recognition/MRI_TimothyTjipto/modules.py @@ -5,7 +5,8 @@ import numpy as np import random from PIL import Image -import PIL.ImageOps +import PIL.ImageOps +from datetime import datetime import torchvision import torchvision.datasets as datasets @@ -18,54 +19,7 @@ from torch import optim import torch.nn.functional as F -# class SiameseNetworkDataset(Dataset): -# def __init__(self, imageDataset,transform=None): -# self.imageDataset = imageDataset -# self.transform = transform - -# def __getitem__(self, index): -# rand_img = random.choice(self.path.imgs) - -class SiameseNetworkDataset(Dataset): - def __init__(self,imageFolderDataset,transform=None): - self.imageFolderDataset = imageFolderDataset - self.transform = transform - - def __getitem__(self,index): - img0_tuple = random.choice(self.imageFolderDataset) - - #We need to approximately 50% of images to be in the same class - should_get_same_class = random.randint(0,1) - if should_get_same_class: - while True: - #Look untill the same class image is found - img1_tuple = random.choice(self.imageFolderDataset) - if img0_tuple[1] == img1_tuple[1]: - break - else: - - while True: - #Look untill a different class image is found - img1_tuple = random.choice(self.imageFolderDataset) - if img0_tuple[1] != img1_tuple[1]: - break - img0 = Image.open(img0_tuple[0]) - img1 = Image.open(img1_tuple[0]) - - img0 = img0.convert("L") - img1 = img1.convert("L") - - if self.transform is not None: - img0 = self.transform(img0) - img1 = self.transform(img1) - - return img0, img1, torch.from_numpy(np.array([int(img1_tuple[1] != img0_tuple[1])], dtype=np.float32)) - - def __len__(self): - return len(self.imageFolderDataset) - - #create the Siamese Neural Network class SiameseNetwork(nn.Module): def __init__(self): @@ -73,27 +27,27 @@ def __init__(self): # Setting up the Sequential of CNN Layers self.cnn1 = nn.Sequential( - nn.Conv2d(1, 96, kernel_size=11,stride=4), + nn.Conv2d(1, 32, kernel_size=10,stride=1), nn.ReLU(inplace=True), - nn.MaxPool2d(3, stride=2), + nn.MaxPool2d(2, stride=1), - nn.Conv2d(96, 256, kernel_size=5, stride=1), + nn.Conv2d(32, 64, kernel_size=7, stride=1), nn.ReLU(inplace=True), - nn.MaxPool2d(2, stride=2), + nn.MaxPool2d(2, stride=1), - nn.Conv2d(256, 384, kernel_size=3,stride=1), + nn.Conv2d(64, 128, kernel_size=4,stride=1), nn.ReLU(inplace=True) ) + # Setting up the Fully Connected Layers self.fc1 = nn.Sequential( - nn.Linear(384, 1024), - nn.ReLU(inplace=True), - - nn.Linear(1024, 256), - nn.ReLU(inplace=True), - - nn.Linear(256,2) + nn.Linear(128*108*100, 64), + nn.Sigmoid(), + nn.Linear(64,1), + nn.Sigmoid() + + ) def forward_once(self, x): @@ -112,7 +66,6 @@ def forward(self, input1, input2): return output1, output2 - # Define the Contrastive Loss Function class ContrastiveLoss(torch.nn.Module): def __init__(self, margin=2.0): @@ -127,4 +80,5 @@ def forward(self, output1, output2, label): (label) * torch.pow(torch.clamp(self.margin - euclidean_distance, min=0.0), 2)) - return loss_contrastive \ No newline at end of file + return loss_contrastive + diff --git a/recognition/MRI_TimothyTjipto/predict.py b/recognition/MRI_TimothyTjipto/predict.py index 87868dec9..22bbacaaf 100644 --- a/recognition/MRI_TimothyTjipto/predict.py +++ b/recognition/MRI_TimothyTjipto/predict.py @@ -1,7 +1,45 @@ '''Shows example usage of trained model. Print out any results and/ or provide visualisations where applicable''' import matplotlib.pyplot as plt +import torch # Plotting data def show_plot(iteration,loss): + plt.clf() plt.plot(iteration,loss) - plt.show() \ No newline at end of file + plt.savefig("Iteration loss") + plt.show() + +def predict(model, input1, input2): + """ + Make predictions using a trained PyTorch model. + + Args: + - model: Trained PyTorch model. + - input_data: PyTorch tensor containing the input data. + + Returns: + - Predictions as a PyTorch tensor. + """ + # Set the model to evaluation mode + model.eval() + + # Disable gradient computation + with torch.no_grad(): + predictions = model(input1, input2) + + return predictions + +def classify_pair(score, threshold): + """ + Classify pairs of samples based on a threshold. + + Args: + - score: Score of Dissimilarity + - threshold: Decision boundary for classification. + + Returns: + - List of classifications (0 for dissimilar, 1 for similar). + """ + + classification = 1 if score < threshold else 0 + return classification \ No newline at end of file diff --git a/recognition/MRI_TimothyTjipto/train.py b/recognition/MRI_TimothyTjipto/train.py index 7b144cc29..16ab41b7a 100644 --- a/recognition/MRI_TimothyTjipto/train.py +++ b/recognition/MRI_TimothyTjipto/train.py @@ -3,131 +3,267 @@ sure to plot the losses and metrics during training''' import torch -from torchvision import datasets, transforms -from torch.utils.data import DataLoader -import numpy as np -import matplotlib.pyplot as plt -import random - -import dataset -from modules import SiameseNetworkDataset, SiameseNetwork, ContrastiveLoss -from predict import show_plot -import matplotlib.pyplot as plt -import numpy as np -import random - - import torchvision -import torchvision.datasets as datasets -import torchvision.transforms as transforms -from torch.utils.data import DataLoader, Dataset -import torchvision.utils -import torch from torch.autograd import Variable import torch.nn as nn from torch import optim import torch.nn.functional as F -# Paths of data -# TRAIN_AD_PATH = "C:/Users/barkz/Downloads/ADNI_AD_NC_2D/AD_NC/train/AD" -# TRAIN_NC_PATH = "C:/Users/barkz/Downloads/ADNI_AD_NC_2D/AD_NC/train/ND" +from torchvision import datasets, transforms +from torch.utils.data import DataLoader, Dataset +import torchvision.utils +import numpy as np +import matplotlib.pyplot as plt +import random +from datetime import datetime +from PIL import Image -TRAIN_PATH = "C:/Users/barkz/Downloads/ADNI_AD_NC_2D/AD_NC/train" +import dataset +from dataset import SiameseNetworkDataset1,SiameseNetworkDataset_test +import modules +from modules import SiameseNetwork, ContrastiveLoss +from predict import show_plot +import predict -TEST_AD_PATH = "C:/Users/barkz/Downloads/ADNI_AD_NC_2D/AD_NC/test/AD" -TEST_NC_PATH = "C:/Users/barkz/Downloads/ADNI_AD_NC_2D/AD_NC/test/ND" +# Paths of data +TRAIN_PATH = "/home/Student/s4653241/AD_NC/train" +TEST_PATH = "/home/Student/s4653241/AD_NC/test" INPUT_SHAPE= (120, 128) # SIZE OF IMAGE 256 X 240 -COLOR_MODE= 'grayscale' +# COLOR_MODE= 'grayscale' +BATCH_SIZE = 16 # Batch Size for DataLoader +# TRAINING_SIZE= 1800 -BATCH_SIZE = 16 -TRAINING_SIZE= 1800 +TRAINING_MODE = False # Training mode +EPOCH_RANGE = 61 # Size of the Training Epoch +CHECKPOINT_TRAINING = False # Use Checkpoint and continue Training +LOAD_CHECKPOINT_TRAINING = "/home/Student/s4653241/MRI/Training_Epoch/Epoch_40.pth" +EPOCH_SAVE__CHECKPOINT = 60 # Saves every 30 Epoch -TRAINING_MODE = True -VISUALISE = True +TEST_MODE = True # For Testing +CHECKPOINT = "/home/Student/s4653241/MRI/Training_Epoch/Epoch_60.pth" # Test the checkpoint you want +TEST_RANGE = 500 # Testing size +THRESHOLD = 0.5 +VISUALISE = False # Print out Error pics DEBUGGING TOOL for now -# def main(): - -# # AD_dataset = dataset.normalise_data(TRAIN_AD_PATH,INPUT_SHAPE) -# # NC_dataset = dataset.normalise_data(TRAIN_NC_PATH,INPUT_SHAPE) - -# TRAIN_DATASET = dataset.normalise_data(TRAIN_PATH, INPUT_SHAPE) -# Same_class = random.randint(0,1) -# pos_pair1, pos_pair2, neg_pair1, neg_pair2 =dataset.make_pair(AD_dataset, NC_dataset) -# mixed_dataset = dataset.shuffle(pos_pair1, pos_pair2, neg_pair1, neg_pair2) -# train_dataset,validation_dataset = dataset.split_dataset(mixed_dataset,TRAINING_SIZE) +def load_checkpoint(path): + model = SiameseNetwork().cuda() + optimizer = optim.Adam(model.parameters(), lr = 0.00006) -# train_dataloader = DataLoader(train_dataset,batch_size=BATCH_SIZE,shuffle=True) -# validation_dataloader = DataLoader(validation_dataset,batch_size=BATCH_SIZE,shuffle=True) - -# train_features, train_labels = next(iter(train_dataloader)) - -# print(f"Feature batch shape: {train_features.size()}") -# print(f"Labels batch shape: {train_labels.size()}") -# img = train_features[0].squeeze() -# label = train_labels[0] -# plt.imshow(img, cmap="gray") -# plt.show() -# print(f"Label: {label}") + device = torch.device("cuda") + checkpoint = torch.load(LOAD_CHECKPOINT_TRAINING) + model.load_state_dict(checkpoint['model_state_dict'], strict=False) + optimizer.load_state_dict(checkpoint['optimizer_state_dict']) + epoch = checkpoint['epoch'] + 1 + counter = checkpoint['counter'] + loss = checkpoint['loss'] + iteration = checkpoint['iteration'] + model.train() + return model,optimizer,epoch,counter,loss,iteration def main(): transform = transforms.Compose([ transforms.Grayscale(num_output_channels=1), # Convert to grayscale with one channel + # transforms.CenterCrop((220,200)), # crops image transforms.Resize((120,128)), # img_size should be a tuple like (128, 128) actual img(256x240) transforms.ToTensor(), # You can add more transformations if needed ]) - siamese_dataset = SiameseNetworkDataset(TRAIN_PATH, transform) + raw_dataset = datasets.ImageFolder(root=TRAIN_PATH) + siamese_dataset = SiameseNetworkDataset1(raw_dataset, transform) # Create a simple dataloader just for simple visualization vis_dataloader = DataLoader(siamese_dataset, shuffle=True, - num_workers=2, - batch_size=8) - - train_dataloader = dataset.load_data(siamese_dataset,BATCH_SIZE,8,True) + num_workers=1, + batch_size=16) + + dataset.visualise_batch(vis_dataloader) + # train_dataloader = dataset.load_data(siamese_dataset,BATCH_SIZE,8,True) + device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + + + print(f'Date and time is: {datetime.now()}\nDevice on: {device}') + + net = SiameseNetwork().cuda() criterion = ContrastiveLoss() - optimizer = optim.Adam(net.parameters(), lr = 0.0005) - + optimizer = optim.Adam(net.parameters(), lr = 0.00006) + current_epoch = 1 counter = [] loss_history = [] iteration_number= 0 + if CHECKPOINT_TRAINING: + net,optimizer,current_epoch,counter,loss_history,iteration_number=load_checkpoint(LOAD_CHECKPOINT_TRAINING) + # Iterate throught the epochs - for epoch in range(100): + if TRAINING_MODE: + for epoch in range(current_epoch, EPOCH_RANGE): - # Iterate over batches - for i, (img0, img1, label) in enumerate(train_dataloader, 0): + print("---------------------------------- new Epoch-------------------------------") + # Iterate over batches + for i, (img0, img1, label) in enumerate(vis_dataloader, 0): - # Send the images and labels to CUDA - img0, img1, label = img0.cuda(), img1.cuda(), label.cuda() + # Send the images and labels to CUDA + img0, img1, label = img0.cuda(), img1.cuda(), label.cuda() - # Zero the gradients - optimizer.zero_grad() + # Zero the gradients + optimizer.zero_grad() - # Pass in the two images into the network and obtain two outputs - output1, output2 = net(img0, img1) + # Pass in the two images into the network and obtain two outputs + output1, output2 = net(img0, img1) - # Pass the outputs of the networks and label into the loss function - loss_contrastive = criterion(output1, output2, label) + # Pass the outputs of the networks and label into the loss function + loss_contrastive = criterion(output1, output2, label) - # Calculate the backpropagation - loss_contrastive.backward() + # Calculate the backpropagation + loss_contrastive.backward() - # Optimize - optimizer.step() + # Optimize + optimizer.step() - # Every 10 batches print out the loss - if i % 10 == 0 : - print(f"Epoch number {epoch}\n Current loss {loss_contrastive.item()}\n") - iteration_number += 10 + # Every 10 batches print out the loss + if i % 50 == 0 : + if i % 50 == 0 : + print(f"Epoch number {epoch} Iteration Number {iteration_number}\n Current loss {loss_contrastive.item()}\n ") + counter.append(iteration_number) + loss_history.append(loss_contrastive.item()) + iteration_number += 50 + + dt = datetime.now() + print(dt) + print("End of Epoch") + if epoch%EPOCH_SAVE__CHECKPOINT == 0: + checkpoint = { + 'epoch': epoch, + 'model_state_dict': net.state_dict(), + 'optimizer_state_dict': optimizer.state_dict(), + 'counter':counter, + 'loss': loss_history, + 'iteration': iteration_number, + } + torch.save(checkpoint, f"/home/Student/s4653241/MRI/Training_Epoch/Epoch_{epoch}.pth") + + print("End of Training") + show_plot(counter, loss_history) + if TEST_MODE: + print(f'Start of testing {datetime.now()}') + checkpoint = torch.load(CHECKPOINT) + model = SiameseNetwork().cuda() + model.load_state_dict(checkpoint['model_state_dict'], strict=False) + #optimizer.load_state_dict(checkpoint['optimizer_state_dict']) + epoch = checkpoint['epoch'] + loss = checkpoint['loss'] + # model.train() #for continue training + model.eval() - counter.append(iteration_number) - loss_history.append(loss_contrastive.item()) + raw_test_dataset = datasets.ImageFolder(root=TEST_PATH) + + test_siam = SiameseNetworkDataset_test(raw_test_dataset, transform) + test_dataloader = DataLoader(test_siam, + shuffle=True, + num_workers=1, + batch_size=1) + + dataiter = iter(test_dataloader) + x0, _, _,x0label,_ = next(dataiter) + + postive_prediction = 0 + print(x0) + # x0 = x0.cuda() + Prediction = ['Different', 'Same'] + # Debugging + counter_same_but_wrong = 0 + counter_wrong_but_same = 0 + Neg_Neg = [] + Neg_Pos = [] + + for i in range(TEST_RANGE): + print(f'Iteration: {i}') + PRINTING = True + # Iterate over 10 images and test them with the first image (x0) + _, x1, label2,_,x1label = next(dataiter) + + + with torch.no_grad(): + output1, output2 = model(x0.cuda(), x1.cuda()) + euclidean_distance = F.pairwise_distance(output1, output2) + # print(f'output1{output1}, output2{output2}') + # print(f'Euclidean_distance: {euclidean_distance}') # Debugging Code + + predict_class = predict.classify_pair(euclidean_distance.item(),THRESHOLD) # Threshold + + if predict_class == 1 and int(x0label) == int(x1label): + # print(f'x0 label: {int(x0label)}, x1 label: {int(x1label)}') + # print('Activated into pos positive pair') # Debugging Code + postive_prediction+=1 + PRINTING = False + + if predict_class != 1 and int(x0label) != int(x1label): + # print(f'x0 label: {int(x0label)}, x1 label: {int(x1label)}') + # print('Activated into neg positive pair') # Debugging Code + postive_prediction+=1 + PRINTING = False + if PRINTING: + print(f'Euclidean_distance: {euclidean_distance}') # Debugging Code + print(f'x0 label: {int(x0label)}, x1 label: {int(x1label)}') + print(f'Class predicted: {Prediction[predict_class]}') + + rounded_distance = round(float(euclidean_distance.item()), 1) + + if predict_class == 1 and int(x0label) != int(x1label): + counter_same_but_wrong += 1 + if rounded_distance != 0.0: + Neg_Neg.append(rounded_distance) + + + + if predict_class != 1 and int(x0label) == int(x1label): + counter_wrong_but_same += 1 + + if rounded_distance != 1: + Neg_Pos.append(rounded_distance) + + if PRINTING and VISUALISE: + plt.clf() + plt.subplot(2, 8, 1) + plt.title(int(x0label)) + x0_pic = transforms.ToPILImage()(x0[0]) + plt.axis('off') + plt.imshow(x0_pic, cmap='gray') + + plt.subplot(2,8,2) + plt.title(f'Dissimilarity: {euclidean_distance.item():.2f}\nClass predicted: {Prediction[predict_class]} ') + plt.axis('off') + + # print(f'Predicted Class: {predict_class}') # Debugging Code + + plt.subplot(2, 8, 3) + plt.title(int(x1label)) + x1_pic = transforms.ToPILImage()(x1[0]) + plt.axis('off') + plt.imshow(x1_pic, cmap='gray') + # 0 is same + # 1 totally dif + + # plt.savefig('lol') + # concatenated = transforms.ToPILImage()(concatenated + + #plt.imshow(torchvision.utils.make_grid(concatenated)) + # plt.title(f'Dissimilarity: {euclidean_distance.item():.2f}') + + plt.savefig(f'/home/Student/s4653241/MRI/Test_pic/test{i}') + + + Accuracy = postive_prediction/TEST_RANGE + print(f'Using Checkpoint: {CHECKPOINT}\nAccuracy: {Accuracy}\nNo. of Positive Matches: {postive_prediction}\nNo. of Test: {TEST_RANGE}') + print(f'No. of Negative Negative: {counter_same_but_wrong}\nNegative Positive: {counter_wrong_but_same}') + print(Neg_Neg) + print(Neg_Pos) + print('End of test') - show_plot(counter, loss_history) if __name__ == '__main__': main() \ No newline at end of file From 01669205a28ffe84385582e71b2bf50685a55261 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Mon, 23 Oct 2023 16:53:14 +1000 Subject: [PATCH 16/34] Cleaned up modules.py and documentation --- recognition/MRI_TimothyTjipto/modules.py | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/recognition/MRI_TimothyTjipto/modules.py b/recognition/MRI_TimothyTjipto/modules.py index b7682a93b..c14b088a8 100644 --- a/recognition/MRI_TimothyTjipto/modules.py +++ b/recognition/MRI_TimothyTjipto/modules.py @@ -1,22 +1,10 @@ '''Source code of the components of your model. Each component must be implementated as a class or a function ''' -import matplotlib.pyplot as plt -import numpy as np -import random -from PIL import Image -import PIL.ImageOps -from datetime import datetime -import torchvision -import torchvision.datasets as datasets -import torchvision.transforms as transforms -from torch.utils.data import DataLoader, Dataset -import torchvision.utils +# Importing necessary libraries and modules import torch -from torch.autograd import Variable import torch.nn as nn -from torch import optim import torch.nn.functional as F From d1b5ea8614f3efeb5f1d3701fe2e79da855294bd Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Mon, 23 Oct 2023 17:28:57 +1000 Subject: [PATCH 17/34] Cleaned up documentation of dataset and train file --- recognition/MRI_TimothyTjipto/dataset.py | 9 --- recognition/MRI_TimothyTjipto/train.py | 72 ++++++++---------------- 2 files changed, 23 insertions(+), 58 deletions(-) diff --git a/recognition/MRI_TimothyTjipto/dataset.py b/recognition/MRI_TimothyTjipto/dataset.py index c853828cc..00846c96d 100644 --- a/recognition/MRI_TimothyTjipto/dataset.py +++ b/recognition/MRI_TimothyTjipto/dataset.py @@ -39,15 +39,6 @@ def filter_labels(dataset): return TensorDataset(tensor_images0, tensor_labels0), TensorDataset(tensor_images1, tensor_labels1) -# # DO NOT SHUFFLE -# def make_pair(dataset1, dataset2): - -# # postive_pair1 = torch.cat((dataset1,dataset1),1) -# # postive_pair2 = torch.cat((dataset2,dataset2),1) -# # negative_pair1 = torch.cat((dataset1,dataset2),1) -# # negative_pair2 = torch.cat((dataset2,dataset1),1) - -# postive_pair1 = ConcatDataset([dataset1,dataset2]) # Pairs up dataset class PairDataset(Dataset): diff --git a/recognition/MRI_TimothyTjipto/train.py b/recognition/MRI_TimothyTjipto/train.py index 16ab41b7a..846a0cd75 100644 --- a/recognition/MRI_TimothyTjipto/train.py +++ b/recognition/MRI_TimothyTjipto/train.py @@ -30,14 +30,13 @@ TEST_PATH = "/home/Student/s4653241/AD_NC/test" INPUT_SHAPE= (120, 128) # SIZE OF IMAGE 256 X 240 -# COLOR_MODE= 'grayscale' BATCH_SIZE = 16 # Batch Size for DataLoader -# TRAINING_SIZE= 1800 TRAINING_MODE = False # Training mode EPOCH_RANGE = 61 # Size of the Training Epoch CHECKPOINT_TRAINING = False # Use Checkpoint and continue Training LOAD_CHECKPOINT_TRAINING = "/home/Student/s4653241/MRI/Training_Epoch/Epoch_40.pth" +SAVE_EPOCH = True EPOCH_SAVE__CHECKPOINT = 60 # Saves every 30 Epoch TEST_MODE = True # For Testing @@ -65,7 +64,6 @@ def load_checkpoint(path): def main(): transform = transforms.Compose([ transforms.Grayscale(num_output_channels=1), # Convert to grayscale with one channel - # transforms.CenterCrop((220,200)), # crops image transforms.Resize((120,128)), # img_size should be a tuple like (128, 128) actual img(256x240) transforms.ToTensor(), # You can add more transformations if needed @@ -79,13 +77,9 @@ def main(): batch_size=16) dataset.visualise_batch(vis_dataloader) - # train_dataloader = dataset.load_data(siamese_dataset,BATCH_SIZE,8,True) + device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') - - print(f'Date and time is: {datetime.now()}\nDevice on: {device}') - - net = SiameseNetwork().cuda() criterion = ContrastiveLoss() optimizer = optim.Adam(net.parameters(), lr = 0.00006) @@ -96,13 +90,13 @@ def main(): iteration_number= 0 if CHECKPOINT_TRAINING: + net,optimizer,current_epoch,counter,loss_history,iteration_number=load_checkpoint(LOAD_CHECKPOINT_TRAINING) # Iterate throught the epochs if TRAINING_MODE: for epoch in range(current_epoch, EPOCH_RANGE): - print("---------------------------------- new Epoch-------------------------------") # Iterate over batches for i, (img0, img1, label) in enumerate(vis_dataloader, 0): @@ -126,25 +120,21 @@ def main(): # Every 10 batches print out the loss if i % 50 == 0 : - if i % 50 == 0 : - print(f"Epoch number {epoch} Iteration Number {iteration_number}\n Current loss {loss_contrastive.item()}\n ") counter.append(iteration_number) loss_history.append(loss_contrastive.item()) iteration_number += 50 - - dt = datetime.now() - print(dt) - print("End of Epoch") - if epoch%EPOCH_SAVE__CHECKPOINT == 0: - checkpoint = { - 'epoch': epoch, - 'model_state_dict': net.state_dict(), - 'optimizer_state_dict': optimizer.state_dict(), - 'counter':counter, - 'loss': loss_history, - 'iteration': iteration_number, - } - torch.save(checkpoint, f"/home/Student/s4653241/MRI/Training_Epoch/Epoch_{epoch}.pth") + + if SAVE_EPOCH: + if epoch%EPOCH_SAVE__CHECKPOINT == 0: + checkpoint = { + 'epoch': epoch, + 'model_state_dict': net.state_dict(), + 'optimizer_state_dict': optimizer.state_dict(), + 'counter':counter, + 'loss': loss_history, + 'iteration': iteration_number, + } + torch.save(checkpoint, f"/home/Student/s4653241/MRI/Training_Epoch/Epoch_{epoch}.pth") print("End of Training") show_plot(counter, loss_history) @@ -153,10 +143,10 @@ def main(): checkpoint = torch.load(CHECKPOINT) model = SiameseNetwork().cuda() model.load_state_dict(checkpoint['model_state_dict'], strict=False) - #optimizer.load_state_dict(checkpoint['optimizer_state_dict']) + epoch = checkpoint['epoch'] loss = checkpoint['loss'] - # model.train() #for continue training + model.eval() raw_test_dataset = datasets.ImageFolder(root=TEST_PATH) @@ -171,8 +161,6 @@ def main(): x0, _, _,x0label,_ = next(dataiter) postive_prediction = 0 - print(x0) - # x0 = x0.cuda() Prediction = ['Different', 'Same'] # Debugging counter_same_but_wrong = 0 @@ -190,20 +178,17 @@ def main(): with torch.no_grad(): output1, output2 = model(x0.cuda(), x1.cuda()) euclidean_distance = F.pairwise_distance(output1, output2) - # print(f'output1{output1}, output2{output2}') - # print(f'Euclidean_distance: {euclidean_distance}') # Debugging Code + predict_class = predict.classify_pair(euclidean_distance.item(),THRESHOLD) # Threshold if predict_class == 1 and int(x0label) == int(x1label): - # print(f'x0 label: {int(x0label)}, x1 label: {int(x1label)}') - # print('Activated into pos positive pair') # Debugging Code + postive_prediction+=1 PRINTING = False if predict_class != 1 and int(x0label) != int(x1label): - # print(f'x0 label: {int(x0label)}, x1 label: {int(x1label)}') - # print('Activated into neg positive pair') # Debugging Code + postive_prediction+=1 PRINTING = False if PRINTING: @@ -238,31 +223,20 @@ def main(): plt.title(f'Dissimilarity: {euclidean_distance.item():.2f}\nClass predicted: {Prediction[predict_class]} ') plt.axis('off') - # print(f'Predicted Class: {predict_class}') # Debugging Code + plt.subplot(2, 8, 3) plt.title(int(x1label)) x1_pic = transforms.ToPILImage()(x1[0]) plt.axis('off') plt.imshow(x1_pic, cmap='gray') - # 0 is same - # 1 totally dif - - # plt.savefig('lol') - # concatenated = transforms.ToPILImage()(concatenated - - #plt.imshow(torchvision.utils.make_grid(concatenated)) - # plt.title(f'Dissimilarity: {euclidean_distance.item():.2f}') - + plt.savefig(f'/home/Student/s4653241/MRI/Test_pic/test{i}') Accuracy = postive_prediction/TEST_RANGE print(f'Using Checkpoint: {CHECKPOINT}\nAccuracy: {Accuracy}\nNo. of Positive Matches: {postive_prediction}\nNo. of Test: {TEST_RANGE}') - print(f'No. of Negative Negative: {counter_same_but_wrong}\nNegative Positive: {counter_wrong_but_same}') - print(Neg_Neg) - print(Neg_Pos) - print('End of test') + if __name__ == '__main__': From 77d415e1fe246294d69cfc518a92a4951959bfa1 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Mon, 23 Oct 2023 19:53:30 +1000 Subject: [PATCH 18/34] Cleanup code, made transform and dataloader into dedicated functions in dataset --- recognition/MRI_TimothyTjipto/dataset.py | 104 ++++------------------- recognition/MRI_TimothyTjipto/train.py | 57 ++++++------- 2 files changed, 46 insertions(+), 115 deletions(-) diff --git a/recognition/MRI_TimothyTjipto/dataset.py b/recognition/MRI_TimothyTjipto/dataset.py index 00846c96d..4e17a5992 100644 --- a/recognition/MRI_TimothyTjipto/dataset.py +++ b/recognition/MRI_TimothyTjipto/dataset.py @@ -8,37 +8,24 @@ from PIL import Image import random -# Load and return normalized data -def normalise_data(path, transform = None): - - # raw_dataset = datasets.ImageFolder(root=path) - dataset = datasets.ImageFolder(root=path, transform=transform) -# Return the data set of Img, Label - return dataset - -def load_data(dataset,batch_size, num_worker = 0, shuffle=True): - dataloader = DataLoader(dataset, batch_size=batch_size,num_workers=num_worker,shuffle=shuffle) - return dataloader - -# NOT in use -def filter_labels(dataset): - images0,labels0 = [],[] - images1,labels1 = [],[] - for img,lbl in dataset: - if lbl == 0: - images0.append(img) - labels0.append(lbl) - else: - images1.append(img) - labels1.append(lbl) - tensor_images0 = torch.stack(images0) - tensor_labels0 = torch.tensor(labels0) - - tensor_images1 = torch.stack(images1) - tensor_labels1 = torch.tensor(labels1) - - return TensorDataset(tensor_images0, tensor_labels0), TensorDataset(tensor_images1, tensor_labels1) - +def get_transform(): + """ + Returns a composed transformation for datasets. + """ + transform = transforms.Compose([ + transforms.Grayscale(num_output_channels=1), # Convert to grayscale with one channel + transforms.Resize((120,128)), # Resize to (120,128) + transforms.ToTensor(), + # You can add more transformations if needed + ]) + return transform + +def get_dataloader(dataset, batch_size = 16, shuffle=True): + v_dataloader = DataLoader(dataset, + shuffle=shuffle, + num_workers=1, + batch_size=batch_size) + return v_dataloader # Pairs up dataset class PairDataset(Dataset): @@ -57,35 +44,6 @@ def __getitem__(self, index): return img1, img2, self.label -# Makes pairs of dataset -def make_pair(dataset1, dataset2): - - positive_pair1 = PairDataset(dataset1,dataset1,0) - positive_pair2 = PairDataset(dataset2,dataset2,0) - negative_pair1 = PairDataset(dataset1,dataset2,1) - negative_pair2 = PairDataset(dataset2,dataset1,1) - return positive_pair1,positive_pair2,negative_pair1,negative_pair2 - - -def test_pair(test_dataset1, train_dataset1, test_dataset2, train_dataset2): - test_positive_pair1 = PairDataset(test_dataset1,train_dataset1,0) - test_positive_pair2 = PairDataset(test_dataset2,train_dataset2,0) - test_negative_pair1 = PairDataset(test_dataset1,train_dataset2,1) - test_negative_pair2 = PairDataset(test_dataset2,train_dataset1,1) - return test_positive_pair1, test_positive_pair2, test_negative_pair1, test_negative_pair2 - - -def shuffle(pos_pair1, pos_pair2, neg_pair1, neg_pair2): - concatenated_dataset = ConcatDataset([pos_pair1, pos_pair2, neg_pair1, neg_pair2]) - return concatenated_dataset - - -# Gets dataset with val size and train size Outputs the shuffle split train_set and val_set -def split_dataset(dataset, train_size, val_size): - train_set, val_set = torch.utils.data.random_split(dataset, [train_size,val_size]) - return train_set,val_set - - def visualise_1(dataset): img,lab = random.choice(dataset) plt.title(lab) @@ -123,32 +81,6 @@ def visualise_batch(dataloader): plt.show() -def split_dataset_by_class(dataset): - """ - Split a dataset into separate datasets for each class using PyTorch's Subset. - - Args: - - dataset: The dataset to split. - - Returns: - - dict of Subsets, where keys are class labels and values are the Subsets for that class. - """ - - class_datasets = {} - - # Get the class-to-index mapping from the dataset - class_to_idx = dataset.class_to_idx - - for class_label, class_idx in class_to_idx.items(): - # Get the indices of samples for the current class - indices = [i for i, (_, label) in enumerate(dataset) if label == class_idx] - - # Create a Subset for the current class - class_subset = Subset(dataset, indices) - class_datasets[class_label] = class_subset - - return class_datasets - class SiameseNetworkDataset1(Dataset): def __init__(self,imageFolderDataset,transform=None): diff --git a/recognition/MRI_TimothyTjipto/train.py b/recognition/MRI_TimothyTjipto/train.py index 846a0cd75..59fc9f7a3 100644 --- a/recognition/MRI_TimothyTjipto/train.py +++ b/recognition/MRI_TimothyTjipto/train.py @@ -62,21 +62,23 @@ def load_checkpoint(path): return model,optimizer,epoch,counter,loss,iteration def main(): - transform = transforms.Compose([ - transforms.Grayscale(num_output_channels=1), # Convert to grayscale with one channel - transforms.Resize((120,128)), # img_size should be a tuple like (128, 128) actual img(256x240) - transforms.ToTensor(), - # You can add more transformations if needed - ]) + # transform = transforms.Compose([ + # transforms.Grayscale(num_output_channels=1), # Convert to grayscale with one channel + # transforms.Resize((120,128)), # img_size should be a tuple like (128, 128) actual img(256x240) + # transforms.ToTensor(), + # # You can add more transformations if needed + # ]) + training_transform = dataset.get_transform() raw_dataset = datasets.ImageFolder(root=TRAIN_PATH) - siamese_dataset = SiameseNetworkDataset1(raw_dataset, transform) + siamese_dataset = SiameseNetworkDataset1(raw_dataset, training_transform ) # Create a simple dataloader just for simple visualization - vis_dataloader = DataLoader(siamese_dataset, - shuffle=True, - num_workers=1, - batch_size=16) - - dataset.visualise_batch(vis_dataloader) + # training_dataloader = DataLoader(siamese_dataset, + # shuffle=True, + # num_workers=1, + # batch_size=16) + training_dataloader = dataset.get_dataloader(siamese_dataset,BATCH_SIZE,True) + + dataset.visualise_batch(training_dataloader) device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') @@ -98,7 +100,7 @@ def main(): for epoch in range(current_epoch, EPOCH_RANGE): # Iterate over batches - for i, (img0, img1, label) in enumerate(vis_dataloader, 0): + for i, (img0, img1, label) in enumerate(training_dataloader, 0): # Send the images and labels to CUDA img0, img1, label = img0.cuda(), img1.cuda(), label.cuda() @@ -124,6 +126,7 @@ def main(): loss_history.append(loss_contrastive.item()) iteration_number += 50 + # Save Epoch to Checkpoint if SAVE_EPOCH: if epoch%EPOCH_SAVE__CHECKPOINT == 0: checkpoint = { @@ -136,26 +139,22 @@ def main(): } torch.save(checkpoint, f"/home/Student/s4653241/MRI/Training_Epoch/Epoch_{epoch}.pth") - print("End of Training") show_plot(counter, loss_history) if TEST_MODE: - print(f'Start of testing {datetime.now()}') - checkpoint = torch.load(CHECKPOINT) - model = SiameseNetwork().cuda() - model.load_state_dict(checkpoint['model_state_dict'], strict=False) - - epoch = checkpoint['epoch'] - loss = checkpoint['loss'] + + if not TRAINING_MODE: + checkpoint = torch.load(CHECKPOINT) + model = SiameseNetwork().cuda() + model.load_state_dict(checkpoint['model_state_dict'], strict=False) + epoch = checkpoint['epoch'] + model.eval() raw_test_dataset = datasets.ImageFolder(root=TEST_PATH) - - test_siam = SiameseNetworkDataset_test(raw_test_dataset, transform) - test_dataloader = DataLoader(test_siam, - shuffle=True, - num_workers=1, - batch_size=1) + test_transform = dataset.get_transform() + test_siam = SiameseNetworkDataset_test(raw_test_dataset, test_transform) + test_dataloader = dataset.get_dataloader(test_siam,1,True) dataiter = iter(test_dataloader) x0, _, _,x0label,_ = next(dataiter) @@ -169,7 +168,7 @@ def main(): Neg_Pos = [] for i in range(TEST_RANGE): - print(f'Iteration: {i}') + # print(f'Iteration: {i}') PRINTING = True # Iterate over 10 images and test them with the first image (x0) _, x1, label2,_,x1label = next(dataiter) From e532c7f45116f3f4a1eddc40eb4868a6685e1873 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Mon, 23 Oct 2023 20:01:01 +1000 Subject: [PATCH 19/34] Remove unused function --- recognition/MRI_TimothyTjipto/dataset.py | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/recognition/MRI_TimothyTjipto/dataset.py b/recognition/MRI_TimothyTjipto/dataset.py index 4e17a5992..143802cba 100644 --- a/recognition/MRI_TimothyTjipto/dataset.py +++ b/recognition/MRI_TimothyTjipto/dataset.py @@ -27,21 +27,6 @@ def get_dataloader(dataset, batch_size = 16, shuffle=True): batch_size=batch_size) return v_dataloader -# Pairs up dataset -class PairDataset(Dataset): - def __init__(self,dataset1,dataset2, label): - self.dataset1 = dataset1 - self.dataset2 = dataset2 - self.label = label - - def __len__(self): - return min(len(self.dataset1), len(self.dataset2)) - - def __getitem__(self, index): - img1,_ = self.dataset1[index] - img2,_ = self.dataset2[index] - - return img1, img2, self.label def visualise_1(dataset): From 3a0b7c1b095210fb501d58e9b1e007200f4432ed Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Mon, 23 Oct 2023 21:02:37 +1000 Subject: [PATCH 20/34] Cleaned up train.py, Move visualising plt to predict --- recognition/MRI_TimothyTjipto/predict.py | 28 +++++++++- recognition/MRI_TimothyTjipto/train.py | 70 +++--------------------- 2 files changed, 35 insertions(+), 63 deletions(-) diff --git a/recognition/MRI_TimothyTjipto/predict.py b/recognition/MRI_TimothyTjipto/predict.py index 22bbacaaf..4bbbaa357 100644 --- a/recognition/MRI_TimothyTjipto/predict.py +++ b/recognition/MRI_TimothyTjipto/predict.py @@ -1,6 +1,7 @@ '''Shows example usage of trained model. Print out any results and/ or provide visualisations where applicable''' import matplotlib.pyplot as plt import torch +from torchvision import transforms # Plotting data def show_plot(iteration,loss): @@ -42,4 +43,29 @@ def classify_pair(score, threshold): """ classification = 1 if score < threshold else 0 - return classification \ No newline at end of file + return classification + + +def visual_pred_dis(idx,x0,x1,x0label,x1label,euclidean_distance,predict_class): + Prediction = ['Different', 'Same'] + + plt.clf() + plt.subplot(2, 8, 1) + plt.title(int(x0label)) + x0_pic = transforms.ToPILImage()(x0[0]) + plt.axis('off') + plt.imshow(x0_pic, cmap='gray') + + plt.subplot(2,8,2) + plt.title(f'Dissimilarity: {euclidean_distance.item():.2f}\nClass predicted: {Prediction[predict_class]} ') + plt.axis('off') + + + + plt.subplot(2, 8, 3) + plt.title(int(x1label)) + x1_pic = transforms.ToPILImage()(x1[0]) + plt.axis('off') + plt.imshow(x1_pic, cmap='gray') + + plt.savefig(f'/home/Student/s4653241/MRI/Test_pic/test{idx}') \ No newline at end of file diff --git a/recognition/MRI_TimothyTjipto/train.py b/recognition/MRI_TimothyTjipto/train.py index 59fc9f7a3..2ec378af2 100644 --- a/recognition/MRI_TimothyTjipto/train.py +++ b/recognition/MRI_TimothyTjipto/train.py @@ -62,20 +62,11 @@ def load_checkpoint(path): return model,optimizer,epoch,counter,loss,iteration def main(): - # transform = transforms.Compose([ - # transforms.Grayscale(num_output_channels=1), # Convert to grayscale with one channel - # transforms.Resize((120,128)), # img_size should be a tuple like (128, 128) actual img(256x240) - # transforms.ToTensor(), - # # You can add more transformations if needed - # ]) + training_transform = dataset.get_transform() raw_dataset = datasets.ImageFolder(root=TRAIN_PATH) siamese_dataset = SiameseNetworkDataset1(raw_dataset, training_transform ) - # Create a simple dataloader just for simple visualization - # training_dataloader = DataLoader(siamese_dataset, - # shuffle=True, - # num_workers=1, - # batch_size=16) + training_dataloader = dataset.get_dataloader(siamese_dataset,BATCH_SIZE,True) dataset.visualise_batch(training_dataloader) @@ -160,16 +151,9 @@ def main(): x0, _, _,x0label,_ = next(dataiter) postive_prediction = 0 - Prediction = ['Different', 'Same'] - # Debugging - counter_same_but_wrong = 0 - counter_wrong_but_same = 0 - Neg_Neg = [] - Neg_Pos = [] - + for i in range(TEST_RANGE): - # print(f'Iteration: {i}') - PRINTING = True + # Iterate over 10 images and test them with the first image (x0) _, x1, label2,_,x1label = next(dataiter) @@ -178,59 +162,21 @@ def main(): output1, output2 = model(x0.cuda(), x1.cuda()) euclidean_distance = F.pairwise_distance(output1, output2) - predict_class = predict.classify_pair(euclidean_distance.item(),THRESHOLD) # Threshold if predict_class == 1 and int(x0label) == int(x1label): postive_prediction+=1 - PRINTING = False + if predict_class != 1 and int(x0label) != int(x1label): postive_prediction+=1 - PRINTING = False - if PRINTING: - print(f'Euclidean_distance: {euclidean_distance}') # Debugging Code - print(f'x0 label: {int(x0label)}, x1 label: {int(x1label)}') - print(f'Class predicted: {Prediction[predict_class]}') - rounded_distance = round(float(euclidean_distance.item()), 1) - - if predict_class == 1 and int(x0label) != int(x1label): - counter_same_but_wrong += 1 - if rounded_distance != 0.0: - Neg_Neg.append(rounded_distance) - - - - if predict_class != 1 and int(x0label) == int(x1label): - counter_wrong_but_same += 1 - - if rounded_distance != 1: - Neg_Pos.append(rounded_distance) - - if PRINTING and VISUALISE: - plt.clf() - plt.subplot(2, 8, 1) - plt.title(int(x0label)) - x0_pic = transforms.ToPILImage()(x0[0]) - plt.axis('off') - plt.imshow(x0_pic, cmap='gray') - - plt.subplot(2,8,2) - plt.title(f'Dissimilarity: {euclidean_distance.item():.2f}\nClass predicted: {Prediction[predict_class]} ') - plt.axis('off') + + if VISUALISE: - - - plt.subplot(2, 8, 3) - plt.title(int(x1label)) - x1_pic = transforms.ToPILImage()(x1[0]) - plt.axis('off') - plt.imshow(x1_pic, cmap='gray') - - plt.savefig(f'/home/Student/s4653241/MRI/Test_pic/test{i}') + predict.visual_pred_dis(i,x0,x1,x0label,x1label,euclidean_distance,predict_class) Accuracy = postive_prediction/TEST_RANGE From 5276a994126090c5b121de776c4b27a7ef4aad76 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Mon, 23 Oct 2023 22:02:40 +1000 Subject: [PATCH 21/34] Documentation for predict.py --- recognition/MRI_TimothyTjipto/predict.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/recognition/MRI_TimothyTjipto/predict.py b/recognition/MRI_TimothyTjipto/predict.py index 4bbbaa357..e708cc34f 100644 --- a/recognition/MRI_TimothyTjipto/predict.py +++ b/recognition/MRI_TimothyTjipto/predict.py @@ -1,10 +1,19 @@ '''Shows example usage of trained model. Print out any results and/ or provide visualisations where applicable''' + +# Importing necessary libraries and modules import matplotlib.pyplot as plt import torch from torchvision import transforms -# Plotting data + def show_plot(iteration,loss): + """ + Plots the loss values against iterations and saves the resulting graph. + + Args: + iteration (List[int]): A list of iteration numbers. + loss (List[float]): A list of loss values corresponding to each iteration. + """ plt.clf() plt.plot(iteration,loss) plt.savefig("Iteration loss") @@ -47,6 +56,18 @@ def classify_pair(score, threshold): def visual_pred_dis(idx,x0,x1,x0label,x1label,euclidean_distance,predict_class): + """ + Visualizes the predictions by plotting the input images and their predicted dissimilarity. + + Args: + idx (int): _description_ + x0 (torch.Tensor): First input image tensor + x1 (torch.Tensor): Second input image tensor + x0label (int): Label of first image + x1label (int): Label of second image + euclidean_distance (float): Calculated euclidean distance between the embeddings of the two images. + predict_class (int): Predicted class (0 for 'Different', 1 for 'Same'). + """ Prediction = ['Different', 'Same'] plt.clf() From fd2e21b1f22189b54265ea2ab225f6c23a568e3d Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Mon, 23 Oct 2023 22:38:14 +1000 Subject: [PATCH 22/34] Completed documentation for dataset.py --- recognition/MRI_TimothyTjipto/dataset.py | 71 +++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/recognition/MRI_TimothyTjipto/dataset.py b/recognition/MRI_TimothyTjipto/dataset.py index 143802cba..6fa869979 100644 --- a/recognition/MRI_TimothyTjipto/dataset.py +++ b/recognition/MRI_TimothyTjipto/dataset.py @@ -1,5 +1,6 @@ '''Data loader for loading and preprocessing data''' +# Importing necessary libraries and modules import torch import numpy as np import matplotlib.pyplot as plt @@ -10,7 +11,9 @@ def get_transform(): """ - Returns a composed transformation for datasets. + Returns a composed transform for preprocessing images. + Returns: + torchvision.transforms.Compose: A composed transform for preprocessing images. """ transform = transforms.Compose([ transforms.Grayscale(num_output_channels=1), # Convert to grayscale with one channel @@ -21,6 +24,19 @@ def get_transform(): return transform def get_dataloader(dataset, batch_size = 16, shuffle=True): + """ + Returns a DataLoader for the given dataset. + + This function creates and returns a DataLoader for the provided dataset with the specified batch size and shuffling option. + + Parameters: + - dataset (Dataset): The dataset for which the DataLoader is to be created. + - batch_size (int, optional): The number of samples per batch. Default is 16. + - shuffle (bool, optional): Whether to shuffle the dataset before splitting into batches. Default is True. + + Returns: + - DataLoader: A DataLoader object for the given dataset with the specified parameters. + """ v_dataloader = DataLoader(dataset, shuffle=shuffle, num_workers=1, @@ -30,6 +46,12 @@ def get_dataloader(dataset, batch_size = 16, shuffle=True): def visualise_1(dataset): + """ + Plots a random image in the dataset + + Args: + dataset (Dataset): Dataset which the random image will be picked + """ img,lab = random.choice(dataset) plt.title(lab) plt.imshow(img) @@ -39,6 +61,12 @@ def visualise_1(dataset): def visualise_batch(dataloader): + """ + Plots a batch of images from the dataloader + + Args: + dataloader (Dataloader): Dataset which a batch will be taken to be plotted. + """ LABELS = ['POS','NEG'] example_batch = iter(dataloader) @@ -68,11 +96,29 @@ def visualise_batch(dataloader): class SiameseNetworkDataset1(Dataset): + """ + A dataset class for creating pairs of images for Siamese networks. + + Args: + Dataset (torchvision.datasets.ImageFolder): A dataset object containing images and their labels. + transform (torchvision.transforms): A function/transform that takes in an image and returns a transformed version. + Default is None. + """ def __init__(self,imageFolderDataset,transform=None): + self.imageFolderDataset = imageFolderDataset self.transform = transform def __getitem__(self,index): + """ + Returns a pair of images and a label indicating if they belong to the same class. + + Args: + index (int): Index (ignored) + + Returns: + tuple: A tuple containing two images and a label + """ img0_tuple = random.choice(self.imageFolderDataset.imgs) #We need to approximately 50% of images to be in the same class @@ -108,11 +154,28 @@ def __len__(self): class SiameseNetworkDataset_test(Dataset): + """ + A test dataset class for creating pairs of images for Siamese networks. + + Args: + Dataset (torchvision.datasets.ImageFolder): A dataset object containing images and their labels. + transform (torchvision.transforms): A function/transform that takes in an image and returns a transformed version. + Default is None. + """ def __init__(self,imageFolderDataset,transform=None): self.imageFolderDataset = imageFolderDataset self.transform = transform def __getitem__(self,index): + """ + Returns a pair of images, a label indicating if they belong to the same class and labels of images. + + Args: + index (int): Index (ignored in this implementation as images are chosen randomly). + + Returns: + tuple: A tuple containing two images, a label (1 if the images are from different classes, 0 otherwise) and 2 labels of the respective images. + """ img0_tuple = random.choice(self.imageFolderDataset.imgs) #We need to approximately 50% of images to be in the same class @@ -144,4 +207,10 @@ def __getitem__(self,index): return img0, img1, torch.from_numpy(np.array([int(img1_tuple[1] != img0_tuple[1])], dtype=np.float32)), img0_tuple[1],img1_tuple[1] def __len__(self): + """ + Returns the total number of images in the dataset. + + Returns: + int: Total number of images in the dataset. + """ return len(self.imageFolderDataset.imgs) From 256c636bf7b424ad7e73c5ce7208fc0fa8682013 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 24 Oct 2023 02:25:08 +1000 Subject: [PATCH 23/34] Documentation for modules.py --- recognition/MRI_TimothyTjipto/modules.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/recognition/MRI_TimothyTjipto/modules.py b/recognition/MRI_TimothyTjipto/modules.py index c14b088a8..8919d7d2b 100644 --- a/recognition/MRI_TimothyTjipto/modules.py +++ b/recognition/MRI_TimothyTjipto/modules.py @@ -1,7 +1,6 @@ '''Source code of the components of your model. Each component must be implementated as a class or a function ''' - # Importing necessary libraries and modules import torch import torch.nn as nn @@ -9,6 +8,14 @@ class SiameseNetwork(nn.Module): + """ + A Siamese Neural Network that takes in pair of images and returns vectors + for both images in the pair. The vectors are then used to determine the similarity + between the two images. + + Args: + nn (torch.nn.Module)): Base class for all neural network modules in PyTorch. + """ def __init__(self): super(SiameseNetwork, self).__init__() @@ -56,12 +63,21 @@ def forward(self, input1, input2): # Define the Contrastive Loss Function class ContrastiveLoss(torch.nn.Module): + """ + Contrastive loss function. Computes the contrastive loss between pairs of samples based on their + distances and labels. + + Args: + margin (float): The margin value beyond which the loss will not incease. + It acts as a threshold to separate positive and negative pairs. + Default is 2.0. + """ def __init__(self, margin=2.0): super(ContrastiveLoss, self).__init__() self.margin = margin def forward(self, output1, output2, label): - # Calculate the euclidean distance and calculate the contrastive loss + euclidean_distance = F.pairwise_distance(output1, output2, keepdim = True) loss_contrastive = torch.mean((1-label) * torch.pow(euclidean_distance, 2) + From 83947eca51d1958b06f764ec482d9cb6ef454285 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 24 Oct 2023 02:28:22 +1000 Subject: [PATCH 24/34] added comments --- recognition/MRI_TimothyTjipto/train.py | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/recognition/MRI_TimothyTjipto/train.py b/recognition/MRI_TimothyTjipto/train.py index 2ec378af2..39f2ac53e 100644 --- a/recognition/MRI_TimothyTjipto/train.py +++ b/recognition/MRI_TimothyTjipto/train.py @@ -2,25 +2,15 @@ should be imported from “modules.py” and the data loader should be imported from “dataset.py”. Make sure to plot the losses and metrics during training''' +# Importing necessary libraries and modules import torch -import torchvision -from torch.autograd import Variable -import torch.nn as nn +from torchvision import datasets from torch import optim import torch.nn.functional as F -from torchvision import datasets, transforms -from torch.utils.data import DataLoader, Dataset -import torchvision.utils -import numpy as np -import matplotlib.pyplot as plt -import random -from datetime import datetime -from PIL import Image - +# Importing custom modules import dataset from dataset import SiameseNetworkDataset1,SiameseNetworkDataset_test -import modules from modules import SiameseNetwork, ContrastiveLoss from predict import show_plot import predict @@ -37,12 +27,12 @@ CHECKPOINT_TRAINING = False # Use Checkpoint and continue Training LOAD_CHECKPOINT_TRAINING = "/home/Student/s4653241/MRI/Training_Epoch/Epoch_40.pth" SAVE_EPOCH = True -EPOCH_SAVE__CHECKPOINT = 60 # Saves every 30 Epoch +EPOCH_SAVE__CHECKPOINT = 60 # Saves every 60 Epoch TEST_MODE = True # For Testing CHECKPOINT = "/home/Student/s4653241/MRI/Training_Epoch/Epoch_60.pth" # Test the checkpoint you want TEST_RANGE = 500 # Testing size -THRESHOLD = 0.5 +THRESHOLD = 0.5 # Threshold Number VISUALISE = False # Print out Error pics DEBUGGING TOOL for now From 467863c4289b07804d9148d451aaa43149100fbc Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 24 Oct 2023 02:47:32 +1000 Subject: [PATCH 25/34] Finish Documentation --- recognition/MRI_TimothyTjipto/train.py | 30 ++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/recognition/MRI_TimothyTjipto/train.py b/recognition/MRI_TimothyTjipto/train.py index 39f2ac53e..0a0833439 100644 --- a/recognition/MRI_TimothyTjipto/train.py +++ b/recognition/MRI_TimothyTjipto/train.py @@ -1,7 +1,3 @@ -'''Source code for training, validating, testing and saving your model. The model -should be imported from “modules.py” and the data loader should be imported from “dataset.py”. Make -sure to plot the losses and metrics during training''' - # Importing necessary libraries and modules import torch from torchvision import datasets @@ -37,6 +33,24 @@ def load_checkpoint(path): + """ + Load a model and its parameters from a checkpoint. + + This function loads a SiameseNetwork model along with its optimizer state, epoch, counter, loss, and iteration + from a given checkpoint path. The model is moved to the CUDA device if available. + + Args: + path (str): Path to the checkpoint file. + + Returns: + tuple: A tuple containing the following elements: + - model (SiameseNetwork): The loaded SiameseNetwork model. + - optimizer (optim.Adam): The optimizer with its state loaded. + - epoch (int): The epoch at which the checkpoint was saved. + - counter (list): A list of counters indicating the progress of training. + - loss (list): A list of loss values recorded during training. + - iteration (int): The iteration number at which the checkpoint was saved. + """ model = SiameseNetwork().cuda() optimizer = optim.Adam(model.parameters(), lr = 0.00006) @@ -52,7 +66,9 @@ def load_checkpoint(path): return model,optimizer,epoch,counter,loss,iteration def main(): - + """ + Main function to train and test a Siamese Network. + """ training_transform = dataset.get_transform() raw_dataset = datasets.ImageFolder(root=TRAIN_PATH) siamese_dataset = SiameseNetworkDataset1(raw_dataset, training_transform ) @@ -101,7 +117,7 @@ def main(): # Optimize optimizer.step() - # Every 10 batches print out the loss + # Every 50 batches append loss if i % 50 == 0 : counter.append(iteration_number) loss_history.append(loss_contrastive.item()) @@ -123,6 +139,7 @@ def main(): show_plot(counter, loss_history) if TEST_MODE: + # Load Checkpoint if not TRAINING_MODE: checkpoint = torch.load(CHECKPOINT) model = SiameseNetwork().cuda() @@ -142,6 +159,7 @@ def main(): postive_prediction = 0 + # Test image for i in range(TEST_RANGE): # Iterate over 10 images and test them with the first image (x0) From 6d538382e24af843404f04267ddd5a4f50d650b8 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 24 Oct 2023 02:48:45 +1000 Subject: [PATCH 26/34] Undo comment --- recognition/MRI_TimothyTjipto/train.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/recognition/MRI_TimothyTjipto/train.py b/recognition/MRI_TimothyTjipto/train.py index 0a0833439..295d1e786 100644 --- a/recognition/MRI_TimothyTjipto/train.py +++ b/recognition/MRI_TimothyTjipto/train.py @@ -1,3 +1,7 @@ +'''Source code for training, validating, testing and saving your model. The model +should be imported from “modules.py” and the data loader should be imported from “dataset.py”. Make +sure to plot the losses and metrics during training''' + # Importing necessary libraries and modules import torch from torchvision import datasets From 18d610e75788962155ad0016409b18f52fbaa079 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 24 Oct 2023 12:38:55 +1000 Subject: [PATCH 27/34] Title --- recognition/MRI_TimothyTjipto/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/recognition/MRI_TimothyTjipto/README.md b/recognition/MRI_TimothyTjipto/README.md index b5d74d17a..6a97734a1 100644 --- a/recognition/MRI_TimothyTjipto/README.md +++ b/recognition/MRI_TimothyTjipto/README.md @@ -2,6 +2,11 @@ ADNI brain data set (see Appendix for link) having a minimum accuracy of 0.8 on the test set. [Hard Difficulty] +# Siamese Network classifier to classify Alzheimer's disease + +Project uses Siamese Network to predict the similarity between two images and classify normal or AD(Alzheimer's Disease). + +## Siamese network From 48f6d9ecfc4907ea7e20499d5f81d24258ebdf99 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 24 Oct 2023 17:50:46 +1000 Subject: [PATCH 28/34] Remove top comments --- recognition/MRI_TimothyTjipto/dataset.py | 2 -- recognition/MRI_TimothyTjipto/modules.py | 3 --- recognition/MRI_TimothyTjipto/predict.py | 2 -- recognition/MRI_TimothyTjipto/train.py | 6 +----- 4 files changed, 1 insertion(+), 12 deletions(-) diff --git a/recognition/MRI_TimothyTjipto/dataset.py b/recognition/MRI_TimothyTjipto/dataset.py index 6fa869979..c08cfd9db 100644 --- a/recognition/MRI_TimothyTjipto/dataset.py +++ b/recognition/MRI_TimothyTjipto/dataset.py @@ -1,5 +1,3 @@ -'''Data loader for loading and preprocessing data''' - # Importing necessary libraries and modules import torch import numpy as np diff --git a/recognition/MRI_TimothyTjipto/modules.py b/recognition/MRI_TimothyTjipto/modules.py index 8919d7d2b..030fc74e2 100644 --- a/recognition/MRI_TimothyTjipto/modules.py +++ b/recognition/MRI_TimothyTjipto/modules.py @@ -1,6 +1,3 @@ -'''Source code of the components of your model. Each component must be -implementated as a class or a function -''' # Importing necessary libraries and modules import torch import torch.nn as nn diff --git a/recognition/MRI_TimothyTjipto/predict.py b/recognition/MRI_TimothyTjipto/predict.py index e708cc34f..155d6c29c 100644 --- a/recognition/MRI_TimothyTjipto/predict.py +++ b/recognition/MRI_TimothyTjipto/predict.py @@ -1,5 +1,3 @@ -'''Shows example usage of trained model. Print out any results and/ or provide visualisations where applicable''' - # Importing necessary libraries and modules import matplotlib.pyplot as plt import torch diff --git a/recognition/MRI_TimothyTjipto/train.py b/recognition/MRI_TimothyTjipto/train.py index 295d1e786..d9d3e6ea4 100644 --- a/recognition/MRI_TimothyTjipto/train.py +++ b/recognition/MRI_TimothyTjipto/train.py @@ -1,7 +1,3 @@ -'''Source code for training, validating, testing and saving your model. The model -should be imported from “modules.py” and the data loader should be imported from “dataset.py”. Make -sure to plot the losses and metrics during training''' - # Importing necessary libraries and modules import torch from torchvision import datasets @@ -26,7 +22,7 @@ EPOCH_RANGE = 61 # Size of the Training Epoch CHECKPOINT_TRAINING = False # Use Checkpoint and continue Training LOAD_CHECKPOINT_TRAINING = "/home/Student/s4653241/MRI/Training_Epoch/Epoch_40.pth" -SAVE_EPOCH = True +SAVE_EPOCH = False EPOCH_SAVE__CHECKPOINT = 60 # Saves every 60 Epoch TEST_MODE = True # For Testing From ba35ebc75aa4153c9c138367b54c998863909357 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 24 Oct 2023 19:50:41 +1000 Subject: [PATCH 29/34] Images for README --- .../MRI_TimothyTjipto/Images/Accuracy.png | Bin 0 -> 942 bytes .../MRI_TimothyTjipto/Images/Iteration loss.png | Bin 0 -> 68647 bytes recognition/MRI_TimothyTjipto/Images/Loss.png | Bin 0 -> 1279 bytes .../Images/Siamese_Network.png | Bin 0 -> 98680 bytes .../Images/prediction/test1g.png | Bin 0 -> 22791 bytes .../Images/prediction/test2g.png | Bin 0 -> 24072 bytes .../Images/prediction/test3g.png | Bin 0 -> 23740 bytes .../Images/prediction/test4g.png | Bin 0 -> 23202 bytes .../Images/prediction/test5g.png | Bin 0 -> 23247 bytes .../Images/prediction/test6g.png | Bin 0 -> 23430 bytes .../Images/visualise_batch.png | Bin 0 -> 75490 bytes 11 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 recognition/MRI_TimothyTjipto/Images/Accuracy.png create mode 100644 recognition/MRI_TimothyTjipto/Images/Iteration loss.png create mode 100644 recognition/MRI_TimothyTjipto/Images/Loss.png create mode 100644 recognition/MRI_TimothyTjipto/Images/Siamese_Network.png create mode 100644 recognition/MRI_TimothyTjipto/Images/prediction/test1g.png create mode 100644 recognition/MRI_TimothyTjipto/Images/prediction/test2g.png create mode 100644 recognition/MRI_TimothyTjipto/Images/prediction/test3g.png create mode 100644 recognition/MRI_TimothyTjipto/Images/prediction/test4g.png create mode 100644 recognition/MRI_TimothyTjipto/Images/prediction/test5g.png create mode 100644 recognition/MRI_TimothyTjipto/Images/prediction/test6g.png create mode 100644 recognition/MRI_TimothyTjipto/Images/visualise_batch.png diff --git a/recognition/MRI_TimothyTjipto/Images/Accuracy.png b/recognition/MRI_TimothyTjipto/Images/Accuracy.png new file mode 100644 index 0000000000000000000000000000000000000000..e88ec8c957c546d57c0012d9e96c1fb4374f6e96 GIT binary patch literal 942 zcmV;f15x~mP)X1^@s6tTx3S00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&14BtfK~#8N?U*}q z<1h?{_bh34kC`Gqh^tKQkSacboA?B&+@*4-l}LaB@gN~tPDV2*zL`Yk1NiX+R`TcX zzo#Jx_Cgpo*cD;eU{{1;gIy7Z4R%EsHrN$m*kD)q4f}Q;Zny7|ui@iG`8;?iua`;t znd|9UUDx7p`l`<0e7@23$KkX3yixa;_u)#{Uf+j zxAX9d&tQ0LRflY3ay}aHax80d!${Lw&mV=;u({i&4ou0J9faZ{RwBH6iC7~^1bzpI zI8On%YZ8@pxF{r_01bip6q?V1n6=!&K=p*0XzcNl&X(~CldT3~E%Q>516dVa~(3Le70!%k_+ak82ATp88(Sl0@D-Hh2{8?RL?RE%Z*|P zPJy$kHK`ySV`=-E_kppxx>zWB6&)OTc7gcR^XGMCnpYa({YR+7%)L$2!eQ7P7!5)i z$|;^AhQ=bpt}=s+cTvO9bsnRyrZ#N-8sOBtf%=V6>C762<_hch{(R=+OxriCR*>|J z1m!fMx42sy7DeRD#b$+R!E#8kdiJeij%)RhFv_unge8sTx{smgDpljG9)RdS; z3Cby+)7V=YR_}NjuX?8n-J5^zHtHP|{Y_($XA4lLYa-_)HN!o<3ID5xwSqz+*$a5L z;2=gP8O=P>c%D10H8L-|fReO!Ix|fi{tiune7m|dFus*)^AOVd-kt3_=*`QGXc^P? z%oel_Ylt;}Mht{PRSAqqvHudF@#=)eB*{K*9^6yi=Q1od7Rdo7lNv*MUYmgam!M#t z!9Y!%ji96C$+ahxiQKr8>nni#Xm0g@0+cw^bsN$&tlnve(xs%3P0>mr5t-mD{78x+ z-?!ATWnFcbH3j%u%aFLPXGGAb8)FX{muA)kYTK(@FD6k-!-Tw+cjwxs|3_D#;BA&* zYr?Q=fazmSx!_@hVHcyk3I#t#7}g7Yrwg0AK|2epBO5{ Q{{R3007*qoM6N<$f{K9QDC1^{$806;=9 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 Dkl%JR literal 0 HcmV?d00001 diff --git a/recognition/MRI_TimothyTjipto/Images/prediction/test3g.png b/recognition/MRI_TimothyTjipto/Images/prediction/test3g.png new file mode 100644 index 0000000000000000000000000000000000000000..c8a239b38c074e33aba829ec7e5c289381107062 GIT binary patch literal 23740 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 XaiNem#r1%%w8&A%;||Ssp&9=RazJy) literal 0 HcmV?d00001 diff --git a/recognition/MRI_TimothyTjipto/Images/prediction/test5g.png b/recognition/MRI_TimothyTjipto/Images/prediction/test5g.png new file mode 100644 index 0000000000000000000000000000000000000000..0ac0ef11cd644fdb984a14aa7974f4b23a058436 GIT binary patch literal 23247 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 T96K%zp_Vyp?@VeS2BiES5a9jT literal 0 HcmV?d00001 diff --git a/recognition/MRI_TimothyTjipto/Images/prediction/test6g.png b/recognition/MRI_TimothyTjipto/Images/prediction/test6g.png new file mode 100644 index 0000000000000000000000000000000000000000..dd3fab0740e772a7747b3aabd5d0f88e0d1a3708 GIT binary patch literal 23430 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

E6mpl?D4ALK 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 Gss90BLcVJN literal 0 HcmV?d00001 diff --git a/recognition/MRI_TimothyTjipto/Images/visualise_batch.png b/recognition/MRI_TimothyTjipto/Images/visualise_batch.png new file mode 100644 index 0000000000000000000000000000000000000000..033c6f7cf16703257ab2e195d86e3b8062254fb4 GIT binary patch literal 75490 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 DcA!ti literal 0 HcmV?d00001 From 8232921ade5d79d0a03f34b8bd483c767204e63a Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 24 Oct 2023 19:50:49 +1000 Subject: [PATCH 30/34] Completed the section --- recognition/MRI_TimothyTjipto/README.md | 94 +++++++++++++++++++++++-- 1 file changed, 88 insertions(+), 6 deletions(-) diff --git a/recognition/MRI_TimothyTjipto/README.md b/recognition/MRI_TimothyTjipto/README.md index 6a97734a1..3d89953b0 100644 --- a/recognition/MRI_TimothyTjipto/README.md +++ b/recognition/MRI_TimothyTjipto/README.md @@ -1,16 +1,98 @@ -7. Create a classifier based on Siamese network [10] to classify Alzheimer’s disease (normal and AD) of the -ADNI brain data set (see Appendix for link) having a minimum accuracy of 0.8 on the test set. [Hard -Difficulty] - # Siamese Network classifier to classify Alzheimer's disease Project uses Siamese Network to predict the similarity between two images and classify normal or AD(Alzheimer's Disease). ## Siamese network +Siamese Network is a specialized neural network architectural which uses two identical subnetworks that shares parameters and weight. + +Use two images as inputs and produces a similarity score between the two. Then classify with a label. + +Popular with face verification, signature verification, and few-shot learning. + +![SiameseNetwork_Example](Images/Siamese_Network.png) + +Both uses the same identical Convolutional Neural Network(CNN). + +During Training, Siamese networks often uses pairs that are "similar" or "dissimilar". Network learns to minimize the distance for similar pairs and maximize it for dissimilar pairs. + +After processing the inputs, the final layer/differencing layer computes a distance metrics between the two outputs, often Euclidean distance. Similar items will have smaller distance between their output, while dissimilar items will have a larger distance. + +Main advantages of using Siamese Network is their ability to perform one-shot learning. The ability to recongize new classes or entities with little data. + +## ADNI brain dataset + +### 1. Data Preprocessing + +The ADNI brain dataset contains two classes, AD and NC in both Training and Test. All image has initial shape of (3,240,256) 256 x 240 (W x H) [batch_size,channel,height,width]. Loading the dataset, all images will be normalized.All Images are resized to (1,120,128) to increase training speed. + +It is then paired and labeled accourdingly if it is similar class or not. Pairing process randomly pics between 2 classes to pair up. In doing so doesn't overtrain the model. + +Batchloader is set to 16 to speed up the training process, can be change if needed. + +Figure shows a batch with labels stating if it's a Similar or Dissimilar pair. + +![visualise_pair](Images/visualise_batch.png) + +POS being Positive pair and NEG being Negative pair for visual purposes. + +### 2. Siamese Model + +The Siamese Model first part begins with the embedding where it transforms the input images into a continuous vector space. + +3 convolutional layers, 2 max-pooling layer and 2 dense layer with sigmoid activation function. + +Sigmoid activation for final layer as output is within specific range. + + + + +### 3. Training + +Contrastive Loss is used as a loss function as it is focus on learning the similarity or dissimilarity between pairs of the inputs. + +Optimizer is Adam with a learning rate of 0.00006 + +After 40 Epoch, + +![iteration_loss](Images/Iteration%20loss.png) + + +### 4. Testing + +Testing the trained model results, + +![loss](Images/Loss.png) +![accuracy](Images/Accuracy.png) + +### 5. Prediction + + +![predicton1](Images/prediction/test1g.png) ![prediction2](Images/prediction/test2g.png) ![prediction3](Images/prediction/test3g.png) + + + +## Code Discription +1. "dataset.py" contains Data loader for loading and preprocessing the dataset. + +2. "modules.py" contains Source code of the components of the model.Each component is implementated as a class or a function. + +3. "predict.py" contains to showexample usage of trained model. Print out any results and/ or provide visualisations where applicable. + +4. "train.py" contains the source code for training, validating, testing and saving the model. + - Change TRAIN_PATH to PATH of training dataset and set TRAINING_MODE to True if you want to use model for training. + - If use checkpoint of trained model to test edit CHECKPOINT PATH + +## **Dependencies** +1. Python 3.11.5 +2. External Libriaries: + - torch 2.01 + - matplotlib 3.8.0 + - torchvision 0.15.2 + - numpy 1.25.2 -Data Augmentations -Black area around the brain we want to reduce it. +## References +[1] Images of Achitecute of Siamese Neural Network https://www.latentview.com/blog/siamese-neural-network-a-face-recognition-case-study/ \ No newline at end of file From 2fad8ce3c58c278958eff77bd99bfc738b400be3 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 24 Oct 2023 19:52:49 +1000 Subject: [PATCH 31/34] deleted stuff in gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index f0df6e0bc..1ab3b3d98 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -recognition/MRI_TimothyTjipto/bin/FUCKYOUMOM.png recognition/MRI_TimothyTjipto/bin/lol.png recognition/MRI_TimothyTjipto/bin/Note.txt recognition/MRI_TimothyTjipto/bin/TEST.ipynb From a091a9a11d0803f89833facf19841abe35977abd Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 24 Oct 2023 20:08:47 +1000 Subject: [PATCH 32/34] Change to True TRAINING_MODE --- recognition/MRI_TimothyTjipto/train.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recognition/MRI_TimothyTjipto/train.py b/recognition/MRI_TimothyTjipto/train.py index d9d3e6ea4..19b433859 100644 --- a/recognition/MRI_TimothyTjipto/train.py +++ b/recognition/MRI_TimothyTjipto/train.py @@ -18,7 +18,7 @@ INPUT_SHAPE= (120, 128) # SIZE OF IMAGE 256 X 240 BATCH_SIZE = 16 # Batch Size for DataLoader -TRAINING_MODE = False # Training mode +TRAINING_MODE = True # Training mode EPOCH_RANGE = 61 # Size of the Training Epoch CHECKPOINT_TRAINING = False # Use Checkpoint and continue Training LOAD_CHECKPOINT_TRAINING = "/home/Student/s4653241/MRI/Training_Epoch/Epoch_40.pth" From 302b630024538f45578e90369a38793f934a8814 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 24 Oct 2023 20:22:40 +1000 Subject: [PATCH 33/34] Rename folder --- .../Images/Accuracy.png | Bin .../Images/Iteration loss.png | Bin .../Images/Loss.png | Bin .../Images/Siamese_Network.png | Bin .../Images/prediction/test1g.png | Bin .../Images/prediction/test2g.png | Bin .../Images/prediction/test3g.png | Bin .../Images/prediction/test4g.png | Bin .../Images/prediction/test5g.png | Bin .../Images/prediction/test6g.png | Bin .../Images/visualise_batch.png | Bin .../README.md | 0 .../__pycache__/dataset.cpython-310.pyc | Bin .../__pycache__/modules.cpython-310.pyc | Bin .../__pycache__/predict.cpython-310.pyc | Bin .../__pycache__/train.cpython-310.pyc | Bin .../dataset.py | 0 .../modules.py | 0 .../predict.py | 0 .../train.py | 0 20 files changed, 0 insertions(+), 0 deletions(-) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/Images/Accuracy.png (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/Images/Iteration loss.png (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/Images/Loss.png (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/Images/Siamese_Network.png (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/Images/prediction/test1g.png (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/Images/prediction/test2g.png (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/Images/prediction/test3g.png (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/Images/prediction/test4g.png (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/Images/prediction/test5g.png (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/Images/prediction/test6g.png (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/Images/visualise_batch.png (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/README.md (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/__pycache__/dataset.cpython-310.pyc (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/__pycache__/modules.cpython-310.pyc (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/__pycache__/predict.cpython-310.pyc (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/__pycache__/train.cpython-310.pyc (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/dataset.py (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/modules.py (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/predict.py (100%) rename recognition/{MRI_TimothyTjipto => SiameseNetwork_s4653241}/train.py (100%) diff --git a/recognition/MRI_TimothyTjipto/Images/Accuracy.png b/recognition/SiameseNetwork_s4653241/Images/Accuracy.png similarity index 100% rename from recognition/MRI_TimothyTjipto/Images/Accuracy.png rename to recognition/SiameseNetwork_s4653241/Images/Accuracy.png diff --git a/recognition/MRI_TimothyTjipto/Images/Iteration loss.png b/recognition/SiameseNetwork_s4653241/Images/Iteration loss.png similarity index 100% rename from recognition/MRI_TimothyTjipto/Images/Iteration loss.png rename to recognition/SiameseNetwork_s4653241/Images/Iteration loss.png diff --git a/recognition/MRI_TimothyTjipto/Images/Loss.png b/recognition/SiameseNetwork_s4653241/Images/Loss.png similarity index 100% rename from recognition/MRI_TimothyTjipto/Images/Loss.png rename to recognition/SiameseNetwork_s4653241/Images/Loss.png diff --git a/recognition/MRI_TimothyTjipto/Images/Siamese_Network.png b/recognition/SiameseNetwork_s4653241/Images/Siamese_Network.png similarity index 100% rename from recognition/MRI_TimothyTjipto/Images/Siamese_Network.png rename to recognition/SiameseNetwork_s4653241/Images/Siamese_Network.png diff --git a/recognition/MRI_TimothyTjipto/Images/prediction/test1g.png b/recognition/SiameseNetwork_s4653241/Images/prediction/test1g.png similarity index 100% rename from recognition/MRI_TimothyTjipto/Images/prediction/test1g.png rename to recognition/SiameseNetwork_s4653241/Images/prediction/test1g.png diff --git a/recognition/MRI_TimothyTjipto/Images/prediction/test2g.png b/recognition/SiameseNetwork_s4653241/Images/prediction/test2g.png similarity index 100% rename from recognition/MRI_TimothyTjipto/Images/prediction/test2g.png rename to recognition/SiameseNetwork_s4653241/Images/prediction/test2g.png diff --git a/recognition/MRI_TimothyTjipto/Images/prediction/test3g.png b/recognition/SiameseNetwork_s4653241/Images/prediction/test3g.png similarity index 100% rename from recognition/MRI_TimothyTjipto/Images/prediction/test3g.png rename to recognition/SiameseNetwork_s4653241/Images/prediction/test3g.png diff --git a/recognition/MRI_TimothyTjipto/Images/prediction/test4g.png b/recognition/SiameseNetwork_s4653241/Images/prediction/test4g.png similarity index 100% rename from recognition/MRI_TimothyTjipto/Images/prediction/test4g.png rename to recognition/SiameseNetwork_s4653241/Images/prediction/test4g.png diff --git a/recognition/MRI_TimothyTjipto/Images/prediction/test5g.png b/recognition/SiameseNetwork_s4653241/Images/prediction/test5g.png similarity index 100% rename from recognition/MRI_TimothyTjipto/Images/prediction/test5g.png rename to recognition/SiameseNetwork_s4653241/Images/prediction/test5g.png diff --git a/recognition/MRI_TimothyTjipto/Images/prediction/test6g.png b/recognition/SiameseNetwork_s4653241/Images/prediction/test6g.png similarity index 100% rename from recognition/MRI_TimothyTjipto/Images/prediction/test6g.png rename to recognition/SiameseNetwork_s4653241/Images/prediction/test6g.png diff --git a/recognition/MRI_TimothyTjipto/Images/visualise_batch.png b/recognition/SiameseNetwork_s4653241/Images/visualise_batch.png similarity index 100% rename from recognition/MRI_TimothyTjipto/Images/visualise_batch.png rename to recognition/SiameseNetwork_s4653241/Images/visualise_batch.png diff --git a/recognition/MRI_TimothyTjipto/README.md b/recognition/SiameseNetwork_s4653241/README.md similarity index 100% rename from recognition/MRI_TimothyTjipto/README.md rename to recognition/SiameseNetwork_s4653241/README.md diff --git a/recognition/MRI_TimothyTjipto/__pycache__/dataset.cpython-310.pyc b/recognition/SiameseNetwork_s4653241/__pycache__/dataset.cpython-310.pyc similarity index 100% rename from recognition/MRI_TimothyTjipto/__pycache__/dataset.cpython-310.pyc rename to recognition/SiameseNetwork_s4653241/__pycache__/dataset.cpython-310.pyc diff --git a/recognition/MRI_TimothyTjipto/__pycache__/modules.cpython-310.pyc b/recognition/SiameseNetwork_s4653241/__pycache__/modules.cpython-310.pyc similarity index 100% rename from recognition/MRI_TimothyTjipto/__pycache__/modules.cpython-310.pyc rename to recognition/SiameseNetwork_s4653241/__pycache__/modules.cpython-310.pyc diff --git a/recognition/MRI_TimothyTjipto/__pycache__/predict.cpython-310.pyc b/recognition/SiameseNetwork_s4653241/__pycache__/predict.cpython-310.pyc similarity index 100% rename from recognition/MRI_TimothyTjipto/__pycache__/predict.cpython-310.pyc rename to recognition/SiameseNetwork_s4653241/__pycache__/predict.cpython-310.pyc diff --git a/recognition/MRI_TimothyTjipto/__pycache__/train.cpython-310.pyc b/recognition/SiameseNetwork_s4653241/__pycache__/train.cpython-310.pyc similarity index 100% rename from recognition/MRI_TimothyTjipto/__pycache__/train.cpython-310.pyc rename to recognition/SiameseNetwork_s4653241/__pycache__/train.cpython-310.pyc diff --git a/recognition/MRI_TimothyTjipto/dataset.py b/recognition/SiameseNetwork_s4653241/dataset.py similarity index 100% rename from recognition/MRI_TimothyTjipto/dataset.py rename to recognition/SiameseNetwork_s4653241/dataset.py diff --git a/recognition/MRI_TimothyTjipto/modules.py b/recognition/SiameseNetwork_s4653241/modules.py similarity index 100% rename from recognition/MRI_TimothyTjipto/modules.py rename to recognition/SiameseNetwork_s4653241/modules.py diff --git a/recognition/MRI_TimothyTjipto/predict.py b/recognition/SiameseNetwork_s4653241/predict.py similarity index 100% rename from recognition/MRI_TimothyTjipto/predict.py rename to recognition/SiameseNetwork_s4653241/predict.py diff --git a/recognition/MRI_TimothyTjipto/train.py b/recognition/SiameseNetwork_s4653241/train.py similarity index 100% rename from recognition/MRI_TimothyTjipto/train.py rename to recognition/SiameseNetwork_s4653241/train.py From 9d95a20a4c3dfa1532ddc7e6bd1f517e01837600 Mon Sep 17 00:00:00 2001 From: sv-Tjipto <113236886+sv-Tjipto@users.noreply.github.com> Date: Tue, 24 Oct 2023 20:24:00 +1000 Subject: [PATCH 34/34] Added Question --- recognition/SiameseNetwork_s4653241/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recognition/SiameseNetwork_s4653241/README.md b/recognition/SiameseNetwork_s4653241/README.md index 3d89953b0..0d5fc21bd 100644 --- a/recognition/SiameseNetwork_s4653241/README.md +++ b/recognition/SiameseNetwork_s4653241/README.md @@ -1,6 +1,6 @@ # Siamese Network classifier to classify Alzheimer's disease -Project uses Siamese Network to predict the similarity between two images and classify normal or AD(Alzheimer's Disease). +[7]Project uses Siamese Network to predict the similarity between two images and classify normal or AD(Alzheimer's Disease). ## Siamese network