#!/usr/bin/env python3 # -*- coding:utf-8 -*- # Copyright (c) 2014-2021 Megvii Inc. All rights reserved. import importlib import os import sys def get_exp_by_file(exp_file): try: sys.path.append(os.path.dirname(exp_file)) current_exp = importlib.import_module(os.path.basename(exp_file).split(".")[0]) exp = current_exp.Exp() except Exception: raise ImportError("{} doesn't contains class named 'Exp'".format(exp_file)) return exp def get_exp_by_name(exp_name): import yolox yolox_path = os.path.dirname(os.path.dirname(yolox.__file__)) filedict = { "yolox-s": "yolox_s.py", "yolox-m": "yolox_m.py", "yolox-l": "yolox_l.py", "yolox-x": "yolox_x.py", "yolox-tiny": "yolox_tiny.py", "yolox-nano": "nano.py", "yolov3": "yolov3.py", } filename = filedict[exp_name] exp_path = os.path.join(yolox_path, "exps", "default", filename) return get_exp_by_file(exp_path) def get_exp(exp_file, exp_name): """ get Exp object by file or name. If exp_file and exp_name are both provided, get Exp by exp_file. Args: exp_file (str): file path of experiment. exp_name (str): name of experiment. "yolo-s", """ assert ( exp_file is not None or exp_name is not None ), "plz provide exp file or exp name." if exp_file is not None: return get_exp_by_file(exp_file) else: return get_exp_by_name(exp_name)