From c9344858fc92d7729752871d9bdf36176f86fe76 Mon Sep 17 00:00:00 2001 From: s4684 Date: Thu, 16 Oct 2025 12:46:30 +1000 Subject: [PATCH 01/26] Initialised project files --- recognition/dataset.py | 0 recognition/modules.py | 0 recognition/predict.py | 0 recognition/train.py | 0 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 recognition/dataset.py create mode 100644 recognition/modules.py create mode 100644 recognition/predict.py create mode 100644 recognition/train.py diff --git a/recognition/dataset.py b/recognition/dataset.py new file mode 100644 index 000000000..e69de29bb diff --git a/recognition/modules.py b/recognition/modules.py new file mode 100644 index 000000000..e69de29bb diff --git a/recognition/predict.py b/recognition/predict.py new file mode 100644 index 000000000..e69de29bb diff --git a/recognition/train.py b/recognition/train.py new file mode 100644 index 000000000..e69de29bb From 9f578ea5b979aacf2d91273c756f3f2a702c27f1 Mon Sep 17 00:00:00 2001 From: scavan Date: Fri, 17 Oct 2025 12:35:13 +1000 Subject: [PATCH 02/26] Adjusted project directory init structure --- recognition/2d_oasis-46412384/dataset.py | 0 recognition/2d_oasis-46412384/modules.py | 0 recognition/2d_oasis-46412384/predict.py | 0 recognition/2d_oasis-46412384/train.py | 0 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 recognition/2d_oasis-46412384/dataset.py create mode 100644 recognition/2d_oasis-46412384/modules.py create mode 100644 recognition/2d_oasis-46412384/predict.py create mode 100644 recognition/2d_oasis-46412384/train.py diff --git a/recognition/2d_oasis-46412384/dataset.py b/recognition/2d_oasis-46412384/dataset.py new file mode 100644 index 000000000..e69de29bb diff --git a/recognition/2d_oasis-46412384/modules.py b/recognition/2d_oasis-46412384/modules.py new file mode 100644 index 000000000..e69de29bb diff --git a/recognition/2d_oasis-46412384/predict.py b/recognition/2d_oasis-46412384/predict.py new file mode 100644 index 000000000..e69de29bb diff --git a/recognition/2d_oasis-46412384/train.py b/recognition/2d_oasis-46412384/train.py new file mode 100644 index 000000000..e69de29bb From 1613f75376e3781a0f57f8c2c3b30f48103b20aa Mon Sep 17 00:00:00 2001 From: scavan Date: Fri, 17 Oct 2025 14:26:13 +1000 Subject: [PATCH 03/26] Adjusted project directory init structure (part 2) --- recognition/2d_oasis-46412384/.gitignore | 1 + recognition/dataset.py | 0 recognition/modules.py | 0 recognition/predict.py | 0 recognition/train.py | 0 5 files changed, 1 insertion(+) create mode 100644 recognition/2d_oasis-46412384/.gitignore delete mode 100644 recognition/dataset.py delete mode 100644 recognition/modules.py delete mode 100644 recognition/predict.py delete mode 100644 recognition/train.py diff --git a/recognition/2d_oasis-46412384/.gitignore b/recognition/2d_oasis-46412384/.gitignore new file mode 100644 index 000000000..1269488f7 --- /dev/null +++ b/recognition/2d_oasis-46412384/.gitignore @@ -0,0 +1 @@ +data diff --git a/recognition/dataset.py b/recognition/dataset.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/recognition/modules.py b/recognition/modules.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/recognition/predict.py b/recognition/predict.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/recognition/train.py b/recognition/train.py deleted file mode 100644 index e69de29bb..000000000 From 4caf70cf8f809a269689cf4e8d0d156f30f23c71 Mon Sep 17 00:00:00 2001 From: s4684 Date: Mon, 3 Nov 2025 12:29:51 +1000 Subject: [PATCH 04/26] Implemented dataset loaders for the OASIS dataset --- recognition/2d_oasis-46412384/dataset.py | 99 ++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/recognition/2d_oasis-46412384/dataset.py b/recognition/2d_oasis-46412384/dataset.py index e69de29bb..db74b2f7e 100644 --- a/recognition/2d_oasis-46412384/dataset.py +++ b/recognition/2d_oasis-46412384/dataset.py @@ -0,0 +1,99 @@ +import torch +import numpy as np +from torch.utils.data import DataLoader, Dataset +from os import listdir +from PIL import Image + + +class DataError(Exception): + """ + Raised when a problem regarding the dataset is encountered + """ + pass + + +class OasisDataset(Dataset): + """ + Dataset for OASIS greyscale images and segmentations + """ + + def __init__(self, data_dir, mask_dir, subset_size=-1): + self.data_paths = [data_dir + file for file in listdir(data_dir)[:subset_size]] + self.mask_paths = [mask_dir + file for file in listdir(mask_dir)[:subset_size]] + + if (subset_size < 0 or len(self.data_paths) < subset_size): + self.subset_size = len(self.data_paths) + else: + self.subset_size = subset_size + + if (len(self.mask_paths) != self.subset_size): + raise DataError("Non-matching subset sizes between data (length %d) and mask (length %d)." % (len(self.data_paths), len(self.mask_paths))) + + def __len__(self): + return self.subset_size + + def __getitem__(self, idx): + if (idx < 0 or idx >= self.subset_size): + raise IndexError("Index %d out of range for subset size %d" % (idx, self.subset_size)) + + # Read and load image data + img = Image.open(self.data_paths[idx]) + img_data = torch.from_numpy(np.resize(np.array(img.getdata(), dtype=np.float32), img.size)) + + img_data = (img_data - img_data.mean()) / (img_data.std() + 1e-6) + + msk = Image.open(self.mask_paths[idx]) + msk_data = torch.from_numpy(OasisDataset.decode_mask(np.resize(np.array(msk.getdata(), dtype=np.int64), msk.size))) + + return img_data, msk_data + + + """ + Decode greyscale mask values from numpy array to segment classification integers + """ + def decode_mask(enc_msk): + vals = set() + for val in enc_msk.flat: + vals.add(val) + + vals = np.sort(np.array(list(vals), dtype=np.uint8)) + + dec_msk = np.zeros_like(enc_msk) + for idx, val in enumerate(vals): + dec_msk[enc_msk == val] = idx + + return dec_msk + + + """ + Encode segment classification integers from numpy array into greyscale values of equal distribution + """ + def encode_mask(dec_msk): + vals = set() + for val in dec_msk.flat: + vals.add(val) + + vals = np.sort(np.array(list(vals))) + + enc_msk = np.array(dec_msk) * 255 / (len(vals) - 1) + + return enc_msk + + +def get_oasis_dataloaders(data_dir, batch_size): + IMG_TRAIN_PATH = "keras_png_slices_train" + MSK_TRAIN_PATH = "keras_png_slices_seg_train" + IMG_TEST_PATH = "keras_png_slices_test" + MSK_TEST_PATH = "keras_png_slices_seg_test" + IMG_VAL_PATH = "keras_png_slices_validate" + MSK_VAL_PATH = "keras_png_slices_seg_validate" + + ds_train = OasisDataset(data_dir + IMG_TRAIN_PATH, data_dir + MSK_TRAIN_PATH) + ds_test = OasisDataset(data_dir + IMG_TEST_PATH, data_dir + MSK_TEST_PATH) + ds_validate = OasisDataset(data_dir + IMG_VAL_PATH, data_dir + MSK_VAL_PATH) + + dl_train = DataLoader(ds_train, batch_size, shuffle=True) + dl_test = DataLoader(ds_test, batch_size, shuffle=False) + dl_validate = DataLoader(dl_validate, batch_size, shuffle=False) + + return dl_train, dl_test, dl_validate \ No newline at end of file From 95b5e29bc647aec30b857cd3d26d0d74e932765b Mon Sep 17 00:00:00 2001 From: s4684 Date: Mon, 3 Nov 2025 15:53:54 +1000 Subject: [PATCH 05/26] Implemented UNet modules --- recognition/2d_oasis-46412384/.gitignore | 1 + recognition/2d_oasis-46412384/modules.py | 116 +++++++++++++++++++++++ 2 files changed, 117 insertions(+) diff --git a/recognition/2d_oasis-46412384/.gitignore b/recognition/2d_oasis-46412384/.gitignore index 1269488f7..0c7b4fc7a 100644 --- a/recognition/2d_oasis-46412384/.gitignore +++ b/recognition/2d_oasis-46412384/.gitignore @@ -1 +1,2 @@ data +__pycache__ diff --git a/recognition/2d_oasis-46412384/modules.py b/recognition/2d_oasis-46412384/modules.py index e69de29bb..bc840894f 100644 --- a/recognition/2d_oasis-46412384/modules.py +++ b/recognition/2d_oasis-46412384/modules.py @@ -0,0 +1,116 @@ +import torch.nn as nn +import torch.nn.functional as F + +class InConv(nn.Module): + def __init__(self, in_chls, out_chls): + super().__init__() + + self.net = nn.Sequential( + nn.Conv2d(in_chls, out_chls, kernel_size=3, padding=1, bias=False), + nn.BatchNorm2d(out_chls), + nn.ReLU(inplace=True), + nn.Conv2d(out_chls, out_chls, kernel_size=3, padding=1, bias=False), + nn.BatchNorm2d(out_chls), + nn.ReLU(inplace=True) + ) + + def forward(self, x): + return self.net(x) + + +class DownLayer(nn.Module): + def __init__(self, in_chls, out_chls): + super().__init__() + self.pool = nn.MaxPool2d(kernel_size=2) + self.conv = InConv(in_chls, out_chls) + + def forward(self, x): + return self.conv(self.pool(x)) + + +class UpLayer(nn.Module): + def __init__(self, in_chls, out_chls): + super().__init__() + self.up = nn.ConvTranspose2d(in_chls, in_chls // 2, kernel_size=2, stride=2) + self.conv = InConv(in_chls, out_chls) + + def forward(self, x, skip): + x = self.up(x) + + dx = skip.size(3) - x.size(3) + dy = skip.size(2) - x.size(2) + + if (dx or dy): + x = F.pad(x, [dx//2, dx - dx//2, dy//2, dy-dy//2]) + x = torch.cat([skip, x], dim=1) + return self.conv(x) + + +class OutConv(nn.Module): + def __init__(self, in_chls, out_chls): + super().__init__() + self.conv = nn.Conv2d(in_chls, out_chls, kernel_size=1) + + def forward(self, x): + return self.conv(x) + + +class UNet(nn.Module): + + def __init__(self, in_chls=1, num_classes=4, base_chls=64): + super().__init__() + + c = [base_chls * 2**i for i in range(0, 5)] + + self.input = InConv(in_chls, base_chls) + self.down1 = DownLayer(c[0], c[1]) + self.down2 = DownLayer(c[1], c[2]) + self.down3 = DownLayer(c[2], c[3]) + self.down4 = DownLayer(c[3], c[4]) + + self.up1 = UpLayer(c[4], c[3]) + self.up2 = UpLayer(c[3], c[2]) + self.up3 = UpLayer(c[2], c[1]) + self.up4 = UpLayer(c[1], c[0]) + self.output = OutConv(c[0], num_classes) + + def forward(self, x): + x1 = self.input(x) + x2 = self.down1(x1) + x3 = self.down2(x2) + x4 = self.down3(x3) + x5 = self.down4(x4) + + return self.output( + self.up4( + self.up3( + self.up2( + self.up1(x5, x4), + x3), + x2), + x1) + ) + + +class MCDiceLoss(nn.Module): + def __init__(self, eps=1e-6): + super().__init__() + self.eps = eps + + def forward(self, logits, target): + # Convert raw output to probabilities + probs = logits.softmax(dim=1) + B, C, H, W = probs.shape + + target_oh = F.one_hot(target, num_classes=num_classes).permute(0, 3, 1, 2).float() + + probs_flat = probs.reshape(B, C, -1) + target_flat = target_oh.reshape(B, C, -1) + + intersect = (probs_flat * target_flat).sum(dim=-1) + total = probs_flat.sum(dim=-1) + target_flat.sum(dim=-1) + + dice = (2 * intersect + self.eps) / (total + self.eps) + + return 1 - dice.mean() + From e0e3854dd7dcaee76e7ca639af93a3ae88472d6d Mon Sep 17 00:00:00 2001 From: s4684 Date: Tue, 4 Nov 2025 00:17:55 +1000 Subject: [PATCH 06/26] Fixed typo error in dataset loader module --- recognition/2d_oasis-46412384/dataset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recognition/2d_oasis-46412384/dataset.py b/recognition/2d_oasis-46412384/dataset.py index db74b2f7e..2fd293356 100644 --- a/recognition/2d_oasis-46412384/dataset.py +++ b/recognition/2d_oasis-46412384/dataset.py @@ -94,6 +94,6 @@ def get_oasis_dataloaders(data_dir, batch_size): dl_train = DataLoader(ds_train, batch_size, shuffle=True) dl_test = DataLoader(ds_test, batch_size, shuffle=False) - dl_validate = DataLoader(dl_validate, batch_size, shuffle=False) + dl_validate = DataLoader(ds_validate, batch_size, shuffle=False) return dl_train, dl_test, dl_validate \ No newline at end of file From c9fe8a3787f85525d587809e8b737fed2882250f Mon Sep 17 00:00:00 2001 From: s4684 Date: Tue, 4 Nov 2025 02:26:24 +1000 Subject: [PATCH 07/26] Fixed faulty loading in dataset loader module --- recognition/2d_oasis-46412384/dataset.py | 21 +++++++++++---------- recognition/2d_oasis-46412384/modules.py | 5 +++-- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/recognition/2d_oasis-46412384/dataset.py b/recognition/2d_oasis-46412384/dataset.py index 2fd293356..02e671836 100644 --- a/recognition/2d_oasis-46412384/dataset.py +++ b/recognition/2d_oasis-46412384/dataset.py @@ -18,8 +18,8 @@ class OasisDataset(Dataset): """ def __init__(self, data_dir, mask_dir, subset_size=-1): - self.data_paths = [data_dir + file for file in listdir(data_dir)[:subset_size]] - self.mask_paths = [mask_dir + file for file in listdir(mask_dir)[:subset_size]] + self.data_paths = [data_dir + "/" + file for file in listdir(data_dir)[:subset_size]] + self.mask_paths = [mask_dir + "/" + file for file in listdir(mask_dir)[:subset_size]] if (subset_size < 0 or len(self.data_paths) < subset_size): self.subset_size = len(self.data_paths) @@ -38,9 +38,10 @@ def __getitem__(self, idx): # Read and load image data img = Image.open(self.data_paths[idx]) - img_data = torch.from_numpy(np.resize(np.array(img.getdata(), dtype=np.float32), img.size)) + img_data = np.resize(np.array(img.getdata(), dtype=np.float32), img.size) img_data = (img_data - img_data.mean()) / (img_data.std() + 1e-6) + img_data = torch.from_numpy(img_data).unsqueeze(0).float() msk = Image.open(self.mask_paths[idx]) msk_data = torch.from_numpy(OasisDataset.decode_mask(np.resize(np.array(msk.getdata(), dtype=np.int64), msk.size))) @@ -80,7 +81,7 @@ def encode_mask(dec_msk): return enc_msk -def get_oasis_dataloaders(data_dir, batch_size): +def get_oasis_dataloaders(data_dir, batch_size, subset_size=-1): IMG_TRAIN_PATH = "keras_png_slices_train" MSK_TRAIN_PATH = "keras_png_slices_seg_train" IMG_TEST_PATH = "keras_png_slices_test" @@ -88,12 +89,12 @@ def get_oasis_dataloaders(data_dir, batch_size): IMG_VAL_PATH = "keras_png_slices_validate" MSK_VAL_PATH = "keras_png_slices_seg_validate" - ds_train = OasisDataset(data_dir + IMG_TRAIN_PATH, data_dir + MSK_TRAIN_PATH) - ds_test = OasisDataset(data_dir + IMG_TEST_PATH, data_dir + MSK_TEST_PATH) - ds_validate = OasisDataset(data_dir + IMG_VAL_PATH, data_dir + MSK_VAL_PATH) + ds_train = OasisDataset(data_dir + IMG_TRAIN_PATH, data_dir + MSK_TRAIN_PATH, subset_size=subset_size) + ds_test = OasisDataset(data_dir + IMG_TEST_PATH, data_dir + MSK_TEST_PATH, subset_size=subset_size // 2 if subset_size else -1) + ds_validate = OasisDataset(data_dir + IMG_VAL_PATH, data_dir + MSK_VAL_PATH, subset_size=subset_size // 2 if subset_size else -1) - dl_train = DataLoader(ds_train, batch_size, shuffle=True) - dl_test = DataLoader(ds_test, batch_size, shuffle=False) - dl_validate = DataLoader(ds_validate, batch_size, shuffle=False) + dl_train = DataLoader(ds_train, batch_size=batch_size, shuffle=True) + dl_test = DataLoader(ds_test, batch_size=batch_size, shuffle=False) + dl_validate = DataLoader(ds_validate, batch_size=batch_size, shuffle=False) return dl_train, dl_test, dl_validate \ No newline at end of file diff --git a/recognition/2d_oasis-46412384/modules.py b/recognition/2d_oasis-46412384/modules.py index bc840894f..f173e284b 100644 --- a/recognition/2d_oasis-46412384/modules.py +++ b/recognition/2d_oasis-46412384/modules.py @@ -1,3 +1,4 @@ +import torch import torch.nn as nn import torch.nn.functional as F @@ -60,7 +61,7 @@ class UNet(nn.Module): def __init__(self, in_chls=1, num_classes=4, base_chls=64): super().__init__() - c = [base_chls * 2**i for i in range(0, 5)] + c = [base_chls * 2**i for i in range(5)] self.input = InConv(in_chls, base_chls) self.down1 = DownLayer(c[0], c[1]) @@ -102,7 +103,7 @@ def forward(self, logits, target): probs = logits.softmax(dim=1) B, C, H, W = probs.shape - target_oh = F.one_hot(target, num_classes=num_classes).permute(0, 3, 1, 2).float() + target_oh = F.one_hot(target, num_classes=C).permute(0, 3, 1, 2).float() probs_flat = probs.reshape(B, C, -1) target_flat = target_oh.reshape(B, C, -1) From 1367fba50255ff648c2b06ff457171409bff39c5 Mon Sep 17 00:00:00 2001 From: s4684 Date: Tue, 4 Nov 2025 02:27:58 +1000 Subject: [PATCH 08/26] Implement model training basics --- recognition/2d_oasis-46412384/train.py | 91 ++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/recognition/2d_oasis-46412384/train.py b/recognition/2d_oasis-46412384/train.py index e69de29bb..9bde5bc02 100644 --- a/recognition/2d_oasis-46412384/train.py +++ b/recognition/2d_oasis-46412384/train.py @@ -0,0 +1,91 @@ +import torch +import torch.nn as nn +from torch.optim import Adam +from dataset import get_oasis_dataloaders +from modules import UNet, MCDiceLoss + + +class Config: + DEVICE = "cuda" if torch.cuda.is_available() else "cpu" + DATA_DIR = "data/" + SUBSET_SIZE = -1 + + LEARN_RATE = 1e-3 + + IN_CHANNELS = 1 + NUM_CLASSES = 4 + BATCH_SIZE = 4 + NUM_EPOCHS = 20 + VISUALISE_EVERY = 5 + + +def train_epoch(model, dl, optim, crit, num_classes, dev="cpu"): + loss = 0 + + model.train() + + for bat_idx, (imgs, msks) in enumerate(dl): + print("\tBATCH: %d" % bat_idx) + imgs = imgs.to(dev) + msks = msks.to(dev) + + optim.zero_grad() + + logits = model(imgs) + + bat_loss = crit(logits, msks) + bat_loss.backward() + + optim.step() + + loss += bat_loss.item() + + return loss / len(dl) + + +def evaluate(model, dl, crit, dev="cpu"): + loss = 0 + + model.eval() + + for bat_idx, (imgs, msks) in enumerate(dl): + imgs = imgs.to(dev) + msks = msks.to(dev) + + logits = model(imgs) + + bat_loss = crit(logits, msks).mean() + loss += bat_loss.item() + + return loss / len(dl) + + +def train(model, dl_train, dl_test, dl_validate, epochs=20, visualise_every=10): + model.to(Config.DEVICE) + + crit = MCDiceLoss() + # Use AdaM optimiser + optim = Adam(model.parameters(), lr=Config.LEARN_RATE) + + train_losses = [] + + test_losses = [] + + for ep_idx in range(epochs): + train_losses.append(train_epoch( + model, + dl_train, + optim, + crit, + Config.NUM_CLASSES, + Config.DEVICE + )) + + test_losses.append(evaluate( + model, + dl_test, + crit, + Config.DEVICE + )) + + return train_losses, test_losses \ No newline at end of file From f91a8143c3af74f5c3c116f6e5304d47b0f04788 Mon Sep 17 00:00:00 2001 From: s4684 Date: Tue, 4 Nov 2025 03:28:51 +1000 Subject: [PATCH 09/26] Implemented simple status updates and model saving for training module --- recognition/2d_oasis-46412384/.gitignore | 1 + recognition/2d_oasis-46412384/train.py | 43 ++++++++++++++++++------ 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/recognition/2d_oasis-46412384/.gitignore b/recognition/2d_oasis-46412384/.gitignore index 0c7b4fc7a..f58af6896 100644 --- a/recognition/2d_oasis-46412384/.gitignore +++ b/recognition/2d_oasis-46412384/.gitignore @@ -1,2 +1,3 @@ data __pycache__ +_tdmodel* diff --git a/recognition/2d_oasis-46412384/train.py b/recognition/2d_oasis-46412384/train.py index 9bde5bc02..d8a6a5b09 100644 --- a/recognition/2d_oasis-46412384/train.py +++ b/recognition/2d_oasis-46412384/train.py @@ -6,16 +6,20 @@ class Config: - DEVICE = "cuda" if torch.cuda.is_available() else "cpu" DATA_DIR = "data/" - SUBSET_SIZE = -1 + MODEL_SAVE_FILE = "_tdmodel" + LOSS_SAVE_FILE = "_tdmodel-loss" + + DEVICE = "cuda" if torch.cuda.is_available() else "cpu" + + SUBSET_SIZE = 100 LEARN_RATE = 1e-3 IN_CHANNELS = 1 NUM_CLASSES = 4 BATCH_SIZE = 4 - NUM_EPOCHS = 20 + NUM_EPOCHS = 3 VISUALISE_EVERY = 5 @@ -25,7 +29,6 @@ def train_epoch(model, dl, optim, crit, num_classes, dev="cpu"): model.train() for bat_idx, (imgs, msks) in enumerate(dl): - print("\tBATCH: %d" % bat_idx) imgs = imgs.to(dev) msks = msks.to(dev) @@ -60,32 +63,50 @@ def evaluate(model, dl, crit, dev="cpu"): return loss / len(dl) -def train(model, dl_train, dl_test, dl_validate, epochs=20, visualise_every=10): +def train(model, dl_train, dl_test, epochs=20, visualise_every=10): model.to(Config.DEVICE) + print("Starting model training on %s" % Config.DEVICE) crit = MCDiceLoss() # Use AdaM optimiser optim = Adam(model.parameters(), lr=Config.LEARN_RATE) train_losses = [] - test_losses = [] for ep_idx in range(epochs): - train_losses.append(train_epoch( + print("\t[ Epoch %d / %d ]" % (ep_idx + 1, epochs), end="", flush=True) + + train_loss = train_epoch( model, dl_train, optim, crit, Config.NUM_CLASSES, Config.DEVICE - )) + ) - test_losses.append(evaluate( + test_loss =evaluate( model, dl_test, crit, Config.DEVICE - )) + ) + + print("\tTrain: %6.5f\tTest: %6.5f" % (train_loss, test_loss)) + + train_losses.append(train_loss) + test_losses.append(test_loss) + + print("Training complete!") + + return train_losses, test_losses + + +if (__name__ == "__main__"): + dl_train, dl_test, _ = get_oasis_dataloaders(Config.DATA_DIR, Config.BATCH_SIZE, Config.SUBSET_SIZE) + model = UNet(Config.IN_CHANNELS, Config.NUM_CLASSES) + train_loss, test_loss = train(model, dl_train, dl_test, epochs=Config.NUM_EPOCHS) - return train_losses, test_losses \ No newline at end of file + torch.save(model.state_dict(), Config.MODEL_SAVE_FILE) + torch.save([train_loss, test_loss, []], Config.LOSS_SAVE_FILE) \ No newline at end of file From 6e67ad40abf5badcb9ea68a5943980d0b39d82b7 Mon Sep 17 00:00:00 2001 From: s4684 Date: Tue, 4 Nov 2025 03:43:13 +1000 Subject: [PATCH 10/26] Adjusted minor formatting problems --- recognition/2d_oasis-46412384/train.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/recognition/2d_oasis-46412384/train.py b/recognition/2d_oasis-46412384/train.py index d8a6a5b09..610e9ee54 100644 --- a/recognition/2d_oasis-46412384/train.py +++ b/recognition/2d_oasis-46412384/train.py @@ -65,7 +65,7 @@ def evaluate(model, dl, crit, dev="cpu"): def train(model, dl_train, dl_test, epochs=20, visualise_every=10): model.to(Config.DEVICE) - print("Starting model training on %s" % Config.DEVICE) + print("\nStarting model training on %s" % Config.DEVICE) crit = MCDiceLoss() # Use AdaM optimiser @@ -86,7 +86,7 @@ def train(model, dl_train, dl_test, epochs=20, visualise_every=10): Config.DEVICE ) - test_loss =evaluate( + test_loss = evaluate( model, dl_test, crit, From 67a3674f9f040434bbbbcb07f73a5219f9cd34b9 Mon Sep 17 00:00:00 2001 From: s4684 Date: Tue, 4 Nov 2025 03:45:21 +1000 Subject: [PATCH 11/26] Established simple model prediction validation --- recognition/2d_oasis-46412384/predict.py | 26 ++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/recognition/2d_oasis-46412384/predict.py b/recognition/2d_oasis-46412384/predict.py index e69de29bb..0bcad7e0e 100644 --- a/recognition/2d_oasis-46412384/predict.py +++ b/recognition/2d_oasis-46412384/predict.py @@ -0,0 +1,26 @@ +import torch +from train import Config, evaluate +from dataset import get_oasis_dataloaders +from modules import UNet, MCDiceLoss + + +if (__name__ == "__main__"): + _, _, dl_validate = get_oasis_dataloaders(Config.DATA_DIR, Config.BATCH_SIZE, Config.SUBSET_SIZE) + model = UNet(Config.IN_CHANNELS, Config.NUM_CLASSES).to(Config.DEVICE) + + # Read model data from save file + model.load_state_dict(torch.load(Config.MODEL_SAVE_FILE, map_location=Config.DEVICE)) + train_losses, test_losses, validate_losses = torch.load(Config.LOSS_SAVE_FILE) + + print("\nStarting model evaluation") + + crit = MCDiceLoss() + + validate_loss = evaluate( + model, + dl_validate, + crit, + Config.DEVICE + ) + + print("\t[ Eval ]\tValidate: %6.5f" % validate_loss) \ No newline at end of file From a3a7465dc59a684dd72576a95f74910bfff50c2d Mon Sep 17 00:00:00 2001 From: s4684 Date: Tue, 4 Nov 2025 14:46:31 +1000 Subject: [PATCH 12/26] Implemented prediction visualisation in the training and evaluation modules --- recognition/2d_oasis-46412384/predict.py | 3 +- recognition/2d_oasis-46412384/train.py | 76 ++++++++++++++++++++---- 2 files changed, 65 insertions(+), 14 deletions(-) diff --git a/recognition/2d_oasis-46412384/predict.py b/recognition/2d_oasis-46412384/predict.py index 0bcad7e0e..aae45188f 100644 --- a/recognition/2d_oasis-46412384/predict.py +++ b/recognition/2d_oasis-46412384/predict.py @@ -20,7 +20,8 @@ model, dl_validate, crit, - Config.DEVICE + Config.DEVICE, + display=True ) print("\t[ Eval ]\tValidate: %6.5f" % validate_loss) \ No newline at end of file diff --git a/recognition/2d_oasis-46412384/train.py b/recognition/2d_oasis-46412384/train.py index 610e9ee54..4e436f6ae 100644 --- a/recognition/2d_oasis-46412384/train.py +++ b/recognition/2d_oasis-46412384/train.py @@ -1,29 +1,33 @@ import torch import torch.nn as nn from torch.optim import Adam -from dataset import get_oasis_dataloaders +from dataset import get_oasis_dataloaders, OasisDataset from modules import UNet, MCDiceLoss +import matplotlib.pyplot as plt class Config: DATA_DIR = "data/" - MODEL_SAVE_FILE = "_tdmodel" - LOSS_SAVE_FILE = "_tdmodel-loss" + MODEL_SAVE_FILE = "_tdmodel/model.dat" + LOSS_SAVE_FILE = "_tdmodel/loss.dat" + DISPLAY_SAVE_PATH = "_tdmodel/disp/" DEVICE = "cuda" if torch.cuda.is_available() else "cpu" - SUBSET_SIZE = 100 + SUBSET_SIZE = 500 LEARN_RATE = 1e-3 IN_CHANNELS = 1 NUM_CLASSES = 4 BATCH_SIZE = 4 - NUM_EPOCHS = 3 - VISUALISE_EVERY = 5 + NUM_EPOCHS = 20 + DISPLAY_EVERY = 2 + display_count = 0 -def train_epoch(model, dl, optim, crit, num_classes, dev="cpu"): + +def train_epoch(model, dl, optim, crit, num_classes, dev="cpu", display=False): loss = 0 model.train() @@ -36,6 +40,9 @@ def train_epoch(model, dl, optim, crit, num_classes, dev="cpu"): logits = model(imgs) + if (display and bat_idx == 0): + display_batch(imgs, msks, logits) + bat_loss = crit(logits, msks) bat_loss.backward() @@ -46,7 +53,7 @@ def train_epoch(model, dl, optim, crit, num_classes, dev="cpu"): return loss / len(dl) -def evaluate(model, dl, crit, dev="cpu"): +def evaluate(model, dl, crit, dev="cpu", display=False): loss = 0 model.eval() @@ -57,13 +64,55 @@ def evaluate(model, dl, crit, dev="cpu"): logits = model(imgs) + if (display and bat_idx == 0): + display_batch(imgs, msks, logits, save_file="eval.png") + bat_loss = crit(logits, msks).mean() loss += bat_loss.item() return loss / len(dl) -def train(model, dl_train, dl_test, epochs=20, visualise_every=10): +def display_batch(imgs, msks, logits, save_file=None): + + batch_size = len(imgs) + + fig, axes = plt.subplots(batch_size, 3) + axes[0][0].set_title("Input Image") + axes[0][1].set_title("Ground Truth") + axes[0][2].set_title("Prediction") + + imgs_data = imgs.cpu().numpy() + msks_data = msks.cpu().numpy() + logits_data = logits.argmax(dim=1).cpu().numpy() + + with torch.no_grad(): + for bat_idx in range(batch_size): + img_data = imgs_data[bat_idx, 0] + msk_data = msks_data[bat_idx] + logit_data = logits_data[bat_idx] + + img_data = (img_data - img_data.min()) / (img_data.max() - img_data.min() + 1e-8) + + msk_data = OasisDataset.encode_mask(msk_data) + logit_data = OasisDataset.encode_mask(logit_data) + + axes[bat_idx][0].imshow(img_data, cmap="gray") + axes[bat_idx][1].imshow(msk_data, cmap="gray") + axes[bat_idx][2].imshow(logit_data, cmap="gray") + + plt.tight_layout() + + if (save_file == None): + save_file = "%d.png" % Config.display_count + + plt.savefig(Config.DISPLAY_SAVE_PATH + save_file) + plt.close() + + Config.display_count += 1 + + +def train(model, dl_train, dl_test, epochs=20, display_every=10): model.to(Config.DEVICE) print("\nStarting model training on %s" % Config.DEVICE) @@ -74,8 +123,8 @@ def train(model, dl_train, dl_test, epochs=20, visualise_every=10): train_losses = [] test_losses = [] - for ep_idx in range(epochs): - print("\t[ Epoch %d / %d ]" % (ep_idx + 1, epochs), end="", flush=True) + for ep_idx in range(1, epochs + 1): + print("\t[ Epoch %d / %d ]" % (ep_idx, epochs), end="", flush=True) train_loss = train_epoch( model, @@ -83,7 +132,8 @@ def train(model, dl_train, dl_test, epochs=20, visualise_every=10): optim, crit, Config.NUM_CLASSES, - Config.DEVICE + Config.DEVICE, + not bool(ep_idx % display_every) ) test_loss = evaluate( @@ -106,7 +156,7 @@ def train(model, dl_train, dl_test, epochs=20, visualise_every=10): if (__name__ == "__main__"): dl_train, dl_test, _ = get_oasis_dataloaders(Config.DATA_DIR, Config.BATCH_SIZE, Config.SUBSET_SIZE) model = UNet(Config.IN_CHANNELS, Config.NUM_CLASSES) - train_loss, test_loss = train(model, dl_train, dl_test, epochs=Config.NUM_EPOCHS) + train_loss, test_loss = train(model, dl_train, dl_test, epochs=Config.NUM_EPOCHS, display_every=Config.DISPLAY_EVERY) torch.save(model.state_dict(), Config.MODEL_SAVE_FILE) torch.save([train_loss, test_loss, []], Config.LOSS_SAVE_FILE) \ No newline at end of file From b40a7549947ae9b289da1ee5a9fa3ee91f5ae0ab Mon Sep 17 00:00:00 2001 From: s4684 Date: Tue, 4 Nov 2025 15:36:57 +1000 Subject: [PATCH 13/26] Swapped the roles of test and validation datasets --- recognition/2d_oasis-46412384/dataset.py | 10 +++++----- recognition/2d_oasis-46412384/predict.py | 10 +++++----- recognition/2d_oasis-46412384/train.py | 22 +++++++++++----------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/recognition/2d_oasis-46412384/dataset.py b/recognition/2d_oasis-46412384/dataset.py index 02e671836..379c7ef28 100644 --- a/recognition/2d_oasis-46412384/dataset.py +++ b/recognition/2d_oasis-46412384/dataset.py @@ -84,17 +84,17 @@ def encode_mask(dec_msk): def get_oasis_dataloaders(data_dir, batch_size, subset_size=-1): IMG_TRAIN_PATH = "keras_png_slices_train" MSK_TRAIN_PATH = "keras_png_slices_seg_train" - IMG_TEST_PATH = "keras_png_slices_test" - MSK_TEST_PATH = "keras_png_slices_seg_test" IMG_VAL_PATH = "keras_png_slices_validate" MSK_VAL_PATH = "keras_png_slices_seg_validate" + IMG_TEST_PATH = "keras_png_slices_test" + MSK_TEST_PATH = "keras_png_slices_seg_test" ds_train = OasisDataset(data_dir + IMG_TRAIN_PATH, data_dir + MSK_TRAIN_PATH, subset_size=subset_size) - ds_test = OasisDataset(data_dir + IMG_TEST_PATH, data_dir + MSK_TEST_PATH, subset_size=subset_size // 2 if subset_size else -1) ds_validate = OasisDataset(data_dir + IMG_VAL_PATH, data_dir + MSK_VAL_PATH, subset_size=subset_size // 2 if subset_size else -1) + ds_test = OasisDataset(data_dir + IMG_TEST_PATH, data_dir + MSK_TEST_PATH, subset_size=subset_size // 2 if subset_size else -1) dl_train = DataLoader(ds_train, batch_size=batch_size, shuffle=True) - dl_test = DataLoader(ds_test, batch_size=batch_size, shuffle=False) dl_validate = DataLoader(ds_validate, batch_size=batch_size, shuffle=False) + dl_test = DataLoader(ds_test, batch_size=batch_size, shuffle=False) - return dl_train, dl_test, dl_validate \ No newline at end of file + return dl_train, dl_validate, dl_test \ No newline at end of file diff --git a/recognition/2d_oasis-46412384/predict.py b/recognition/2d_oasis-46412384/predict.py index aae45188f..d42607b0c 100644 --- a/recognition/2d_oasis-46412384/predict.py +++ b/recognition/2d_oasis-46412384/predict.py @@ -5,23 +5,23 @@ if (__name__ == "__main__"): - _, _, dl_validate = get_oasis_dataloaders(Config.DATA_DIR, Config.BATCH_SIZE, Config.SUBSET_SIZE) + _, _, dl_test = get_oasis_dataloaders(Config.DATA_DIR, Config.BATCH_SIZE, Config.SUBSET_SIZE) model = UNet(Config.IN_CHANNELS, Config.NUM_CLASSES).to(Config.DEVICE) # Read model data from save file model.load_state_dict(torch.load(Config.MODEL_SAVE_FILE, map_location=Config.DEVICE)) - train_losses, test_losses, validate_losses = torch.load(Config.LOSS_SAVE_FILE) + train_losses, validate_losses, test_losses = torch.load(Config.LOSS_SAVE_FILE) print("\nStarting model evaluation") crit = MCDiceLoss() - validate_loss = evaluate( + test_loss = evaluate( model, - dl_validate, + dl_test, crit, Config.DEVICE, display=True ) - print("\t[ Eval ]\tValidate: %6.5f" % validate_loss) \ No newline at end of file + print("\t[ Eval ]\tValidate: %6.5f" % test_loss) \ No newline at end of file diff --git a/recognition/2d_oasis-46412384/train.py b/recognition/2d_oasis-46412384/train.py index 4e436f6ae..71fd1f82b 100644 --- a/recognition/2d_oasis-46412384/train.py +++ b/recognition/2d_oasis-46412384/train.py @@ -14,7 +14,7 @@ class Config: DEVICE = "cuda" if torch.cuda.is_available() else "cpu" - SUBSET_SIZE = 500 + SUBSET_SIZE = -1 LEARN_RATE = 1e-3 @@ -112,7 +112,7 @@ def display_batch(imgs, msks, logits, save_file=None): Config.display_count += 1 -def train(model, dl_train, dl_test, epochs=20, display_every=10): +def train(model, dl_train, dl_validate, epochs=20, display_every=10): model.to(Config.DEVICE) print("\nStarting model training on %s" % Config.DEVICE) @@ -121,7 +121,7 @@ def train(model, dl_train, dl_test, epochs=20, display_every=10): optim = Adam(model.parameters(), lr=Config.LEARN_RATE) train_losses = [] - test_losses = [] + validate_losses = [] for ep_idx in range(1, epochs + 1): print("\t[ Epoch %d / %d ]" % (ep_idx, epochs), end="", flush=True) @@ -136,27 +136,27 @@ def train(model, dl_train, dl_test, epochs=20, display_every=10): not bool(ep_idx % display_every) ) - test_loss = evaluate( + validate_loss = evaluate( model, - dl_test, + dl_validate, crit, Config.DEVICE ) - print("\tTrain: %6.5f\tTest: %6.5f" % (train_loss, test_loss)) + print("\tTrain: %6.5f\tValidate: %6.5f" % (train_loss, validate_loss)) train_losses.append(train_loss) - test_losses.append(test_loss) + validate_losses.append(validate_loss) print("Training complete!") - return train_losses, test_losses + return train_losses, validate_losses if (__name__ == "__main__"): - dl_train, dl_test, _ = get_oasis_dataloaders(Config.DATA_DIR, Config.BATCH_SIZE, Config.SUBSET_SIZE) + dl_train, dl_validate, _ = get_oasis_dataloaders(Config.DATA_DIR, Config.BATCH_SIZE, Config.SUBSET_SIZE) model = UNet(Config.IN_CHANNELS, Config.NUM_CLASSES) - train_loss, test_loss = train(model, dl_train, dl_test, epochs=Config.NUM_EPOCHS, display_every=Config.DISPLAY_EVERY) + train_loss, validate_loss = train(model, dl_train, dl_validate, epochs=Config.NUM_EPOCHS, display_every=Config.DISPLAY_EVERY) torch.save(model.state_dict(), Config.MODEL_SAVE_FILE) - torch.save([train_loss, test_loss, []], Config.LOSS_SAVE_FILE) \ No newline at end of file + torch.save([train_loss, validate_loss, []], Config.LOSS_SAVE_FILE) \ No newline at end of file From d6355500b3e0cfe7419646d17832fd30c9e5d64f Mon Sep 17 00:00:00 2001 From: s4684 Date: Tue, 4 Nov 2025 17:30:17 +1000 Subject: [PATCH 14/26] Implemented CE loss function alongside multi-class dice for training and evaluation --- recognition/2d_oasis-46412384/predict.py | 19 ++++--- recognition/2d_oasis-46412384/train.py | 67 +++++++++++++++--------- 2 files changed, 53 insertions(+), 33 deletions(-) diff --git a/recognition/2d_oasis-46412384/predict.py b/recognition/2d_oasis-46412384/predict.py index d42607b0c..baa8ebc8c 100644 --- a/recognition/2d_oasis-46412384/predict.py +++ b/recognition/2d_oasis-46412384/predict.py @@ -1,4 +1,5 @@ import torch +import torch.nn as nn from train import Config, evaluate from dataset import get_oasis_dataloaders from modules import UNet, MCDiceLoss @@ -10,18 +11,20 @@ # Read model data from save file model.load_state_dict(torch.load(Config.MODEL_SAVE_FILE, map_location=Config.DEVICE)) - train_losses, validate_losses, test_losses = torch.load(Config.LOSS_SAVE_FILE) + train_loss, train_dice, validate_losses, validate_dice = torch.load(Config.LOSS_SAVE_FILE) print("\nStarting model evaluation") - crit = MCDiceLoss() + crit = nn.CrossEntropyLoss() + dice_fn = MCDiceLoss() - test_loss = evaluate( - model, - dl_test, - crit, - Config.DEVICE, + test_loss, test_dice= evaluate( + model=model, + dl=dl_test, + crit=crit, + dice_fn=dice_fn, + dev=Config.DEVICE, display=True ) - print("\t[ Eval ]\tValidate: %6.5f" % test_loss) \ No newline at end of file + print("\t[ Eval ]\tValidate: L=%6.5f D=%6.5f" % (test_loss, test_dice)) \ No newline at end of file diff --git a/recognition/2d_oasis-46412384/train.py b/recognition/2d_oasis-46412384/train.py index 71fd1f82b..767d65775 100644 --- a/recognition/2d_oasis-46412384/train.py +++ b/recognition/2d_oasis-46412384/train.py @@ -14,21 +14,22 @@ class Config: DEVICE = "cuda" if torch.cuda.is_available() else "cpu" - SUBSET_SIZE = -1 + SUBSET_SIZE = 100 LEARN_RATE = 1e-3 IN_CHANNELS = 1 NUM_CLASSES = 4 BATCH_SIZE = 4 - NUM_EPOCHS = 20 + NUM_EPOCHS = 6 DISPLAY_EVERY = 2 display_count = 0 -def train_epoch(model, dl, optim, crit, num_classes, dev="cpu", display=False): +def train_epoch(model, dl, optim, crit, dice_fn, num_classes, dev="cpu", display=False): loss = 0 + dice = 0 model.train() @@ -46,15 +47,19 @@ def train_epoch(model, dl, optim, crit, num_classes, dev="cpu", display=False): bat_loss = crit(logits, msks) bat_loss.backward() + bat_dice = dice_fn(logits, msks).mean() + optim.step() loss += bat_loss.item() + dice += bat_dice.item() - return loss / len(dl) + return loss / len(dl), dice / len(dl) -def evaluate(model, dl, crit, dev="cpu", display=False): +def evaluate(model, dl, crit, dice_fn, dev="cpu", display=False): loss = 0 + dice = 0 model.eval() @@ -67,10 +72,13 @@ def evaluate(model, dl, crit, dev="cpu", display=False): if (display and bat_idx == 0): display_batch(imgs, msks, logits, save_file="eval.png") - bat_loss = crit(logits, msks).mean() + bat_loss = crit(logits, msks) + bat_dice = dice_fn(logits, msks).mean() + loss += bat_loss.item() + dice += bat_dice.item() - return loss / len(dl) + return loss / len(dl), dice / len(dl) def display_batch(imgs, msks, logits, save_file=None): @@ -116,47 +124,56 @@ def train(model, dl_train, dl_validate, epochs=20, display_every=10): model.to(Config.DEVICE) print("\nStarting model training on %s" % Config.DEVICE) - crit = MCDiceLoss() + crit = nn.CrossEntropyLoss() + dice_fn = MCDiceLoss() # Use AdaM optimiser optim = Adam(model.parameters(), lr=Config.LEARN_RATE) train_losses = [] + train_dices = [] + validate_losses = [] + validate_dices = [] for ep_idx in range(1, epochs + 1): print("\t[ Epoch %d / %d ]" % (ep_idx, epochs), end="", flush=True) - train_loss = train_epoch( - model, - dl_train, - optim, - crit, - Config.NUM_CLASSES, - Config.DEVICE, - not bool(ep_idx % display_every) + train_loss, train_dice = train_epoch( + model=model, + dl=dl_train, + optim=optim, + crit=crit, + dice_fn=dice_fn, + num_classes=Config.NUM_CLASSES, + dev=Config.DEVICE, + display=not bool(ep_idx % display_every) ) - validate_loss = evaluate( - model, - dl_validate, - crit, - Config.DEVICE + validate_loss, validate_dice = evaluate( + model=model, + dl=dl_validate, + crit=crit, + dice_fn=dice_fn, + dev=Config.DEVICE, + display=False ) - print("\tTrain: %6.5f\tValidate: %6.5f" % (train_loss, validate_loss)) + print("\tTrain: L=%6.5f D=%6.5f\tValidate: L=%6.5f D=%6.5f" % (train_loss, train_dice, validate_loss, validate_dice)) train_losses.append(train_loss) + train_dices.append(train_dice) validate_losses.append(validate_loss) + validate_dices.append(validate_dice) print("Training complete!") - return train_losses, validate_losses + return train_losses, train_dices, validate_losses, validate_dices if (__name__ == "__main__"): dl_train, dl_validate, _ = get_oasis_dataloaders(Config.DATA_DIR, Config.BATCH_SIZE, Config.SUBSET_SIZE) model = UNet(Config.IN_CHANNELS, Config.NUM_CLASSES) - train_loss, validate_loss = train(model, dl_train, dl_validate, epochs=Config.NUM_EPOCHS, display_every=Config.DISPLAY_EVERY) + train_loss, train_dice, validate_loss, validate_dice = train(model, dl_train, dl_validate, epochs=Config.NUM_EPOCHS, display_every=Config.DISPLAY_EVERY) torch.save(model.state_dict(), Config.MODEL_SAVE_FILE) - torch.save([train_loss, validate_loss, []], Config.LOSS_SAVE_FILE) \ No newline at end of file + torch.save([train_loss, train_dice, validate_loss, validate_dice], Config.LOSS_SAVE_FILE) \ No newline at end of file From 604abd1e32182f05f980ab60fa74aa04f17e2b09 Mon Sep 17 00:00:00 2001 From: s4684 Date: Wed, 5 Nov 2025 03:12:41 +1000 Subject: [PATCH 15/26] Removed testing config parameters from train module --- recognition/2d_oasis-46412384/train.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/recognition/2d_oasis-46412384/train.py b/recognition/2d_oasis-46412384/train.py index 767d65775..0382fb1d1 100644 --- a/recognition/2d_oasis-46412384/train.py +++ b/recognition/2d_oasis-46412384/train.py @@ -14,14 +14,14 @@ class Config: DEVICE = "cuda" if torch.cuda.is_available() else "cpu" - SUBSET_SIZE = 100 + SUBSET_SIZE = -1 LEARN_RATE = 1e-3 IN_CHANNELS = 1 NUM_CLASSES = 4 BATCH_SIZE = 4 - NUM_EPOCHS = 6 + NUM_EPOCHS = 26 DISPLAY_EVERY = 2 display_count = 0 From be15ac0c8ed86e72cc871ee6353aa4aa10802d97 Mon Sep 17 00:00:00 2001 From: s4684 Date: Wed, 5 Nov 2025 03:13:08 +1000 Subject: [PATCH 16/26] Establish project README file --- recognition/2d_oasis-46412384/README.md | 74 +++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 recognition/2d_oasis-46412384/README.md diff --git a/recognition/2d_oasis-46412384/README.md b/recognition/2d_oasis-46412384/README.md new file mode 100644 index 000000000..3543cec51 --- /dev/null +++ b/recognition/2d_oasis-46412384/README.md @@ -0,0 +1,74 @@ +# 2D OASIS brain data segmentation with Improved UNet + +## Project Synopsis + +This project segments raw 2D brain MRI data slices into regions of distinct classification. +Using an improved UNet model, success criteria consisted of achieving a dice similarity coefficient of 0.9 minimum across the final predictions.\ +Each 2D data slice is segmented into 4 classes, distinguished by equally distributed greyscale shades in the segmentation mask: + +1. Background (black) +2. Cerebro-spinal fluid (dark grey) +3. Grey matter (light grey) +4. White matter (white) + +For example: + +![hello](_tdmodel/disp/1.png) change image + + +## Model Analysis + +### UNet Model + +The Improved UNet algorithm proves to be a reliable model architecture for 2D image segmentation tasks, particularly those of medical application. +In summary, it's design revolves around applying numerous fine filters over the image to discern patterns across the image. +These filters are applied repeatedly over several layers, between which the data is compressed, yielding a smaller result each time. +This act of compression - called pooling - allows for the algorithm to capture elements of both fine detail and abstract patterns across the data. +Finally, the data is upscaled back through each layer, where each layer of prediction is compiled presenting a final mask that matches the resolution of the input image. +This method of compaction to a final bottleneck and contrasting reconstruction presents the U-shape architecture that entitles the UNet. + +### Dataset + +This model is trained on the pre-split OASIS dataset. Training comprised 9664 slices, validation over 1120 validation slices, and final evaluation on 544 testing slices. +This achieves a distribution approximating 85 / 10 / 5 respectively, aligning with the train-heavier side of typical split ratios. + +The dataset consistutes 256x256 greyscale (single channel) images. Loading of each dataset consisted of: + +- Sequentially pairing each slice with their respective mask +- Applying z-score normalization to each slice, minimising instability in training values +- Decoding the masks from greyscale values to class-label identifiers (integers 0 - 3) + +Such processing was computed on-the-fly, as data was requested by the model. +This increases the training time, as data was processed repeatedly upon each epoch, in favour of optimising the memory demands. + +### Model Operation + +Training consisted of 26 epochs and batches of 4 images, with validation tests occurring after each epoch. +Model evaluation utilised a combination of Dice loss coefficient and cross entropy loss methods calculated at each epoch, however testing was governed by cross entropy loss. +Train the model using: +``` +python3 train.py +``` +Each epoch loss will be displayed, and the model state and training losses are saved to disk (model: `_tdmodel/model.dat`; losses: `_tdmodel/loss.dat`).\ +Snapshots of the predictions throughout training are also saved locally (`_tdmodel/disp/`) + +### Model Evaluation + +After training, evaluate the model using: +``` +python3 predict.py +``` +This will load the saved model and test it using the yet unseen test dataset. +Its final result is displayed in output and the visualisation of predictions in the first batch is saved to disk.\ +For example: + +![example_test_output](_tdmodel/disp/eval.png) + + +## Dependencies + +- `python : 3.9.23` +- `pytorch : 2.5.1` +- `numpy : 2.0.1` +- `pillow : 11.3.0` +- `matplotlib : 3.9.2` \ No newline at end of file From a3f1981c31266419d6cc6d0cb327e564d6b9d86c Mon Sep 17 00:00:00 2001 From: s4684 Date: Wed, 5 Nov 2025 11:42:28 +1000 Subject: [PATCH 17/26] Implemented loss modelling figures in evaluation module --- recognition/2d_oasis-46412384/predict.py | 45 ++++++++++++++++++++++-- recognition/2d_oasis-46412384/train.py | 1 + 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/recognition/2d_oasis-46412384/predict.py b/recognition/2d_oasis-46412384/predict.py index baa8ebc8c..b316cafd1 100644 --- a/recognition/2d_oasis-46412384/predict.py +++ b/recognition/2d_oasis-46412384/predict.py @@ -3,6 +3,23 @@ from train import Config, evaluate from dataset import get_oasis_dataloaders from modules import UNet, MCDiceLoss +import matplotlib.pyplot as plt + + +def plot_loss(train_loss, validate_loss, save_path, title="Loss over Training Epochs", legend=["Training loss", "Validation loss"]): + plt.xlabel("Epoch") + plt.ylabel("Loss") + plt.grid(True) + + plt.title(title) + + plt.plot(train_loss, "r") + plt.plot(validate_loss, "b") + + plt.legend(legend) + + plt.savefig(save_path) + plt.close() if (__name__ == "__main__"): @@ -11,14 +28,17 @@ # Read model data from save file model.load_state_dict(torch.load(Config.MODEL_SAVE_FILE, map_location=Config.DEVICE)) - train_loss, train_dice, validate_losses, validate_dice = torch.load(Config.LOSS_SAVE_FILE) + train_loss, train_dice, validate_loss, validate_dice = torch.load(Config.LOSS_SAVE_FILE) print("\nStarting model evaluation") crit = nn.CrossEntropyLoss() dice_fn = MCDiceLoss() - test_loss, test_dice= evaluate( + print("\t[ Eval ]", end="", flush=True) + + # """ + test_loss, test_dice = evaluate( model=model, dl=dl_test, crit=crit, @@ -26,5 +46,24 @@ dev=Config.DEVICE, display=True ) + # """ + + plot_loss( + train_loss, + validate_loss, + save_path=Config.PLOT_SAVE_PATH + "celoss.png", + title="Cross-Entropy Loss over Training Epochs", + legend=["Training CE Loss", "Validation CE Loss"] + ) + + plot_loss( + train_dice, + validate_dice, + save_path=Config.PLOT_SAVE_PATH + "diceloss.png", + title="Dice Loss over Training Epochs", + legend=["Training Dice Loss", "Validation Dice Loss"] + ) - print("\t[ Eval ]\tValidate: L=%6.5f D=%6.5f" % (test_loss, test_dice)) \ No newline at end of file + print("\tValidate: L=%6.5f D=%6.5f" % (test_loss, test_dice)) + + print("Evaluation complete!") \ No newline at end of file diff --git a/recognition/2d_oasis-46412384/train.py b/recognition/2d_oasis-46412384/train.py index 0382fb1d1..0169f8274 100644 --- a/recognition/2d_oasis-46412384/train.py +++ b/recognition/2d_oasis-46412384/train.py @@ -11,6 +11,7 @@ class Config: MODEL_SAVE_FILE = "_tdmodel/model.dat" LOSS_SAVE_FILE = "_tdmodel/loss.dat" DISPLAY_SAVE_PATH = "_tdmodel/disp/" + PLOT_SAVE_PATH = "_tdmodel/plot/" DEVICE = "cuda" if torch.cuda.is_available() else "cpu" From d32408fc724bff797d27f522c8decb097b00a003 Mon Sep 17 00:00:00 2001 From: s4684 Date: Wed, 5 Nov 2025 11:53:59 +1000 Subject: [PATCH 18/26] Removed axes from batch visualisation plots --- recognition/2d_oasis-46412384/train.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/recognition/2d_oasis-46412384/train.py b/recognition/2d_oasis-46412384/train.py index 0169f8274..e6b1c0b3f 100644 --- a/recognition/2d_oasis-46412384/train.py +++ b/recognition/2d_oasis-46412384/train.py @@ -15,14 +15,14 @@ class Config: DEVICE = "cuda" if torch.cuda.is_available() else "cpu" - SUBSET_SIZE = -1 + SUBSET_SIZE = 100 LEARN_RATE = 1e-3 IN_CHANNELS = 1 NUM_CLASSES = 4 BATCH_SIZE = 4 - NUM_EPOCHS = 26 + NUM_EPOCHS = 12 DISPLAY_EVERY = 2 display_count = 0 @@ -107,8 +107,11 @@ def display_batch(imgs, msks, logits, save_file=None): logit_data = OasisDataset.encode_mask(logit_data) axes[bat_idx][0].imshow(img_data, cmap="gray") + axes[bat_idx][0].axis("off") axes[bat_idx][1].imshow(msk_data, cmap="gray") + axes[bat_idx][1].axis("off") axes[bat_idx][2].imshow(logit_data, cmap="gray") + axes[bat_idx][2].axis("off") plt.tight_layout() From 938620b6e87563bd5c2790df43f15ef4291eb4b1 Mon Sep 17 00:00:00 2001 From: s4684 Date: Wed, 5 Nov 2025 12:15:27 +1000 Subject: [PATCH 19/26] Removed testing configuration from training module --- recognition/2d_oasis-46412384/train.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/recognition/2d_oasis-46412384/train.py b/recognition/2d_oasis-46412384/train.py index e6b1c0b3f..53cad8a0e 100644 --- a/recognition/2d_oasis-46412384/train.py +++ b/recognition/2d_oasis-46412384/train.py @@ -15,14 +15,14 @@ class Config: DEVICE = "cuda" if torch.cuda.is_available() else "cpu" - SUBSET_SIZE = 100 + SUBSET_SIZE = -1 LEARN_RATE = 1e-3 IN_CHANNELS = 1 NUM_CLASSES = 4 BATCH_SIZE = 4 - NUM_EPOCHS = 12 + NUM_EPOCHS = 26 DISPLAY_EVERY = 2 display_count = 0 From 4123d2a274f6431bd21168d9ca971d29a977b202 Mon Sep 17 00:00:00 2001 From: s4684 Date: Wed, 5 Nov 2025 12:16:54 +1000 Subject: [PATCH 20/26] Added figures in README --- recognition/2d_oasis-46412384/README.md | 9 +++++++-- .../ex_figs/ex-batch_preds.png | Bin 0 -> 92496 bytes .../2d_oasis-46412384/ex_figs/ex-celoss.png | Bin 0 -> 32326 bytes .../2d_oasis-46412384/ex_figs/ex-eval_preds.png | Bin 0 -> 92105 bytes 4 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 recognition/2d_oasis-46412384/ex_figs/ex-batch_preds.png create mode 100644 recognition/2d_oasis-46412384/ex_figs/ex-celoss.png create mode 100644 recognition/2d_oasis-46412384/ex_figs/ex-eval_preds.png diff --git a/recognition/2d_oasis-46412384/README.md b/recognition/2d_oasis-46412384/README.md index 3543cec51..44c55f7a6 100644 --- a/recognition/2d_oasis-46412384/README.md +++ b/recognition/2d_oasis-46412384/README.md @@ -13,7 +13,7 @@ Each 2D data slice is segmented into 4 classes, distinguished by equally distrib For example: -![hello](_tdmodel/disp/1.png) change image +![example batch prediction visualisation](ex_figs/ex-batch_preds.png) ## Model Analysis @@ -62,7 +62,12 @@ This will load the saved model and test it using the yet unseen test dataset. Its final result is displayed in output and the visualisation of predictions in the first batch is saved to disk.\ For example: -![example_test_output](_tdmodel/disp/eval.png) +![example evaluation batch visualisation](ex_figs/ex-eval_preds.png) + +This module will also model the loss results from training and validation (`_tdmodel/plot/`).\ +For example: + +![example cross-entropy loss plot](ex_figs/ex-celoss.png) ## Dependencies diff --git a/recognition/2d_oasis-46412384/ex_figs/ex-batch_preds.png b/recognition/2d_oasis-46412384/ex_figs/ex-batch_preds.png new file mode 100644 index 0000000000000000000000000000000000000000..61cae7f4aa985cbd3b3a4293dbf484a6a3373d77 GIT binary patch literal 92496 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 z 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 C_eksj literal 0 HcmV?d00001 diff --git a/recognition/2d_oasis-46412384/ex_figs/ex-eval_preds.png b/recognition/2d_oasis-46412384/ex_figs/ex-eval_preds.png new file mode 100644 index 0000000000000000000000000000000000000000..fccd297e7f269bfc35ade294e2843225fb444c6d GIT binary patch literal 92105 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%0AE(~X}}^B~6p?XdhL$Qs-^FfAA!q@LB( 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 literal 0 HcmV?d00001 From 4a10be027c2be730167bf7abde20ad3340d862e2 Mon Sep 17 00:00:00 2001 From: s4684 Date: Wed, 5 Nov 2025 12:36:52 +1000 Subject: [PATCH 21/26] Updated the comments for training module --- recognition/2d_oasis-46412384/train.py | 33 +++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/recognition/2d_oasis-46412384/train.py b/recognition/2d_oasis-46412384/train.py index 53cad8a0e..c68829139 100644 --- a/recognition/2d_oasis-46412384/train.py +++ b/recognition/2d_oasis-46412384/train.py @@ -7,6 +7,7 @@ class Config: + # Storage and output paths DATA_DIR = "data/" MODEL_SAVE_FILE = "_tdmodel/model.dat" LOSS_SAVE_FILE = "_tdmodel/loss.dat" @@ -15,20 +16,35 @@ class Config: DEVICE = "cuda" if torch.cuda.is_available() else "cpu" + # Data subset size. Datasets will be trimmed to this size, if necessary. Set to -1 to not trim datasets SUBSET_SIZE = -1 + # Gradient for AdaM optimiser momentum. Adjusts the weight of the momentum-based component to AdaM + # The momentum technique regards an adaptive gradient descent algorithm, optimising the convergence rate + # while avoiding oscillations and divergence caused by excessive momentum + # A greater learning rate may result in a more agressive model progression, however reduces it's stability LEARN_RATE = 1e-3 + # Data parameters. These are unlikely to change for the OASIS dataset IN_CHANNELS = 1 NUM_CLASSES = 4 + + # Model parameters BATCH_SIZE = 4 NUM_EPOCHS = 26 + + # Output parameters DISPLAY_EVERY = 2 + # Internal variables display_count = 0 def train_epoch(model, dl, optim, crit, dice_fn, num_classes, dev="cpu", display=False): + """ + Train and test a model for a single run of the dataset + """ + loss = 0 dice = 0 @@ -38,18 +54,22 @@ def train_epoch(model, dl, optim, crit, dice_fn, num_classes, dev="cpu", display imgs = imgs.to(dev) msks = msks.to(dev) + # Reset the optimiser optim.zero_grad() + # Compute the model predictions logits = model(imgs) if (display and bat_idx == 0): display_batch(imgs, msks, logits) + # Evaluate the prediction loss bat_loss = crit(logits, msks) bat_loss.backward() bat_dice = dice_fn(logits, msks).mean() + # Advance the optimiser optim.step() loss += bat_loss.item() @@ -59,6 +79,10 @@ def train_epoch(model, dl, optim, crit, dice_fn, num_classes, dev="cpu", display def evaluate(model, dl, crit, dice_fn, dev="cpu", display=False): + """ + Test a model for a single run of the dataset + """ + loss = 0 dice = 0 @@ -68,11 +92,13 @@ def evaluate(model, dl, crit, dice_fn, dev="cpu", display=False): imgs = imgs.to(dev) msks = msks.to(dev) + # Computer the model predictions logits = model(imgs) if (display and bat_idx == 0): display_batch(imgs, msks, logits, save_file="eval.png") + # Evaluate the prediction loss bat_loss = crit(logits, msks) bat_dice = dice_fn(logits, msks).mean() @@ -125,12 +151,16 @@ def display_batch(imgs, msks, logits, save_file=None): def train(model, dl_train, dl_validate, epochs=20, display_every=10): + """ + Run full training loop for a model + """ + model.to(Config.DEVICE) print("\nStarting model training on %s" % Config.DEVICE) + # Establish model training accessories crit = nn.CrossEntropyLoss() dice_fn = MCDiceLoss() - # Use AdaM optimiser optim = Adam(model.parameters(), lr=Config.LEARN_RATE) train_losses = [] @@ -139,6 +169,7 @@ def train(model, dl_train, dl_validate, epochs=20, display_every=10): validate_losses = [] validate_dices = [] + # Run each training epoch for ep_idx in range(1, epochs + 1): print("\t[ Epoch %d / %d ]" % (ep_idx, epochs), end="", flush=True) From 5c9621659ccf43bf05bd8c4e658dca944db921be Mon Sep 17 00:00:00 2001 From: s4684 Date: Wed, 5 Nov 2025 12:46:27 +1000 Subject: [PATCH 22/26] Updated the comments for dataset loading module --- recognition/2d_oasis-46412384/dataset.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/recognition/2d_oasis-46412384/dataset.py b/recognition/2d_oasis-46412384/dataset.py index 379c7ef28..c138ad581 100644 --- a/recognition/2d_oasis-46412384/dataset.py +++ b/recognition/2d_oasis-46412384/dataset.py @@ -18,9 +18,11 @@ class OasisDataset(Dataset): """ def __init__(self, data_dir, mask_dir, subset_size=-1): + # Find all data files self.data_paths = [data_dir + "/" + file for file in listdir(data_dir)[:subset_size]] self.mask_paths = [mask_dir + "/" + file for file in listdir(mask_dir)[:subset_size]] + # Establish dataset size consistency between images, masks and subset size if (subset_size < 0 or len(self.data_paths) < subset_size): self.subset_size = len(self.data_paths) else: @@ -40,9 +42,13 @@ def __getitem__(self, idx): img = Image.open(self.data_paths[idx]) img_data = np.resize(np.array(img.getdata(), dtype=np.float32), img.size) + # Apply z-score normalisation to image data + # This stabilises all images to a common scale by filtering out irrelevant details, as to maintain consistency in the model training img_data = (img_data - img_data.mean()) / (img_data.std() + 1e-6) + # Shift array dimensions as to accomodate batch groups img_data = torch.from_numpy(img_data).unsqueeze(0).float() + # Load and decode mask msk = Image.open(self.mask_paths[idx]) msk_data = torch.from_numpy(OasisDataset.decode_mask(np.resize(np.array(msk.getdata(), dtype=np.int64), msk.size))) @@ -53,12 +59,14 @@ def __getitem__(self, idx): Decode greyscale mask values from numpy array to segment classification integers """ def decode_mask(enc_msk): + # Collect a list of unique values in the mask vals = set() for val in enc_msk.flat: vals.add(val) vals = np.sort(np.array(list(vals), dtype=np.uint8)) + # Replace each value with a corresponding identifying index dec_msk = np.zeros_like(enc_msk) for idx, val in enumerate(vals): dec_msk[enc_msk == val] = idx @@ -70,12 +78,14 @@ def decode_mask(enc_msk): Encode segment classification integers from numpy array into greyscale values of equal distribution """ def encode_mask(dec_msk): + # Collect a list of unique class label indices vals = set() for val in dec_msk.flat: vals.add(val) vals = np.sort(np.array(list(vals))) + # Generate an equidistant greyscale value for each label enc_msk = np.array(dec_msk) * 255 / (len(vals) - 1) return enc_msk @@ -89,10 +99,12 @@ def get_oasis_dataloaders(data_dir, batch_size, subset_size=-1): IMG_TEST_PATH = "keras_png_slices_test" MSK_TEST_PATH = "keras_png_slices_seg_test" + # Gather data files ds_train = OasisDataset(data_dir + IMG_TRAIN_PATH, data_dir + MSK_TRAIN_PATH, subset_size=subset_size) ds_validate = OasisDataset(data_dir + IMG_VAL_PATH, data_dir + MSK_VAL_PATH, subset_size=subset_size // 2 if subset_size else -1) ds_test = OasisDataset(data_dir + IMG_TEST_PATH, data_dir + MSK_TEST_PATH, subset_size=subset_size // 2 if subset_size else -1) + # Generate data loaders dl_train = DataLoader(ds_train, batch_size=batch_size, shuffle=True) dl_validate = DataLoader(ds_validate, batch_size=batch_size, shuffle=False) dl_test = DataLoader(ds_test, batch_size=batch_size, shuffle=False) From 0f4de8930b6bf185e5778f429502b3b90dd56e97 Mon Sep 17 00:00:00 2001 From: s4684 Date: Wed, 5 Nov 2025 13:40:18 +1000 Subject: [PATCH 23/26] Updated the comments for model modules --- recognition/2d_oasis-46412384/modules.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/recognition/2d_oasis-46412384/modules.py b/recognition/2d_oasis-46412384/modules.py index f173e284b..7a0a5aa28 100644 --- a/recognition/2d_oasis-46412384/modules.py +++ b/recognition/2d_oasis-46412384/modules.py @@ -6,6 +6,12 @@ class InConv(nn.Module): def __init__(self, in_chls, out_chls): super().__init__() + # Use convolution with a 3x3 kernel, padding width of 1 and no dilation + # This suits the MRI data as its patterns are closely related to its near neighbours + # instead of regarding the entire image + + # Use the ReLU activation function as a suitable compromise on computational efficiency and + # model complexity while trying to replicate the sigmoid function self.net = nn.Sequential( nn.Conv2d(in_chls, out_chls, kernel_size=3, padding=1, bias=False), nn.BatchNorm2d(out_chls), @@ -22,6 +28,7 @@ def forward(self, x): class DownLayer(nn.Module): def __init__(self, in_chls, out_chls): super().__init__() + # use 2x2 max pooling for data downscaling self.pool = nn.MaxPool2d(kernel_size=2) self.conv = InConv(in_chls, out_chls) @@ -50,6 +57,7 @@ def forward(self, x, skip): class OutConv(nn.Module): def __init__(self, in_chls, out_chls): super().__init__() + # Final 1x1 convolution to establish logits self.conv = nn.Conv2d(in_chls, out_chls, kernel_size=1) def forward(self, x): @@ -63,6 +71,8 @@ def __init__(self, in_chls=1, num_classes=4, base_chls=64): c = [base_chls * 2**i for i in range(5)] + # Network architecture + self.input = InConv(in_chls, base_chls) self.down1 = DownLayer(c[0], c[1]) self.down2 = DownLayer(c[1], c[2]) @@ -82,6 +92,7 @@ def forward(self, x): x4 = self.down3(x3) x5 = self.down4(x4) + # Upsampling with skips from downsampling train return self.output( self.up4( self.up3( @@ -99,15 +110,18 @@ def __init__(self, eps=1e-6): self.eps = eps def forward(self, logits, target): - # Convert raw output to probabilities + # Convert raw output to probabilities using softmax function, ideal for predictions over several classes probs = logits.softmax(dim=1) + # Batch size, num classes, height, width B, C, H, W = probs.shape + # One-hot encoding to finalise predictions, followed by dimension adjustments target_oh = F.one_hot(target, num_classes=C).permute(0, 3, 1, 2).float() probs_flat = probs.reshape(B, C, -1) target_flat = target_oh.reshape(B, C, -1) + # Cross product yields the intersect intersect = (probs_flat * target_flat).sum(dim=-1) total = probs_flat.sum(dim=-1) + target_flat.sum(dim=-1) From e64317041747b7970806685aa56377a8b06dbb71 Mon Sep 17 00:00:00 2001 From: s4684 Date: Wed, 5 Nov 2025 15:13:23 +1000 Subject: [PATCH 24/26] Updated README to include final model results. Changed README figure folder name --- recognition/2d_oasis-46412384/README.md | 60 +++++++++++++++++- .../{ex_figs => figs}/ex-batch_preds.png | Bin .../{ex_figs => figs}/ex-celoss.png | Bin .../{ex_figs => figs}/ex-eval_preds.png | Bin .../2d_oasis-46412384/figs/fin-celoss.png | Bin 0 -> 32537 bytes .../2d_oasis-46412384/figs/fin-diceloss.png | Bin 0 -> 35435 bytes 6 files changed, 57 insertions(+), 3 deletions(-) rename recognition/2d_oasis-46412384/{ex_figs => figs}/ex-batch_preds.png (100%) rename recognition/2d_oasis-46412384/{ex_figs => figs}/ex-celoss.png (100%) rename recognition/2d_oasis-46412384/{ex_figs => figs}/ex-eval_preds.png (100%) create mode 100644 recognition/2d_oasis-46412384/figs/fin-celoss.png create mode 100644 recognition/2d_oasis-46412384/figs/fin-diceloss.png diff --git a/recognition/2d_oasis-46412384/README.md b/recognition/2d_oasis-46412384/README.md index 44c55f7a6..89391dce9 100644 --- a/recognition/2d_oasis-46412384/README.md +++ b/recognition/2d_oasis-46412384/README.md @@ -13,7 +13,7 @@ Each 2D data slice is segmented into 4 classes, distinguished by equally distrib For example: -![example batch prediction visualisation](ex_figs/ex-batch_preds.png) +![example batch prediction visualisation](figs/ex-batch_preds.png) ## Model Analysis @@ -62,12 +62,66 @@ This will load the saved model and test it using the yet unseen test dataset. Its final result is displayed in output and the visualisation of predictions in the first batch is saved to disk.\ For example: -![example evaluation batch visualisation](ex_figs/ex-eval_preds.png) +![example evaluation batch visualisation](figs/ex-eval_preds.png) This module will also model the loss results from training and validation (`_tdmodel/plot/`).\ For example: -![example cross-entropy loss plot](ex_figs/ex-celoss.png) +![example cross-entropy loss plot](figs/ex-celoss.png) + + +## Model Results + +The final result of this model achieved a loss score of **0.29355** and dice score of **0.40218**. + +> Training loss scores continued to decrease with each epoch, reaching a minimum of **0.20137**, while validation scores converged towards, approximately, **0.29**. + +> Similarly, training dice scores show decredation across epochs, reaching **0.33267**, validation scores converged about **0.4** + +While it is likely possible to reach a convergence of training loss scores, given more epochs, this would only result in model overfitting, as the validation scores had already reached their convergence points.\ +The resulting output is: + +``` +Starting model training on cuda + [ Epoch 1 / 26 ] Train: L=0.98436 D=0.71914 Validate: L=0.86103 D=0.67615 + [ Epoch 2 / 26 ] Train: L=0.62303 D=0.62290 Validate: L=0.53432 D=0.58800 + [ Epoch 3 / 26 ] Train: L=0.45187 D=0.55552 Validate: L=0.40059 D=0.52977 + [ Epoch 4 / 26 ] Train: L=0.37325 D=0.51251 Validate: L=0.36206 D=0.51142 + [ Epoch 5 / 26 ] Train: L=0.33565 D=0.48701 Validate: L=0.35009 D=0.48460 + [ Epoch 6 / 26 ] Train: L=0.31543 D=0.47188 Validate: L=0.35551 D=0.48481 + [ Epoch 7 / 26 ] Train: L=0.29792 D=0.45573 Validate: L=0.31159 D=0.46544 + [ Epoch 8 / 26 ] Train: L=0.28726 D=0.44615 Validate: L=0.30409 D=0.45165 + [ Epoch 9 / 26 ] Train: L=0.27587 D=0.43496 Validate: L=0.29401 D=0.43792 + [ Epoch 10 / 26 ] Train: L=0.26944 D=0.42707 Validate: L=0.28949 D=0.43535 + [ Epoch 11 / 26 ] Train: L=0.26269 D=0.41961 Validate: L=0.28887 D=0.43687 + [ Epoch 12 / 26 ] Train: L=0.25914 D=0.41463 Validate: L=0.27945 D=0.42804 + [ Epoch 13 / 26 ] Train: L=0.25293 D=0.40722 Validate: L=0.29024 D=0.42730 + [ Epoch 14 / 26 ] Train: L=0.24776 D=0.40157 Validate: L=0.28522 D=0.43205 + [ Epoch 15 / 26 ] Train: L=0.24375 D=0.39455 Validate: L=0.28957 D=0.43101 + [ Epoch 16 / 26 ] Train: L=0.24061 D=0.38900 Validate: L=0.28890 D=0.42225 + [ Epoch 17 / 26 ] Train: L=0.23789 D=0.38711 Validate: L=0.30815 D=0.42445 + [ Epoch 18 / 26 ] Train: L=0.23599 D=0.38272 Validate: L=0.29255 D=0.41271 + [ Epoch 19 / 26 ] Train: L=0.22989 D=0.37462 Validate: L=0.28706 D=0.41631 + [ Epoch 20 / 26 ] Train: L=0.22484 D=0.36830 Validate: L=0.28170 D=0.40779 + [ Epoch 21 / 26 ] Train: L=0.21971 D=0.35926 Validate: L=0.28826 D=0.41555 + [ Epoch 22 / 26 ] Train: L=0.21698 D=0.35655 Validate: L=0.30154 D=0.41290 + [ Epoch 23 / 26 ] Train: L=0.21315 D=0.34834 Validate: L=0.29658 D=0.40792 + [ Epoch 24 / 26 ] Train: L=0.20954 D=0.34459 Validate: L=0.29707 D=0.40281 + [ Epoch 25 / 26 ] Train: L=0.20679 D=0.33885 Validate: L=0.30125 D=0.41382 + [ Epoch 26 / 26 ] Train: L=0.20137 D=0.33267 Validate: L=0.29598 D=0.40516 +Training complete! +``` +``` +Starting model evaluation + [ Eval ] Validate: L=0.29355 D=0.40218 +Evaluation complete! +``` + +Yielding the loss plots: + +![final model result dice loss scores](figs/fin-diceloss.png) + +![final model result CE loss scores](figs/fin-celoss.png) ## Dependencies diff --git a/recognition/2d_oasis-46412384/ex_figs/ex-batch_preds.png b/recognition/2d_oasis-46412384/figs/ex-batch_preds.png similarity index 100% rename from recognition/2d_oasis-46412384/ex_figs/ex-batch_preds.png rename to recognition/2d_oasis-46412384/figs/ex-batch_preds.png diff --git a/recognition/2d_oasis-46412384/ex_figs/ex-celoss.png b/recognition/2d_oasis-46412384/figs/ex-celoss.png similarity index 100% rename from recognition/2d_oasis-46412384/ex_figs/ex-celoss.png rename to recognition/2d_oasis-46412384/figs/ex-celoss.png diff --git a/recognition/2d_oasis-46412384/ex_figs/ex-eval_preds.png b/recognition/2d_oasis-46412384/figs/ex-eval_preds.png similarity index 100% rename from recognition/2d_oasis-46412384/ex_figs/ex-eval_preds.png rename to recognition/2d_oasis-46412384/figs/ex-eval_preds.png diff --git a/recognition/2d_oasis-46412384/figs/fin-celoss.png b/recognition/2d_oasis-46412384/figs/fin-celoss.png new file mode 100644 index 0000000000000000000000000000000000000000..abb2dbf3dbece73388587417e436b89279a464ed GIT binary patch literal 32537 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 literal 0 HcmV?d00001 From 4a7095744edb6f2976ef73936d95cd7b97ef341d Mon Sep 17 00:00:00 2001 From: s4684 Date: Wed, 5 Nov 2025 15:15:41 +1000 Subject: [PATCH 25/26] Fixed typo in README --- recognition/2d_oasis-46412384/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recognition/2d_oasis-46412384/README.md b/recognition/2d_oasis-46412384/README.md index 89391dce9..acb7e2624 100644 --- a/recognition/2d_oasis-46412384/README.md +++ b/recognition/2d_oasis-46412384/README.md @@ -76,7 +76,7 @@ The final result of this model achieved a loss score of **0.29355** and dice sco > Training loss scores continued to decrease with each epoch, reaching a minimum of **0.20137**, while validation scores converged towards, approximately, **0.29**. -> Similarly, training dice scores show decredation across epochs, reaching **0.33267**, validation scores converged about **0.4** +> Similarly, training dice scores show decline across epochs, reaching **0.33267**, validation scores converged about **0.4** While it is likely possible to reach a convergence of training loss scores, given more epochs, this would only result in model overfitting, as the validation scores had already reached their convergence points.\ The resulting output is: From 5e06ab86bc9137ad2f68cc35a51bf291c6e6647b Mon Sep 17 00:00:00 2001 From: s4684 Date: Wed, 5 Nov 2025 15:27:19 +1000 Subject: [PATCH 26/26] Changed final dice losses to dice coefficients in README --- recognition/2d_oasis-46412384/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/recognition/2d_oasis-46412384/README.md b/recognition/2d_oasis-46412384/README.md index acb7e2624..70142c893 100644 --- a/recognition/2d_oasis-46412384/README.md +++ b/recognition/2d_oasis-46412384/README.md @@ -72,11 +72,11 @@ For example: ## Model Results -The final result of this model achieved a loss score of **0.29355** and dice score of **0.40218**. +The final result of this model achieved a loss score of **0.29355** and dice score of **0.59782**. > Training loss scores continued to decrease with each epoch, reaching a minimum of **0.20137**, while validation scores converged towards, approximately, **0.29**. -> Similarly, training dice scores show decline across epochs, reaching **0.33267**, validation scores converged about **0.4** +> Similarly, training dice scores show decline across epochs, reaching **0.66733**, validation scores converged about **0.6** While it is likely possible to reach a convergence of training loss scores, given more epochs, this would only result in model overfitting, as the validation scores had already reached their convergence points.\ The resulting output is: