Пример #1
0
def recog_eval():
    correct_cnt = 0
    total_cnt = 0
    print('Start Recognization Eval:')
    for wavpath, people_valid in valid_list:
        filename = os.path.join(root_dir, wavpath)
        data_aud = loadWAV(filename, 160)
        out_content, out_id = S.__S__.forward_aud(data_aud.cuda())
        out_id = out_id.cpu().detach().numpy()[0]
        magnitude = np.linalg.norm(out_id, axis=0)
        out_id = out_id / magnitude
        out_id = np.average(out_id, axis=1)
        max_sim = None
        max_arg = None
        for people in register_dict.keys():
            sim = cosine_similarity(out_id, register_dict[people])
            if max_sim is None or max_sim < sim:
                max_sim = sim
                max_arg = people
        total_cnt += 1
        if max_arg == people_valid:
            correct_cnt += 1
        print('\rIter:%04d\tAcc:%.3f%%' %
              (total_cnt, correct_cnt * 100 / total_cnt),
              end='')
Пример #2
0
def veri_eval(threshold):
    if os.path.exists('npy/match_list.npy') and os.path.exists(
            'npy/unmatch_list.npy'):
        match_list = np.load('npy/match_list.npy')
        unmatch_list = np.load('npy/unmatch_list.npy')
    else:
        match_list = []
        unmatch_list = []
        for wavpath, people_valid in tqdm(valid_list):
            filename = os.path.join(root_dir, wavpath)
            data_aud = loadWAV(filename, 160)
            out_content, out_id = S.__S__.forward_aud(data_aud.cuda())
            out_id = out_id.cpu().detach().numpy()[0]
            magnitude = np.linalg.norm(out_id, axis=0)
            out_id = out_id / magnitude
            out_id = np.average(out_id, axis=1)
            for people in register_dict.keys():
                sim = cosine_similarity(out_id, register_dict[people])
                if people == people_valid:
                    match_list.append(sim)
                else:
                    unmatch_list.append(sim)
        np.save('npy/match_list.npy', match_list)
        np.save('npy/unmatch_list.npy', unmatch_list)
    tn, fp, fn, tp = 0, 0, 0, 0
    for i in match_list:
        if i < threshold:
            fn += 1
        else:
            tp += 1
    for i in unmatch_list:
        if i < threshold:
            tn += 1
        else:
            fp += 1
    acc = tn * 100 / (tn + fp)
    tpr = tp * 100 / (tp + fn)
    fpr = fp * 100 / (tn + fp)
    fnr = fn * 100 / (tp + fn)
    # print('ACC: %.3f%%    TPR: %.3f%%    FPR: %.3f%%    FNR: %.3f%%'%(acc, tpr, fpr, fnr))
    return fpr, fnr
Пример #3
0
    def evaluateFromListSave(self,
                             listfilename,
                             print_interval=10,
                             test_path='',
                             num_eval=10):

        self.eval()

        lines = []
        files = []
        filedict = {}
        feats = {}
        tstart = time.time()

        ## Read all lines
        with open(listfilename) as listfile:
            while True:
                line = listfile.readline()
                if (not line):
                    break

                data = line.split()

                files.append(data[1])
                files.append(data[2])
                lines.append(line)

        setfiles = list(set(files))
        setfiles.sort()

        ## Save all features to file
        for idx, file in enumerate(setfiles):

            inp1 = loadWAV(os.path.join(test_path, file),
                           self.__max_frames__ * 4,
                           evalmode=True,
                           num_eval=num_eval).cuda()

            out_a, out_A = self.__S__.forward_aud(inp1.cuda())
            out_AA = torch.mean(out_A, 2)

            feats[file] = out_AA.detach().cpu()

            telapsed = time.time() - tstart

            if idx % print_interval == 0:
                sys.stdout.write("\rReading %d: %.2f Hz, embed size %d" %
                                 (idx, idx / telapsed, out_AA.size()[1]))

        print('')
        all_scores = []
        all_labels = []
        tstart = time.time()

        ## Read files and compute all scores
        for idx, line in enumerate(lines):

            data = line.split()

            ref_feat = feats[data[1]].cuda()
            com_feat = feats[data[2]].cuda()

            dist = F.cosine_similarity(
                ref_feat.unsqueeze(-1).expand(-1, -1, num_eval),
                com_feat.unsqueeze(-1).expand(-1, -1, num_eval).transpose(
                    0, 2)).detach().cpu().numpy()

            score = numpy.mean(dist)

            all_scores.append(score)
            all_labels.append(int(data[0]))

            if idx % print_interval == 0:
                telapsed = time.time() - tstart
                sys.stdout.write("\rComputing %d: %.2f Hz" %
                                 (idx, idx / telapsed))
                sys.stdout.flush()

        print('\n')

        return (all_scores, all_labels)
Пример #4
0
for data_pair in valid_list:
    wavpath, index = data_pair
    if index not in valid_dict.keys():
        valid_dict[index] = [wavpath]
    else:
        valid_dict[index].append(wavpath)

if os.path.exists('npy/register_dict.npy'):
    register_dict = np.load('npy/register_dict.npy', allow_pickle=True).item()
else:
    register_dict = dict()
    for people in tqdm(train_dict.keys()):
        id_features = []
        for wavpath in train_dict[people]:
            filename = os.path.join(root_dir, wavpath)
            data_aud = loadWAV(filename, 160)
            out_content, out_id = S.__S__.forward_aud(data_aud.cuda())
            out_id = out_id.cpu().detach().numpy()[0]
            magnitude = np.linalg.norm(out_id, axis=0)
            out_id = out_id / magnitude
            out_id = np.average(out_id, axis=1)
            id_features.append(out_id)
        register_dict[people] = np.average(id_features, axis=0)
    np.save('npy/register_dict.npy', register_dict)


def recog_eval():
    correct_cnt = 0
    total_cnt = 0
    print('Start Recognization Eval:')
    for wavpath, people_valid in valid_list: