def infer_2(network):
    valid_dict = infer.build_valid_dict()
    feature_matrix, row_index_to_id = build_train_feature_matrix_mean(network)
    feature_matrix = feature_matrix.T

    total = 0
    hit = 0

    print(infer.VALID_NPZ_PATH)

    for npz in glob.glob(infer.VALID_NPZ_PATH):
        head, tail = os.path.split(npz)
        mp4_filename, npz_ext = os.path.splitext(tail)
        print(mp4_filename)
        features = np.load(npz)
        features = features.f.arr_0
        features = network.predict(features)
        assert (len(features.shape) == 2)

        sim = np.dot(features, feature_matrix)
        sim = np.sum(sim, axis=0)
        index = np.argmax(sim)

        predict_id = row_index_to_id[index][0]
        ground_truth = valid_dict[mp4_filename]
        if predict_id == ground_truth:
            hit += 1
        total += 1

    print('hit: {0}, total: {1}, precision: {2}'.format(
        hit, total, hit / total))
Exemplo n.º 2
0
def infer_2():
    valid_dict = infer.build_valid_dict()
    feature_matrix, row_index_to_id, feature_group = build_train_feature_matrix_mean(
    )
    feature_matrix = feature_matrix.T

    total = 0
    hit = 0

    total_2 = 0
    hit_2 = 0

    misclassified = {}

    for npz in glob.glob(infer.VALID_NPZ_PATH):
        head, tail = os.path.split(npz)
        mp4_filename, npz_ext = os.path.splitext(tail)

        features = np.load(npz)
        features = features.f.arr_0
        assert (len(features.shape) == 2)

        sim = np.dot(features, feature_matrix)
        sim = np.sum(sim, axis=0)
        index = np.argmax(sim)

        predict_id = row_index_to_id[index][0]
        ground_truth = valid_dict[mp4_filename]

        if predict_id == ground_truth:
            hit += 1
        else:
            misclassified[mp4_filename] = (ground_truth, predict_id)
        total += 1

        #
        sim_2 = []
        for feature in feature_group:
            class_sim = np.mean(np.dot(features, feature.T), axis=0)
            sim_2.append(np.max(class_sim))
        index = np.argmax(np.array(sim_2))
        predict_id = row_index_to_id[index][0]
        ground_truth = valid_dict[mp4_filename]
        if predict_id == ground_truth:
            hit_2 += 1
        #else:
        #    misclassified[mp4_filename] = (ground_truth, predict_id)
        total_2 += 1

    print('hit: {0}, total: {1}, precision: {2}'.format(
        hit, total, hit / total))
    print('hit_2: {0}, total_2: {1}, precision: {2}'.format(
        hit_2, total_2, hit_2 / total_2))
def calc_mean_average_precision(network):
    feature_matrix, row_index_to_id = build_train_feature_matrix_mean(network)
    print(len(row_index_to_id))
    feature_matrix = feature_matrix.T

    row_to_filename = []
    sim_list = []
    for npz in glob.glob(infer.VALID_NPZ_PATH):
        head, tail = os.path.split(npz)
        mp4_filename, npz_ext = os.path.splitext(tail)

        row_to_filename.append(mp4_filename)

        features = np.load(npz)
        features = features.f.arr_0
        features = network.predict(features)
        # sim[i] == class_i cos similarity
        sim = np.mean(np.dot(features, feature_matrix), axis=0)
        sim_list.append([sim])

    # sim_matrix[i, j] == file_i cos similarity to class_j
    sim_matrix = np.concatenate(tuple(sim_list), axis=0)
    print("sim matrix shape: ", sim_matrix.shape)
    print("sim matrix max:{0}, min:{1}".format(sim_matrix.max(),
                                               sim_matrix.min()))

    # calc class_i average precision
    filename_to_id = infer.build_valid_dict()
    class_to_ap = {}
    valid_id_to_filenames = build_valid_id_to_filenames()
    for i in range(sim_matrix.shape[1]):
        class_id, _ = row_index_to_id[i]
        gt_count = len(valid_id_to_filenames[class_id])
        if gt_count > 100:
            gt_count = 100
        confidence = sim_matrix[:, i]

        def index_to_class_id(index):
            filename = row_to_filename[index]
            id = filename_to_id[filename]
            return id

        ap = calc_ap(class_id, confidence, gt_count, index_to_class_id)
        class_to_ap[class_id] = ap
        # print(class_to_ap[class_id])

    mean_ap = 0.0
    for ap in class_to_ap.values():
        mean_ap += ap
    mean_ap = mean_ap / len(class_to_ap)
    return mean_ap
Exemplo n.º 4
0
def calc_map(row_to_filename, row_index_to_id, sim_matrix):
    filename_to_id = infer.build_valid_dict()
    class_to_ap = {}
    valid_id_to_filenames = build_valid_id_to_filenames()
    for i in range(sim_matrix.shape[1]):
        class_id, _ = row_index_to_id[i]
        gt_count = len(valid_id_to_filenames[class_id])
        if gt_count > 100:
            gt_count = 100
        confidence = sim_matrix[:, i]

        def index_to_class_id(index):
            filename = row_to_filename[index]
            id = filename_to_id[filename]
            return id

        ap = calc_ap(class_id, confidence, gt_count, index_to_class_id)
        class_to_ap[class_id] = ap
        # print(class_to_ap[class_id])
    mean_ap = 0.0
    for ap in class_to_ap.values():
        mean_ap += ap
    mean_ap = mean_ap / len(class_to_ap)
    return mean_ap