Spaces:
Runtime error
Runtime error
import argparse | |
import sys, os | |
import numpy as np | |
import project_subpath | |
from backend.InferenceConfig import InferenceConfig | |
from detection_to_tracks import main as track | |
current_dir = os.path.dirname(os.path.realpath(__file__)) | |
pardir = os.path.dirname(current_dir) | |
sys.path.append(os.path.join(pardir, "../caltech-fish-counting/")) | |
from evaluate import evaluate | |
class Object(object): | |
pass | |
def main(args): | |
""" | |
Perform tracking on a directory of raw detections, saves the tracks, and runs the 'evaluate' script from the 'caltech-fish-counting' repo | |
Args: | |
detection_dir (str): path to raw detection directory | |
weights (str): path to weights | |
conf_threshold (float): confidence cutoff for detection filtering | |
nms_iou (float): non-maximum suppression IOU threshold | |
min_length (float): minimum length of fish in meters in order to count | |
max_length (float): maximum length of fish in meters in order to count. Disable with 0 | |
min_travel (float): minimum travel distance in meters of track in order to count | |
max_age (int): aximum time between detections before a fish is forgotten by the tracker | |
min_hits (int): minimum length of track in frames in order to count | |
associativity (str): string representation of tracking method with corresponding hyperparameters separated by ':' | |
verbose (bool): disable or enable logging | |
""" | |
infer_args = Object() | |
infer_args.detections = args.detection_dir | |
infer_args.metadata = "../frames/metadata" | |
infer_args.output = "../frames/result_testing" | |
infer_args.tracker = 'tracker' | |
infer_args.location = 'kenai-val' | |
config = InferenceConfig( | |
conf_thresh=float(args.conf_threshold), | |
nms_iou=float(args.nms_iou), | |
min_hits=int(args.min_hits), | |
max_age=int(args.max_age), | |
min_length=float(args.min_length), | |
max_length=float(args.max_length), | |
min_travel=float(args.min_travel), | |
) | |
config.enable_tracker_from_string(args.associativity) | |
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, location=infer_args.location) | |
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(): | |
default = InferenceConfig() | |
parser = argparse.ArgumentParser() | |
parser.add_argument("--detection_dir", default="../frames/detection_storage", help="Path to raw detection directory") | |
parser.add_argument("--weights", default=default.weights, help="Path to weights") | |
parser.add_argument("--conf_threshold", default=default.conf_thresh, help="Confidence cutoff for detection filtering") | |
parser.add_argument("--nms_iou", default=default.nms_iou, help="Non-maximum Suppression IOU threshold") | |
parser.add_argument("--min_length", default=default.min_length, help="Minimum length of fish in meters in order to count") | |
parser.add_argument("--max_length", default=default.max_length, help="Maximum length of fish in meters in order to count. Disable with 0") | |
parser.add_argument("--min_travel", default=default.min_travel, help="Minimum travel distance in meters of track in order to count.") | |
parser.add_argument("--max_age", default=default.max_age, help="Maximum time between detections before a fish is forgotten by the tracker") | |
parser.add_argument("--min_hits", default=default.min_hits, help="Minimum length of track in frames in order to count") | |
parser.add_argument("--associativity", default='', help="String representation of tracking method with corresponding hyperparameters separated by ':'") | |
parser.add_argument("--verbose", action='store_true', help="Disable or enable logging") | |
return parser | |
if __name__ == "__main__": | |
args = argument_parser().parse_args() | |
main(args) |