| | import os |
| | import sys |
| | import argparse |
| |
|
| | import numpy as np |
| | import cv2 as cv |
| |
|
| | from datasets import DATASETS |
| |
|
| | if "PYTHONPATH" in os.environ: |
| | root_dir = os.environ["PYTHONPATH"] |
| | else: |
| | root_dir = os.path.join("..", "..") |
| | sys.path.append(root_dir) |
| | from models import MODELS |
| |
|
| | parser = argparse.ArgumentParser("Evaluation with OpenCV on different models in the zoo.") |
| | parser.add_argument("--model", "-m", type=str, required=True, help="model name") |
| | parser.add_argument("--dataset", "-d", type=str, required=True, help="Dataset name") |
| | parser.add_argument("--dataset_root", "-dr", type=str, required=True, help="Root directory of given dataset") |
| | args = parser.parse_args() |
| |
|
| | models = dict( |
| | mobilenetv1=dict( |
| | name="MobileNet", |
| | topic="image_classification", |
| | modelPath=os.path.join(root_dir, "models/image_classification_mobilenet/image_classification_mobilenetv1_2022apr.onnx"), |
| | topK=5, |
| | loadLabel=False), |
| | mobilenetv1_q=dict( |
| | name="MobileNet", |
| | topic="image_classification", |
| | modelPath=os.path.join(root_dir, "models/image_classification_mobilenet/image_classification_mobilenetv1_2022apr_int8.onnx"), |
| | topK=5, |
| | loadLabel=False), |
| | mobilenetv1_bq=dict( |
| | name="MobileNet", |
| | topic="image_classification", |
| | modelPath=os.path.join(root_dir, "models/image_classification_mobilenet/image_classification_mobilenetv1_2022apr_int8bq.onnx"), |
| | topK=5, |
| | loadLabel=False), |
| | mobilenetv2=dict( |
| | name="MobileNet", |
| | topic="image_classification", |
| | modelPath=os.path.join(root_dir, "models/image_classification_mobilenet/image_classification_mobilenetv2_2022apr.onnx"), |
| | topK=5, |
| | loadLabel=False), |
| | mobilenetv2_q=dict( |
| | name="MobileNet", |
| | topic="image_classification", |
| | modelPath=os.path.join(root_dir, "models/image_classification_mobilenet/image_classification_mobilenetv2_2022apr_int8.onnx"), |
| | topK=5, |
| | loadLabel=False), |
| | mobilenetv2_bq=dict( |
| | name="MobileNet", |
| | topic="image_classification", |
| | modelPath=os.path.join(root_dir, "models/image_classification_mobilenet/image_classification_mobilenetv2_2022apr_int8bq.onnx"), |
| | topK=5, |
| | loadLabel=False), |
| | ppresnet=dict( |
| | name="PPResNet", |
| | topic="image_classification", |
| | modelPath=os.path.join(root_dir, "models/image_classification_ppresnet/image_classification_ppresnet50_2022jan.onnx"), |
| | topK=5, |
| | loadLabel=False), |
| | ppresnet_q=dict( |
| | name="PPResNet", |
| | topic="image_classification", |
| | modelPath=os.path.join(root_dir, "models/image_classification_ppresnet/image_classification_ppresnet50_2022jan_int8.onnx"), |
| | topK=5, |
| | loadLabel=False), |
| | ppresnet_bq=dict( |
| | name="PPResNet", |
| | topic="image_classification", |
| | modelPath=os.path.join(root_dir, "models/image_classification_ppresnet/image_classification_ppresnet50_2022jan_int8bq.onnx"), |
| | topK=5, |
| | loadLabel=False), |
| | yunet=dict( |
| | name="YuNet", |
| | topic="face_detection", |
| | modelPath=os.path.join(root_dir, "models/face_detection_yunet/face_detection_yunet_2023mar.onnx"), |
| | topK=5000, |
| | confThreshold=0.3, |
| | nmsThreshold=0.45), |
| | yunet_q=dict( |
| | name="YuNet", |
| | topic="face_detection", |
| | modelPath=os.path.join(root_dir, "models/face_detection_yunet/face_detection_yunet_2023mar_int8.onnx"), |
| | topK=5000, |
| | confThreshold=0.3, |
| | nmsThreshold=0.45), |
| | yunet_bq=dict( |
| | name="YuNet", |
| | topic="face_detection", |
| | modelPath=os.path.join(root_dir, "models/face_detection_yunet/face_detection_yunet_2023mar_int8bq.onnx"), |
| | topK=5000, |
| | confThreshold=0.3, |
| | nmsThreshold=0.45), |
| | sface=dict( |
| | name="SFace", |
| | topic="face_recognition", |
| | modelPath=os.path.join(root_dir, "models/face_recognition_sface/face_recognition_sface_2021dec.onnx")), |
| | sface_q=dict( |
| | name="SFace", |
| | topic="face_recognition", |
| | modelPath=os.path.join(root_dir, "models/face_recognition_sface/face_recognition_sface_2021dec_int8.onnx")), |
| | sface_bq=dict( |
| | name="SFace", |
| | topic="face_recognition", |
| | modelPath=os.path.join(root_dir, "models/face_recognition_sface/face_recognition_sface_2021dec_int8bq.onnx")), |
| | crnn_en=dict( |
| | name="CRNN", |
| | topic="text_recognition", |
| | modelPath=os.path.join(root_dir, "models/text_recognition_crnn/text_recognition_CRNN_EN_2021sep.onnx")), |
| | crnn_en_q=dict( |
| | name="CRNN", |
| | topic="text_recognition", |
| | modelPath=os.path.join(root_dir, "models/text_recognition_crnn/text_recognition_CRNN_EN_2022oct_int8.onnx")), |
| | pphumanseg=dict( |
| | name="PPHumanSeg", |
| | topic="human_segmentation", |
| | modelPath=os.path.join(root_dir, "models/human_segmentation_pphumanseg/human_segmentation_pphumanseg_2023mar.onnx")), |
| | pphumanseg_q=dict( |
| | name="PPHumanSeg", |
| | topic="human_segmentation", |
| | modelPath=os.path.join(root_dir, "models/human_segmentation_pphumanseg/human_segmentation_pphumanseg_2023mar_int8.onnx")), |
| | pphumanseg_bq=dict( |
| | name="PPHumanSeg", |
| | topic="human_segmentation", |
| | modelPath=os.path.join(root_dir, "models/human_segmentation_pphumanseg/human_segmentation_pphumanseg_2023mar_int8bq.onnx")), |
| | ) |
| |
|
| | datasets = dict( |
| | imagenet=dict( |
| | name="ImageNet", |
| | topic="image_classification", |
| | size=224), |
| | widerface=dict( |
| | name="WIDERFace", |
| | topic="face_detection"), |
| | lfw=dict( |
| | name="LFW", |
| | topic="face_recognition", |
| | target_size=112), |
| | icdar=dict( |
| | name="ICDAR", |
| | topic="text_recognition"), |
| | iiit5k=dict( |
| | name="IIIT5K", |
| | topic="text_recognition"), |
| | mini_supervisely=dict( |
| | name="MiniSupervisely", |
| | topic="human_segmentation"), |
| | ) |
| |
|
| | def main(args): |
| | |
| | model_key = args.model.lower() |
| | assert model_key in models |
| |
|
| | model_name = models[model_key].pop("name") |
| | model_topic = models[model_key].pop("topic") |
| | model_handler, _ = MODELS.get(model_name) |
| | model = model_handler(**models[model_key]) |
| |
|
| | |
| | dataset_key = args.dataset.lower() |
| | assert dataset_key in datasets |
| |
|
| | dataset_name = datasets[dataset_key].pop("name") |
| | dataset_topic = datasets[dataset_key].pop("topic") |
| | dataset = DATASETS.get(dataset_name)(root=args.dataset_root, **datasets[dataset_key]) |
| |
|
| | |
| | assert model_topic == dataset_topic |
| |
|
| | |
| | dataset.eval(model) |
| | dataset.print_result() |
| |
|
| | if __name__ == "__main__": |
| | main(args) |
| |
|