自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(537)
  • 资源 (2)
  • 论坛 (2)
  • 收藏
  • 关注

原创 本菜鸡的秋招经验总结

本菜鸡的秋招经验总结前言-写在前面制作简历项目和实习经历描述关键点简历制作注意点事项简历格式做好简历review简历相关问题准备工作面试分类及侧重点考察面试过程中的注意事项关于实习狗血的面试经历结语前言-写在前面在正式开写之前首先要感谢在我找工作过程中对我有过帮助的人!非常感谢彭方想师兄提供的简历模板,这套模板我一直用到了最后!非常感谢王振兴师兄提供的简历,让我明白了该怎样写好一份算法相关的简历,王振兴师兄真的是非常热情,为我提供了很多资料,无论是当初实习交接项目还是后面我正式开始找工作有问题向他请

2021-02-12 17:59:06 2091 1

原创 TCP/IP UDP面试问题总结

TCP/IP UDP面试问题总结2.详细说一下TCP协议,三次握手传输的内容?四次挥手的内容?13种状态3.TCP为啥挥手要比握手多一次?△4.为什么一定进行三次握手?5.TCP与UDP的区别?应用场景都有哪些?6.为什么UDP有时比TCP更有优势?7.UDP中一个包的大小最大能多大8.TCP 粘包9.传输层功能10.TCP可靠性保证11.拥塞控制12.TCP流量控制13.流量控制与拥塞控制的区别?14.time_wait与close_wait,time_wait状态持续多长时间?为什么会有time_wai

2020-10-06 17:34:45 120

原创 Linux面试问总结

Linux操作系统1.操作系统特点2.什么是进程3.进程4.进程与线程的区别5. 进程状态转换图6. 进程的创建过程?需要哪些函数?需要哪些数据结构?7. 进程创建子进程,fork详解8. 子进程和父进程怎么通信?9. 进程和作业的区别?10.死锁是什么?必要条件?如何解决?11.鸵鸟策略12.银行家算法13.进程间通信方式有几种,他们之间的区别是什么?14.线程同步的方式?怎么用?△15.页和段的区别?16.孤儿进程和僵尸进程的区别?怎么避免这两类进程?守护进程?17.守护进程是什么?怎么实现?18.线程

2020-10-02 20:21:51 78

原创 Linux进程间通信

Linux进程间通信一、Linux系统调用主要函数二、创建进程1、创建子进程系统调用fork()2、验证fork()创建子进程效果3、系统调用fork()与挂起系统调用wait()三、模拟进程管道通信四、pipe()下生产者与消费者问题一、Linux系统调用主要函数首先,认识一下Linux下系统调用的主要函数,为后面进程与通信等做好铺垫。以下是 Linux 系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的函数。fork 创建一个新进程clone 按指定条件创建子进程execv

2020-08-31 18:51:01 78

原创 Socket网络编程面试题

Socket网络编程面试题1、TCP和UDP的区别:2、流量控制和拥塞控制的实现机制:3、重传机制:4、滑动窗口机制:5、多线程如何同步:6、进程和线程的区别:7、进程间通讯的方式有哪些,各有什么优缺点:9、tcp断开连接的具体过程,其中每一步是为什么那么做:10、tcp建立连接和断开连接的各种过程中的状态转换细节:11、epoll与select的区别:12、epoll中et和lt的区别与实现原理:13、ThreadLocal与其它同步机制的比较:14、内存池、进程池、线程池:1、TCP和UDP的区别:

2020-08-28 22:12:28 226

原创 笔试中遇到的问题

目录1、联合体和结构体大小1、联合体和结构体大小一、字节对齐的原因如果不按照适合平台的要求对数据存放进行对齐,则会在存取效率带来损失。假设某平台每次读取都从偶地址开始。若不对数据的存放进行对齐,则某些数据可能被存放于奇地址开始的地方。这种情况下,平台就需要2个读周期,并对两次读取的结果的高低字节进行拼凑,才可能得到该数据。显然效率下降很多。二、字节对齐的规则1.常见类型的对齐方式(默认)类型 对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量)char 偏移量为 size

2020-08-27 00:43:34 948

原创 秋招面试问题总结-视觉算法

1.YOLOv3对YOLOv2的改进:1.loss不同:作者v3替换了v3=2的softmax loss变成logistic loss,由于每个点所对应的bounding box少并且差异大,每个bounding与ground truth的matching策略变成了1对1.2.anchor bbox porior不同:v2的作者用了5个先验框,v3用了9个先验框,提高了IOU3.detection的策略不同:v2只有一个detection,v3一下子变成了3个,分别是一个下采样的,feature ma

2020-08-16 15:30:08 275

原创 C++基础面试问题总结

目录1.面向对象的特征?2.一个C++源文件从文本到可执行文件经历的过程?3.new和malloc的区别?4.虚函数是什么以及其作用?5.虚函数表是什么?6.什么函数不能声明为虚函数?构造函数为什么不能为虚函数?7.纯虚函数是什么?8.虚函数与纯虚函数的区别?9.简单描述虚继承与虚基类?10.简单描述多态?11.C++内存分为哪几块?12.简单介绍内存池?13.简单描述内存泄漏?14.内存中的堆与栈有什么区别?15.说几个C++11的新特性?16.简单介绍智能指针?17.shared_ptr 和 uniqu

2020-08-14 11:06:45 158

转载 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 11

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

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

2021-04-15 22:34:50

原创 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

原创 OrderedDict与dict

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

2021-04-14 22:05:19 6

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

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

2021-04-14 20:05:58 4

原创 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 13

转载 ONNX笔记三

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

2021-04-14 14:11:37 8

转载 Pytorch转ONNX-理论篇

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

2021-04-11 11:31:27 8

转载 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 9

转载 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 6

转载 ONNX笔记二

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

2021-04-10 14:25:09 7

转载 ONNX笔记一

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

2021-04-10 10:55:48 7

原创 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 25 2

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

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

2021-04-03 09:30:07 14

转载 TVM系列 - 图优化 - 算子融合

TVM系列 - 图优化 - 算子融合图优化综述声明一下,本文所有的理解都是基于个人理解。图优化算是一个推理框架前端比较成熟的操作了,一般来说,针对模型做图优化有两个目的(对于通用框架来说,就加速减少计算一个目的了):减少Node的数量,不管是算子融合,还是无效节点去除,共同的目的就是减少整个graph中node的数量,因为对于框架来说,从一个node到另一个node之间就意味着数据的搬运。举个例子,我们知道算子合并最经典的就是将BN层融合到Conv层,我们姑且不论融合后计算量的减少,单单是减少了将

2021-03-26 23:03:17 63

原创 TVM笔记-pass

1. 强拆Relay ir Passfold_const = relay.transform.FoldConstant() # 返回类型passmod = fold_const(mod) # 执行pass2. 函数调用关系图3. IPOinput: IRModuleprocess: pass优化output: IRModule4. pass data structure对于通用数据结构的定义均在目录tvm/ir中,执行pass 是一个module到module的映射pass =

2021-03-26 19:39:00 15

原创 Pytorch中transforms.Compose()的使用

torchvision介绍torchvision是pytorch的一个图形库,它服务于PyTorch深度学习框架的,主要用来构建计算机视觉模型。torchvision.transforms主要是用于常见的一些图形变换。以下是torchvision的构成:torchvision.datasets: 一些加载数据的函数及常用的数据集接口;torchvision.models: 包含常用的模型结构(含预训练模型),例如AlexNet、VGG、ResNet等;torchvision.transforms:

2021-03-22 14:20:32 66

转载 【从零开始学深度学习编译器】深度学习编译器及TVM 介绍

0x1. 为什么需要深度学习编译器?深度学习编译器这个词语,我们可以先拆成两个部分来看。首先谈谈深度学习领域。从训练框架角度来看,Google的TensorFlow和FaceBook的Pytorch是全球主流的深度学习框架,另外亚马逊的MxNet,百度的Paddle,旷视的MegEngine,华为的Mindspore以及一流科技的OneFlow也逐渐在被更多人接受和使用。这么多训练框架,我们究竟应该选择哪个?如果追求易用性,可能你会选择Pytorch,如果追求项目部署落地,可能你会选择TensorFlo

2021-03-20 22:46:01 63

转载 TF、TLT、TRT、DS....等深度学习概念

在讲这些概念之前,我们先扫盲一下啥叫深度学习(Deep Learning)吧,前言深度学习是机器学习的一个分支,其特点是使用几个,有时上百个功能层。深度学习已经从能够进行线性分类的感知器发展到添加多层来近似更复杂的函数。加上卷积层使得小图像的处理性能有了提升,可以识别一些手写数字。现在,随着大型图像数据集的可用性和高性能并行计算卷积网络正在大规模图像上得到应用,从而实现了以前不实用的广泛应用。在这里,我们看到一些实际应用的深度学习是如何被使用的。深度学习擅长的一个领域是图像分类和目标检测,可以用于

2021-03-20 15:47:33 46

原创 OpenCV Mat数据类型指针ptr的使用

cv::Mat::at参考链接:https://blog.csdn.net/github_35160620/article/details/51708659https://blog.csdn.net/guduruyu/article/details/60867547

2021-03-13 09:23:58 16

转载 使用TVM在android中进行Mobilenet SSD部署

所谓TVM,按照正式说法:就是一种将深度学习工作负载部署到硬件的端到端IR(中间表示)堆栈。换一种说法,可以表述为一种把深度学习模型分发到各种硬件设备上的、端到端的解决方案,关于更多TVM的信息大家可以参考TVM主页。我们在端上进行CNN部署的时候,为了最大化的发挥硬件的性能,之前的框架多是用的手工调优的算法Op,如NCNN、Tengine、Feather等等;TVM可谓是另辟蹊径,让框架去自适应的寻找最优或次优的算子Op,这类的框架应该是后续发展的主流。如果大家看过我之前写的博客,也许大概有个印象,一

2021-03-04 23:31:32 48

转载 TVM学习(七)算子

relay算子上一章梳理了一遍TVM前端流程,前端完成了tensorflow算子到TVM算子的转换。这一章CNN网络中最普遍的卷积运算为例,看一下relay算子的表示。在python/tvm/relay/frontend/tensorflow.py文件中convert_map有:_convert_map = {…'Conv2D' : _conv('conv'),…}在_conv函数中会根据layout对weights,inputs,out

2021-02-25 22:39:55 71

转载 TVM学习(六)细读前端

用了几章的篇幅写了一些粗读TVM代码的收获,虽然读了一点皮毛,但是还是掌握了TVM的基本架构和代码组成,算是给以后的精读打下了一点基础吧。从这章开始再从头捋一遍TVM代码,顺序是frontend-build-optimize-lower-target。TVM前端可以适配大多数流行的深度学习框架,比如tensorflow,pytorch,onnx等。这里我选择适配tensorflow的前端代码来看。TVM前端的输入是protoBuf格式的二进制文件,这个文件描述了由tensorflow构建的神经网络的结构

2021-02-25 22:28:49 37

转载 TVM学习(五)schedule

Schedule是和硬件体系结构相关的一些列优化,Halide在其文章中对其做了以下定义:1 When and where should be the value at each coordinate in each function be computed?2 Where should they be stored?3 How long are values cached and communicated across multiple consumers, and when are they in

2021-02-25 19:51:41 32

转载 TVM学习(四)codegen

接着上一章继续深入代码,在BuildRelay中会调用Codegen函数。这个函数实现在src/relay/backend/http://graph_runtime_codegen.cc中。Codegen实现了内存的分配,IR节点到TIR节点的转换,tir图节点的一个调度优化。内存分配由函数relay.backend.GraphPlanMemory来实现,VisitExpr对节点进行遍历并进行节点信息的记录。LowerExternalfunctions完成ir节点到tir节点的转化以及schedule的优化

2021-02-25 15:46:47 36

转载 TVM学习(三)编译流程

VM主要的编译过程如下图:Import:将tensorflow,onnx,pytorch等构建的深度学习模型导入,转化成TVM的中间层表示IR。Lower:将高层IR表示转化成低阶TIR表示。Codegen:内存分配和硬件可执行程序生成。图导入通过一个tensorflow的reception网络来熟悉编译过程,其它深度学习框架也具有类似过程。从TVM官网可以下载tensorflow的编译程序https://tvm.apache.org/docs/tutorials/frontend/from_

2021-02-23 23:56:38 66

转载 TVM学习(二):算符融合

算符融合将多个计算单元揉进一个计算核中进行,减少了中间数据的搬移,节省了计算时间。TVM中将计算算符分成四种:1 injective。一一映射函数,比如加法,点乘等。2 reduction。输入到输出具有降维性质的,比如sum。3 complex-out。这是计算比较复杂的,比如卷积运算等。4 opaque。无法被融合的算符,比如sort。根据以上对算符的不同类型,TVM提供了三种融合规则:...

2021-02-23 23:48:54 65

转载 TVM学习笔记(一)

使用FPGA进行神经网络加速需要编译器的支持,因为一个复杂的神经网络会产生大量的指令,手写指令不能满足通用化要求,费时又费力。编译器依据神经网络的图结构,产生硬件可执行指令序列。从广义上讲,编译器包括了前端和后端,前端主要实现从tensorflow等深度学习框架描述的网络结构形式到新表示的转化,后端完成编译器中间表示到硬件可执行程序的转化。前端对硬件应该是透明的,它的主要挑战在于如何设计出一套通用的中间表示,并且和tensorflow,pytorch等不同深度学习框架进行对接。更复杂的编译器前端还包含了很多

2021-02-22 23:16:02 69

转载 TVM代码学习 -- 代码生成流程(二)

接上文,已经粗略梳理了relay.build生成代码的流程,本文介绍另一种生成代码方式tvm.build的流程。首先以官方提供的一个向量相加程序为例简单熟悉下Tensor Expression和lower后的代码,tvm版本都是0.7dev。简单例子https://link.zhihu.com/?target=https%3A//tvm.apache.org/docs/tutorials/get_started/tensor_expr_get_started.html%23sphx-glr-tutori

2021-02-21 00:02:16 50

转载 TVM代码学习 -- 代码生成流程(一)

本文主要介绍TVM针对不同后端部署平台生成运行代码的流程,TVM可以通过两种方式生成代码:tvm.build 和 relay.build。两种方式流程略有不同,tvm.build 主要针对单一算子进行编译优化,relay.build 是针对整个网络计算图进行编译优化。先介绍relay.build,示例代码如下所示。relay.buildonnx_model = onnx.load('model/mobilenetv2.onnx')mod,params = relay.frontend.from_onn

2021-02-20 22:52:42 154

转载 一步一步解读神经网络编译器TVM(一)——一个简单的例子

@TOC前言这是一个TVM教程系列,计划从TVM的使用说明,再到TVM的内部源码?为大家大致解析一下TVM的基本工作原理。因为TVM的中文资料比较少,也希望贡献一下自己的力量,如有描述方面的错误,请及时指出。那啥是TVM?简单来说,TVM可以称为许多工具集的集合,其中这些工具可以组合起来使用,来实现我们的一些神经网络的加速和部署功能。这也是为什么叫做TVM Stack了。TVM的使用途径很广,几乎可以支持市面上大部分的神经网络权重框架(ONNX、TF、Caffe2等),也几乎可以部署在任何的平台,

2021-02-17 23:39:32 101

转载 TVM: Deep Learning模型的优化编译器(强烈推荐, 附踩坑记录)

(前排提醒,本文的人文内容部分稍稍带有艺术加工,请保持一定的幽默感进行阅读)关注我最近想法的同学应该知道我最近都在把玩TVM,今天终于使用TVM得到了非常满意的结果,而专栏也很长时间没更新了,于是来安利(水)一篇。本来可能用不到TVM,项目其实进展的很顺利,我们初始的tensorflow模型在android端得到了满意的latency,我也可以照常一边修炼我的仙,继续和有奶大定律, 自由单子, Kan-Extension等邪魔外道搏斗…一边稳稳的推进项目进度。无奈scientist一意孤行要上Pyto

2021-02-14 16:15:44 83

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

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

2019-05-25

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

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

2019-05-25

python实现UDP通信

发表于 2019-06-20 最后回复 2019-12-30

C++中getline(cin,s)string字符串的输入,可以输入空格

发表于 2019-06-19 最后回复 2019-06-20

空空如也

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

TA关注的人 TA的粉丝

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