def __init__(self): ##The top config #self.data_root = '/media/hhy/data/USdata/MergePhase1/test_0.3' #self.log_dir = '/media/hhy/data/code_results/MILs/MIL_H_Attention' self.root = '/remote-home/my/Ultrasound_CV/data/Ruijin/clean' self.log_dir = '/remote-home/my/hhy/Ultrasound_MIL/experiments/weighted_sampler/' if not os.path.exists(self.log_dir): os.makedirs(self.log_dir) ##training config self.lr = 1e-4 self.epoch = 50 self.resume = -1 self.batch_size = 1 self.net = Attention() self.net.cuda() self.optimizer = Adam(self.net.parameters(), lr=self.lr) self.lrsch = torch.optim.lr_scheduler.MultiStepLR(self.optimizer, milestones=[10, 30, 50, 70], gamma=0.5) self.logger = Logger(self.log_dir) self.train_transform = transforms.Compose([ transforms.Resize((224,224)), transforms.RandomResizedCrop((224,224)), transforms.RandomHorizontalFlip(0.5), transforms.RandomVerticalFlip(0.5), transforms.ColorJitter(0.25,0.25,0.25,0.25), transforms.ToTensor() ]) self.test_transform = transforms.Compose([ transforms.Resize((224,224)), transforms.ToTensor() ]) self.trainbag = RuijinBags(self.root, [0,1,2,3],self.train_transform) self.testbag = RuijinBags(self.root, [4], self.test_transform) train_label_list = list(map(lambda x: int(x['label']), self.trainbag.patient_info)) pos_ratio = sum(train_label_list) / len(train_label_list) print(pos_ratio) train_weight = [(1-pos_ratio) if x>0 else pos_ratio for x in train_label_list] self.train_sampler = WeightedRandomSampler(weights=train_weight, num_samples=len(self.trainbag)) self.train_loader = DataLoader(self.trainbag, batch_size=self.batch_size, num_workers=8, sampler=self.train_sampler) self.val_loader = DataLoader(self.testbag, batch_size=self.batch_size, shuffle=False, num_workers=8) if self.resume > 0: self.net, self.optimizer, self.lrsch, self.loss, self.global_step = self.logger.load(self.net, self.optimizer, self.lrsch, self.loss, self.resume) else: self.global_step = 0 # self.trainer = MTTrainer(self.net, self.optimizer, self.lrsch, self.loss, self.train_loader, self.val_loader, self.logger, self.global_step, mode=2) self.trainer = MILTrainer_batch1(self.net, self.optimizer, self.lrsch, None, self.train_loader, self.val_loader, self.logger, self.global_step)
class Config(object): ''' This config is for single modality BM classification ''' def __init__(self): ##The top config #self.data_root = '/media/hhy/data/USdata/MergePhase1/test_0.3' #self.log_dir = '/media/hhy/data/code_results/MILs/MIL_H_Attention' self.root = '/remote-home/my/Ultrasound_CV/data/Ruijin/clean' self.log_dir = '/remote-home/my/hhy/Ultrasound_MIL/experiments/weighted_sampler/' if not os.path.exists(self.log_dir): os.makedirs(self.log_dir) ##training config self.lr = 1e-4 self.epoch = 50 self.resume = -1 self.batch_size = 1 self.net = Attention() self.net.cuda() self.optimizer = Adam(self.net.parameters(), lr=self.lr) self.lrsch = torch.optim.lr_scheduler.MultiStepLR(self.optimizer, milestones=[10, 30, 50, 70], gamma=0.5) self.logger = Logger(self.log_dir) self.train_transform = transforms.Compose([ transforms.Resize((224,224)), transforms.RandomResizedCrop((224,224)), transforms.RandomHorizontalFlip(0.5), transforms.RandomVerticalFlip(0.5), transforms.ColorJitter(0.25,0.25,0.25,0.25), transforms.ToTensor() ]) self.test_transform = transforms.Compose([ transforms.Resize((224,224)), transforms.ToTensor() ]) self.trainbag = RuijinBags(self.root, [0,1,2,3],self.train_transform) self.testbag = RuijinBags(self.root, [4], self.test_transform) train_label_list = list(map(lambda x: int(x['label']), self.trainbag.patient_info)) pos_ratio = sum(train_label_list) / len(train_label_list) print(pos_ratio) train_weight = [(1-pos_ratio) if x>0 else pos_ratio for x in train_label_list] self.train_sampler = WeightedRandomSampler(weights=train_weight, num_samples=len(self.trainbag)) self.train_loader = DataLoader(self.trainbag, batch_size=self.batch_size, num_workers=8, sampler=self.train_sampler) self.val_loader = DataLoader(self.testbag, batch_size=self.batch_size, shuffle=False, num_workers=8) if self.resume > 0: self.net, self.optimizer, self.lrsch, self.loss, self.global_step = self.logger.load(self.net, self.optimizer, self.lrsch, self.loss, self.resume) else: self.global_step = 0 # self.trainer = MTTrainer(self.net, self.optimizer, self.lrsch, self.loss, self.train_loader, self.val_loader, self.logger, self.global_step, mode=2) self.trainer = MILTrainer_batch1(self.net, self.optimizer, self.lrsch, None, self.train_loader, self.val_loader, self.logger, self.global_step) def update(self,dicts): for k,v in dicts.items(): self.__setattr__(k,v) @staticmethod def auto_argparser(cfg,description=None): """Generate argparser from config file automatically (experimental) """ # partial_parser = ArgumentParser(description=description) # partial_parser.add_argument('config', help='config file path') # parsed, unparsed_args = partial_parser.parse_known_args() # cfg = Config.fromfile(parsed.config) parser = ArgumentParser(description=description) add_args(parser, cfg) parsed_args = parser.parse_args() update_cfg(cfg, parsed_args) return cfg
class Config(object): ''' This config is for single modality BM classification ''' def __init__(self): ##The top config #self.data_root = '/media/hhy/data/USdata/MergePhase1/test_0.3' #self.log_dir = '/media/hhy/data/code_results/MILs/MIL_H_Attention' self.root = '/remote-home/my/Ultrasound_CV/data/Ruijin/clean' self.log_dir = '/remote-home/my/hhy/Ultrasound_MIL/code_results' if not os.path.exists(self.log_dir): os.mkdir(self.log_dir) ##training config self.lr = 1e-4 self.epoch = 50 self.resume = -1 self.batch_size = 1 self.net = Attention() self.net.cuda() self.optimizer = Adam(self.net.parameters(), lr=self.lr) self.lrsch = torch.optim.lr_scheduler.MultiStepLR(self.optimizer, milestones=[10, 30, 50, 70], gamma=0.5) self.logger = Logger(self.log_dir) self.train_transform = transforms.Compose([ transforms.RandomResizedCrop(224), transforms.ColorJitter(brightness = 0.25), transforms.RandomHorizontalFlip(0.5), transforms.RandomVerticalFlip(0.5), # transforms.ColorJitter(0.25, 0.25, 0.25, 0.25), transforms.ToTensor() ]) self.test_transform = transforms.Compose([ transforms.Resize((224,224)), transforms.ToTensor() ]) self.trainbag = RuijinBags(self.root, [0,1,2,3],self.test_transform) self.testbag = RuijinBags(self.root, [4], self.test_transform) # patient bags #self.trainbag = PatientBags(self.data_root+'/train', self.train_transform) #self.testbag = PatientBags(self.data_root+'/test', self.test_transform) ''' # random self.train_set = BMDataset(self.data_root+'/train',self.train_transform) self.test_set = BMDataset(self.data_root+'/test',self.test_transform) self.trainbag = BMBags(dataset=self.train_set) self.testbag = BMBags(dataset=self.test_set) ''' #self.train_loader = DataLoader(self.trainbag, batch_size=1, shuffle=True, num_workers=8) #self.val_loader = DataLoader(self.testbag, batch_size=1, shuffle=False, num_workers=8) self.train_loader = DataLoader(self.trainbag, batch_size=4, collate_fn = my_collate, shuffle=True, num_workers=8) #print (len(self.train_loader)) self.val_loader = DataLoader(self.testbag, batch_size=4, collate_fn = my_collate, shuffle=False, num_workers=8) if self.resume > 0: self.net, self.optimizer, self.lrsch, self.loss, self.global_step = self.logger.load(self.net, self.optimizer, self.lrsch, self.loss, self.resume) else: self.global_step = 0 # self.trainer = MTTrainer(self.net, self.optimizer, self.lrsch, self.loss, self.train_loader, self.val_loader, self.logger, self.global_step, mode=2) self.trainer = MILTrainer(self.net, self.optimizer, self.lrsch, None, self.train_loader, self.val_loader, self.logger, self.global_step) def update(self,dicts): for k,v in dicts.items(): self.__setattr__(k,v) @staticmethod def auto_argparser(cfg,description=None): """Generate argparser from config file automatically (experimental) """ # partial_parser = ArgumentParser(description=description) # partial_parser.add_argument('config', help='config file path') # parsed, unparsed_args = partial_parser.parse_known_args() # cfg = Config.fromfile(parsed.config) parser = ArgumentParser(description=description) add_args(parser, cfg) parsed_args = parser.parse_args() update_cfg(cfg, parsed_args) return cfg
def __init__(self): ##The top config #self.data_root = '/media/hhy/data/USdata/MergePhase1/test_0.3' #self.log_dir = '/media/hhy/data/code_results/MILs/MIL_H_Attention' self.root = '/remote-home/my/Ultrasound_CV/data/Ruijin/clean' self.log_dir = '/remote-home/my/hhy/Ultrasound_MIL/code_results' if not os.path.exists(self.log_dir): os.mkdir(self.log_dir) ##training config self.lr = 1e-4 self.epoch = 50 self.resume = -1 self.batch_size = 1 self.net = Attention() self.net.cuda() self.optimizer = Adam(self.net.parameters(), lr=self.lr) self.lrsch = torch.optim.lr_scheduler.MultiStepLR(self.optimizer, milestones=[10, 30, 50, 70], gamma=0.5) self.logger = Logger(self.log_dir) self.train_transform = transforms.Compose([ transforms.RandomResizedCrop(224), transforms.ColorJitter(brightness = 0.25), transforms.RandomHorizontalFlip(0.5), transforms.RandomVerticalFlip(0.5), # transforms.ColorJitter(0.25, 0.25, 0.25, 0.25), transforms.ToTensor() ]) self.test_transform = transforms.Compose([ transforms.Resize((224,224)), transforms.ToTensor() ]) self.trainbag = RuijinBags(self.root, [0,1,2,3],self.test_transform) self.testbag = RuijinBags(self.root, [4], self.test_transform) # patient bags #self.trainbag = PatientBags(self.data_root+'/train', self.train_transform) #self.testbag = PatientBags(self.data_root+'/test', self.test_transform) ''' # random self.train_set = BMDataset(self.data_root+'/train',self.train_transform) self.test_set = BMDataset(self.data_root+'/test',self.test_transform) self.trainbag = BMBags(dataset=self.train_set) self.testbag = BMBags(dataset=self.test_set) ''' #self.train_loader = DataLoader(self.trainbag, batch_size=1, shuffle=True, num_workers=8) #self.val_loader = DataLoader(self.testbag, batch_size=1, shuffle=False, num_workers=8) self.train_loader = DataLoader(self.trainbag, batch_size=4, collate_fn = my_collate, shuffle=True, num_workers=8) #print (len(self.train_loader)) self.val_loader = DataLoader(self.testbag, batch_size=4, collate_fn = my_collate, shuffle=False, num_workers=8) if self.resume > 0: self.net, self.optimizer, self.lrsch, self.loss, self.global_step = self.logger.load(self.net, self.optimizer, self.lrsch, self.loss, self.resume) else: self.global_step = 0 # self.trainer = MTTrainer(self.net, self.optimizer, self.lrsch, self.loss, self.train_loader, self.val_loader, self.logger, self.global_step, mode=2) self.trainer = MILTrainer(self.net, self.optimizer, self.lrsch, None, self.train_loader, self.val_loader, self.logger, self.global_step)
plt.hist(pos_bags, range=[0,1],density=False) plt.show() plt.hist(neg_bags,range=[0,1], color='g',density=False) plt.show() ''' return pos_bags, neg_bags if __name__ == '__main__': model_path = '/media/hhy/data/code_results/MILs/MIL_MixedBags/ckp/net.ckpt50.pth' net = Attention() inference_path = '/media/hhy/data/USdata/MergePhase1/test_0.3/test' pre_transform = transforms.Compose([ transforms.Resize((224,224)), transforms.ToTensor() ]) A = inferencer(model_path,net,inference_path, pre_transform) A.inference() A.stats() ''' for i in range (len(A.total_weights)): print('Predicted label is {}'.format(A.pred_label[i].item())) print('Weights are {}'.format(A.total_weights[i].squeeze(-2).tolist())) #print(A.total_weights) '''