cuda
文章平均质量分 56
zsffuture
hello world
展开
-
使用cmake在win10编译yolov5+tensorRT+cuda+cudnn+protobuf代码进行混合编译
从Linux下载下来的工程代码,这里建议直接使用vs系列打开不要用vscode打开,vscode对win下的cmake不友好,主要体现在报错机制无法直接定位,题主的环境是vs2022通过cmake可以快速的进行定位bug,并可以快速解决(vscode 的cmake在Linux下还是比较友好的,但是通常如果在Linux下为什么 不研究makefile呢?这里进行之前需要把protobuf在win10下编译,可以参考。这个问题是win中需要包含。原创 2023-02-28 14:47:27 · 1388 阅读 · 0 评论 -
使用vs2022编译yolov5+tensorRT+cuda+cudnn代码进行混合编译
首先依赖有cuda、cudnn、tensorrt、protobuf,从Linux的代码直接移植过来这些库是没法使用的,需要下载对应win的下的版本,其中cuda、cudnn和tensorrt直接从官方下载即可,但是protobuf需要自己编译一下(原创 2023-02-22 09:23:03 · 1094 阅读 · 0 评论 -
深度学习c++部署高性能优化的技巧
图片预处理的高性能实现int input_batch = 1; int input_channel = 3; int input_height = 224; int input_width = 224; int input_numel = input_batch * input_channel * input_height * input_width; float* input_data_host = nullptr; float* input_data原创 2022-05-28 14:57:05 · 578 阅读 · 0 评论 -
tensorRT--- 认识onnx
1、ONNX的本质,是一种Protobuf格式文件2、Protobuf则通过onnx-ml.proto编译得到onnx-ml.pb.h和onnx-ml.pb.cc或onnx_ml_pb2.py3、然后用onnx-ml.pb.cc和代码来操作onnx模型文件,实现增删改4、onnx-ml.proto则是描述onnx文件如何组成的,具有什么结构,他是操作onnx经常参照的东西https://github.com/onnx/onnx/blob/main/onnx/onnx-ml.proto.原创 2022-05-22 15:15:22 · 351 阅读 · 0 评论 -
tensorRT--- 动态shape
动态shape,即编译时指定可动态的范围[L-H],推理时可以允许 L <= shape <= H重点提炼:1.OptimizationProfile是一个优化配置文件,用来指定输入的shape可以变换的范围的,不要被优化两个字蒙蔽了双眼2.如果onnx的输入某个维度是-1,表示该维度动态,否则表示该维度是明确的,明确维度的minDims, optDims, maxDims一定是一样的// tensorRT include#include <NvIn.原创 2022-05-22 15:00:29 · 611 阅读 · 0 评论 -
tensorRT---inference
这里主要讲推理,我们关注的基础中的基础对吗重点提炼:1.bindings是tensorRT对输入输出张量的描述,bindings = input-tensor + output-tensor。比如input有a,output有b, c, d,那么bindings = [a, b, c, d],bindings[0] = a,bindings[2] = c。此时看到engine->getBindingDimensions(0)你得知道获取的是什么2.enqueueV2是异步推理,加入到s原创 2022-05-21 11:46:19 · 431 阅读 · 0 评论 -
tensorRT---helloworld
// tensorRT include#include <NvInfer.h>#include <NvInferRuntime.h>// cuda include#include <cuda_runtime.h>// system include#include <stdio.h>class TRTLogger : public nvinfer1::ILogger{ public: virtual void lo.原创 2022-05-21 10:44:24 · 225 阅读 · 0 评论 -
tensorRT---认识cuda RuntimeAPI(认识thrust,认识cuda的错误机制)
thrust#include <stdio.h>#include <thrust/host_vector.h>#include <thrust/device_vector.h>#include <thrust/sort.h>#include <iostream>using namespace std;__host__ __device__int sort_func(int a, int b){ return a &g原创 2022-05-01 20:40:57 · 258 阅读 · 0 评论 -
tensorRT---认识cuda RuntimeAPI(YOLOv5后处理)
Yolov5是目标检测中比较经典的模型,学习对其后处理进行解码是非常有必要的。在这里我们仅使用核函数对Yolov5推理的结果进行解码并恢复成框,掌握后处理所解决的问题,以及对于性能的考虑经验之谈:1.对于后处理的代码研究,可以把PyTorch的数据通过转换成numpy后,tobytes再写到文件,然后再到c++中读取的方式,能够快速进行问题研究和排查,此时不需要tensorRT推理也可以做后处理研究。这也叫变量控制法2.fast_nms_kernel会在极端情况少框,但是这个极端情况一般原创 2022-05-01 20:09:06 · 493 阅读 · 0 评论 -
tensorRT---认识cuda RuntimeAPI(共享内存、Warpaffine)
共享内存1.共享内存因为更靠近计算单元,所以访问速度更快2.共享内存通常可以作为访问全局内存的缓存使用3.可以利用共享内存实现线程间的通信4.通常与__syncthreads同时出现,这个函数是同步block内的所有线程,全部执行到这一行才往下走5.使用方式,通常是在线程id为0的时候从global memory取值,然后syncthreads,然后再使用#include <cuda_runtime.h>#include <stdio.h>#.原创 2022-05-01 18:07:23 · 287 阅读 · 0 评论 -
tensorRT---认识cuda RuntimeAPI(kernel-function)
1.核函数是cuda编程的关键2.通过xxx.cu创建一个cudac程序文件,并把cu交给nvcc编译,才能识别cuda语法3.__global__表示为核函数,由host调用。__device__表示为设备函数,由device调用4.__host__表示为主机函数,由host调用。__shared__表示变量为共享变量5.host调用核函数:function<<<gridDim, blockDim, sharedMemorySize, stream>>>原创 2022-04-30 20:40:39 · 183 阅读 · 0 评论 -
tensorRT---认识cuda-driver-api
CUcontext实战代码// CUDA驱动头文件cuda.h#include <cuda.h> // include <> 和 "" 的区别 #include <stdio.h> // include <> : 标准库文件 #include <string.h> // include "" : 自定义文件 详细情况请查看 readme.md -> 5#define checkDriver(op).原创 2022-04-30 11:05:02 · 242 阅读 · 0 评论 -
ubuntu16.04安装cuda11.3、cudnn8.2.1、tensorrt8.0.3.4全过程
安装前呢先说明几点,因为之前不熟悉linux 的安装方式,所以看了一下有很多种安装方式,其中包含源码编译、dpkg、apt等,这里的源码方式大家都懂通过Makefile或者cmake进行编译,然后进行安装,过程复杂容易出错,apt是和dpkg配合使用的,这里呢简单的介绍一下dpkg:dpkglinux 开发商在固定的硬件平台和操作系统平台上将需要安装的软件编译好,然后将这个软件所有的相关文件打包成一个特殊格式的文件,这个文件还包括了预先检测系统与依赖的脚本,并且提供记载该软件提供的所有文件信息。客户原创 2021-12-07 21:45:00 · 2908 阅读 · 0 评论 -
yolov5 解码使用GPU进行加速
YOLOv5原理方面这里不再过多阐述,直接从输出头开始,然后设计如编解码:1.yolov5系列的原始输出是3个head头,上图画的是输入为608*608的分辨率的图,如果输入改为640*640分辨率的图片,那么输出的3个头分别对应三个8、16、32下采样的输出分别为80*80*255、40*40*255、20*20*255,其中对应的数字意义如上图所示。2.那么80*80*255、40*40*255、20*20*255数字分别代表什么意思,其中B是batch..原创 2021-11-23 19:30:00 · 9637 阅读 · 6 评论 -
python实现warpaffine,配上原理和代码
代码来源:https://github.com/shouxieai/tensorRT_Pro# 实现一个仿射变换,采用双线性插值方式实现一个warpaffinedef pyWarpAffine(image, M, dst_size, constant=(0,0,0)): M = cv.invertAffineTransform(M) # 求仿射变换的逆矩阵,因为我们是把目的图片作为输入图片,因此需要使用逆矩阵求取原始图片的点 cons...原创 2021-10-28 18:02:07 · 1639 阅读 · 0 评论 -
cuda编程(一)矩阵加法
#include "cuda_runtime.h"#include "device_launch_parameters.h"#include <stdio.h>#include <chrono>/**1_check_dimension*/#include <cuda_runtime.h>#include <stdio.h>#include <iostream>using namespace std;//定义CHEC..原创 2021-10-19 11:29:21 · 844 阅读 · 0 评论