码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • yolov5 C++部署学习笔记


    1,common.cpp 使用tensorrt API 搭建yolov5模块单元

    1. (1)头文件
    2. #include "NvInfer.h" //tensorrt API的头文件
    3. #include "yololayer.h" //tensorrt 插件头文件
    4. #include <opencv2/opencv.hpp> //opencv 头文件
    5. (2)命名空间
    6. using namespace nvinfer1;
    7. (3)网络layer实现及其他函数实现
    8. //yolov5 需要实现的网络layer包括:convBlock, focus,bottleneck, bottleneckCSP, C3,SPP,SPPF,yololayer的插件layer
    1. 3.1 convBlock
    2. ILayer* convBlock(INetworkDefinition *network, std::map<std::string, Weights>& weightMap, ITensor& input, int outch, int ksize, int s, int g, std::string lname) {
    3. Weights emptywts{ DataType::kFLOAT, nullptr, 0 };
    4. int p = ksize / 3;
    5. IConvolutionLayer* conv1 = network->addConvolutionNd(input, outch, DimsHW{ ksize, ksize }, weightMap[lname + ".conv.weight"], emptywts);
    6. assert(conv1);
    7. conv1->setStrideNd(DimsHW{ s, s });
    8. conv1->setPaddingNd(DimsHW{ p, p });
    9. conv1->setNbGroups(g);
    10. IScaleLayer* bn1 = addBatchNorm2d(network, weightMap, *conv1->getOutput(0), lname + ".bn", 1e-3);
    11. // silu = x * sigmoid
    12. auto sig = network->addActivation(*bn1->getOutput(0), ActivationType::kSIGMOID);
    13. assert(sig);
    14. auto ew = network->addElementWise(*bn1->getOutput(0), *sig->getOutput(0), ElementWiseOperation::kPROD);
    15. assert(ew);
    16. return ew;
    17. }

    2, yolov5.cpp

    1. // 1,创建一个网络生成器
    2. IBuilder* builder = createInferBuilder(gLogger);
    3. // 2,生成一个空的网络
    4. INetworkDefinition* network = builder->createNetwork();
    5. // 3,添加输入
    6. ITensor* data = network->addInput(INPUT_BLOB_NAME, dt, Dims3{ 3, INPUT_H, INPUT_W });
    7. // 4, 添加网络层 common.h

    1,分配显卡

    cudaSetDevice(DEVICE);

    2, 加载engine模型

    1. #创建推理进行时runtime
    2. IRuntime* runtime = createInferRuntime(gLogger);
    3. assert(runtime != nullptr);
    4. #创建引擎,反序列化二值引擎文件
    5. ICudaEngine* engine = runtime->deserializeCudaEngine(trtModelStream, size);
    6. assert(engine != nullptr);
    7. #创建执行上下文contex,用于推理
    8. IExecutionContext* context = engine->createExecutionContext();

  • 相关阅读:
    计算机网络-网络层详细讲解
    【TODO】【ETH】以太坊16进制数据解码
    九耶丨阁瑞钛伦特-Vue(三)
    隐语 Meetup 北京站|精彩时刻大盘点!新品发布、行业案例、专家解读......欢迎围观
    Android7.1.1系统,Toast的Exception: android.view.WindowManager$BadTokenException解决
    Mybatis快速入门
    低代码平台:构建应用程序的“银弹”
    [SpringBoot系列]SSMP整合小项目
    java计算机毕业设计小区停车场信息系统源码+系统+数据库+lw文档+mybatis+运行部署
    IS215UCVEM08B IS215UCVEH2AE VMIVME-7614-132 350-017614-132 D
  • 原文地址:https://blog.csdn.net/baobei0112/article/details/125425982
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号