Пример #1
0
def _evaluate(Gt, Hy, threshold, cost_fun, info=False, debug_info=False):
    if debug_info:
        fp, m, mme, c, d, g, FN_pairs, FP_pairs, MME_pairs = MOTM.evaluate(
            Gt, Hy, threshold, cost_fun, debug_info=True)
    else:
        fp, m, mme, c, d, g = MOTM.evaluate(Gt, Hy, threshold, cost_fun)

    FN = np.sum(m)
    FP = np.sum(fp)
    IDSW = np.sum(mme)
    GT = np.sum(g)

    mota = 1 - (FN + FP + IDSW) / GT

    result = [mota]

    if info:
        result.append({'FN': FN, 'FP': FP, 'IDSW': IDSW, 'GT': GT})

    if debug_info:
        result.append({"FN": FN_pairs, "FP": FP_pairs, "IDSW": MME_pairs})

    if len(result) > 1:
        return result
    else:
        return result[0]
Пример #2
0
    def test_motm_1mme(self):
        Gt = np.array([
            [1, 1, 0, 0],
            [2, 1, 0, 0]
        ])

        Hy = np.array([
            [1, 1, 0, 0],
            [2, 2, 0, 0]
        ])

        cost = lambda a, b: la.norm(a-b)

        fp, m, mme, c, d, g = MOTM.evaluate(Gt, Hy, 10, cost)

        self.assertEqual(len(fp), 2)
        self.assertEqual(len(m), 2)
        self.assertEqual(len(mme), 2)
        self.assertEqual(len(c), 2)
        self.assertEqual(len(d), 2)
        self.assertEqual(len(g), 2)

        self.assertEqual(np.sum(fp), 0)
        self.assertEqual(np.sum(m), 0)
        self.assertEqual(np.sum(mme), 1)
        self.assertEqual(np.sum(d), 0)
        self.assertEqual(np.sum(g), 2)
        self.assertEqual(np.sum(c), 2)
Пример #3
0
    def test_motm_fp_with_debug_info(self):
        Gt = np.array([
            [1, 1, 0, 0],
            [1, 2, 10, 10],
            [2, 1, 0, 0]
        ])

        Hy = np.array([
            [1, 2, 10, 10],
            [1, 3, 20, 20],
            [1, 4, 30, 30],
            [2, 1, 0, 0],
            [1, 1, 0, 0],
            [2, 5, 88, 99]
        ])

        cost = lambda a, b: la.norm(a-b)

        fp, m, mme, c, d, g, FN_pairs, FP_pairs, MME_pairs =\
            MOTM.evaluate(Gt, Hy, 5, cost,
            debug_info=True)

        self.assertEqual(len(FN_pairs), 0)
        self.assertEqual(len(FP_pairs), 3)
        self.assertEqual(len(MME_pairs), 0)

        self.assertEqual(FP_pairs[0][0], 1)
        self.assertEqual(FP_pairs[1][0], 1)
        self.assertEqual(FP_pairs[2][0], 2)
        self.assertEqual(FP_pairs[0][2], 20)
        self.assertEqual(FP_pairs[1][2], 30)
        self.assertEqual(FP_pairs[2][2], 88)

        self.assertEqual(len(fp), 2)
        self.assertEqual(len(m), 2)
        self.assertEqual(len(mme), 2)
        self.assertEqual(len(c), 2)
        self.assertEqual(len(d), 2)
        self.assertEqual(len(g), 2)

        self.assertEqual(np.sum(fp), 3)
        self.assertEqual(np.sum(m), 0)
        self.assertEqual(np.sum(mme), 0)
        self.assertEqual(np.sum(d), 0)
        self.assertEqual(np.sum(g), 3)
        self.assertEqual(np.sum(c), 3)
Пример #4
0
def evaluate(Gt, Hy, threshold):
    """ Ground-truth vs hypothesis for the
        Multiple Object Tracking Precision

        Gt: [
            (frame, pid, x, y)
        ]

        Hy: [
            (frame, pid, x, y)
        ]

        threshold: after which no correspondence is possible
    """
    cost_fun = lambda a, b: la.norm(a-b)
    fp, m, mme, c, d, g = MOTM.evaluate(Gt, Hy, threshold, cost_fun)

    D = np.sum(d)
    C = np.sum(c)
    return D/C
Пример #5
0
    def test_motm_interrupt(self):
        Gt = np.array([
            [1, 1, 0, 0],
            [2, 1, 0, 0],
            [5, 1, 0, 0],
            [6, 1, 0, 0],
            [7, 1, 0, 0],
            [8, 1, 0, 0]
        ])

        Hy = np.array([
            [1, 1, 0, 0],
            [2, 1, 0, 0],
            [5, 1, 0, 0],
            [6, 1, 0, 0],
            [7, 1, 0, 0],
            [8, 1, 0, 0]
        ])

        cost = lambda a, b: la.norm(a-b)

        fp, m, mme, c, d, g = MOTM.evaluate(Gt, Hy, 10, cost)

        self.assertEqual(len(fp), 8)
        self.assertEqual(len(m), 8)
        self.assertEqual(len(mme), 8)
        self.assertEqual(len(c), 8)
        self.assertEqual(len(d), 8)
        self.assertEqual(len(g), 8)

        self.assertEqual(np.sum(fp), 0)
        self.assertEqual(np.sum(m), 0)
        self.assertEqual(np.sum(mme), 0)
        self.assertEqual(np.sum(d), 0)
        self.assertEqual(np.sum(g), 6)
        self.assertEqual(np.sum(c), 6)