| 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) |
|
|