tensorrt

TensorRT:win10平台SDK发布在win7上遇到的问题

廉价感情. 提交于 2020-10-10 09:50:35
环境:win10+win7 版本:TensorRT-5.1.5.0.Windows10.x86_64.cuda-10.1.cudnn7.5 缘由:在win10上编写的IPugin插件,需要封装为SDK,在win7上使用,就遇到了问题。 现象:win7 可以正常编译, 运行时提示: api-ms-win-core-libraryloader-l1-2-0.dll 丢失 定位 :自己查了半天,才找到是nvonnxparser的问题,后来想起来,可以直接查DLL的依赖,就知道是那个DLL文件的问题了 操作 :使用 Dependency Walker 进行验证,果然是nvonnxparser.dll里面依赖了api-ms-win-core-libraryloader-l1-2-0.dll这个鬼东西。 处理:1-在win7上自行编译nvonnxparser【这个比较复杂,后面有时间 来源: oschina 链接: https://my.oschina.net/u/4321646/blog/4666298

TensorRT:PoolLayer的padding

孤者浪人 提交于 2020-09-26 06:14:13
A:Pool层无paddging操作 1:stride=1,不会产生截断不整除问题,所以不用考虑向上或者向下取整问题 2:stride>1,可能或产生截断不整除问题 可以使用padding层,补全不能整除的部分 IActivationLayer* relu1 = basicConv2d(network, weightMap, *scale1->getOutput(0), 64, 7, 2, 3, "conv1."); IPaddingLayer* pad1 = network->addPadding(*relu1->getOutput(0), DimsHW{ 0, 0 }, DimsHW{ 1, 1 }); assert(pad1); IPoolingLayer* pool1 = network->addPooling(*pad1->getOutput(0), PoolingType::kMAX, DimsHW{ 3, 3 }); assert(pool1); pool1->setStride(DimsHW{ 2, 2 }); 可以设置paddingmode,来调整取整的方向问题 enum class PaddingMode : int { kEXPLICIT_ROUND_DOWN = 0, //!< Use explicit padding, rounding output

在Jetson nano上编译paddle(带TensorRT)并跑通Paddle-Inference-Demo

限于喜欢 提交于 2020-08-20 02:10:46
懒人区:想直接安装的可以点这个链接。 ---------------------------------分割线--------------- 缘由: 在官方的Paddle-Inference-Demo中,建议Paddle版本>=1.7。 而个人能找到的资源最高的版本是Nvidia论坛的1.6.3版本的paddlepaddle-gpu。以及文档中提供的0.0.0版本( 链接 )。 https://forums.developer.nvidia.com/t/paddlepadd-gpu-1-6-3-for-jetson-nano-now-available/111655 在跑Demo的过程中,发现 文档中给出的版本 没有Paddle-TensorRT的功能 ,虽然可以使用GPU加速。但是总感觉有TensorRT但却用不上很膈应。 另外,Nvidia论坛放出的版本虽然支持TensorRT,但是版本低于Paddle-Inference-Demo要求的1.7以上。在查阅 1.6 和 1.7 的文档后,发现API有很大的不同。 我根据1.6.3支持的API对yolov3的demo修改后,**发现推理的结果有很大出入。**参见我在Github提的 issue 。当然,在运行过程中也会报model和lib版本不一致的错误。* 推测是不同版本支持的算子可能不一样(或者实现)? * 而且

TensorRT:NvinferPlugin.h

北慕城南 提交于 2020-08-19 13:00:52
版本:5.1.5.0 include NvInfer.h NvInferPlugin.h NvCaffeParser.h NvOnnxConfig.h NvOnnxParser.h NvOnnxParserRuntime.h NvUffParser.h NvUtils.h 说明: 红色标记的:NvInfer.h, NvInferPlugin.h, NvUtils.h是公用的。其他用来支持:Caffe, Onnx和Uff(tensorflow) 功能: Nvidia官方提供的TRT插件的API 0:命名空间:nvidia + infer --- > nvinfer1 不变 namespace nvinfer1 1:枚举变量 Plugin类型 来源: oschina 链接: https://my.oschina.net/u/4352624/blog/4512300

TensorRT:Nvinfer.h-下篇

自古美人都是妖i 提交于 2020-08-18 14:31:20
9:PluginV2类 Pluginv2是新版本的插件接口,部分函数接口与V1是一致的 class IPluginV2 { public: //获取TensorRT的版本,用于向后兼容 //! \brief Return the API version with which this plugin was built. //! //! Do not override this method as it is used by the TensorRT library to maintain backwards-compatibility with plugins. //! virtual int getTensorRTVersion() const { return NV_TENSORRT_VERSION; } //获取插件的类型 //! \brief Return the plugin type. Should match the plugin name returned by the corresponding plugin creator // \see IPluginCreator::getPluginName() //! virtual const char* getPluginType() const = 0; //获取插件的版本 //! \brief Return

TensorRT:NvInfer.h

生来就可爱ヽ(ⅴ<●) 提交于 2020-08-15 16:14:48
版本:5.1.5.0 工欲善其事必先利其器,后面需要使用RT插件,所以还是得学习一下RT的相关代码 NvInfer.h中声明和定义了RT中的大部分 变量、函数、类 等 RT中代码格式较为统一,大体看了设定规则 枚举变量:k+全大写, kFLOAT, kGPU,kCHANNEL 类内变量:k+首字母大写,nbDims 类内函数:小写+首字母大写,setNames(), setInput() 不能派生或者继承的:用大写的“I”进行了标识, ITensor,ILayer 0:命名空间:nvidia + infer --- > nvinfer1 namespace nvinfer1 1:枚举变量 数据类型:float32, float16, int8, int32 enum class DataType : int { kFLOAT = 0, //!< FP32 format. kHALF = 1, //!< FP16 format. kINT8 = 2, //!< quantized INT8 format. kINT32 = 3 //!< INT32 format. }; 设备类型:GPU, DLA enum class DeviceType : int { kGPU, //!< GPU Device kDLA, //!< DLA Core }; 来源: oschina 链接:

使用TensorRT对人脸检测网络MTCNN进行加速

北战南征 提交于 2020-08-15 03:48:48
前言 最近在做人脸比对的工作,需要用到人脸关键点检测的算法,比较成熟和通用的一种算法是 MTCNN ,可以同时进行人脸框选和关键点检测,对于每张脸输出 5 个关键点,可以用来进行人脸对齐。 问题 刚开始准备对齐人脸图片用于训练人脸比对算法,是使用官方版本的 MTCNN ,该版本是基于 Caffe 的 Matlab 接口的,跑起来很慢,差不多要一秒钟一张图片,处理完几万张图片一天就过去了,好在效果不错。 训练完人脸特征提取的网络以后,想要部署整个人脸比对算法,需要进行人脸检测和对齐。用于工业生产,那个版本的 MTCNN 显然不合适了。在 Github 上寻找替代算法,发现有一个从 Facenet 仓库里面拿出来打包成 Python 包的 MTCNN ,直接 pip 就装上了,但是,它也很慢,虽然用了 TensorFlow, 没用上 GPU,检测一张 1080P 的图片要 700ms,太慢了。 想法 正好这几天在学习 TensorRT 相关知识,已经成功将人脸特征提取网络转成 onnx 格式,然后用 TensorRT 的 Python 接口部署好了,单张图片耗时从 15ms 减少到 3ms,非常理想的结果!理所当然,想着把 MTCNN 部署在 TensorRT 平台上面。 MTCNN 的 Caffe 模型直接转成 TensorRT 会有问题,主要是 PReLU 不被支持

NNIE-lite 为算法工程师而生

五迷三道 提交于 2020-08-14 13:22:15
《NNIE-lite》   趟过NNIE的小伙伴可能都知道,NNIE是有很多坑的,而且是纯C的环境,除非你有几年C的开发经验,否则阅读起来不是那么容易的,而作为算法工程师,我相信更多人和我一样擅长Python和C++,所以在把NNIE用起来还是有些费力的。而作为算法工程师,你的工作更应该 focus on 模型上,现在有了NNIE-lite这个项目,极大的帮助大家脱离苦海,算法工程师可以把目光聚焦在模型效果和效率上,而不用再为其他的琐事担心了,使用NNIE像用ncnn一样简单。 Key Words:NNIE、 C++、 OpenCV Beijing, 2020 作者:RaySue Code: https://github.com/RaySue/NNIE-lite Agile Pioneer   写在前面 如果你有摄像头端(海思NNIE)移植算法的需求 如果你更擅长于C++编程 如果你擅长使用cmake构建工程 恰好你喜欢用OpenCV来进行io处理,这个比起bgr来调试十分方便 Come on and star the repo https://github.com/RaySue/NNIE-lite   那么 NNIE-lite 就是非常适合你的,我当时如果有NNIE-lite这样的项目,可能至少节省我一周的时间去梳理使用NNIE的逻辑。 模型部署通用步骤(ncnn

YOLOV3剪枝源码阅读---模型部署加速

被刻印的时光 ゝ 提交于 2020-08-13 09:49:13
YOLOV3剪枝 论文:Network Slimming-Learning Efficient Convolutional Networks through Network Slimming 剪枝项目参考 https://github.com/tanluren/yolov3-channel-and-layer-pruning 主要思路 1、利用batch normalization中的缩放因子γ 作为重要性因子,即γ越小,所对应的channel不太重要,就可以裁剪(pruning)。 2、约束γ的大小,在目标方程中增加一个关于γ的L1正则项,使其稀疏化,这样可以做到在训练中自动剪枝,这是以往模型压缩所不具备的。 剪枝过程 img 这里写图片描述 分为三部分,第一步,训练;第二步,剪枝;第三步,微调剪枝后的模型,循环执行 YOLOV3剪枝源码 1、正常剪枝 这部分分析来自该仓库 https://github.com/coldlarry/YOLOv3-complete-pruning ,但是更新的仓库也可以完成正常剪枝,prune.py。 使用了正常剪枝模式,不对short cut层(需要考虑add操作的维度一致问题)及上采样层(无BN)进行裁剪。 1、找到需要裁剪的BN层的对应的索引。 2、每次反向传播前,将L1正则产生的梯度添加到BN层的梯度中。 3、设置裁剪率进行裁剪。

Amazon Sagemaker 与 NVIDIA Jetson 平台结合打造智能边缘

北慕城南 提交于 2020-08-11 10:42:22
  随着物联网和AI芯片的发展,未来将会有越来越多的数据在边缘侧处理。很多业务场景已经对边缘智能提出了明确的需求,比如自动驾驶的汽车每天会产生5TB的数据,而智能工厂每天产生的数据高达1PB,其中包含视频和传感器的数据。如果不能借助边缘智能技术而依靠Internet网络把数据传输至云端处理,会造成网络延迟和拥塞,影响推理结果的实时性,造成生产事故甚至于安全事故。所以本篇将介绍使用Amazon SageMaker和Nvidia Jetson使用云+端结合的方式打造一个边缘推理的方案,整体方案架构如下:      在正式了解Amazon Sagemaker与NVIDIA Jetson平台之前,我们先了解一下什么是目标检测和YOLO。    目标检测与 YOLO(You Only Look Once)   目标检测是计算机视觉中的一个重要分支,但由于在边缘设备或移动端中部署神经网络模型需要很大的算力或GPU处理能力。近年来由于边缘AI芯片的算力增强,再加上边缘智能有着更广泛的应用场景,围绕机器学习模型在边缘设备上的高效应用等研究课题逐步火热。   目前在目标检测领域的深度学习方法主要分为两类:一类是 two stage的目标检测算法;另外一类是 one stage的目标检测算法。   前者是先由算法生成一系列作为样本的候选框,再通过卷积神经网络进行样本分类;后者one