自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (2)
  • 收藏
  • 关注

原创 TVM和模型优化概述

TVM和模型优化概述从Tensorflow,Pytorch或Onnx之类的框架中导入模型。TVM可以在导入器层中从其他框架(例如ONNX,Tensorflow或PyTorch)提取模型。随着我们不断改进开源项目,TVM为每个前端提供的支持水平各不相同。如果将模型导入TVM时遇到问题,则可能需要尝试将其转换为ONNX。转换为TVM的高级模型语言Relay。在Relay中表示已导入TVM的模型。中继是神经网络的一种功能语言和中间表示(IR)。它支持:传统的数据流样式表示函数式作用域,让绑定,使其成为功

2021-04-28 23:10:31 684

原创 TVM扫描和循环内核

这里写自定义目录标题这是有关如何在TVM中进行循环计算的入门资料。递归计算是神经网络中的一种典型模式。from __future__ import absolute_import,print_functionimport tvmimport tvm.testingfrom tvm import teimport numpy as npTVM支持使用扫描运算符来描述符号循环。以下扫描运算将计算X列上的总和。扫描在张量的最大维度上进行。 s_state是一个占位符,描述了扫描的过渡状态。 s

2021-04-28 19:49:55 257

原创 TVM内在函数和数学函数

内在函数和数学函数直接声明外部数学调用统一内联函数调用内部Lowering规则添加自己的Intrinsic总结TVM支持基本的算术运算。在许多情况下,通常我们将需要更复杂的内置函数。例如exp取函数的指数。这些功能取决于目标系统,并且可能具有不同目标平台的不同名称。在本教程中,我们将学习如何调用这些目标特定的函数,以及如何通过tvm的固有API统一接口。from __future__ import absolute_import,print_functionimport numpy as npim

2021-04-28 10:42:21 222

转载 在Jetson nano中使用yolov4进行目标检测

在Jetson nano中使用yolov4进行目标检测下载地址相关配置编辑Makefile修改Makefile编译下载权重文件测试Yolov4-tiny图片检测Yolov4-tiny视频检测Yolov4-tiny CSI摄像头实时检测下载地址git clone https://github.com/AlexeyAB/darknet.git相关配置编辑Makefilecd darknetsudo vim Makefile 修改MakefileGPU=1CUDNN=1OPENC

2021-04-27 20:21:10 971 3

转载 TVM的Tensor数据结构解读

TVM的Tensor数据结构解读InputTensors 函数这篇文章主要是解读下TVM中的tvm::te::Tensor以及相关类型的数据结构。下面给出了TensorNode以及相关数据的类结构示意图。可以看到TensorNode中含有op, value_index, shape, dtype等数据成员。op的类型是Operation,Operation有InputTensors的成员函数返回Tensor,有output(int i) 成员函数也返回Tensor,可知Operatoin的输入输出都是

2021-04-27 11:10:57 808

原创 TVM中的调度原语

TVM中的调度原语SplitTVM是用于有效内核构建的领域特定语言。在本教程中,我们将向您展示如何通过TVM提供的各种原语调度计算。from __future__ import absolute_import,print_functionimport tvmfrom tvm import teimport numpy as np通常存在几种方法来计算相同的结果,但是,不同的方法将导致不同的位置和性能。因此TVM要求用户提供如何执行称为Schedule的计算。A调度是一组计算的变换,其变换所

2021-04-27 09:17:32 475 1

原创 TVM编译MXNet模型

编译MXNet模型从Gluon Model Zoo下载Resnet18模型编译图在TVM上执行可移植图形使用具有预训练权重的MXNet符号本文是介绍如何使用Relay部署mxnet模型的入门教程。首先,需要安装mxnet模块。一个快速的解决方案是pip install mxnet --user或请参阅官方安装指南。 https://mxnet.apache.org/versions/master/install/index.htmlimport mxnet as mximport tvmi

2021-04-26 10:57:03 262

原创 TVM在Cuda上部署量化模型

在Cuda上部署量化模型本文是使用TVM进行自动量化的入门教程。自动量化是TVM中的一种量化模式。有关TVM中量化过程的更多详细信息,请参见 此处。在本教程中,我们将在ImageNet上导入GluonCV预训练模型以进行中继,量化中继模型,然后执行推理。...

2021-04-25 23:43:42 801

原创 jetson naon 安装 mxnet

jetson naon 安装 mxnet一 下载 1.8.x release 版本二 安装 依赖三 更新 cmake四 编译 mxnet4.1 进入代码目录:4.2 新建环境变量脚本 env.build4.3 修改 config.mk4.4 编译:4.5 安装五 验证一 下载 1.8.x release 版本1.8 版本可以跟 cuda-10.02 兼容, 同时兼容 faster-mobile-retinafacegit clone -b v1.8.x --recursive https://git

2021-04-25 22:49:56 402

原创 TVM使用TVM部署框架预定义的模型

TVM使用TVM部署框架预定义的模型imports部署量化的PyTorch模型来自Torchvision的负载量化就绪,预训练的Mobilenet v2模型量化,跟踪和运行PyTorch Mobilenet v2模型使用PyTorch前端将量化的Mobilenet v2转换为Relay-QNN编译并运行Relay模块比较输出标签评估表现笔记笔记这是关于将通过深度学习框架量化的模型加载到TVM中的教程。预量化的模型导入是我们在TVM中提供的量化支持之一。有关TVM中量化过程的更多详细信息,请参见 此处。在

2021-04-24 18:27:36 240

原创 TVM在DarkNet模型中编译YOLO-V2和YOLO-V3

在DarkNet模型中编译YOLO-V2和YOLO-V3本文是使用TVM部署Darknet模型的入门教程。所有必需的模型和库都将通过脚本从Internet下载。该脚本运行带有边界框的YOLO-V2和YOLO-V3模型。Darknet解析与CFFI和CV2库有依赖性。请在执行此脚本之前安装CFFI和CV2pip install cffipip install opencv-python# numpy and matplotlibimport numpy as npimport matplotli

2021-04-23 23:35:23 535 3

原创 TVM编译ONNX模型

编译ONNX模型本文是介绍如何使用Relay部署ONNX模型的入门教程。首先,必须安装ONNX软件包。一个快速的解决方案是安装protobuf编译器,然后pip install onnx --user或请参考官方网站。 https://github.com/onnx/onnximport onnximport numpy as npimport tvmfrom tvm import teimport tvm.relay as relayfrom tvm.contrib.downloa

2021-04-23 15:48:48 658 1

原创 TVM编译Tensorflow模型

编译Tensorflow模型本文是使用TVM部署Tensorflow模型的入门教程。首先,需要安装tensorflow python模块。请参考https://www.tensorflow.org/install# tvm,relayimport tvmfrom tvm import relayfrom tvm import te#os and numpyimport numpy as npimport os.path# Tensorflow importsimport tens

2021-04-23 10:32:22 491

转载 Numpy中ndim、shape、dtype、astype的用法

本文介绍numpy数组中这四个方法的区别ndim、shape、dtype、astype。1.ndimndim返回的是数组的维度,返回的只有一个数,该数即表示数组的维度。2.shapeshape:表示各位维度大小的元组。返回的是一个元组。对于一维数组:有疑问的是为什么不是(1,6),因为arr1.ndim维度为1,元组内只返回一个数。对于二维数组:前面的是行,后面的是列,他的ndim为2,所以返回两个数。对于三维数组:很难看出,下面打印arr3,看下它是什么结构。先看最外面的中括号,包含

2021-04-23 08:27:13 336

原创 TVM编译pytorch模型

编译PyTorch模型本文是介绍如何使用Relay部署PyTorch模型的入门教程。首先,应该安装PyTorch。还需要TorchVision,因为我们将其用作模型动物园。一个快速的解决方案是通过pip安装pip install torch==1.7.0pip install torchvision==0.8.1或请访问官方网站 https://pytorch.org/get-started/locally/PyTorch版本应向后兼容,但应与正确的TorchVision版本一起使用。目前

2021-04-22 22:24:43 631

转载 Pytorch转ONNX转TesnorRT加速推理过程

前言我们训练好深度学习模型后,这时其仍然需在特定的深度学习框架下运行,往往不能进行高性能推理。NVIDIA提供了一套高效推理的框架——TensorRT,可将已训练好的模型转为TensorRT引擎格式,然后进行高效推理。对于Pytorch用户而言,该技术路线为:pytorch model–>onnx file–>TensorRT engine因此,我们需要做的只有三步:将Pytorch模型转为ONNX作为中间格式;将ONNX文件转为TensorRT引擎(格式包括:FP32、FP16、

2021-04-22 15:21:55 1173

原创 对Pytorch网络进行可视化

对pytorch模型进行可视化主要包括以下几种方法:1.使用tensorboard2.使用netron3.使用torchviz1.使用tensorboard进行可视化# -*-coding:utf-8 -*-# --------------------# author: cjs# time: 20200910# usage: 进行pytorch模型的可视化# packages: pytorch, tensorflow, tensorboard, tensorboardX# ------

2021-04-21 08:32:17 354

原创 【从零开始学TVM】三,基于ONNX模型结构了解TVM的前端

基于ONNX模型结构了解TVM的前端0x0. 介绍0x1. 使用TVM加载ONNX模型并预测0x2. TVM是如何将ONNX转换成Realy IR的?0x4. 总结0x5. 推荐阅读本文基于Pytorch导出的ONNX模型对TVM前端进行了详细的解析,具体解答了TVM是如何将ONNX模型转换为Relay IR的,最后还给出了一个新增自定义OP的示例。其实在TVM中支持编译多种目前主流的深度学习框架如TensorFlow,Pytorch,MxNet等,其实它们的前端交互过程和本文介绍的ONNX也大同小异,希

2021-04-19 16:06:32 365

原创 python基础:list变量前面加星号,字典变量前面加两个星号

列表前面加星号作用是将列表解开成多个独立的参数,传入函数。字典前面加两个星号,是将字典解开成独立的元素作为形参。def add(a, b): return a+b data = [4,3]print add(*data)#equals to print add(4, 3)data = {'a' : 4, 'b' : 3}print add(**data)#equals to print add(4, 3)...

2021-04-18 17:17:16 127

原创 Python中的zip()与*zip()函数详解

zip()函数的定义#####从参数中的多个迭代器取元素组合成一个新的迭代器;返回:返回一个zip对象,其内部元素为元组;可以转化为列表或元组;传入参数:元组、列表、字典等迭代器。zip()函数的用法当zip()函数中只有一个参数时zip(iterable)从iterable中依次取一个元组,组成一个元组。示例:## zip()函数单个参数list1 = [1, 2, 3, 4]tuple1 = zip(list1)# 打印zip函数的返回类型print("zip()函数的返

2021-04-18 16:15:49 210

转载 TensorRT Python API笔记

基本概念1 LoggerAPI概述:为Builder/ICudaEngine/Runtime对象提供logger创建所需参数:min_severity,参数就是 trt.Logger.INTERNAL_ERROR/WARNING/ERROR/VERBOSE 等成员变量:无成员函数:log(severity, msg)其他作用:无2 BuilderAPI概述:通过 INetworkDefinition 对象创建 ICudaEngine 对象。创建所需参数:Logger对象成员变量:模型

2021-04-18 12:30:14 1891

转载 Jetson Nano实现基于YOLO-V4及TensorRT的实时目标检测

一.背景1.英伟达SOC,2020年最新推出的Jetson Nano B01,价格亲民(99$)。支持GPU,性能高于树莓派且兼容性比较好。嵌入式平台适合验证算法的极限性能。2.YOLO-V4是YOLO目标检测系列最新版,精度和速度较YOLO-V3都有提升,One-stage架构实时推理性能较好。相比而言,尚在开发中的YOLO-V5未被官方承认,且算法上没有太多创新,更像是YOLO-V4.5。3.TensorRT在深度学习算法部署环节十分重要,基于GPU推理,能够成倍提升FPS。二.资源JetPa

2021-04-15 23:53:24 2324

原创 模型结构可视化工具-Netron在线使用

Netron在线网址:https://lutzroeder.github.io/netron/打开一个onnx模型如下图所示:

2021-04-15 22:34:50 2265

原创 pytorch中使用TensorRT

代码网址:https://github.com/darkknightzh/TensorRT_pytorch参考网址:tensorrt安装包的sample/python目录https://github.com/pytorch/examples/tree/master/mnist此处代码使用的是tensorrt5.1.5在安装完tensorrt之后,使用tensorrt主要包括下面几段代码:1. 初始化import tensorrt as trtimport pycuda.driver as

2021-04-15 21:09:52 585

原创 OrderedDict与dict

Python入门 OrderedDictOrderedDict是一个dict子类,它保留将键值对(通常称为项)插入字典的顺序。在OrderedDict对象上进行迭代时,将按原始顺序遍历所有项目。如果更新现有键的值,则顺序保持不变。如果删除项目然后将其重新插入,则该项目将添加到字典的末尾。作为dict子类意味着它继承了常规词典提供的所有方法。OrderedDict还具有其他功能,您将在本教程中学习。但是,在本节中,您将学习OrderedDict在代码中创建和使用对象的基础。创建OrderedDict对象

2021-04-14 22:05:19 1132

原创 python中argparse.ArgumentParser()的使用

argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。 argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。此模块是 Python 标准库中推荐的命令行解析模块。如何使用1.创建解析器创建一个 ArgumentParser 对象:parser = argparse.ArgumentParser(description='Process some integers

2021-04-14 20:05:58 484

原创 python中OrderedDict类的使用

1.创建有序字典所谓有序字典,就是插入键值对的顺序,是按照你插入的顺序来排列的。字典不会因为key或value的值,再自动排序!!import collectionsdic = collections.OrderedDict()dic['k3'] = 'v3'dic['k1'] = 'v1'dic['k2'] = 'v2'print(dic)#输出:OrderedDict([('k3', 'v3'), ('k1', 'v1'), ('k2', 'v2')])2.clear(清空有序

2021-04-14 16:12:39 836

转载 ONNX笔记三

1.Motivation:现如今,各大主流深度学习框架都有着自己独有的特点与魅力,吸引着广大科研与开发人员,例如:Caffe2:方便机器学习算法和模型大规模部署在移动设备PyTorch:PyTorch是一个快速便于实验深度学习框架。但是由于其高度封装,导致部分function不够灵活TensorFlow:TensorFlow 是一个开放源代码软件库,是很多主流框架的基础或者依赖。几乎能满足所有机器学习开发的功能,但是也有由于其功能代码过于底层,学习成本高,代码冗繁,编程逻辑与常规不同等缺点。此外还

2021-04-14 14:11:37 386

转载 Pytorch转ONNX-理论篇

文章转载于:GiantPandaCV作者:立交桥跳水冠军编辑:GiantPandaCV这篇是第一部分,理论篇,主要介绍了和代码无关的一些宏观问题。再接下来我会专门写一篇实战篇,针对OpenMMlab中一些具体代码做分析,说明Pytorch转化ONNX过程中的一些代码上的技巧和注意事项(1)Pytorch转ONNX的意义一般来说转ONNX只是一个手段,在之后得到ONNX模型后还需要再将它做转换,比如转换到TensorRT上完成部署,或者有的人多加一步,从ONNX先转换到caffe,再从caffe到t

2021-04-11 11:31:27 330

转载 TVM学习(九)codegen中的内存申请

在BuildRelay函数中,完成了基于IR的硬件无关优化之后,接下来是在新function基础上进行codegen以及schedule的处理。我们详细考察以下代码: // Generate code for the updated function. graph_codegen_ = std::unique_ptr<GraphCodegen>(new GraphCodegen()); graph_codegen_->Init(nullptr, targets_);

2021-04-11 08:55:08 473

转载 TVM学习(八)pass总结

什么是pass?Pass是TVM中基于relay IR进行的优化,目的是去除冗余算子,进行硬件友好的算子转换,最终能够提高硬件运行效率。由tensorflow等深度学习框架生成的图机构中,含有很多可以优化的算子,比如expand_dim,len等,其实在编译阶段完全可以优化掉,从而能够减少硬件的计算,以及避免出现硬件不支持的算子。TVM中在include/tvm/ir/transform.h中对pass进行了抽象,主要包括PassContext,PassInfo,Pass,以及Sequential。其中

2021-04-11 08:46:30 1370

转载 ONNX笔记二

0x0. 前言接着上篇文章,继续探索ONNX。这一节我将主要从盘点ONNX模型部署有哪些常见问题,以及针对这些问题提出一些解决方法,另外本文也会简单介绍一个可以快速用于ONNX模型推理验证的框架ONNXRuntime。如果你想用ONNX作为模型转换和部署的工具,可以耐心看下去。今天要讲到的ONNX模型部署碰到的问题大多来自于一些关于ONNX模型部署的文章以及自己使用ONNX进行模型部署过程中的一些经历,有一定的实践意义。0x1. 导出ONNX这里以Pytorch为例,来介绍一下要把Pytorch模型导

2021-04-10 14:25:09 3909 1

转载 ONNX笔记一

0x1. 什么是ONNX?简单描述一下官方介绍,开放神经网络交换(Open Neural Network Exchange)简称ONNX是微软和Facebook提出用来表示深度学习模型的开放格式。所谓开放就是ONNX定义了一组和环境、平台均无关的标准格式,来增强各种AI模型的可交互性。换句话说,无论你使用何种训练框架训练模型(比如TensorFlow/Pytorch/OneFlow/Paddle),在训练完毕后你都可以将这些框架的模型统一转换为ONNX这种统一的格式进行存储。注意ONNX文件不仅仅存储了

2021-04-10 10:55:48 738

原创 TVM编译Keras模型

TVM官网链接Compile Keras Models本文是介绍如何使用Relay部署keras模型的入门教程。首先,应该安装keras。 还需要Tensorflow,因为它被用作keras的默认后端。一个快速的解决方案是通过pip安装pip install -U keras --userpip install -U tensorflow --user或请参阅官方网站https://keras.io/#installationimport tvmfrom tvm import teim

2021-04-03 10:52:30 268 2

转载 【从零开始学深度学习编译器】二,TVM中的scheduler

0x0. 前言在【从零开始学深度学习编译器】一,深度学习编译器及TVM 介绍我们已经知道TVM可以将各种深度学习训练框架的模型(计算图)转化为内部的Graph IR(Relay),然后通过TVM提供的指令生成模块将Graph IR翻译成特定硬件可执行的指令或者代码。总的来说的TVM的思想可以总结为表示和调度分离,所谓表示就是IR,调度就是scheduler。同时,在高性能计算方面TVM提供了多种调度源语(scheduler),包含了大多数常见的优化手段如算子融合,读写缓存,分块计算,并行计算等等,这些计算

2021-04-03 09:30:07 736

MATLAB/Simulink中的的S函数的应用

该文档详细介绍了MATLAB的simulink中的S函数的应用,讲解的很详细,可以下载学习。

2019-05-25

STM32F103-CAN通讯程序+代码.docx

该文档详细介绍了STM32的CAN通讯部分的理论内容,并详细讲解了STM32的CAN通讯过程中的接收部分的滤波的内容,这是传统教程中所没有的,里面附带了CAN通讯的代码,下载过后可以直接使用,可以在显示屏上显示发送和接收数据,并显示发送数据计数。

2019-05-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除