• ubuntu16.04-cuda11.1上使用TensorRT加速yolov5推理


    基础

    环境

    其实极客的版本已经给我们了

    ubuntu16.04-cuda11.1-cudnn8.0-opencv4.1.1-tensorrt7.2

    检查

    ubantu版本

    lsb_release -a
    
    • 1

    在这里插入图片描述
    检查cuda版本

    nvcc --version
    
    • 1

    在这里插入图片描述
    查看tensorRT的路径

     cd
     find / -name tensorrt*
    
    • 1
    • 2

    在这里插入图片描述

    需要做的事

    (1)下载tensorRT

    在Linux下安装tensorrt包时使用

    pip install tensorrt
    pip install nvidia-pyindex
    pip install nvidia-tensorrt
    
    • 1
    • 2
    • 3

    【参考文档】下载tensorRT
    这个在官网是真没看见!!!

    (2)按照文档运行

    文档指的是https://github.com/wang-xinyu/tensorrtx/tree/master/yolov5

    报错

    然后就是在运行python gen_wts.py -w yolov5s.pt -o yolov5s.wts报个这个错

    RequestsDependencyWarning: urllib3 (1.26.12) or chardet(2.3.0)/charset_normalizer (2.0.12) doesn’t match a supported version! RequestsDependencyWarning)

    【参考文档】urllib3 1.26.9 or chardet 4.0.0 doesn‘t match a supported version报错处理
    版本要求是:

    chardet_version >= 3.0.2, < 5.0.0
     urllib3 >= 1.21.1, <= 1.26
    
    • 1
    • 2

    所以就
    先删除

    pip uninstall chardet
    pip uninstall urllib3
    
    • 1
    • 2

    然后换个新版本吧

    pip install chardet==3.0.4 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
     pip install urllib3==1.25 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
    
    • 1
    • 2

    用这个源只是因为之前那个源卡到不行

    使用tensorRT

    如果你乖乖按照文档进行,你就会到这个位置了。
    接下来就是使用tensorRT:

    1. 先要将转换好的.wts文件再次转化为.engine文件
    2. 使用.engine进行推理
    cp train/src_repo/yolov5-6.0/yolov5s.wts train/src_repo/tensorrtx/yolov5/build
    
    • 1

    (1)第一种使用方式

    // For example yolov5s
    sudo ./yolov5 -s yolov5s.wts yolov5s.engine s
    sudo ./yolov5 -d yolov5s.engine ../samples
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    报错

    其实一开始./yolov5 -s yolov5s.wts yolov5s.engine s应该是报了一个错

    virtual nvinfer1::YoloLayerPlugin::~YoloLayerPlugin(): Assertion `0’ failed

    应该是权重文件不对应,权重文件也应该下载对应版本的.

    然后运行./yolov5 -d yolov5s.engine /project/train/src_repo又爆了一个错

    terminate called after throwing an instance of ‘cv::Exception’
    what(): OpenCV(4.1.2) /usr/local/src/opencv/modules/imgcodecs/src/loadsave.cpp:715: error: (-215:Assertion failed) !_img.empty() in function ‘imwrite’
    Aborted (core dumped)

    这个错本笨比也是搞了一会
    ./yolov5 -d yolov5s.engine +检测文件夹
    ①如果不是文件夹或者不存在这个文件夹报这个错:read_files_in_dir failed
    ②上面这个错大概率是路径问题

    结果就是这样子:
    在这里插入图片描述

    (2)第二种使用方式:指定depth_multiple, width_multiple

    sudo ./yolov5 -s yolov5_custom.wts yolov5.engine c 0.17 0.25
    sudo ./yolov5 -d yolov5.engine ../samples
    
    • 1
    • 2
    报错

    yolov5: /project/train/src_repo/tensorrtx/yolov5/common.hpp:94: std::map loadWeights(std::__cxx11::string): Assertion `input.is_open() && “Unable to load weight file. please check if the .wts file path is right!!!”’ failed.
    Aborted (core dumped)

    同样也是权重问题,权重文件也应该下载对应版本的.

    warning

    [W] [TRT] TensorRT was linked against cuDNN 8.1.0 but loaded cuDNN 8.0.5

    这个东西算是个warning,可以不管,一般不会在这个问题上出错,但是还是建议检查一下cmake路径

  • 相关阅读:
    c语言终点站--文件操作
    我的学习:从本科到研究生的认识与实践经验总结
    java面试
    数据结构 冒泡排序 选择排序 学习笔记
    三、equals重写规范
    仿照java的jdk动态代理实现go语言动态代理
    问题:如何正确在vue中引入地图amap组件?
    jdbc依赖在各个框架的意义和发展
    WebAssembly核心编程[3]: Module 与 Instance
    python的3种字符串拼接格式化输出
  • 原文地址:https://blog.csdn.net/weixin_50862344/article/details/126708278