码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 部署记录 win10 trt yolov4-tiny


    目录

    • 目标
    • 1.环境
    • 2.先跑darknet yolov4(win10+cmake3.24.2+vs2019)
      • 2.1 readme
      • 2.2 cmake编译
      • 2.3 VS编译
      • 2.4 darknet.c
    • 3.darknet trt yolov4
      • 3.1 readme
      • 3.2 enazoe yolo-tensorrt
      • 3.3 编译问题记录
    • 4. 加速方案
      • 4.1 OPENCV->NPP编译选项及测试
        • 4.1.1 测试相关preprocess函数替换效果及对比
      • 4.2 最快方案应该是SDK读图后直接将data放到GPU用cuda resize之后给context
    • 5.转换效果

    目标

    1.JNI(JAVA)调用推理模型dll(C++),dll至少包括三个接口(模型初始化、推理、释放),先用c++自调测试 √
    2.TRT及TF双加载模型(参数项)(暂TRT)
    3.多模型挂载 √
    4.相机SDK调用 (暂不需要)
    5.npp替代opencv完成图片preprocess加速 (无必要)

    1.环境

    已有硬件及环境:RTX2080TI,cuda11.4,VS2019
    需要安装环境:opencv(4.5.4),tensorrt(8.2.1.8),相关相机SDK

    2.先跑darknet yolov4(win10+cmake3.24.2+vs2019)

    2.1 readme

    darknet windows部署流程

    2.2 cmake编译

    cmake不通
    参考 – VS2019安装时差组件
    不玩cmake了,看起来是要重装cuda
    参考 – cudacxx CUDA not found

    2.3 VS编译

    darknet run v4 参考
    cuda 配置参考
    在这里插入图片描述
    A: tiny也能跑通

    2.4 darknet.c

    如果要做封装改写的话基于这个文件,对我是没啥用了

    3.darknet trt yolov4

    3.1 readme

    1.基于https://github.com/enazoe/yolo-tensorrt
    2.基于tensorrtx yolov4改写

    3.2 enazoe yolo-tensorrt

    参考 – WIN10安装trt
    master branch 没有trt8
    trt8 branch 没有v4-tiny
    整合了v4-tiny+trt8 百度网盘 提取码:bsh6
    不知道为什么要封装这么多层,自己抽出来重构(简写)了一遍
    环境:WIN10,Tensorrt8.2.1.8,cuda11.4,cudnn8.5,
    基于AlexeyAB/darknet
    在这里插入图片描述

    3.3 编译问题记录

    
    1._SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING 添加到C/C++/预处理器/预处理器定义
    
    2.在附加目录记得加上common和extra文件夹里的.h文件
    
    3.项目右键生成依赖项/生成自定义/cuda选上
    
    4.如果.cu文件没有配置cuda编译器的话 VCXPROJ文件中 该项为None Complier 右键 “xxx.cpp" 源文件→ 属性→ 配置属性→ 常规→ 项类型→ 设置为“CUDA C/C++”
    
    5.API.h 用于DLL
    #ifdef API_EXPORTS
    
    #if defined(_MSC_VER)
    #define API __declspec(dllexport) 
    #else
    #define API __attribute__((visibility("default")))
    #endif
    ……
    
    API_EXPORTS 可直接定义在prop中,在C/C++/预处理器/预处理定义中添加就可以 不需要赋值
    __declspec(dllexport) 用于制作dll文件时 主文件会调用该dll的函数/类/结构体 在该函数/类/结构体前加上 __declspec(dllexport) 在本项目中 将__declspec(dllexport)定义为API
    
    6. 无法找到cuda_runtime_api.h
    先完成3,然后属性/cuda c/c++/Common/additional include dir加上系统cuda include
    
    7. hpp是不能直接成dll的 要拆掉
    
    8. 只有dll没有lib:工程右键->添加->新建项->模块定义文件,工程右键->属性->连接器->输入->模块定义文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    4. 加速方案

    4.1 OPENCV->NPP编译选项及测试

    试一下NPP和cv的resize函数
    NPP不能直接调用,需要在链接库指定下npp*.lib,跟opencv一样
    在这里插入图片描述

    4.1.1 测试相关preprocess函数替换效果及对比

    折腾半天原来只有resize是在cpu里做的 上图就是结果了

    4.2 最快方案应该是SDK读图后直接将data放到GPU用cuda resize之后给context

    5.转换效果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    【数据挖掘】分类与回归预测
    Vue基础-04
    oracle中汉字占几个字节
    软件测试的流程规范有哪些?具体要怎么做?
    【多线程】创建线程池有几种方式
    TypeScript
    32 随机链表的复制
    sql server导入表格出现错误
    CountDownLatch
    HarmonyOS—LocalStorage:页面级UI状态存储
  • 原文地址:https://blog.csdn.net/highoooo/article/details/126969863
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号