yolov5模型PC端加速方法

2023-11-12

最近工作中要对YOLOV5模型进行GPU加速,尝试过Tensorrt及Torch版本部署。下面做一下阶段总结,后期有新发现会持续更新。

1.Tensorrt方法:

        GPU版本加速首先想到的肯定是TRT了,也尝试github上YOLOV5版本的TRT方法在原本作者的基础上自己也做了优化并提升了速度,主要是原作者模型的前后处理对于大batchsize优化并不是很好以及在GPU中的内存拷贝方法有部分冗余。毕竟代码是基于python版本的Torch上的,所以我也做了torch结合tensorrt一起。

        代码如下,Torch结合TensorRT方法,这样可以减少内存的拷贝。当然从cpu到cuda过程是必不可少的,我用的cv2所以self.inputs肯定是要从cpu中转移过来的,这一步拷贝时间消耗是必不可少的。

self.inputs = torch.zeros_like(self.demo_in)
self.out = torch.zeros_like(self.demo_out)
context.execute_async(batch_size=self.batch_size,
                      bindings=[self.inputs.data_ptr(), self.out.data_ptr()],
                      stream_handle=stream.handle)
stream.synchronize()

        但是不知道什么原因TRT版本不管F16还是F32我测试下来精度和torch版本还是有很大差距最终放弃了TRT版本。

注(2021.7.27):

问题找到了,原作者batchNorm方法eps数值0.001太大了改成0.00001即可,精度和torch完全一样。

2.Torch版本:

        实际上Torch版本的加速如果你是1 batchsize那么加速还是要看网络模型的加速,但是我项目中batchsize较大,所以时间消耗基本都是在preprocess和postprocess上,这是加速preprocess和postprocess的意义远远大于加速模型本身。

        主要加速思路是:

                1.减少内存拷贝过程(CPU到GPU,GPU到CPU),这个很重要!

                2.采用多线程拷贝同时拷贝,这个主要用在preprocess加载图片和归一化上

                3.尽可能都在GPU中完成指令操作少用CPU指令操作,这个主要是在postprocess

                4.能在batch的维度上一起处理的就不要用for循环一个个处理(例如:置信度过滤),这个是在postprocess

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

yolov5模型PC端加速方法 的相关文章

  • pytorch 的 IDE 自动完成

    我正在使用 Visual Studio 代码 最近尝试了风筝 这两者似乎都没有 pytorch 的自动完成功能 这些工具可以吗 如果没有 有人可以推荐一个可以的编辑器吗 谢谢你 使用Pycharmhttps www jetbrains co
  • 如何从已安装的云端硬盘文件夹中永久删除?

    我编写了一个脚本 在每次迭代后将我的模型和训练示例上传到 Google Drive 以防发生崩溃或任何阻止笔记本运行的情况 如下所示 drive path drive My Drive Colab Notebooks models if p
  • cuda中内核的并行执行

    可以说我有三个全局数组 它们已使用 cudaMemcpy 复制到 GPU 中 但 c 中的这些全局数组尚未使用 cudaHostAlloc 分配 以便分配页面锁定的内存 而不是简单的全局分配 int a 100 b 100 c 100 cu
  • 从 CUDA 设备写入输出文件

    我是 CUDA 编程的新手 正在将 C 代码重写为并行 CUDA 新代码 有没有一种方法可以直接从设备写入输出数据文件 而无需将数组从设备复制到主机 我假设如果cuPrintf存在 一定有地方可以写一个cuFprintf 抱歉 如果答案已经
  • cudaMemcpy() 与 cudaMemcpyFromSymbol()

    我试图找出原因cudaMemcpyFromSymbol 存在 似乎 symbol func 可以做的所有事情 nonSymbol cmd 也可以做 symbol func 似乎可以轻松移动数组或索引的一部分 但这也可以使用 nonSymbo
  • 样本()和r样本()有什么区别?

    当我从 PyTorch 中的发行版中采样时 两者sample and rsample似乎给出了类似的结果 import torch seaborn as sns x torch distributions Normal torch tens
  • PyTorch:如何批量进行推理(并行推理)

    如何在PyTorch中批量进行推理 如何并行进行推理以加快这部分代码的速度 我从进行推理的标准方法开始 with torch no grad for inputs labels in dataloader predict inputs in
  • 通过 cuFFT 进行逆 FFT 缩放

    每当我使用 cuFFT 绘制程序获得的值并将结果与 Matlab 的结果进行比较时 我都会得到相同形状的图形 并且最大值和最小值位于相同的点 然而 cuFFT 得到的值比 Matlab 得到的值大得多 Matlab代码是 fs 1000 s
  • OS X 10.8 上的 PyCuda / 多处理问题

    我正在开发一个项目 将计算任务分配给多个 python 进程 每个进程都与其自己的 CUDA 设备关联 生成子进程时 我使用以下代码 import pycuda driver as cuda class ComputeServer obje
  • 具有 Cuda Thrust 的多个 GPU?

    如何将 Thrust 与多个 GPU 一起使用 这只是使用 cudaSetDevice deviceId 的问题吗 然后运行相关的 Thrust 代码 使用 CUDA 4 0 或更高版本 cudaSetDevice deviceId 接下来
  • 在requirements.txt中包含.whl安装

    如何将其包含在requirements txt 文件中 对于Linux pip install http download pytorch org whl cu75 torch 0 1 12 post2 cp27 none linux x8
  • 大型跨平台软件项目的技巧/资源

    我将开始一个大型软件项目 涉及跨平台 GUI 和大量的数字运算 我计划用 C 和 CUDA 编写大部分应用程序后端 并用 Qt4 编写 GUI 我计划使用 Make 作为我的构建系统 这将是一个只有两名开发人员的项目 一旦我相对深入地了解它
  • PyInstaller 是否包含 CUDA

    我正在开发一个Python脚本 我使用Python 3 7 3 它使用tensorflow gpu 1 14 0 并使用PyInstaller 3 5将此脚本转换为可执行文件 我使用的是 CUDA 10 0 和 cuDNN 7 6 1 我的
  • Pytorch .to('cuda') 或 .cuda() 不起作用并且卡住了

    我正在尝试做 pytorch 教程 当我尝试将他们的设备设置为 cuda 时 它不起作用并且我的代码运行被卡住 有关具体信息 我正在使用 conda 环境 蟒蛇3 7 3 火炬1 3 0 cuda 10 2 NVIDIA RTX2080TI
  • 云或烟雾的粒子系统

    我正在尝试使用 OpenGL 和 CUDA 制作一个简单的用于云和烟雾模拟的粒子系统 如何使粒子系统中的粒子表现得像真正的云或烟雾在低湍流风中的表现 我现在遇到的一些问题是 颗粒聚集成一个大球 粒子扩散到无限远 粒子突然弹射离开 我已经完成
  • PyTorch DataLoader 对并行运行的批次使用相同的随机种子

    有一个bug https tanelp github io posts a bug that plagues thousands of open source ml projects 在 PyTorch Numpy 中 当并行加载批次时Da
  • softmax_cross_entropy_with_logits 的 PyTorch 等效项

    我想知道 TensorFlow 是否有等效的 PyTorch 损失函数softmax cross entropy with logits TensorFlow 是否有等效的 PyTorch 损失函数softmax cross entropy
  • CUDA 的嵌套循环

    我想将我的 C 代码移植到 CUDA 主要计算部分包含3个for嵌套循环 for int i 0 i lt Nx i for int j 0 j
  • Cuda:最小二乘求解,速度较差

    最近 我使用Cuda编写了一个名为 正交匹配追踪 的算法 在我丑陋的 Cuda 代码中 整个迭代需要 60 秒 而 Eigen lib 只需 3 秒 在我的代码中 矩阵 A 是 640 1024 y 是 640 1 在每一步中 我从 A 中
  • 在 CUDA 中的设备内存上分配 2D 数组

    如何在 Cuda 中的设备内存中分配和传输 往返于主机 2D 数组 我找到了解决这个问题的方法 我不必展平阵列 内置的cudaMallocPitch 函数完成了这项工作 我可以使用以下命令将阵列传输到设备或从设备传输阵列cudaMemcpy

随机推荐

  • MAC地址全球唯一,为什么还要有IP地址?

    首先 每一台通信主机一定要有一个标识符用来唯一标识这台设备 下面把 标识符 称为 地址 那么每一个中间设备 一定要有一个转发表 用于查找数据该转发给哪一台设备 虽然设备的 地址 是全球唯一 但是你并不知道它所在的具体位置 那么转发表里找不到
  • 客户个性分析 聚类 大数据

    客户个性分析 聚类 大数据 作者 桂Sir 联系方式 1052656099 qq com 不同的消费者 由于受年龄 性别 群体 职业 民族等自身类型的不同 以及生活习惯 兴趣 爱好 和个人性格因素的影响 在对同一产品的选购过程中往往会表现出
  • H5推流解决方案测试环境搭建指南

    一 部署服务器端 centos 阿里云服务器系统 1 sudo yum install git 2 git clone https github com phoboslab jsmpeg git 3 wget qO https raw gi
  • kali换源出错的问题及解决

    源 leafpad etc apt sources list 中科大 deb http mirrors ustc edu cn kali kali rolling main non free contrib deb src http mir
  • [非线性控制理论]3_基础反馈稳定控制器设计

    非线性控制理论 1 Lyapunov直接方法 非线性控制理论 2 不变性原理 非线性控制理论 3 基础反馈稳定控制器设计 非线性控制理论 4 反馈线性化 反步法 非线性控制理论 5 自适应控制器 Adaptive controller 非线
  • 在自己身上,克服这个时代

    我最喜欢尼采这一句 这个时代有太多浮躁 惶恐与荒唐 每个人都急于从自己的枷锁中解放出来 我想在自己的身上 逐渐去克服这些时代的 烙印 我是一名大一生 我也是一名长沙的大学生 现在长沙的疫情又起来了 呆在寝室里居寝学习 于此我写下了我的第一篇
  • error: conflicting types for 【五大错误原因+解决办法】

    目录 原因一 原因二 原因三 原因四 原因五 参考资料 原因一 没有函数声明 且函数定义在主函数之后 原因二 头文件的被循环引用 在引用时考虑清楚包含顺序 或者使用 ifndef CAPITAL FILENAME define CAPITA
  • 快速Web Uploader来进行图片上传

    这两天在做后台的更改 其中有一处要用到图片上传 因为是第一次弄 所以就花了一天时间 没想到只不过是地址错了 一直绕圈子 过程还是很简单的 我是先到WebUploader官网 直接把Demo下载来下来直接用 然后看文档 找文章来了解的 首先有
  • 王道数据结构笔记

    王道数据结构笔记 第一章 绪论 1 1 基本概念 数据是信息的载体 是描述客观事物属性的数 字符及所有能输入到计算机中并被计算机程序识别 和处理的符号的集合 数据元素是数据的基本单位 一个数据元素可由若干数据项组成 数据项是构成数据元素的不
  • element-plus 组件解析 - Layout 布局

    element plus 组件解析 Layout 布局 1 layout 布局简介 2 row 组件 3 col 组件 3 2 响应式布局 element plus 相关 第1篇 layout 布局是由 row 和 col 组件组合 通过基
  • 如何将空间堆叠起来?Flutter控件之Stack控件

    简介 Flutter中的Stack控件是一种可用于将多个子控件重叠在一起的布局控件 Stack将所有子控件放在同一个位置 它们可以根据需要进行定位 缩放或旋转 Stack中的子控件可以是任何类型的控件 例如文本 图像 按钮等 主要属性 St
  • 数学一八月份情况

    2018年数学一真题
  • Matlab表格数据的导入选项

    Matlab表格数据的导入选项 Matlab作为一个强大的数学分析工具 经常需要导入各种不同格式的数据 其中包括表格数据 在导入表格数据时 Matlab提供了多种不同的选项 以便用户能够灵活地处理数据 下面我将详细介绍Matlab中定义表格
  • python手册下载_python3.8.4官方中文文档 API手册 完整版 chm+pdf

    Python 3 8 4 文档是一套整理的Python 3 8 3 4 的官方中文文档 包含chm和官方pdf完整版 需要的朋友可下载试试 Python 是一种易于学习又功能强大的编程语言 它提供了高效的高级数据结构 还能简单有效地面向对象
  • 保存3dmax场景很慢/卡

    为什么一保存3dmax的文件 就很慢呢 这个要看具体情况来 如果是感染了3dmax病毒的 需要清除一下病毒 因为由于病毒在场景里运行 会导致极大拖慢3dmax的运行效率 也同样会使在保存场景的时候 拖慢时间 这种情况 清除一下病毒 就能解决
  • mysql数据库存储过程及loop循环

    loop实现简单的循环 如果不在SQL逻辑中增加退出循环的条件 可以用其来实现简单的死循环 一 语法 1 leave 配合循环使用 退出循环 2 iterate 必须用在循环中 作用是跳过当前循环剩下的语句 直接进入下一次循环 begin
  • spring获取当前request

    系列文章目录 springmvc核心流程及配置 springmvc处理模型数据 springmvc返回json 数据绑定 springmvc注解的使用 springmvc异常处理 springmvc拦截器 spring与springmvc整
  • C语言如何指针数组储存字符串,周立功教你学C语言编程:教你数组是如何保存指针的...

    gt gt gt gt 1 字符串与指针数组 如果有以下定义 int data0 1 data1 2 data2 3 int ptr0 data0 ptr1 data1 ptr2 data2 实际上地址也是数据 那么数组也可以保存指针 因此
  • java- SFTP文件上传下载

    JSch SFTP文件上传下载 文章目录 JSch SFTP文件上传下载 1 JSch简介 2 ChannelSftp常用Api JSch支持三种文件传输模式 文件上传 put 方法 文件下载 get 方法 3 SFTP上传下载代码实现 1
  • yolov5模型PC端加速方法

    最近工作中要对YOLOV5模型进行GPU加速 尝试过Tensorrt及Torch版本部署 下面做一下阶段总结 后期有新发现会持续更新 1 Tensorrt方法 GPU版本加速首先想到的肯定是TRT了 也尝试github上YOLOV5版本的T