def eval_openset(self): self.sequential_extract(self.valid_test, f"{self.project_dir}/tmp/test.h5") if self.valid_enroll: self.sequential_extract(self.valid_enroll, f"{self.project_dir}/tmp/enroll.h5") enroll_embedding = f"{self.project_dir}/tmp/enroll.h5" else: enroll_embedding = f"{self.project_dir}/tmp/test.h5" if self.valid_target: self.sequential_extract(self.valid_target, f"{self.project_dir}/tmp/target.h5") data_target = h52dict(f"{self.project_dir}/tmp/target.h5") transform_lst = [PCA(whiten=True)] for transform in transform_lst: transform.fit_transform(data_target["X"]) else: transform_lst = None if self.score_paras is None: self.score_paras = {} scorer = Scorer( comp_minDCF=False, enroll=enroll_embedding, test=f"{self.project_dir}/tmp/test.h5", ndx_file=self.valid_trial_list, transforms=transform_lst, **self.score_paras, ) eer = scorer.batch_cosine_score() with open(f"{self.logger_dir}/validation.log", "a") as f: f.write(f"{self.epoch} EER is {eer}\n")
os.mkdir(train_para["project_dir"]) with open(train_para["project_dir"] + "/models/train_config.yaml", "a") as f: yaml.dump(train_para, f, default_flow_style=False) """ Calling sequence: Trainer.dist_train() --> Trainer._dist_train() --> SemiTrainer.train() --> SemiTrainer._semi_train() """ SemiTrainer(**train_para).dist_train() if run_mode == "scoring": print('Scoring...') nclasses = Trainer.get_n_classes(train_para['train_file'], train_para['min_utts_per_spk'], train_para['sample_length_range'][1]) if net_type == 'DenseNet': densenet_para = {'n_classes': nclasses, 'mfcc_dim': mfcc_dim} model = Model(**densenet_para) else: model = Model(nclasses, mfcc_dim) model.load_state_dict( torch.load(f"{PRJ_DIR}/models/model_final")['model_state_dict']) model.to(torch.device(torch.cuda.current_device())) sequential_extract(model, f"{PRJ_DIR}/h5/mfcc_enroll.h5", score_para['enroll']) sequential_extract(model, f"{PRJ_DIR}/h5/mfcc_test.h5", score_para['test']) scorer = Scorer(**score_para) scorer.batch_cosine_score()