目录
目标
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
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:工程右键->添加->新建项->模块定义文件,工程右键->属性->连接器->输入->模块定义文件
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.转换效果