示例#1
0
    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)
示例#2
0
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
示例#3
0
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
示例#4
0
    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)
示例#5
0
        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)
    '''