tensorrt8使用手记(1)模型测试conv+bn+relu结构融合

author author     2023-02-21     757

关键词:

参考技术A

在主流卷积神经网络模型中 Conv+BN+Relu 是一种常见的模型结构。在模型推理和训练中,BN层往往与其他层合并,以减少计算量。

node_of_325

node_of_326

node_of_327

在TensorRT中会对网络结构进行垂直整合,即将 Conv、BN、Relu 三个层融合为了一个层,即CBR融合

在BN层中,首先对输入 进行归一化( 输入张量的均值, 输入张量的方差),然后对归一化的结果进行比例缩放和位移。 [1] [2]

展开可得:

带入替换后可得:

此时可以将BN层视为一个1x1卷积层。

BN层的输入特征(Conv层的输出特征) 的形状为 ,对于Conv层:

,因此BN与Conv融合之后

融合之后:

线性整流函数(Rectified Linear Unit, ReLU)即: ,又称修正线性单元,是一种人工神经网络中常用的激活函数(activation function)。

在神经网络中,线性整流作为神经元的激活函数,定义了该神经元在线性变换之后的非线性输出结果。换言之,对于来自上一层卷积层的输入向量 ,使用线性整流激活函数可以得到输出:

在Int8量化模型中,Conv+ReLU 一般也可以合并成一个Conv进行运算 [3] 。

对于Int8ReLU,其计算公式可以写为 :

由于ReLU的输入(数值范围为 )和输出(数值范围为 )的数值范围不同,因此需要保证 和 、 和 是一致的。由于ReLU的截断操作,因此需要使用 和 ,即对于ReLU的输入,使用输出对应的 和 保证其对小于0截断的输入进行截断,对大于等于0的输入映射至[0,255]范围内。

在Int8Conv的计算过程中,首先使用量化计算公式 对输入和权重值进行量化计算,将其转换为数值范围为(0,255)的整数,在完成卷积计算后再将计算结果进行反量化计算。而 ReLU 本身没有做任何的数学运算,只是一个截断函数。假设Int8Conv的卷积输出为 122( ),则对应反量化输出 -0.3,经过Int8ReLU( ),对该值进行Int8量化,对应的输出为0。因此在ReLU层对输入进行截断之前,即可得到需要截断的数值。

因此,通过在完成卷积计算后直接使用 ReLU 后的 scale 和 zeropoint进行反量化,实现了将 ConvReLU融合。

使用 conv2d 等的 python 函数复制 TFLite 模型层

】使用conv2d等的python函数复制TFLite模型层【英文标题】:ReplicatetheTFLitemodellayersusingpythonfunctionofconv2detc【发布时间】:2021-07-2920:53:01【问题描述】:如果我想使用pythontensorflow函数复制TFLite模型中的层以对张量数据执行一些实验,... 查看详情

英伟达悄悄发布最新tensorrt8,性能提升200%!

...元报道  来源:Nvidia近日,英伟达悄悄地发布了TensorRT8,BERT-Large推理仅需1.2毫秒!同时还加入了量化感知训练和对稀疏性的支持,实现了性能200%的提升。项目已开源。2019年黄仁勋在GTCChina正式发布了TensorRT7&#... 查看详情

线程同步之条件变量使用手记

...型 半同步/半异步(half-sync/half-async): 许多餐厅使用 半同步/半异步 模式的变体。例如,餐厅常常雇佣一个领班负责迎接顾客,并在餐厅繁忙时留意给顾客安 查看详情

lpn模型(代码片段)

importtorchimporttorch.nnasnnimporttorchvisionfromcontext_blockimportContextBlockclassLBwithGCBlock(nn.Module):expansion=1def__init__(self,inplanes,planes,stride=1,downsample=None):super(LBwithGCBlock,self).__init__()self.downsample=downsampleself.conv1=nn.Conv2d(in_channels=... 查看详情

tensorflow中的共享变量(sharingvariables)

为什么要使用共享变量?当训练复杂模型时,可能经常需要共享大量的变量。例如,使用测试集来测试已训练好的模型性能表现时,需要共享已训练好模型的变量,如全连接层的权值。而且我们还会遇到以下问题:比如,我们创... 查看详情

tensorrt8meetspythontensorrt快速入门介绍

一.前言本系列教程是重点关注如何在Python环境中转换、使用TensorRT做深度模型的推理。在上篇中,我们介绍了TensorRT在python和ubuntu环境中的部署。重点就是解决好显卡驱动、cuda、cudnn和tensorRT之间的版本对应关系。在本篇中&#x... 查看详情

在预训练模型前添加 Conv 层会产生 ValueError

...合,它是一个输入层和一个卷积层。目标是在灰度图像上使用预训练的RGBVGG16imagenet模型:fromkeras.applications 查看详情

http手记

 ---------------------tcp/ip模型和osi模型---------------------tcp/ip协议模型 osi模型应用层      应用层         表示层         会话层传输层       传输层网络层       网络层链... 查看详情

hololens开发手记-实现3d应用启动器(代码片段)

...出模型集成到应用项目中关于模型 对于MR应用,想要使用3D启动器,那么使用的模型格式必 查看详情

pytorch(网络模型)(代码片段)

上一篇神经网络鸡翅nn.Module官网importtorch.nnasnnimporttorch.nn.functionalasFclassModel(nn.Module):def__init__(self):super().__init__()self.conv1=nn.Conv2d(1,20,5)self.conv2=nn.Conv2d(20,20,5)defforward( 查看详情

python基于融合spd-conv改进yolov5与原生yolov5模型实践路面裂痕裂缝检测

...术,可以用于目标检测任务,能够一定程度提升模型的检测效果,今天正好有时间就想基于SPD融合yolov5s模型来开发路面裂痕裂缝检测模型,同时与原生的yolov5s模型进行对比分析,首先看下效果图。接下来看下... 查看详情

用vgg19预训练模型对一张图片进行卷积的时候,怎么获取这个图片的14*14*512的向量????急急急

layers=('conv1_1','conv1_2','pool1','conv2_1','conv2_2','pool2','conv3_1','conv3_2','conv3_3','conv3_4','pool3','conv4_1','conv4_2','conv4_3','conv4_4','pool4','conv5_1... 查看详情

Conv1D 不更新权重。 (全为零)和测试输出总是相同的,等于最后一层权重?

...rWeights?【发布时间】:2018-07-1110:12:00【问题描述】:我想使用1DCNN来预测第二天的太阳能。时间序列数据分辨率为一小时,长度为一年。我正在用第1 查看详情

pytorch-模型可视化工具torchsummary(代码片段)

...模型参数等数据的统计。本文介绍TorchSummary这个小工具的使用。安装使用pip安装即可。pipinstalltorchsummary开发缘由首先,我们知道,PyTorch其实自带模型可视化的功能,其基础调用格式如下。print(model)importtorchimporttorch.nn... 查看详情

顺序模型中的pytorch跳过连接

...:29【问题描述】:我正试图围绕顺序模型中的跳过连接。使用函数式API,我会做一些简单的事情(简单的例子,可能不是100%语法正确,但应该明白):x1=self.conv1(inp)x=self.conv2(x)x=self.conv3(x)x=self.conv4( 查看详情

Conv3d 预测抛出错误输入深度必须能被过滤器深度整除:1 vs 3

...题描述】:我是CNN的新手。我正在尝试手势识别。conv3d中使用了从开始中间和结束图像开始的3张图像。模型经过训练,我正在加载保存的模型并尝试预测。以下 查看详情

共享单车——react后台管理系统开发手记:权限设置和菜单调整(未完)

前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录。最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star。一、创建角色  权限菜单设计:RBAC权限模型(详解链接)RBAC,即基于角色的访问控制(R... 查看详情

lenet5模型与全连接模型的差异

1问题深度学习训练过程中,有很多的训练模型,我们组就在思考LeNet模型与之前运用的全连接模型在训练精度损失与验证精度损失上有什么差别?2方法这是LeNet模型的主要代码,对数据进行两成卷积与两次池化之... 查看详情