ImportError: cannot import name 'get_numpy_ctype' from 'openvino.runtime.utils.types'

使用OpenVino跑Yolo模型执行mo -m yolov7.onnx --compress_to_fp16出现以下这个问题
ImportError: cannot import name 'get_numpy_ctype' from 'openvino.runtime.utils.types'

这个问题通常是由于OpenVINO版本更新导致的,解决方法是将OpenVINO版本降级到YOLOv7模型所需的版本。

另外,由于OpenVINO的安装过程较为复杂,容易出现一些依赖关系的问题,因此建议通过OpenVINO官方网站提供的docker安装方式来解决这个问题,步骤如下:

  1. 安装docker和nvidia-docker。

  2. 下载OpenVINO的容器image。可以在 https://hub.docker.com/r/openvino/ubuntu18_dev/ 页面下载,下载命令如下:

    docker pull openvino/ubuntu18_dev:latest
    
  3. 运行容器:

    docker run -it --net=host --privileged -v /dev:/dev -v /home/<username>:/home/<username>/ --name=<container_name> openvino/ubuntu18_dev:latest /bin/bash
    

    <username>是指用户的用户名,<container_name>是指容器的名称。该命令将在本地运行一个Docker容器,并将本地的/dev和用户目录(/home/<username>)映射到容器中,然后进入容器的终端。

    如果使用nvidia-docker,可以添加--runtime=nvidia参数,如下所示:

    nvidia-docker run -it --net=host --privileged -v /dev:/dev -v /home/<username>:/home/<username>/ --name=<container_name> openvino/ubuntu18_dev:latest /bin/bash
    

    然后进入容器的命令行。

  4. 在容器内安装OpenVINO,并安装YOLOv7模型的依赖项。安装方法可以参考OpenVINO的官方文档:https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_docker_linux.html

    使用以下命令安装YOLOv7依赖项:

    apt-get update && apt-get install -y libopencv-dev python3-opencv
    
  5. 使用model downloader下载YOLOv7模型和相关文件。在容器内执行以下命令:

    cd /opt/intel/openvino/deployment_tools/tools/model_downloader
    ./downloader.py --name yolo-v7-tf --precisions FP16
    

    这将下载YOLOv7模型及相关文件,并转换为FP16精度。

  6. 转换ONNX模型为OpenVINO IR模型。使用以下命令:

    cd /opt/intel/openvino/deployment_tools/model_optimizer/
    ./mo_tf.py --input_model /home/<username>/<path_to_onnx_model>/yolov7.onnx --input_shape [1,416,416,3] --data_type FP16
    

    <path_to_onnx_model> 是指ONNX模型所在的路径。该命令将将ONNX模型转换为OpenVINO IR模型,使用FP16精度。

这样就可以解决cannot import name 'get_numpy_ctype' from 'openvino.runtime.utils.types'问题。