Ubuntu18.04配置darknet环境实现YOLOv4目标检测(五)——darknet YOLOv4和YOLOv4-tiny模型转ONNX转TensorRT部署

2023-10-29

1. github开源代码

开源代码位置在这里,darknet转ONNX模型代码基于python,TensorRT推理代码基于C++。

2. darknet模型转ONNX模型

通过export_onnx.py文件可以将darknet模型转换为ONNX模型,目前可以支持YOLOv3,YOLOv3-SPP,YOLOv4等模型。

    parser = argparse.ArgumentParser(description='Transform YOLO weights to ONNX.')
    parser.add_argument('--cfg_file', type=str, default='yolov4.cfg', help='yolo cfg file')
    parser.add_argument('--weights_file', type=str, default='yolov4.weights', help='yolo weights file')
    parser.add_argument('--output_file', type=str, default='yolov4.onnx', help='yolo onnx file')
    parser.add_argument('--neck', type=str, default='PAN', help='use which kind neck')
    args = parser.parse_args()

cfg_file是darknet的cfg文件的路径,weights_file是darknet的weights文件的路径,output_file是输出的ONNX文件的名称,neck是YOLO的模型结构,YOLOv3相关模型输入FPN,YOLOv4模型相关输入PAN。输入以下命令后,可以将darknet模型转为ONNX模型。

python3 export_onnx.py

导出yolov4-tiny模型的命令是:

python3 export_onnx.py --cfg_file yolov4-tiny.cfg --weights_file yolov4-tiny.weights --output_file yolov4-tiny.onnx --strides 32 16 --neck FPN

转换后的模型加入了transpose,将所有YOLO层的输出结果进行了concat,最终结构如下:
在这里插入图片描述

3. ONNX模型转TensorRT模型

3.1 概述

TensorRT模型即TensorRT的推理引擎,代码中通过C++实现。相关配置写在config.yaml文件中,如果存在engine_file的路径,则读取engine_file,否则从onnx_file生成engine_file

void YOLOv5::LoadEngine() {
    // create and load engine
    std::fstream existEngine;
    existEngine.open(engine_file, std::ios::in);
    if (existEngine) {
        readTrtFile(engine_file, engine);
        assert(engine != nullptr);
    } else {
        onnxToTRTModel(onnx_file, engine_file, engine, BATCH_SIZE);
        assert(engine != nullptr);
    }
}

config.yaml文件可以设置batch size,图像的size及模型的anchor等。

Yolov4:
    onnx_file:     "../yolov4.onnx"
    engine_file:   "../yolov4.trt"
    labels_file:   "../coco.names"
    BATCH_SIZE:    1
    INPUT_CHANNEL: 3
    IMAGE_WIDTH:   608
    IMAGE_HEIGHT:  608
    obj_threshold: 0.4
    nms_threshold: 0.45
    stride:        [8, 16, 32]
    anchors:       [[12, 16], [19, 36], [40, 28], [36, 75], [76, 55], [72, 146], [142, 110], [192, 243], [459, 401]]

3.2 编译

通过以下命令对项目进行编译,生成Yolov4_trt

mkdir build && cd build
cmake ..
make -j

3.3 运行

通过以下命令运行项目,得到推理结果

./Yolov4_trt ../config.yaml ../samples

4. 推理结果

推理结果如下图所示:
在这里插入图片描述
可以看到输出结果与darknet模型的输出结果包括置信度完全一致,在输出的信息中,每张图片的平均处理时间约为16ms,单独engine的推理时间约为7ms。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu18.04配置darknet环境实现YOLOv4目标检测(五)——darknet YOLOv4和YOLOv4-tiny模型转ONNX转TensorRT部署 的相关文章

  • UTF8/UTF16 和 Base64 在编码方面有什么区别

    In c 我们可以使用下面的类来进行编码 System Text Encoding UTF8 System Text Encoding UTF16 System Text Encoding ASCII 为什么没有System Text En
  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器

随机推荐

  • 多处理器的基本概念

    SISD 单指令流单数据流 特性 各指令序列只能并发 不能并行 每条指令处理一两个数据 不是 数据级并行技术 硬件组成 一个处理器 一个主存储器 若采用指令流水线 需设置多个功能部件 采用多模块交叉存储器 SIMD 单指令流多数据流 特性
  • 使用较广泛的安全测试工具有哪些?

    使用较广泛的安全测试工具有哪些 安全测试是一个非常复杂的过程 安全测试所使用到的工具也非常多 而且种类不一 如漏洞扫描工具 端口扫描工具 抓包工具 渗透工具等 一 Web漏洞扫描工具 AppScan AppScan是IBM公司开发的一款We
  • mysql未开启binlog恢复数据_MYSQL bin_log 开启及数据恢复

    参考博客 A https www jianshu com p 55b0d52edca2 B https www cnblogs com martinzhang p 3454358 html C https www cnblogs com x
  • C语言-从txt文件中读取数据,忽略换行及回车

    long file size char filename FILE fp fopen filename r if fp return 1 fseek fp 0L SEEK END long size ftell fp fclose fp r
  • Mysql安装,控制台安装

    控制台安装要比exe方式安装简单很多 下载mysql 官网地址 mysql 解压下载的文件后 在生成的主目录里面创建一个my ini文件 文件内容如下 mysqld 端口号 port 3306 mysql安装目录 basedir C Pro
  • 步进电机S型曲线加速的实现

    之前做电机相关的项目比较少 最近有个项目涉及到步进电机的精确控制 参考了一些资料研究了一下S型曲线加减速 这里总结一下分享给大家 硬件是 STM32 驱动器 步进电机 STM32定时器输出PWM 控制驱动器来驱动步进电机 单片机只要控制电机
  • ROS系统上的单目相机标定步骤

    单目相机标定步骤 前置条件 已经安装完usb cam包 Git链接 已经安装完camera calibration包 安装了完整的ROS系统就有 可以通过下面的命令来检查 rosdep install camera calibration
  • 豆瓣Top250:Python爬虫+数据可视化

    文章目录 前言 数据爬取 测试类库 1 urllib request 获取网页HTML源代码 2 re 匹配HTML源代码 3 bs4 HTML XML的解析器 搜索文档树 CSS选择器 4 xlwt 解析出的数据保存到Excel 5 sq
  • python 读取pkl文件

    python 读取imdb full pkl文件 import cPickle as pickle f open D keras imdb full pkl info pickle load f print info show file
  • vue+electron 跨平台桌面应用开发实战教程

    一 创建项目 1 1 安装vue cli 先查看是否已经安装了vue cli vue cli的版本是什么 查看版本命令 vue version 如果版本叫老 可以直接卸载 再安装最新版本 卸载命令 npm uninstall vue cli
  • 最深情的告白——郁金香(Python实现)

    目录 1 最深情的告白 2 即兴赞之 2 1 李小白言郁金香 2 2 郁金香般的姑娘 2 3 荷兰的郁金香 3 Python代码实现 3 1 郁金香的芬芳 3 2 我俩绚丽多姿的风景 1 最深情的告白 曾经以为 她爱玫瑰 然后我画了好几种
  • Python简介、历史及优缺点

    Python是一种高级 解释型 面向对象的编程语言 它由Guido van Rossum于1989年在荷兰创造 并于1991年发布 Python的设计哲学强调代码的可读性和简洁性 它具有清晰简洁的语法 使得它易于学习和使用 Python的历
  • linux新建用户代码,Linux_用dsadd添加用户的代码,描述: 此工具命令将一些具体 - phpStudy...

    用dsadd添加用户的代码 描述 此工具命令将一些具体的对象类型添加到目录 dsadd 命令 dsadd computer 将计算机添加到目录 dsadd contact 将联系人添加到目录 dsadd group 将组添加到目录 dsad
  • DB2 import和load

    Import和Load 都可以将数据导入到DB2服务器中 但是2者是有很大区别的 Import 其实执行了SQL 的INSERT 操作 和INSERT 操作一样 Import 执行的时候会激活触发器 所有的约束会强制实现 而且会使用数据库的
  • Linux系统如何正确的关机、重启

    1 在使用Linux系统时 需要注意 linux系统可同时登陆多个账户使用 所以在关机和重启时都需要对每个登陆的账户进行数据保存 楼主在使用保存命令时为了防止出现保存失误 一般使用三个sync super localhost sync sy
  • Matlab求范数

    对 p 2 这称为弗罗贝尼乌斯范数 Frobenius norm 或希尔伯特 施密特范数 Hilbert Schmidt norm 不过后面这个术语通常只用于希尔伯特空间 这个范数可用不同的方式定义 这里 A 表示 A 的共轭转置 i 是
  • leetcode704. 二分查找

    给定一个 n 个元素有序的 升序 整型数组 nums 和一个目标值 target 写一个函数搜索 nums 中的 target 如果目标值存在返回下标 否则返回 1 示例 1 输入 nums 1 0 3 5 9 12 target 9输出
  • 计算机缺失d3dcompiler43.dll,电脑d3dcompiler43.dll文件丢失怎么解决?

    最近有很多小伙伴在使用win7系统的时候 遇到了系统提示d3dcompiler43 dll文件丢失的问题 那么 这个问题该怎么解决呢 这种文件的丢失一般影响到玩游戏 因为文件没有及时的更新 其实只要我们重新网上下载同一个该文件就可以了 下面
  • 编程的:23种设计模式

    color red 1 工厂模式 客户类和工厂类分开 消费者任何时候需要某种产品 只需向工厂请求即可 消费者无须修改就可以接纳新产品 缺点是当产品修改时 工厂类也要做相应的修改 如 如何创建及如何向客户端提供 color color gre
  • Ubuntu18.04配置darknet环境实现YOLOv4目标检测(五)——darknet YOLOv4和YOLOv4-tiny模型转ONNX转TensorRT部署

    文章目录 1 github开源代码 2 darknet模型转ONNX模型 3 ONNX模型转TensorRT模型 3 1 概述 3 2 编译 3 3 运行 4 推理结果 1 github开源代码 开源代码位置在这里 darknet转ONNX