![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Infer
文章平均质量分 77
库达ZT
这个作者很懒,什么都没留下…
展开
-
TRT4-trt-integrate -self-driving道路分析
后来的这里是加入了softmax,所以获得的是概率值,所以最终的输出output是1*512*596*4的概率值。然后就是process了,因为我的cropx和y都是0,而且type是Stretch,所以这里是仅仅只做了一个resize,其他的都没作。这里就能看到首先输入的名字是data,输入是1*512*896*3,输出的name是identity。因为swap_color是false,所以BGR----》RGB 不会做。可以看到这是一个全卷积网络,因为输入输出的宽高都一样。这里是做了一个norm。原创 2023-09-13 00:10:15 · 201 阅读 · 0 评论 -
从零构建深度学习推理框架-11 Resnet
这里就是首先搜寻In_channel这个param,如果诶呦的话那就报错,如果有的话那就添加进来,其余的也是,就是将pnnx.的param添加到我们的这个op的param中。我们不讲解全部算子流程, 只挑选其中的Linear算子, 其余算子的实现在流程下大同小异, 而且最复杂的几个算子我们已经在之前的课程中讲解过了.至此,为时一个月的推理课程正式结束,我将在这个专栏的后续内容里引入我自制的layer,比如laplace之类的。:这个条件判断语句检查输出张量是否为空或者为空的情况。原创 2023-08-30 09:49:08 · 807 阅读 · 1 评论 -
从零构建深度学习推理框架-9 再探Tensor类,算子输入输出的分配
第二节中我们编写的Tensor类其实并不能满足我们的使用需要,我们将在这一节以代码阅读的方式来看看一个完全版本的Tensor应该具备怎样的要素,同时我们对Tensor类的分析来看看在C++中一个设计好的类应该是怎么样的。在这里,raw_shape记录的是另外一个方面的形状信息,主要用于review和flatten层中。举一个简单的例子,当Tensor将一个大小为(2,16,1)的Tensorreshape到(32,1,1)的大小时,raw_shapes。原创 2023-08-21 23:27:56 · 397 阅读 · 0 评论 -
从零构建深度学习推理框架-7 计算图的表达式
用图形来表达就是这样的。但是在PNNX的表达式(Experssion Layer)中不是这个样子,而是以一种抽象得方式,替换掉输入张量改为@1,@2等等所以上面的计算图也就变成了我们是希望把这个抽象的表达式变回到一个方便后端执行的计算过程(抽象的语法树来表达,在推理的时候转为逆波兰式)。其中add和mul表示我们上一节中说到的@0和@1表示我们上一节课中说道的这就要求我们需要一个鲁棒的表达式解析和语法树构建功能。public:private:其中expr_表示表达式字符串,nodes_原创 2023-08-12 13:56:49 · 184 阅读 · 0 评论 -
从零构建深度学习推理框架-6 构建计算图
PNNX由操作数operand(运算数)和operator(运算符号),PNNX::Graph用来管理和操作这两者。得到pnnx::graph,一个一个算子去初始化 runtimegraph得到pnnx::operators -->依次便利pnnx operator 遍历,初始化一个RuntimeOperator1. 得到pnnx operator的inputs,再根据这个inputs去初始化我们RuntimeOperator::runtime_operator->input_operands。原创 2023-08-07 13:23:18 · 447 阅读 · 0 评论 -
从零开始构建推理框架-5 MaxPooling层的实现
池化层在深度学习网络中的作用一般是用来缓解卷积层对位置的过度敏感性.池化层每次对输入数据的一个固定形状窗口(池化窗口的大小为pooling height, pooling width)中的元素计算输出,池化层直接计算池化窗口内元素的最大值或者平均值。该运算也分别叫做最大池化或平均池化。实现如下:其上分为三个部分:要获得stride , padding_height , padding_width2 如果需要池化,则需要在周围填充一圈负无穷:先获取batch_size的大小,在每个batch上原创 2023-08-07 10:11:38 · 118 阅读 · 0 评论 -
从零构建深度学习推理框架-4 框架中的算子注册机制
今天要讲的这一注册机制用到了设计模式中的工厂模式和单例模式,所以这节课也是对两大设计模式的一个合理应用和实践。KuiperInfer的注册表是一个map数据结构,维护了一组键值对,key是对应的OpType,用来查找对应的value,value是用于创建该层的对应方法(Creator)。OpType就是头文件中对应的索引:创建该层的对应方法相当于一个工厂(Creator),Creator如下的代码所示,是一个函数指针类型,原创 2023-08-04 16:20:14 · 669 阅读 · 0 评论 -
从零构建深度学习推理框架-3 手写算子relu
relu是一个非线性激活函数,可以避免梯度消失,过拟合等情况。我们一般将thresh设为0。原创 2023-08-02 17:55:09 · 335 阅读 · 0 评论 -
从零构建深度学习推理框架-2 从CSV文件初始化Tensor
CSV(逗号分隔值)文件是一种特殊的文件类型,可在 Excel 中创建或编辑。CSV文件采用逗号分隔的形式来存储文本和数字信息,总体来说,这种形式的文件格式具有扩展性好,移植性强的特点。在try中要先将表头传到header里,再将其余的数组读到data中,但记住data中的row要-1,因为要扣除表头的一行。,例如MySQL数据库可以从CSV文件中导入数据,GMail联系人可以导出到CSV文件,然后将其导入到Outlook中。复杂,且多变维度的输出,来对比我们的推理结果。保存为tensor -->原创 2023-07-26 18:38:50 · 523 阅读 · 0 评论 -
从零构建深度学习推理框架-1 简介和Tensor
深度学习推理框架用于对已训练完成的神经网络进行预测,也就是说,能够将深度训练框架例如Pytorch、Tensorflow中定义的算法移植到中心侧和端侧,并高效执行。与训练框架不同的是,深度学习推理框架没有梯度反向传播功能,因为算法模型文件中的权重系数已经被固化,推理框架只需要读取、加载并完成对新数据的预测即可。原创 2023-07-25 19:49:34 · 1449 阅读 · 0 评论