[CV学习笔记] yolotensorrt多线程推理-第一部分
创始人
2024-05-30 19:27:35
0

1、前言

之前分享了利用FastDet&tensorrt多线程推理的代码,本想着继续学习yolo&tensorrt多线程的代码,但是现在shouxieai直接开源的该项目,而且还包含yolov8实例分割的代码。因此本文主要是对项目代码进行梳理,一方面加深自己对多线程、cuda编程的理解,另一方面希望给有需要的同学提供帮助。本文主要对项目整体的框架进行说明,后续的文章将会对代码细节更加详细的注释。
yolo&tensorrt项目:https://github.com/shouxieai/infer
fastdet&ncnn 项目:https://blog.csdn.net/weixin_42108183/article/details/129331588

2、运行该项目

首先下载项目
CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
# set (CMAKE_C_COMPILER "/usr/bin/gcc")
# set (CMAKE_CXX_COMPILER "/usr/bin/g++")
project(demo_trt)
option(CUDA_USE_STATIC_CUDA_RUNTIME OFF)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_BUILD_TYPE Debug)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/workspace)
set(HAS_PYTHON OFF)
# 修改为本机地址
set(TENSORRT_DIR "/home/rex/TensorRT-8.4.0.6")
find_package(CUDA REQUIRED)
find_package(OpenCV)
include_directories(${PROJECT_SOURCE_DIR}/src${PROJECT_SOURCE_DIR}/src/trt${PROJECT_SOURCE_DIR}/src/trt/common${OpenCV_INCLUDE_DIRS}${CUDA_TOOLKIT_ROOT_DIR}/include${TENSORRT_DIR}/include${CUDNN_DIR}/include
)
link_directories(${TENSORRT_DIR}/lib${CUDA_TOOLKIT_ROOT_DIR}/lib64${CUDNN_DIR}/lib
)set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -O0 -Wfatal-errors -pthread -w -g")
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11 -O0 -Xcompiler -fPIC -g -w ${CUDA_GEN_CODE}")
file(GLOB_RECURSE cpp_srcs ${PROJECT_SOURCE_DIR}/src/*.cpp)
file(GLOB_RECURSE cuda_srcs ${PROJECT_SOURCE_DIR}/src/*.cu)
cuda_add_library(plugin_list SHARED ${cuda_srcs})
target_link_libraries(plugin_list nvinfer nvinfer_plugin)
target_link_libraries(plugin_list cuda cublas cudart cudnn)
target_link_libraries(plugin_list pthread)
target_link_libraries(plugin_list ${OpenCV_LIBS})
add_executable(demo_infer ${cpp_srcs})
target_link_libraries(demo_infer plugin_list)
# 生成engine
sh /workspace/build.sh
# 修改文件中的路径为绝对路径
mkdirt build && cd build
cmake ..
make -j
./../workspace/demo_infer

3、文件结构

src

  • cpm.hpp 基于生产者消费者的多线程推理
  • infer.cu 推理结果实现
  • infer.hpp 推理接口封装
  • yolo.cu 函数实现
  • yolo.hpp 任务类型、返回结果定义、推理函数封装
  • main.cpp 主函数

4、main.cpp

// 单batch推理
void single_inference()
{   // 推荐写绝对路径cv::Mat image = cv::imread("/home/rex/Desktop/infer-lastest/workspace/inference/car.jpg");auto yolo = yolo::load("/home/rex/Desktop/infer-lastest/workspace/yolov8n-seg.b1.transd.engine", yolo::Type::V8Seg);if (yolo == nullptr)return;auto objs = yolo->forward(cvimg(image));int i = 0;cv::Mat image_mask = image.clone();int img_h = image_mask.rows;int img_w = image_mask.cols;std::vector color;srand(time(0));for (int i = 0; i < 80; i++){int b = rand() % 256;int g = rand() % 256;int r = rand() % 256;color.push_back(cv::Scalar(b, g, r));}for (auto &obj : objs){   // 实例分割if (obj.seg){cv::Mat mask = cv::Mat(obj.seg->height, obj.seg->width, CV_8UC1, obj.seg->data);cv::resize(mask, mask, cv::Size((obj.right - obj.left), (obj.bottom - obj.top)), cv::INTER_NEAREST);inRange(mask, 127, 255, mask);cv::imwrite(cv::format("%d_mask.jpg", i), mask);i++;cv::Rect rect(obj.left, obj.top, (obj.right - obj.left), (obj.bottom - obj.top));cv::Mat c = image_mask(rect);c.setTo(color[obj.class_label], mask);}uint8_t b, g, r;tie(b, g, r) = yolo::random_color(obj.class_label);cv::rectangle(image, cv::Point(obj.left, obj.top),cv::Point(obj.right, obj.bottom), cv::Scalar(b, g, r), 5);auto name = cocolabels[obj.class_label];auto caption = cv::format("%s %.2f", name, obj.confidence);int width = cv::getTextSize(caption, 0, 1, 2, nullptr).width + 10;cv::rectangle(image, cv::Point(obj.left - 3, obj.top - 33),cv::Point(obj.left + width, obj.top), cv::Scalar(b, g, r),-1);cv::putText(image, caption, cv::Point(obj.left, obj.top - 5), 0, 1,cv::Scalar::all(0), 2, 16);}// 实例分割addWeighted(image, 0.5, image_mask, 0.5, 0, image);printf("Save result to Result.jpg, %d objects\n", objs.size());cv::imwrite("Result.jpg", image);
}

5、总结

本文将简单的将infer项目运行起来了,初步理解该项目的运行方式,后面的文章将会对代码细节进行更加详细的学习!

相关内容

热门资讯

《长江干线安徽至四川段船舶航行... 转自:中国水运网5月9日,记者从长江海事局获悉,《长江干线安徽至四川段船舶航行规则》(简称《规则》)...
青岛打造创业孵化4.0版本 高... 转自:中工网原标题:青岛打造创业孵化4.0版本 高能级创业孵化园区建设跑出“加速度”工人日报-中工网...
天风证券定增获上交所审核通过 ...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会!   5月9日,天风证...
中国政府援缅第十三批紧急人道主... 中国政府向缅甸提供的第十三批紧急人道主义地震救灾物资5月9日运抵仰光。10日,中国驻缅甸大使馆参赞欧...
“走读中国” 内蒙古行即将启幕... 来源:环球网 由国家互联网信息办公室网络传播局指导,中国公共外交协会、环球网主办,内蒙古自治区互联网...
政策“组合拳”持续稳健有效 中... 转自:央视网央视网消息: 人力资源社会保障部日前公示第七批新职业、新工种。其中,拟增加17个新职业,...
麦芽糊精商品报价动态(2025... 生意社05月10日讯 交易商品牌/产地交货地最新报价麦芽糊精 固体山东宇硕化工有限公司...
“科创板八条”政策效应持续释放... 转自:经济日报5月9日,上交所官网信息显示,宁波健信超导科技股份有限公司(简称“健信超导”)的科创板...
转扩!外省籍小客车周末游广西,... 自治区交通运输厅联合发展改革委、财政厅日前印发《关于做好小客车周末自驾游广西高速公路通行优惠提振消费...
中共辽宁省营口市委常委、宣传部... 转自:新华财经5月9日,2025世界品牌莫干山大会“草坪故事会”在浙江德清风光秀丽的莫干山脚下展开。...
唯一被认可作用是减少风阻?魏建... (图片来源:摄图网)传统门把手通常是一个外露的把手,安装在车门的外侧,方便乘客直接握住并拉动车门。而...
活性炭颗粒状商品报价动态(20... 生意社05月10日讯 交易商品牌/产地交货地最新报价活性炭颗粒状 煤质3-5mm碘值9...
加强文学交流 赓续中俄友好 “伟大的俄罗斯作家列夫·托尔斯泰在《战争与和平》中写道:‘历史是国家和人类的传记。’历史的记忆和真相...
肖峰读《从塞北到西域》︱拉铁摩... [美]欧文·拉铁摩尔著,王敬译,上海人民出版社︱光启书局2024年5月出版,414页,108.00元...
假消息!印度军方否认S-400... 格隆汇5月10日|印度外交部和军方举行联合发布会。印度军方发言人表示,巴基斯坦试图持续进行恶意的虚假...
16楼“飞”出电竞椅,原因查明... 转自:北京日报客户端据四川成都市公安局高新技术产业开发区分局消息近日成都高新区某小区发生了一起高空抛...
以数观势|稳预期 强信心 激活... 转自:中国台湾网  面对全球经济波动,中国经济如何稳预期、强信心、激活力?今年以来,围绕支持科技创新...
济宁城际公交集团C619、B6... C619、B6、J967线路临时绕行2025年汶上半程马拉松将于2025年5月11日(星期日)上午举...
雕白粉商品报价动态(2025-... 生意社05月10日讯 交易商品牌/产地交货地最新报价 雕白粉 工业级,含量98%,粉末...
今日谈:永远不能忘却的纪念 原标题:永远不能忘却的纪念(今日谈)  80年前的伟大胜利打败了不可一世的法西斯势力,带给世人恒久的...