- 博客(30)
- 资源 (1)
- 收藏
- 关注
原创 scatterlist
在内核驱动程序的很多代码中,都能够看到类似sgdma的内容,sgdma全称为Scatter/Gather DMA(散列/收集 DMA),内核中抽象了scatterlist和sg table用来描述和管理这种需要做散列和收集的DMA缓冲区。在内核中设计scatterlist,主要出于两方面的原因,从硬件层面来说,目前很多DMA控制器都支持硬件的SG DMA模式,由开发人员在内存中构建一个链式的DMA缓冲区描述符(Buffer Descriptor, BD),DMA控制器根据这个链式BD进行一对多、多对一或者多
2023-05-07 20:39:13
1938
原创 TensorRT部署YOLOv5(05)—图像推理
在上一篇文章中,对构建TensorRT引擎进行了介绍,本文将详细介绍如何使用Python API通过TensorRT引擎加速,实现单幅图像的推断
2023-05-07 20:28:58
892
2
原创 TensorRT部署YOLOv5(04)—构建TensorRT引擎
在上一篇文章中,已经对什么是TensorRT,使用TensorRT进行深度学习模型部署推理的完整流程进行了初步的介绍。本文将详细介绍TensorRT引擎的构建,包括tf2onnx的使用、trtexec命令行的使用和重要参数介绍、如何使用Python API进行TensorRT引擎构建等。
2023-03-23 23:02:52
539
原创 TensorRT部署YOLOv5(03)-TensorRT介绍
TensorRT是本专栏中最重要的内容,绝大多数内容将围绕TensorRT来展开,本文对TensorRT进行一个基本的介绍,让不熟悉TensorRT的读者能够对TensorRT是什么,如何使用它有一个较为全面的认识Nvidia TensorRT是一个用于Nvidia GPU上高性能机器学习推理的SDK,对开发者屏蔽了模型在GPU上推理运行的CUDA计算细节,用户只需要通过一套简介易用的Python/C++ API接口,即可方便的将模型在GPU上进行加速推理。
2023-01-09 18:18:04
857
原创 TensorRT部署YOLOv5(02)-环境介绍
本文对TensorRT部署YOLOv5模型的整体环境配置及软件包进行介绍。实验环境主要从主机和JestonNano两方面进行介绍,在主机端完成模型训练并转换为onnx中间模型表示,在JestonNano进行onnx模型转换为TensorRT引擎、图片/视频加载、编解码处理、模型推理、后处理等工作主机是一台Windows11的台式机,使用Tensorflow的GPU版进行模型训练,生成模型文件,由于在windows操作系统上安装onnx存在一些问题,比较麻烦,不想折腾,因此我选择在Ubuntu虚拟机上进行Te
2022-12-29 10:16:57
421
原创 TensorRT部署YOLOv5(01)-Overview
本系列对在Nvidia边缘计算平台进行深度学习模型部署进行一个全面的介绍,主要围绕TensorRT深度学习加速推理框架,以YOLOv5目标检测任务为例,以Jeston Nano为目标计算平台,对环境搭建、模型量化、加速推理、性能评估、后处理加速等细节进行详细说明,并给出C++和Python分别进行模型部署推理的代码实例阅读本系列,您可以了解到Jeston Nano计算平台以及相关软件资源介绍什么是TensorRT?什么是TensorRT引擎?
2022-12-15 20:06:46
296
原创 VitisAI(05) Vitis Flow
本文承接VitisAI(04) PetaLinux Flow,介绍使用Xilinx的Vitis工具利用Vivado生成的design_1_wrapper.xsa文件以及PetaLinux编译的rootfs和内核镜像,生成制作好的SD卡镜像文件sd_card.img
2022-07-06 22:23:49
835
4
原创 Arm Cortex-M 高效神经网络计算
本文源自ARM CMSIS-NN项目的一篇论文”CMSIS-NN: Efficient Neural Network Kernels for Arm Cortex-M CPUs”。CMSIS-NN是一种高效的内核,用于将最大化性能和最小化内存占用的神经网络应用于Arm Cortex-M处理器上。基于CMSIS-NN核的神经网络在推理运行时间上提高4.6倍,在能效上提高4.9倍......
2022-07-01 10:43:51
1084
原创 Vitis AI(04) PetaLinux Flow
本文承接Vitis AI(03) Vivado Flow,介绍使用Xilinx的PetaLinux工具将Vivado生成的design_1_wrapper.xsa文件创建PetaLinux并编译生成Linux镜像和rootfs的过程
2022-06-30 18:10:48
880
5
原创 Vitis AI(03) Vivado Flow
从本文开始,将正式介绍VitisAI的工作流程。第一个流程就是Vivado Flow,在Vivado开发环境中创建一个硬件平台,为后续的PetaLinux和Vitis提供基础。Vivado中的大部分的内容都是在Block Design中完成的,核心目标是创建一个Zynq UltraScale MPSoC的运行硬件环境,以及为DPU的正常运行提供硬件支持。这里需要注意,较老版本的VitisAI教程中,需要在Vivado中导入DPU的IP核,这种做法已经成为历史,本文介绍的流程中,在Vivado中是不需要导入D
2022-05-26 14:13:45
1629
8
原创 图像金字塔
图像金字塔对于执行多尺度的编辑操作非常有效,能够在保持图像细节的同时进行融合。Peter J. Burt等人在1983年的”The Laplacian Pyramid as a Compact Image Code”中提出了拉普拉斯金字塔用于图像压缩,后来该方法被用于图像融合效果很好本文首先对拉普拉斯金字塔进行介绍,然后对拉普拉斯用于图像融合进行介绍Laplacian Pyramid拉普拉斯金字塔通过将原始图像减去一个低通滤波的图像来消除像素间的相关性,得到一个净数据压缩,仅保留了差异。将这种做
2022-05-26 11:25:26
954
1
原创 boxfilter快速窗口求和
在很多图像处理任务中,需要对局部图像数据进行窗口运算,许多运算都需要获得局部区域像素的均值和方差,这些计算都离不开求和运算。我在研究引导滤波时,发现何凯明在其提供的引导滤波matlab参考代码中,使用了boxfilter的快速计算方法,能够以的时间复杂度对矩阵进行局部快速求和运算本文对以python代码为例,对boxfilter的运算细节进行可视化分析,使读者对整个计算过程有一个直观的感受,然后将正常的卷积局部求和操作与boxfilter进行性能比较运算过程分析首先对boxfilter的输入和输
2022-05-26 11:16:02
227
原创 Vitis AI(02) 环境与资源
在第一篇文章”VitisAI-01-Overview”中,我简要介绍了什么是VitisAI、VitisAI相关的的技术栈、我的开发环境是什么样的以及需要安装下载哪些资源。本文对我的开发环境以及所需资源的下载安装进行一个更为详细的说明环境介绍我使用的台式机操作系统是Windows11,我采用的是在虚拟机中搭建VitisAI的方式来进行开发和研究。由于VitisAI开发需要PetaLinux编译,而目前PetaLinux仅支持Linux操作系统,而我并不使用Linux作为我的主操作系统,因此选择在虚拟机
2022-05-18 13:45:24
1024
原创 论文精读-Resnet
何凯明等人在2015年的”Deep Residual Learning for Image Recognition”这篇论文中提出了Resnet网络架构,是CNN图像领域一个重要的里程碑,后续多年直至如今在图像分类领域仍然有超过半数的网络使用着Resnet或其变种。Resnet提出了一种残差块结构,解决了在深度神经网络中由于梯度消失或梯度爆炸导致的网络难以训练的问题,以及更深的层次反而导致网络性能下降问题深度神经网络的训练问题梯度爆炸和梯度消失深度神经网络可以设置很深的层次结构,深层结构可以得到
2022-04-28 16:20:37
3914
原创 Vitis AI(01) Overview
研究Vitis AI好几个月了,终于实现了在VitisAI平台上部署神经网络模型并成功运行的目标,搞清楚了在整个全流程中如何做自定义,这里的自定义主要包括以下几个方面硬件平台自定义:这里的硬件平台指的不是PCB板级自定义,而是在Xilinx FPGA芯片上的硬件工程自定义。由于不同人不同项目使用的FPGA芯片架构、型号各有不同,为不同的FPGA芯片准备一个DPU可以运行的硬件平台是非常重要的 DPU自定义:模型最终依赖DPU运行,而DPU的编译依赖FPGA芯片资源,不同FPGA芯片资源能力不同,因此需
2022-04-28 15:56:42
2683
原创 FreeRTOS+Trace(04) Xilinx Microblaze平台使用FreeRTOS+Trace
本章节以 Xilinx Microblaze 平台为例,介绍如何在该目标平台上使用 FreeRTOS+Trace 的快照记录功能。所使用的 Xilinx SDK 版本为 2018.2,并在 SDk 中已经创建好了一个目标平台为 Microblaze 的 FreeRTOS Hello World 模板工程,如下图所示在 Xilinx SDK 工程中使用 FreeRTOS+Trace 有几个设置步骤,首先需要将 TraceRecorder 库中的部分源文件和头文件导入到已创建好的工程中,然后对Trac.
2022-04-28 15:40:41
1116
原创 FreeRTOS+Trace(03) 在FreeRTOS上使用TraceRecorder
FreeRTOS Trace原理Tracealyzer 本身只提供了图形化界面的显示以及从 TraceRecorder 接收事件的形式, TraceRecorder 提供的是目标平台以固定形式记录事件的能力,但是具体要记录什么事件,以及何时进行记录,是由目标平台来定义的。在 FreeRTOS 中,在很多关键代码中插入了形如 traceXXX 的宏函数,这些宏函数被作为一个插槽可以被第三方库来使用,例如下图在 FreeRTOS 的 systick 中,通过 traceINCREASE_TICK_.
2022-04-25 14:44:11
2446
原创 FreeRTOS+Trace(02) Tracealyzer
Percepio 提供了一个桌面端应用程序 Tracealyzer,用于在 PC 机上对导出后的跟踪数据进行可视化分析。同时安装 Tracealyzer 后,在其安装路径下也会携带一个需要在目标平台编译构建的跟踪库 TraceRecorder。下载安装Tracealyzer 的下载地址为https://percepio.com/downloadform/,由于Percepio 提供的 Tracealyzer 支持多种 RTOS,因此在下载时需要注意选择目标系统为 FreeRTOS,输入相关信息就可.
2022-04-25 13:31:20
1043
原创 FreeRTOS+Trace(01) 概述
多任务的实时操作系统例如 FreeRTOS,为了满足实时性的要求,在任务的时间片划分、切换等方面做了非常严格和复杂的控制。当应用场景中多任务的功能、时序、交互较为复杂时,要分析系统整体的运行情况是一件非常棘手的事情。由于多任务操作系统存在切换代码堆栈空间的操作,因此通过各种调试器的断点、单步等调试手段无法进行函数执行跟踪,也无法进行实时性调试。通过调用系统 API 获取任务各项状态并打印输出的方式也无法保证实时性。通常的调试手段是将系统运行各种信息暂存在 RAM 中,并在需要的时刻导出为文件 (dump),
2022-04-25 12:33:10
1743
原创 Python读取csv注释
Python的pandas库处理csv文件非常方便,开发过程中经常会用到csv文件,例如将csv中的数据转化为二进制、将csv文件转化为json等。由于csv本身是以列表的形式组织数据的,如果想要额外的加入一些描述信息,比如版本号等,应该如何做呢?
2022-03-11 10:35:27
2509
原创 Microblaze优化选项
Microblaze提供了一些优化选项,正确理解这些选项的含义以及作用对于开发过程有很多帮助,本文主要总结介绍Microblaze Configuration Wizard中的选项内容预定义配置根据具体使用场景的不同,Microblaze提供了一些预定义的配置选项供用户选择 Microcontroller Preset Real-time Preset Application Preset Minimum Area Maximum Performance
2022-03-11 10:31:26
1855
原创 Python通过注册表获取串口列表
工作中需要使用CameraLink接口自带的串口与设备进行通信,DALSA采集卡软件中可以将CameraLink接口里的串口映射到一个COM口,但是在使用第三方串口库(nodejs的serialport、python的serial)提供的获取串口列表接口,都无法枚举到这个映射的COM口,切Windows的设备管理器也无法识别到该COM口。本文记录一种以访问注册表的方式成功获取到该COM口的方法
2022-03-11 10:25:14
4319
原创 Python利用struct进行二进制文件或数据流操作
Python利用struct进行二进制文件或数据流操作在实际工作场景中,特别是在嵌入式开发过程中,经常需要和二进制操作打交道,这里举两个典型例子设备上的一些配置参数通常是以二进制的形式保存在Flash等非易失存储芯片中,而配置参数的格式与内容编辑工作通常是在PC上中完成,将生成的xxx.bin文件下载到设备并写入Flash中,设备启动后从Flash固定地址读取配置到内存中使用。如果能够在PC上以某种脚本的形式方便的对二进制文件的格式和内容进行编辑,或者将二进制文件解析为方便阅读的格式,可以提升很多工
2021-05-16 11:19:38
2927
原创 图片压缩与合并
概述Web前端需要做的漂亮,必定引入很多图片和图标来美化界面,但是嵌入式设备Flash有限,总共就那么几M空间,可用于Web资源存放区域很受限制,本文记录一种用于Web前端的图片压缩与合并方法,将多个制作好的图片和图标合并到一张图片中,既减小了占用Flash大小,又使得浏览器一次加载便可加载到所有图片CSS Sprite Generator要使用一个在线图片压缩合并工具,CSS Sprite Gen
2017-07-25 19:44:01
2870
原创 Linux启动分析-init进程与app启动
概述本文通过简要分析init进程源码,梳理其处理流程,重点关注init进程如何启动应用程序,总结启动脚本文件的编写思路init进程源码分析init进程是linux内核启动的第一个进程,怎么知道的?从内核源码linux-2.6.xxx/init/main.c代码的kernel_init()函数分析,可以发现,内核会根据uboot传入的参数来启动第一个进程,一般都是init怎么启动的呢,调用kernel
2017-07-15 13:12:25
1637
原创 bootstrap源码定制-环境搭建
概述项目中开发web,对于bootstrap,我想说确实好用,但是有些时候要做一些个性化定制样式,比如按钮大小、颜色,表格样式等等,在全局使用bootstrap的同时,还要有自己的定制样式,有三种方法可以做到:引用css层叠样式表时,先引用bootstrap.min.css,再引用私有样式表文件private.css,这样自定义的样式会覆盖bootstrap本身的样式到bootstrap官网,进
2017-07-14 00:07:48
2203
原创 linux网络——iptables与网关
概述最近做关WiFi家庭网关项目,接触到很多新的知识,本文对linux的iptables、网关中的NAT转换、DMZ、端口映射和端口触发等概念进行总结linux iptableslinux iptables是linux2.6内核以后使用的一套网络工具,对其进行合理的配置,可实现防火墙、NAT转换等网关功能好,那么iptables怎么配置,这些配置是如何实现的呢iptables配置方法应用层的ipta
2017-07-12 22:19:20
1670
原创 内核态与用户态通信方式——Netlink
内核态与用户态通信方式Linux下内核空间与用户空间进行通信的方式主要有system call、sysctl、procfs、模块参数、debugfs、relayfs、sysfs和netlink等。Why NetlinKfull-duplex模块参数、sysfs、procfs、debugfs和relayfs都是基于文件系统,用于内核向用户发送消息;sysctl和system call是用户向内核发
2017-04-22 16:45:08
2982
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人