File size: 3,201 Bytes
809371f
 
f639061
809371f
03cb39e
809371f
 
 
 
 
 
 
 
 
 
 
c0dc29f
809371f
f639061
 
809371f
 
 
 
 
73ba285
809371f
 
31f0f25
5ede26e
809371f
 
1b23d7b
 
 
 
 
 
 
 
 
 
 
 
 
 
5ede26e
75844fb
 
ea3fb59
809371f
31371fc
1b9ad62
3086785
 
 
 
ac33b94
71b0765
809371f
 
 
 
31f0f25
809371f
 
 
73ba285
809371f
 
 
5ede26e
ea3fb59
809371f
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import project_path
import argparse
from track_detection import main as track
import sys
import numpy as np
sys.path.append('..')
sys.path.append('../caltech-fish-counting')

from evaluate import evaluate

class Object(object):
    pass

def main(args):

    infer_args = Object()
    infer_args.detections = args.detection_dir
    infer_args.metadata = "../frames/metadata"
    infer_args.output = "../frames/result_testing"
    infer_args.tracker = 'tracker'

    config = {
        'conf_threshold': float(args.conf_threshold),
        'nms_iou': float(args.nms_iou),
        'min_length': float(args.min_length),
        'min_travel': float(args.min_travel),
        'max_age': int(args.max_age),
        'iou_threshold': float(args.iou_threshold),
        'min_hits': int(args.min_hits),
        'associativity': None
    }

    if args.associativity != "":
        if (args.associativity.startswith("boost")):
            config['associativity'] = "boost"
            conf = args.associativity.split(":")
            if len(conf) > 1: config['boost_power'] = float(conf[1])
            if len(conf) > 2: config['boost_decay'] = float(conf[2])
        elif (args.associativity.startswith("bytetrack")):
            config['associativity'] = "bytetrack"
            conf = args.associativity.split(":")
            if len(conf) > 1: config['low_conf_threshold'] = float(conf[1])
            if len(conf) > 2: config['high_conf_threshold'] = float(conf[2])
        else:
            print("INVALID ASSOCIATIVITY TYPE:", args.associativity)
            return

    print("verbose", args.verbose)

    track(infer_args, config=config, verbose=args.verbose)

    result = evaluate(infer_args.output, "../frames/MOT", "../frames/metadata", infer_args.tracker, True)
    metrics = result['MotChallenge2DBox']['tracker']['COMBINED_SEQ']['pedestrian']
    print('HOTA:', np.mean(metrics['HOTA']['HOTA'])*100)
    print('MOTA:', metrics['CLEAR']['MOTA']*100)
    print('IDF1:', metrics['Identity']['IDF1']*100)
    print('nMAE:', metrics['nMAE']['nMAE']*100)
    print('misscounts:', str(metrics['nMAE']['nMAE_numer']) + "/" + str(metrics['nMAE']['nMAE_denom']))
    return result


def argument_parser():
    parser = argparse.ArgumentParser()
    parser.add_argument("--detection_dir", default="../frames/detection_storage")
    parser.add_argument("--conf_threshold", default=0.3, help="Config object. Required.")
    parser.add_argument("--nms_iou", default=0.3, help="Config object. Required.")
    parser.add_argument("--min_length", default=0.3, help="Config object. Required.")
    parser.add_argument("--min_travel", default=0, help="Config object. Required.")
    parser.add_argument("--max_age", default=20, help="Config object. Required.")
    parser.add_argument("--iou_threshold", default=0.01, help="Config object. Required.")
    parser.add_argument("--min_hits", default=11, help="Config object. Required.")
    parser.add_argument("--associativity", default='', help="Config object. Required.")
    parser.add_argument("--verbose", action='store_true', help="Config object. Required.")
    return parser

if __name__ == "__main__":
    args = argument_parser().parse_args()
    main(args)