From 5123f20558e35eaa5317df4bbd0ee330a931d26e Mon Sep 17 00:00:00 2001 From: Schneider Leo <leo.schneider@etu.ec-lyon.fr> Date: Wed, 12 Mar 2025 16:19:51 +0100 Subject: [PATCH] model duo --- dataset/dataset.py | 16 ++--- main.py | 122 ++++++++++++++++++++++++++++++++++++++- models/model.py | 20 ++++++- output/training_plot.png | Bin 32587 -> 0 bytes 4 files changed, 146 insertions(+), 12 deletions(-) delete mode 100644 output/training_plot.png diff --git a/dataset/dataset.py b/dataset/dataset.py index e5a1a7b..b937657 100644 --- a/dataset/dataset.py +++ b/dataset/dataset.py @@ -86,7 +86,7 @@ def default_loader(path): return Image.open(path).convert('RGB') def remove_aer_ana(l): - l = l.map(lambda x : x.split('_')[0]) + l = map(lambda x : x.split('_')[0],l) return list(OrderedDict.fromkeys(l)) def make_dataset_custom( @@ -118,7 +118,7 @@ def make_dataset_custom( if extensions is not None: def is_valid_file(x: str) -> bool: - return has_file_allowed_extension(x, extensions) # type: ignore[arg-type] + return torchvision.datasets.folder.has_file_allowed_extension(x, extensions) # type: ignore[arg-type] is_valid_file = cast(Callable[[str], bool], is_valid_file) @@ -136,7 +136,7 @@ def make_dataset_custom( fname_aer = fname + '_AER.png' path_ana = os.path.join(root, fname_ana) path_aer = os.path.join(root, fname_aer) - if is_valid_file(path_ana) and is_valid_file(path_aer): + if is_valid_file(path_ana) and is_valid_file(path_aer) and os.path.isfile(path_ana) and os.path.isfile(path_aer): item = path_aer, path_ana, class_index instances.append(item) @@ -161,12 +161,12 @@ class ImageFolderDuo(data.Dataset): self.transform = transform self.target_transform = target_transform self.loader = loader - self.classes = torchvision.datasets.folder.find_classes(root) + self.classes = torchvision.datasets.folder.find_classes(root)[0] def __getitem__(self, index): impathAER, impathANA, target = self.imlist[index] - imgAER = self.loader(os.path.join(self.root, impathAER)) - imgANA = self.loader(os.path.join(self.root, impathANA)) + imgAER = self.loader(impathAER) + imgANA = self.loader(impathANA) if self.transform is not None: imgAER = self.transform(imgAER) imgANA = self.transform(imgANA) @@ -196,8 +196,8 @@ def load_data_duo(base_dir, batch_size, shuffle=True, noise_threshold=0): Log_normalisation(), transforms.Normalize(0.5, 0.5)]) print('Default val transform') - train_dataset = torchvision.datasets.ImageFolderDuo(root=base_dir, transform=train_transform) - val_dataset = torchvision.datasets.ImageFolderDuo(root=base_dir, transform=val_transform) + train_dataset = ImageFolderDuo(root=base_dir, transform=train_transform) + val_dataset = ImageFolderDuo(root=base_dir, transform=val_transform) generator1 = torch.Generator().manual_seed(42) indices = torch.randperm(len(train_dataset), generator=generator1) val_size = len(train_dataset) // 5 diff --git a/main.py b/main.py index 13946a3..84240bf 100644 --- a/main.py +++ b/main.py @@ -2,10 +2,10 @@ import matplotlib.pyplot as plt import numpy as np from config.config import load_args -from dataset.dataset import load_data +from dataset.dataset import load_data, load_data_duo import torch import torch.nn as nn -from models.model import Classification_model +from models.model import Classification_model, Classification_model_duo import torch.optim as optim from sklearn.metrics import confusion_matrix import seaborn as sn @@ -88,6 +88,7 @@ def run(args): plt.plot(val_acc) plt.plot(train_acc) plt.plot(train_acc) + plt.ylim(0, 1.05) plt.show() plt.savefig('output/training_plot_noise_{}_lr_{}_model_{}.png'.format(args.noise_threshold,args.lr,args.model)) @@ -124,6 +125,121 @@ def make_prediction(model, data, f_name): plt.savefig(f_name) +def train_duo(model, data_train, optimizer, loss_function, epoch): + model.train() + losses = 0. + acc = 0. + for param in model.parameters(): + param.requires_grad = True + + for imaer,imana, label in data_train: + label = label.long() + if torch.cuda.is_available(): + imaer = imaer.cuda() + imana = imana.cuda() + pred_logits = model.forward(imaer,imana) + pred_class = torch.argmax(pred_logits,dim=1) + acc += (pred_class==label).sum().item() + loss = loss_function(pred_logits,label) + losses += loss.item() + optimizer.zero_grad() + loss.backward() + optimizer.step() + losses = losses/len(data_train.dataset) + acc = acc/len(data_train.dataset) + print('Train epoch {}, loss : {:.3f} acc : {:.3f}'.format(epoch,losses,acc)) + return losses, acc + +def test_duo(model, data_test, loss_function, epoch): + model.eval() + losses = 0. + acc = 0. + for param in model.parameters(): + param.requires_grad = False + + for imaer,imana, label in data_test: + label = label.long() + if torch.cuda.is_available(): + imaer = imaer.cuda() + imana = imana.cuda() + pred_logits = model.forward(imaer,imana) + pred_class = torch.argmax(pred_logits,dim=1) + acc += (pred_class==label).sum().item() + loss = loss_function(pred_logits,label) + losses += loss.item() + losses = losses/len(data_test.dataset) + acc = acc/len(data_test.dataset) + print('Test epoch {}, loss : {:.3f} acc : {:.3f}'.format(epoch,losses,acc)) + return losses,acc + +def run_duo(args): + data_train, data_test = load_data_duo(base_dir=args.dataset_dir, batch_size=args.batch_size) + model = Classification_model_duo(model = args.model, n_class=len(data_train.dataset.dataset.classes)) + if args.pretrain_path is not None : + load_model(model,args.pretrain_path) + if torch.cuda.is_available(): + model = model.cuda() + best_acc = 0 + train_acc=[] + train_loss=[] + val_acc=[] + val_loss=[] + loss_function = nn.CrossEntropyLoss() + optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9) + + for e in range(args.epoches): + loss, acc = train_duo(model,data_train,optimizer,loss_function,e) + train_loss.append(loss) + train_acc.append(acc) + if e%args.eval_inter==0 : + loss, acc = test_duo(model,data_test,loss_function,e) + val_loss.append(loss) + val_acc.append(acc) + if acc > best_acc : + save_model(model,args.save_path) + best_acc = acc + plt.plot(train_acc) + plt.plot(val_acc) + plt.plot(train_acc) + plt.plot(train_acc) + plt.ylim(0, 1.05) + plt.show() + plt.savefig('output/training_plot_noise_{}_lr_{}_model_{}.png'.format(args.noise_threshold,args.lr,args.model)) + + load_model(model, args.save_path) + make_prediction_duo(model,data_test, 'output/confusion_matrix_noise_{}_lr_{}_model_{}.png'.format(args.noise_threshold,args.lr,args.model)) + + +def make_prediction_duo(model, data, f_name): + y_pred = [] + y_true = [] + + # iterate over test data + for imaer,imana, label in data: + label = label.long() + if torch.cuda.is_available(): + imaer = imaer.cuda() + imana = imana.cuda() + output = model(imaer,imana) + + output = (torch.max(torch.exp(output), 1)[1]).data.cpu().numpy() + y_pred.extend(output) + + label = label.data.cpu().numpy() + y_true.extend(label) # Save Truth + # constant for classes + + classes = data.dataset.dataset.classes + + # Build confusion matrix + cf_matrix = confusion_matrix(y_true, y_pred) + df_cm = pd.DataFrame(cf_matrix / np.sum(cf_matrix, axis=1)[:, None], index=[i for i in classes], + columns=[i for i in classes]) + plt.figure(figsize=(12, 7)) + sn.heatmap(df_cm, annot=True) + plt.savefig(f_name) + + def save_model(model, path): print('Model saved') torch.save(model.state_dict(), path) @@ -135,4 +251,4 @@ def load_model(model, path): if __name__ == '__main__': args = load_args() - run(args) \ No newline at end of file + run_duo(args) \ No newline at end of file diff --git a/models/model.py b/models/model.py index 1921203..cea9caa 100644 --- a/models/model.py +++ b/models/model.py @@ -270,4 +270,22 @@ class Classification_model(nn.Module): def forward(self, input): - return self.im_encoder(input) \ No newline at end of file + return self.im_encoder(input) + +class Classification_model_duo(nn.Module): + + def __init__(self, model, n_class, *args, **kwargs): + super().__init__(*args, **kwargs) + self.n_class = n_class + if model =='ResNet18': + self.im_encoder = resnet18(num_classes=self.n_class) + + self.predictor = nn.Linear(in_features=self.n_class*2,out_features=self.n_class) + + + def forward(self, input_aer, input_ana): + out_aer = self.im_encoder(input_aer) + out_ana = self.im_encoder(input_ana) + out = torch.concat([out_aer,out_ana],dim=1) + return self.predictor(out) + diff --git a/output/training_plot.png b/output/training_plot.png deleted file mode 100644 index 98bd0695f3fa500dbed85dc1907b46a8c6efac46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32587 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 -- GitLab