当前位置:首页 > edgeboard
  • 详解百度大脑EdgeBoard出色的视频处理技术

    背景介绍 视频处理是人工智能应用中的一个重要方向,对于一款端上部署的AI加速产品,其视频接入能力是产品技术实力的重要体现,同时也直接影响用户的产品体验。端上的嵌入式设备,受制于本身的CPU等硬件资源,同时支持多种视频设备及多种视频格式是极大的挑战。 EdgeBoard是百度基于FPGA打造的嵌入式AI解决方案,能够提供强大的算力,并支持定制化模型,适配各种不同的场景,并大幅提高设备的AI推理能力,具有高性能、高通用、易集成等特点。EdgeBoard作为一款面向各个层次的AI开发者的硬件平台,兼顾了多种视频输入,包括MIPI、BT1120、USB摄像头、IPC(IP Camera,网络摄像头)、GigE工业摄像头,这极大地体现出EdgeBoard在视频处理上出色的技术实力,而同时支持如此多的视频接入设备在一般的AI端产品上也是不常见的。 本文将详细介绍EdgeBoard上的视频处理方案,如何兼顾效率和通用性,在二者之间取得平衡,最大程度上满足用户的需求。 Linux V4L2结构 内核V4L2模块 Linux系统发展至今,以其优越的跨平台特性和扩展移植性在嵌入式操作系统领域占据很大的份额,EdgeBoard采用的是Xilinx PetaLinux工具打造的Linux内核,操作系统采用的是RootFS,如果用户需要Ubuntu操作系统,可以直接在Xilinx论坛上获得arm64 Ubuntu操作系统。 Video4Linux2(简称V4L2)是Linux下关于视频采集相关设备的驱动框架,为驱动和应用程序提供了一套统一的接口规范。支持三类设备,分别会在/dev目录下产生不同的设备节点: 1.视频输入输出设备(video capture device,video output device),分别是提供视频捕获功能的摄像头类型设备和提供视频输出功能的设备,对应的设备名为videoX。这是我们最常用的一种设备类型。 2.VBI设备(Vertical Blanking Interval),对VBI数据进行控制、发送或抓取的设备,对应设备名vbiX。 3. radio设备,提供FM/AM发送和接收的设备,对应设备名radioX V4L2在Linux系统中的结构图如下:   从图中可以看出,驱动的框架层次分明,最上层通过字符设备提供video和media两种控制接口,分别从视频流控制(video)和媒体子设备控制(media)两种不同的角度抽象出操作接口。中间内核驱动层通过三层设备驱动分别从视频抽象,V4L2设备功能定义,子设备功能定义三个层面展开,模块化的设计提供了非常完善的扩展性。最下方是硬件层,除了提供常用摄像头传感器的功能外,对于常用的视频转换也有很好的支持。 在应用层的软件支持也非常丰富,比如广泛使用的FFmpeg、Gstreamer、LiVes、MPlayer等对本地视频设备的支持也都是通过V4L2提供的接口实现的。 Xilinx V4L2驱动结构 深入理解V4L2框架对于FPGA视频方案的灵活配置有很大的帮助作用,也方便FPGA开发人员快速验证视频功能。本节以Xilinx视频处理子系统为例,介绍一套完整的V4L2内核功能的实现,如下图。   结合上一节提到的V4L2结构图可以看出V4 L2内核对应了全部视频框架的内容。中间部分,xilinx通过xvip_dma结构实现了整体的video_device功能,给用户层提供必要的控制设备接口(右侧用户层接口);左侧部分,是内核将所有的xilinx视频相关设备组合成xvip_composite_device,即v4l2_device,通过该模块可以扩展具体的子设备功能,即v4l2_subdev,包括TPG、VTC、RGB2YUV、scaler等等;右侧部分,是用户层的接口,用户层调用接口实现对视频设备的操作;顶层部分,为了提高数据搬运的效率使用了DMA设备功能,即xilinx_dma_device。下层部分,对于内部数据的管理,使用了v4l2统一抽象提供的vb2_queue、vb2_buffer等模块实现。 V4L2结构应用实例解析 这里以在EdgeBoard上使用的MIPI摄像头(MIPI开发介绍见https://www.csdn.net/article/a/2019-08-21/15979781)为例介绍V4L2的具体应用。 MIPI摄像头视频通路 对MIPI摄像头的支持采用了xilinx video框架,符合标准的驱动以及和硬件结合的流程。具体的实现为:硬件上采用FPGA的IP实现视频通路上的各种视频预处理,内核驱动模块使用vipp对应的功能,应用层通过/dev/media节点将这些子设备之间的连接关系进行关联,通过/dev/video控制视频的传输及视频抓取。   V4L2子设备驱动(摄像头驱动)的编写方法 从上文可以看出,虽然利用已有的IP和驱动资源,可以快速搭建MIPI摄像头的数据接入功能,但还缺少对于摄像头本身的参数控制功能等,这部分功能的实现是在驱动模块完成。本节将介绍一下此类驱动的结构和开发流程。 相对于实现一个完整的V4L2驱动功能比较庞大,针对摄像头驱动的实现相对简单了许多,只需要实现V4L2的子设备驱动即可,因为大部分功能已经在video_device里实现了。详细的子设备驱动结构图如下   结合前文的整体结构图,这里的核心是实现一个v4l2_subdev结构,即填充其内部各操作接口结构体,其中核心是v4l2_subdev_ops,通过该接口实现从用户层对其配置各种参数,以对视频流的控制。media_entity目地是实现各个v4l2_subdev之间的连接通路。用户层对mediaX设备的操作都需要这个结构的支持。 基于V4L2的软件开发 应用层的软件开发,推荐使用gstreamer或者opencv videocapture,opencv的底层实现可能依赖gstreamer,如果这些不能满足读者的要求,需要更详细的参数控制,或者软件环境不具备这两种支持,可以考虑直接操作v4l2设备。如下将介绍V4L2 软件层面的具体方法。 V4L2通常支持三种不同IO访问方式(其他内核里支持的方式暂不讨论),包括 1.read/write基本IO访问方式,read方式读取一帧数据,数据需要从内核空间传输到用户空间,增加了内存访问的开销,对于图像类的应用效率不高 2.内存映射方式,这是在内核空间开辟的缓冲区,这些缓冲区可能支持DMA功能,这样极大的提高了数据从设备搬运到内存的效率。用户只需要使用mmap()系统调用将其映射到用户空间后,可以直接使用。这种方式支持的设备很多。 3.用户空间缓冲区方式,这是在用户空间开辟的缓冲区,再把缓冲区的指针告诉内核,这种方式虽然也能减少内存拷贝,但是内核驱动或者硬件设备在处理这些用户空间的地址会麻烦很多,不是所有的设备都会支持 这里以第二种方式详细说明具体使用过程,参考如下流程图   包括这几个步骤: 1、 使用open()打开设备 2、 使用ioctl()进行初始化参数设置,一般包括查询设备能力(VIDIOC_QUERYCAP),设置视频捕获相关参数,如帧率控制(VIDIOC_S_PARM)、图像的窗口尺寸(VIDIOC_S_CROP)、像素点的格式和宽高(VIDIOC_S_FMT)等,详细支持的参数可以使用上面介绍的工具进行查询 3、 使用ioctl()申请帧缓冲(VIDIOC_REQBUFS),并查询申请到的缓冲区的信息(VIDIOC_QUERYBUF) 4、 使用mmap()对申请到的缓冲区进行内存映射,保存映射得到的地址 5、 使用ioctl()把帧缓冲进行入队操作(VIDIOC_QBUF) 6、 使用ioctl()开始视频流进行捕获(VIDIOC_STREAMON) 7、 使用selet()等待接收到数据 8、 使用ioctl()取出帧缓冲即出队操作(VIDIOC_DQBUF) 9、 进行数据处理, 10、 重复帧缓冲入队操作,如此循环 11、 退出时,停止采集工作(VIDIOC_STREAMOFF),使用unmap()和close()释放资源 用户层工具介绍(技术小福利) 上文介绍完EdgeBoard中视频处理的完整方案,现介绍V4L2开发中常用的调试工具,有助于提升开发效率。 得益于Linux丰富的开源资源,操作v4l2设备的应用层工具也非常多。默认的EdgeBoard PetaLinux系统已经配置好常用的几个工具,特此介绍给大家。v4l-utils是专门控制v4l设备的一系列命令工具集,包含以下实用程序: 1. v4l2-ctl:用来全方位的配置v4l2设备,对于内核模块暴露出来的接口,几乎都有支持。特别是软件开发时候使用的ioctl控制命令,也可以使用该工具来直接设置,帮助我们调试驱动或软件。 2. v4l2-compliance:兼容性工具,用于测试v4l设备驱动程序的v4l2 API兼容性,会打印出来各个ioctal命令接口是否有支持。多用在v4l应用软件开发过程中。 3.v4l2-dbg:直接获取和设置v4l2设备寄存器的工具,这依赖于设备驱动的支持。可以使用v4l2-compliance查看VIDIOC_DBG_G/S_REGISTER命令接口是否可用,在可用的情况下,可以使用该工具来测试。 4.v4l2-sysfs-path:检查平台已经加载的v4l2设备以及相应的设备节点。 5. media-ctl:媒体设备的控制工具,帮助我们在v4l2各个子设备间建立连接。 gstreamer是Linux平台广泛应用的视频流工具,特别是嵌入式平台,良好的软件架构及衍生出其丰富的扩展插件对不同硬件平台都具有良好的支持。 这里给出一个命令行示例,就可以了解它的独特之处了,如下: gst-launch-1.0 v4l2src device=/dev/video4 ! video/x-raw,width=1280,height=720 ! videorate ! image/jpeg,framerate=1/4 ! multifilesink location="frame%d.jpg" index=100 这条命令的意思是打开v4l2视频源即/dev/video4这个USB视频设备,抓取其1280x720宽度的原始jpeg图片流按照4秒1帧的速度保存到本地文件,命名格式为frame100.jpg开始 总结 本文以MIPI摄像头为例介绍了在EdgeBoard中采用V4L2结构的视频处理方案,得益于V4L2结构的灵活性和可扩展性,像BT1120、USB摄像头等也采用类似的方案,实现了对多视频接入方案的支持。对于需要视频接入方案的用户,可以直接购买EgdeBoard产品,实现视频接入的即插即用。

    时间:2020-05-07 关键词: edgeboard

  • AI边缘计算平台EdgeBoard如何实现灵活、快速部署?

    AI边缘计算平台EdgeBoard如何实现灵活、快速部署?

    人工智能领域边缘侧的应用场景多种多样,在功能、性能、功耗、成本等方面存在差异化的需求,因此一款优秀的人工智能边缘计算平台,应当具备灵活快速适配全场景的能力,能够在安防、医疗、教育、零售等多维度行业应用中实现快速部署。 百度大脑EdgeBoard嵌入式AI解决方案,以其丰富的硬件产品矩阵、自研的多并发高性能通用CNN(Convolution Neural Network)设计架构、灵活多样的软核算力配置,搭配移动端轻量级Paddle Lite高效预测框架,通过百度自定义的MODA (Model Driven Architecture)工具链,依据各应用场景定制化的模型和算法特点,向用户提供高性价比的软硬一体的解决方案,同时和百度大脑模型开发平台(AIStudio、EasyDL)深度打通,实现模型的训练、部署、推理等一站式服务。 1. EdgeBoard计算平台的多产品矩阵 EdgeBoard是基于Xilinx 16nm工艺Zynq UltraScale+ MPSoC的嵌入式AI解决方案,采用Xilinx异构多核平台将四核ARM Cortex-A53处理器和FPGA可编程逻辑集成在一颗芯片上,高性能计算板卡上搭载了丰富的外部接口和设备,具有开发板、边缘计算盒、抓拍机、小型服务器、定制化解决方案等表现形态。 EdgeBoard计算卡产品可以分为FZ9、FZ5、FZ3三个系列,是基于Xilinx XCZU9EG、XAZU5EV、XAZU3EG研发而来,分别具有高性能,视频硬解码,低成本等特点,同时还有不同的DDR容量版本。以上三个版本PS侧同样采用四核Cortex-A53 、双核Cortex-R5、以及GPU Mali-400MP2等处理器配置,PS到PL的接口均为12x32/64/128b AXI Ports,主要的区别在于PL侧拥有的芯片逻辑资源大小不同,可参见下表。 采用上述三种标准产品的硬件板卡或者一致的硬件参考设计,用户可无缝适配运行EdgeBoard公开发布的最新版标准镜像,也可根据自身项目需求定制相关的硬件设计,并进一步根据性能、成本和功耗要求,以及其他功能模块的集成需求,对软核的算力和资源进行个性化配置。(多款开发板适配视频教程:https://ai.baidu.com/forum/topic/show/957750) 2. 高性能的通用CNN设计架构 2.1 CNN加速软核的整体设计框架 EdgeBoard的CNN加速软核(整体的加速方案称之为软核)提供了一套计算资源和性能优化的AI软件栈,由上至下分别包括应用层软件API、计算加速单元的SDK调度管理、Paddle Lite预测框架基础管理器、Linux操作系统、负责设备管理和内存分配的驱动层和CNN算子的专用硬件加速单元,用来完成卷积神经网络模型的加载、解析、优化和执行等功能。 这些主要组成部分在软件栈中功能和作用相互依赖,承载着数据流、计算流和控制流。基于上图设计框架,EdgeBoard的AI软件栈主要分为4个层次:  应用使能层 面向用户的应用级(APP)封装,主要是面向计算机视觉领域提供图像处理和神经网络推理的业务执行API。  执行框架层 Paddle Lite预测框架提供了神经网络的执行能力,支持模型的加载、卸载、解析和推理计算执行。  调度使能层 SDK调度使能单元负责给硬件派发算子层面的任务,完成算子相应任务的调度、管理和分发后,具体计算任务的执行由计算资源层启动。 计算资源层 专用计算加速单元搭配操作系统和驱动,作为CNN软核的计算资源层,主要承载着部分CNN算子的高密度矩阵计算,可以看作是Edgeboard的硬件算力基础。 2.2 CNN算子的加速分类 专用计算加速单元基于FPGA的可编程逻辑资源开发实现,采用ARM CPU和FPGA共享内存的方式,通过高带宽DMA(Direct Memory Access)实现二者数据的高速交互,共享内存也并作为异构计算平台各算子数据在CPU和FPGA协同处理的桥梁,减少了数据在CPU与FPGA之间的重复传输。此外,CNN算子功能模块可直接发起DDR读写操作,充分发挥了FPGA的实时响应特性,减少了CPU中断等待的时间消耗。 根据CNN算子的计算特点,EdgeBoard的算子加速单元可划分为如下两类: 复杂算子加速单元 顾名思义,是指矩阵计算规则较为复杂,处理数据量较多,由于片上存储资源限制,通常需要多次读写DDR并进行分批处理的算子加速单元。 (1) 卷积(Convolution):包含常规卷积、空洞卷积、分组卷积、转置卷积,此外全连接(Full Connection)也可通过调用卷积算子实现。 (2) 池化(Pooling):包含Max和Average两种池化方式。 (3) 深度分离卷积(Depth-wise Convolution):与Pooling的处理特点类似,因此复用同样的硬件加速单元,提高资源利用率。 (4) 矩阵元素点操作(Element-wise OP):可转换为特定参数的Pooling操作,因此复用同样的硬件加速单元,提高资源利用率。 (5) 归一化函数(L2-Normalize):拥有较高处理精度,且实现资源最优设计。 (6) 复杂激活函数(Softmax):与Normalize处理特点相似,复用同样的硬件加速单元和处理流程,提高资源利用率。 通路算子加速单元 通路算子是指在复杂算子加速单元的计算数据写回DDR的流水路径上实现的算子,适合一些无需专门存储中间结果,可快速计算并流出数据的简单算子。 (1) 各类简单激活函数(Relu, Relu6, Leaky-Relu, Sigmoid, Tanh):基本涵盖了CNN网络中常见的激活函数类型。 (2) 归一化(Batch norm/Scale):通常用于卷积算子后的流水处理,也可支持跟随在其他算子后的流水处理。 另外一种分类方式,是根据CNN网络里的算子常用程度划分为必配算子和选配算子,前者指CNN软核必需的算子单元,通常对应大部分网络都涉及的算子,或者是芯片资源消耗极少的算子;后者指CNN软核可以选择性配置的算子单元,通常是特定的网络会有的特定算子。这样划分的好处是,用户根据MODA工具链自定义选择,减少了模型中无用算子造成的逻辑资源的开销和和功耗的增加。 必配算子:Convolution, Pooling, Element-Wise, Depth-Wise Convolution, BN/Scale, Relu, Relu6 选配算子:Normalize, Softmax, Leaky-Relu, Sigmoid, Tanh 2.3 卷积计算加速单元的设计思路 作为CNN网络中比重最大、最为核心的卷积计算加速单元,是CNN软核性能加速的关键,也占用了FPGA芯片的大部分算力分配和逻辑资源消耗。下面将针对EdgeBoard卷积计算加速单元的设计思路进行简要介绍,此章节也是理解CNN软核算力弹性配置的技术基础。 每一层网络的卷积运算,有M个输入图片(称之为feature map,对应着一个输入通道),N个输出feature map(N个输出通道),M个输入会分别进行卷积运算然后求和,获得一幅输出map。那么需要的卷积核数量就是M*N。 针对上述计算特点,EdgeBoard的卷积单元采用脉动阵列的数据流动结构,将数据在PE之间通过寄存器进行打拍操作,可以实现在第二个PE计算结果出来的同时完成和前一个PE的求和。这样可以使数据在运算单元的阵列中进行流动,减少访存的次数,并且结构更加规整,布线更加统一,提高系统工作频率,避免了采用加法树等并行结构所造成的高扇出问题。 因此,如上图所示,我们可以分别从Feature Map和Kernel两个维度去定义脉动阵列的并行结构。从Feature Map的角度,纵向的行与行直接卷积窗口相互独立,也就是输出的每行之间所对应的数据计算互不干扰,在此维度定义的多并发计算称之为Window维度的并行度。从Kernel的角度,为了达到计算结果的快速流出减少片上缓存占用,我们设计了每个Kernel核之间的多并发计算,称之为Kernel维度的并行度。以上两个维度同时并发既可以提高整体并行计算效率,也充分利用了脉动阵列的数据流水特性。 2.4 卷积计算加速单元的通用性扩展 前一章节详细介绍了基于PL实现的卷积计算加速单元的设计原理,那么如果是由于芯片的SRAM存储资源不够而导致的CNN网络参数支持范围较小,EdgeBoard将如何拓展CNN软核的网络支持通用性? 我们可以利用灵活的SDK调度管理单元提前将Feature Map或者Kernel数据进行拆分,然后再执行算子任务的下发。 一条滑窗链的Feature Map数据不够存储 SDK可以将一条滑窗链的Feature Map数据分成B块,并将分块数B和每个块的数据量告诉卷积计算加速单元,那么后者则可以分批依次从DDR读取B次Feature Map数据,每次的数据量是可以存入到Image SRAM内。 Kernel的总体数据不够存储 SDK可以将Kernel的数量分割成S份,使得分割后的每份Kernel数量可以下发到PL侧的Filter SRAM中,然后SDK分别调度S次卷积算子执行操作,所有的数据返回DDR后,再从通道(Channel)维度做这S次计算结果的数据拼接(Concat)即可。不过要注意的是,我们的Filter SRAM虽然不需存储所有Kernel的数据量,但至少要保证能够存储一个Kernel的数据量。 由此看来,即使EdgeBoard三兄弟中最小的FZ3拥有极其有限的片上存储资源,也是能够很好地完成大多数CNN网络的参数适配。 3.软核算力的弹性配置 Edgeboard的CNN软核除了公开发布的标准版本外,还可以由用户根据自身模型需求和FPGA芯片选型,进行CNN卷积计算单元算力的定制化配置。配置算力的两个关键指标包括Window维度并行度和Kernel维度并行度,具体含义可参考2.3章节,此处不再赘述。 我们以卷积计算加速单元的核心矩阵乘加运算消耗DSP硬核(Hard core)的个数作为CNN软核核心算力的考察指标。当然,这并不包括卷积前处理、后处理模块,以及其他算子加速单元或者用户自定义功能模块所消耗的DSP数量,因此这并不是整个解决方案在FPGA芯片内部的DSP资源消耗。我们的设计可以支持Window并行度1-8的任意整数,支持Kernel并行度包括4,8,16。具体的卷积双维度配置组合所对应的核心DSP消耗可以参见下表。 目前,EdgeBoard公开版针对卷积计算加速单元Window维度和Kernel维度的并行度配置,以及核心矩阵乘加运算的DSP硬核消耗可参见下表。 EdgeBoard的CNN软核以其灵活的算力搭配组合以及算子可定制化的特点,既可以根据具体模型的算子组合和所占比例,将一定成本和资源条件内的芯片性能发挥到极致,还可以在满足场景所要求性能的前提下减少不必要的功耗支出,此外还允许开发者缩减软核尺寸并将芯片资源应用于自定义功能的IP中,极大地增强了EdgeBoard人工智能多场景覆盖的能力。

    时间:2020-04-29 关键词: AI 边缘计算 cnn edgeboard

  • 百度&米尔携手推出FZ3深度学习计算卡!基于XCZU3EG的百度大脑EdgeBoard加速平台

    百度&米尔携手推出FZ3深度学习计算卡!基于XCZU3EG的百度大脑EdgeBoard加速平台

    基于 Xilinx Zynq UltraScale+ MPSoC 的 EdgeBoard核心加速方案是百度AI加速平台的关键组成部分。其Zynq芯片内部集成ARM处理器+GPU+FPGA(及Video Decode)的架构,既具有多核处理能力、也有视频流硬解码处理能力,还具有FPGA的可编程的特点。内置Linux 4.14.0系统和深度学习预装环境,与百度大脑模型定制平台(AIStudio、EasyDL、EasyEdge)深度打通,实现模型的训练、部署、推理等一站式服务。 百度/米尔联合推出的FZ3深度学习计算卡,系基于赛灵思XCZU3EG的百度大脑EdgBaord加速平台。其可嵌入多样化的产品形态中,实现智能视觉、智能安防、高级驾驶员辅助系统(ADAS)以及下一代机器人等各种AI边缘应用的落地。 米尔/百度FZ3深度学习计算卡配合百度大脑提供的多样化且不断迭代的模型库可以轻松实现人脸、人体、动物&物体、文字等多场景的识别。 产品特点: ·售价低至999RMB/1299RMB,极高性价比ZYNQ/AI开发板 ·基于FPGA可伸缩计算架构,可灵活适配快速迭代的AI网络模型 ·实测可达1.2TOPS算力,MobileNet可达100FPS,性能强大 ·与百度大脑工具平台无缝兼容,一站式降低AI应用门槛 ·体积小,接口齐全,拓展性佳,轻松嵌入各种智能硬件 ·工业级配置,高标准选料与工艺,品质卓越 强大AI计算性能&低功耗 实测性能高达1.2TOPS,为量化裁剪情况下MOBILENET可达100FPS,超过CPU性能20倍,功耗仅5-10W。 模型未裁剪量化的情况下,计算卡性能表现: 丰富开发资源与工具平台 无缝兼容百度大脑工具平台,一站式降低AI开发门槛 出色的硬件设计 该板卡基于Xilinx Zynq UltraScale+ MPSoC XCZU3EG, 4核Cortex-A53+FPGA架构,板载2GB/4GB DDR4 SDRAM(64bit,2400MHz)+8GB eMMC的存储组合。体积小,功能完善,适合嵌入各种不同的产品形态。 接口示意图: 1. 性能强,体积小,易适配 2.卓越品质&十年生命周期 应用场景广泛 适用于智能安防,工业检测,医疗诊断,无人机巡检,科研,消费,无人驾驶等广泛领域。 目前FZ3A及FZ3B产品已震撼预售,更多信息请前往米尔官网进行了解咨询。

    时间:2020-03-30 关键词: 深度学习 edgeboard fz3

  • AI计算——EdgeBoard硬件设计与解析

    EdgeBoard是基于FPGA打造的嵌入式AI解决方案,能够提供强大的算力,并支持定制化模型,适配各种不同的场景,并大幅提高设备的AI推理能deeplab力,具有高性能、高通用、易集成等特点。 EdgeBoard系列计算卡符合工业设计标准、满足-40℃~85℃的温度范围,接口齐全,可广泛适配如安防监控、工业质检、医疗诊断、科研教学、智能零售等各种场景。 EdgeBoard产品分为三个系列,称之为“三兄弟”,能够满足客户不同的需求,既有满足高性能计算的方案,也有高性价比的处理方案。本文将从“三兄弟”的特点及整体硬件框架两个方面来介绍EdgeBoard。 1.为什么EdgeBoard使用FPGA 理想的异构计算平台应该具备三种基本能力:首先专有的硬件加速能力,提高算法的性能;其次高效灵活适配算法的能力,适配不断演进的算法;最后丰富的外围接口,适合不同的应用场景。 CPU作为通用处理器,以逻辑计算作为出发点,更偏重控制流数据,适用于控制和调度类任务,不易于进行外围电路的扩展。GPU具有并行计算的特点,广泛应用在训练阶段,但由于功耗大、成本高等原因,少有部署在端上的产品,另外高延迟及缺少对外围电路的支持也不利于部署到端上的产品中。ASIC作为一种专用集成电路芯片,具有体积小、功耗低、计算性能高等特点,但AISC芯片研发时间长,资金投入大,由于芯片内部结构相对固定,无法适配快速演进的AI算法,在应用场景没有明确之前ASIC显然不是最优的选择。 FPGA作为一种现场可编程门阵列,具有低功耗、低延迟、高性能等优势,其可编程的特性又可以灵活适配不同的算法,同时FPGA丰富的外围接口可以满足不同的应用需求,FPGA差异化的内部逻辑资源可以提供不同的算力支持,这些优势使得FPGA被广泛应用在AI推理加速上。 2.EdgeBoard计算卡介绍 2-1 概述 EdgeBoard是基于Xilinx Zynq UltraScale+ MPSoC系列芯片打造的计算卡,芯片内部集成ARM处理器+GPU+FPGA的架构,既具有多核处理能力、也有视频流硬解码处理能力,还具有FPGA的可编程的特点。内置Linux 4.14.0系统和深度学习预装环境,与百度大脑模型定制平台(AIStudio、EasyDL、EasyEdge)深度打通,实现模型的训练、部署、推理等一站式服务。 EdgeBoard计算卡产品可以分为FZ9、FZ5、FZ3三个系列,是分别基于XCZU9EG、XAZU5EV、XAZU3EG研发而来,分别具有高性能,硬解码,低成本等特点,针对不同需求和应用场景,有不同的市场定位和产品定位,满足各类开发者多样性的需求。 2-2 FZ9系列计算卡 EdgeBoard FZ9系列计算卡是基于XCZU9EG芯片的高性能计算卡,具有较高的性能和集成功能。ZU9芯片PS端具有四核Cortex-A53和双核Cortex-R5 以及Mali-400MP2 GPU;PL端资源DSP Slices 2520,计算性能达3.6Tops,片上存储BRAM高达32.1Mb。 FZ9计算卡产品采用核心板+扩展板的双层设计方案,增加了对外接口的数量,其80*120mm的尺寸方便计算卡集成于到产品中,具备软硬一体的解决方案(软件+FPGA),支持多种视频源(usb、mipi、bt1200、网络摄像头)的输入,并具有强大的视频预处理能力,视频输出DisplayPort接口兼容标准Linux视频框架V4L2。高性能的视频处理能力和标准化的视频输出接口可满足机器学习、医疗诊断等行业需求。 EdgeBoard FZ9计算卡 2-3 FZ5系列计算卡 EdgeBoard FZ5系列计算卡是基于XAZU5EV芯片的计算卡,提供较高性能和功能集成,具有多路视频流H264&H265标准的编解码功能。ZU5芯片PS端同样包含四核Cortex-A53 、双核Cortex-R5、以及GPU Mali-400MP2;PL端资源DSP Slices 1248,计算性能达2.4Tops,片上存储BRAM达5.1Mb,UltraRAM 18Mb。 FZ5计算卡产品延续了FZ9计算卡的产品形态,采用核心板+扩展板双层设计方案,具有多视频输入接口,VCU(Video Codec Unit)硬核解码,对视频的输入处理采用流水线设计,实现高吞吐量和低时延,具有极佳的功耗性能比。产品可以广泛应用于具有硬解码需求的视频图像推理,满足安防监控、工业质检、自动驾驶等行业需求。 EdgeBoard FZ5计算卡 2-4 FZ3系列计算卡 EdgeBoard FZ3系列计算卡是基于XAZU3EG芯片的计算卡,处理器ZU3芯片内置四核Cortex-A53和核心FPGA可编程逻辑模块;PL端资源DSP Slices 360,实测计算性能达1.2Tops,片上存储BRAM达7.6Mb。 FZ3计算卡产品具有高集成性的设计方案,板卡尺寸为80*70mm,具有usb3.0、bt1120、mipi、网络等多视频输入接口,板载2GB 64bit位宽的 DDR4,整体功耗仅5W左右,极佳的功耗性能比。对于FZ3产品具有的高性能、低功耗、低成本、小体积的特点,产品可以广泛应用于科研教学、智能零售、安防监控等行业。 EdgeBoard FZ3计算卡 3.EdgeBoard框架及性能介绍 3-1 MPSoC系统框架 Zynq UltraScale+ MPSoC架构提供频率高达1.5GHz的四核Cortex®-A53 高效 64位 ARMv8 应用处理器、具有双核 ARM® Cortex®-R5 600MHz的实时低功耗协处理器,以及ARM® Mali™-400MP2 GPU达到667MHz,同时EV系列还包含 H.265/H.264 视频编解码器单元,可提供原生 UltraHD 压缩及专用引擎,满足动态电源管理与安全配置需求。Zynq UltraScale+ MPSoC平台系统顶层框图如下: MPSoC平台系统框架 3-2 EdgeBoard计算卡配置比较 基于MPSoC平台系统顶层框图,EdgeBoard计算卡的系统框架设计如下: EdgeBoard计算卡系统框架 EdgeBoard计算卡在配置方面,拥有4GB 和2GB 的不同DDR4内存配置版本,存储支持8GB eMMC,256MB NOR Flash,8Kb EEPROM,具有多路视频(usb、mipi、bt1200、网络视频)输入接口,同时为满足开发者调试便捷性,支持TF Card系统盘启动。 EdgeBoard计算卡的整体配置比较: 3-3 常用模型在EdgeBoard上的性能数据 EdgeBoard软核仍在持续升级,性能也将同步提升。不同版本的网络模型对算力要求不同,针对具体项目应用需求,可进行定制优化。 福利 据可靠小道消息:EdgeBoard(FZ5和FZ9)正在打折中,历史最低价,降价1000元,有兴趣可以看看,百度搜索“EdgeBoard深度学习计算卡”即可发现。

    时间:2020-03-09 关键词: AI edgeboard

  • 深入浅出理解EdgeBoard中NHWC数据格式

    在深度学习中,为了提升数据传输带宽和计算性能,经常会使用NCHW、NHWC和CHWN数据格式,它们代表Image或Feature Map等的逻辑数据格式(可以简单理解为数据在内存中的存放顺序)。本文以百度的AI端上推理设备EdgeBoard为原型,介绍EdgeBoard选择NHWC数据格式的技术考量。 EdgeBoard简介 EdgeBoard是百度基于FPGA芯片研发的嵌入式AI解决方案,高性能的加速引擎可提供3.6Tops的强大算力,完整的嵌入式参考设计使硬件集成轻松便捷。目前EdgeBoard提供了FPGA软核和计算卡模块两种形态供硬件集成,面向项目部署也提供了抓拍机和计算盒两种基础硬件产品。EdgeBoard深度兼容百度大脑模型资源与工具平台(EasyDL/AI Studio),极大降低了开发验证、产品集成、科研教学、项目部署门槛,适用于安防监控、工业质检、医疗诊断、农作物生长监控、无人驾驶、无人零售等场景 数据格式的逻辑表示与物理表示 深度学习中经常会使用NCHW、NHWC和CHWN数据格式来表示数据,其中N、H、W、C定义如下: N:一个batch内图片的数量,一次处理的图片数量 H:垂直高度方向的像素个数,图片的高 W:水平宽度方向的像素个数,图片的宽 C:通道数。例如灰度图像为1, 彩色RGB图像为3 下图表示N=2,C=16,H=5,W=4的数据排列,其中左图是逻辑表示,右图是物理表示。   以NCHW为例,其逻辑表示如左上图,n=0时,三个坐标分别标识了C、H、W的方向。第一个元素是000,第二个元素沿着w方向,即001,随后是002, 003;然后沿H方向,即004, 005, 006, 007...如此反复到019后;再沿C方向,020,021, 022 .....一直到319;再沿N方向,也就是n=1,然后重复W方向,H方向和C方向。 根据以上NCHW的划分,物理地址表示定义如下(如右上图): [a:0] 表示W方向,在一行内从左到右 [a:1] 表示从H方向,一行一行的从上到下 [a:2] 表示在C方向,从一个通道到另外一个通道 [a:3] 表示从N方向,从n=0 到n=1 最终NCHW数据格式的物理分布(在内存中的一维表示)表示为000 001 002 003 004 ... 018 019 020 ... 318 319 320 ... ... 637 638 639。可以理解成把一个通道的所有像素一行一行地排列起来,然后排下一个通道,即n=0排列完后再排n=1。 同理NHWC表示是先沿C方向,再沿W方向,再沿H方向,最后沿N方向。所以在内存的存放顺序是,第一个元素是000,第二个沿C方向,即020,040, 060 ...一直到300,之后切换到W方向,001 021 041 061...301..到了303后再切换到H方向,即004, 024 ... 304,最后到了319,再切换到N方向,320,340 ...一直到639。 [b:0] 表示C方向,第一个像素从一个通道到另外一个通道 [b:1] 表示从W方向,最后一个通道第一个像素回到第一个通道的第二个像素 [b:2] 表示在H方向,最后一个通道第一行最后一个像素回到第一个通道的第二行的第一个像素 [b:3] 表示从N方向,从n=0 到n=1 NHWC其物理表示为000 020 ... 300 001 021 ... 283 303 004 ... 319 320 340 ... ... 339 359 ... 639。可以理解成把一个batch的一个像素的所有通道先排列起来,然后排下一个像素。n=0排列完成后,再排n=1。 同理CHWN其逻辑表示,先沿N方向,再沿W方向,再沿H方向,最后是沿C方向。 [c:0] 表示从N方向,从n=0的第一个像素到n=1的第一个像素 [c:1] 表示从N方向,从n=1的第一个像素回到n=0的第二个像素 [c:2] 表示在H方向,从n=1的第一行最后一个像素回到n=0的第二行第一个像素 [c:3] 表示从N方向,从n=1的第一个通道最后一个像素回到n=0的第二个通道第一个像素 CHWN其物理表示为 000 032 001 321 ... 003 323 004 324 ... ... 019 339 020 ...。可以理解成先把一个batch中N幅图像的第一个通道第一个像素排列起来,然后排第二个像素;再排第二个通道,第三个通道... 数据在内存中的偏移地址 深度学习中涉及大量的数据计算,计算需要从内存中取出数据,因此需要计算出数据的偏移地址以便进行取数。有了上面的逻辑表示和物理表示,可以推导出4维逻辑表示(n,c,h,w)映射到一维内存中偏移地址的公式。 定义位置(n,c,h,w)表示第n个batch的第c通道的第h行的第w列,那么该位置在不同数据格式下,在内存中的偏移地址计算公式如下: NCHW: offset_nchw(n, c, h, w) = n * CHW + c * HW + h * W + w NHWC: offset_nhwc(n, c, h, w) = n * HWC + h * WC + w * C + c CHWN: offset_chwn(n, c, h, w) = c * HWN + h * WN + w * N + n 其中N、C、H、W为常量,n、c、h、w为变量 在NCHW中,CHW=C*H*W,表示一个Batch,可以理解成一个BGR 3通道的图片,表达的是一个立方体。HW=H*W,表示一个平面,可以理解成是BGR 3通道图片的一个通道(灰度图就是一个通道图片)。W是一行,可以理解成一个通道上的一行。   以上图为例,如果想计算出绿色圈,即341的位置(n=1,c=1, h=0, w=1)。我们需要先跳过n=0的数据(CHW),图中箭头1指向的蓝色框区域;再跳过n=1的第一个通道(HW),图中箭头2指向蓝色框区域;这时进入到了n=1的第二个通道,跳过h=0行(0*W);最后跳过w个数到达偏移位置。 EdgeBoard为何使用NHWC 下面来分析EdgeBoard选择NHWC数据格式的原因。   上图表示卷积的计算过程。根据卷积的运算特点,相同位置窗口所有通道数与卷积的参数相乘后累加,可以有下面两种计算方式: 先通道后像素:先把一个像素点的所有通道数与卷积的参数相乘后累加,再进行下一个像素,直到卷积核窗口乘累加完成。比如第一次滑窗的计算公式 (w0,0,0)*(x0,0,0) + (w1,0,0)*(x1,0,0) + (w2,0,0)*(x2,0,0) + (w0,0,1)*(x0,0,1) + (w1,0,1)*(x1,0,1) + (w2,0,1)*(x2,0,1) + (w0,0,2)*(x0,0,2) + (w1,0,1)*(x1,0,2) + (w2,0,2)*(x2,0,2) + (w0,1,0)*(x0,1,0) + (w1,1,0)*(x1,1,0) + (w2,1,0)*(x2,1,0) + (w0,1,1)*(x0,1,1) + (w1,1,1)*(x1,1,1) + (w2,1,1)*(x2,1,1) + (w0,1,2)*(x0,1,2) + (w1,1,1)*(x1,1,2) + (w2,1,2)*(x2,1,2) + (w0,2,0)*(x0,2,0) + (w1,2,0)*(x1,2,0) + (w2,2,0)*(x2,2,0) + (w0,2,1)*(x0,2,1) + (w1,2,1)*(x1,2,1) + (w2,2,1)*(x2,2,1) + (w0,2,2)*(x0,2,2) + (w1,2,1)*(x1,2,2) + (w2,2,2)*(x2,2,2) = 0*-1 + 0*-1 + 0*0 + 0*1 + 0*-1 + 0*0 + 0*0 + 0*0 + 0*-1 + 0*0 + 0*0 + 0*0 + 0*1 + 1*0 + 2*1 + 1*0 + 0*0 +1*0 + 0*0 + 0*0 + 0*1 + 2*1 + 0*-1 + 1*-1 + 2*1 + 0*0 + 0*-1 + = 5 先像素后通道:先把一个通道滑动窗口与卷积参数相乘后累加,再进行下一个通道,直到所有通道乘累加完成。比如第一次滑窗计算公式 (w0,0,0)*(x0,0,0) + (w0,0,1)*(x0,0,1) + (w0,0,2)*(x0,0,2) + (w0,1,0)*(x0,1,0) + (w0,1,1)*(x0,1,1) + (w0,0,2)*(x0,1,2) + (w0,2,0)*(x0,2,0) + (w0,0,1)*(x0,2,1) + (w0,0,2)*(x0,2,2) + (w1,0,0)*(x1,0,0) + (w1,0,1)*(x1,0,1) + (w1,0,2)*(x1,0,2) + (w1,1,0)*(x1,1,0) + (w1,1,1)*(x1,1,1) + (w1,0,2)*(x1,1,2) + (w1,2,0)*(x1,2,0) + (w1,0,1)*(x1,2,1) + (w1,0,2)*(x1,2,2) + (w2,0,0)*(x2,0,0) + (w2,0,1)*(x2,0,1) + (w2,0,2)*(x2,0,2) + (w2,1,0)*(x2,1,0) + (w2,1,1)*(x2,1,1) + (w2,0,2)*(x2,1,2) + (w2,2,0)*(x2,2,0) + (w2,0,1)*(x2,2,1) + (w2,0,2)*(x2,2,2) = 0*-1 + 0*1 + 0*0 + 0*0 +0*1 + 1*0 + 0*0 + 2*1 + 2*1 + 0*-1 + 0*-1 + 0*0 + 0*0 + 1*0 + 0*0 + 0*0 + 0*-1 + 0*0 + 0*0 + 0*0 + 0*-1 + 0*0 + 2*1 + 1*0 + 0*1 + 1*-1 + 0*-1 = 5 可以看出两种方式计算的结果是一样。 而对于NHWC格式,即先通道后像素,是把一个像素的所有通道的数据放在一起。这样对应上图第一个像素的3个通道值,第二个像素的3个通道值,第三个像素的3个通道值,它们在内存中的地址都是连续的,也就是说一次就可以把kernel第一行需要计算的数取出,3x3的kernel需要3次取数。 而对于NCHW格式,即先像素后通道,是把一个通道的所有像素按顺序排列,这样对于一个3*3的卷积核,需要每取3个数就需要跳跃n个数后,再取3个数。一个通道需要取3次,3个通道需要取9次。 在实际网络中,通常通道数会远大于卷积kernel数(不会像上图只有3个通道,通常是几十、几百个通道)。这样对于NHWC格式来说说,取数的次数会比NCHW少很多。对EdgeBoard来说,为了增加其所支持网络的广泛性,减少对大输入尺寸和高存储量权重网络的限制,采用NHWC的格式可以实现分批次地把Feature Map和Weight数据读取到FPGA的片上缓存,例如对于3x3的Kernel,我们可以只读取三行(3WC)Feature Map的数据到FPGA内进行计算,即可得到一行输出数据,并传输到片外大容量缓存DDR,而不需依赖下一个3WC的Feature Map输入数据就可完成每一批次的输入输出数据传输。 再例如,我们也可将Weight数据根据FPGA片上缓存的不同大小分割成N份,一份一份发送到FPGA分别做卷积运算后,再传输回DDR做相应拼接,这等同于做一次大的卷积运算,好处在于可以根据不同容量的FPGA器件做不同匹配,大大提高了代码的硬件适配性。此外,由于C维度之间数据相关性较弱,采用NHWC格式更能发挥FPGA高并行度的计算特点,充分利用FPGA的算力。 下表为EdgeBoard使用NHWC数据格式的网络性能:   福利 据可靠消息:EdgeBoard正在打折中,历史最低价,直降1000元。

    时间:2019-09-10 关键词: 百度 深度学习 edgeboard

  • EdgeBoard为程序员打造的一款深度学习加速套件

    EdgeBoard为程序员打造的一款深度学习加速套件

    简介市面上基于嵌入式平台的神经网络加速平台有很多,今天给大家带来是百度大脑出品的EdgeBoard。按照官网文档的介绍,EdgeBoard是基于Xilinx Zynq Ultrascale+ MPSoC列芯片打造的一款深度学习加速套件,也就是比较常见的利用FPGA进行加速的方案。开箱收到的EdgeBoard,是一个淡黄的纸盒子,将其打开,里面共有四样物品,分别为EdgeBoard本体一块,相比官网上的图片,多出了散热器、风扇以及起到保护作用的亚克力板已经刷好固件的SD卡一张12V2A适配器一个,接头为2P间距为3.81的接线端子MicroUSB线一条EdgeBoard板子做工不错,按照官网资料,他分为主板和电源板两部分,加上散热器后组合后的长宽高为120×80×50。板子具体的硬件资源就不过多介绍了,官方目前也没公布具体硬件框图。启动系统将配套SD卡插入电脑,可以发现他已经烧录好了固件,应该是可以直接启动的(官方资料内没有找到烧录SD卡的方式,如果这张卡丢了的话……)1. 将SD卡插入SD卡槽,使用MicroUSB线连接电脑,设备管理器里会出现USB to UART的设备。2. 使用任意串口终端打开串口(以Xshell为例),COM口号设置为设备管理所看到的串口号,其余设置如下Band Rate: 115200Data Bits:8Stop Bits:1Parity: NoneFlow Control: None3. 将接线端子连接到电源插座,接通电源适配器,可以看到电源灯亮起,风扇传来了怒吼,这个风扇实测转速为6000转,长时间调试时候,噪音略微明显。上电后,可以看到串口终端内显示出了boot数据。1、Xilinx Zynq MP First Stage Boot Loader2、Release 2017.4 Apr 23 2019 - 13:19:543、NOTICE: ATF running on XCZU9EG/silicon v4/RTL5.1 at 0xfffea000, with PMU firmware4、NOTICE: BL31: Secure code at 0x05、NOTICE: BL31: Non secure code at 0x80000006、NOTICE: BL31: v1.3(release):47af34b7、NOTICE: BL31: Built : 04:10:38, Apr 23 20198、U-Boot 2017.01 (Apr 23 2019 - 12:20:25 +0800) Xilinx ZynqMP ZCU102 revB for OpenAi9、I2C: ready10、DRAM: 2 GiB11、EL Level: EL212、Chip ID: xczu9eg13、MMC: sdhci@ff160000: 0 (eMMC), sdhci@ff170000: 1 (SD)14、reading uboot.env可以看到Xilinx特有的FSBL数据,从中可以看出这个板子的基本配置应该是ZCU102的精简版,配备了2G的DRAM。等待几秒钟后,kernel启动完毕,串口内出现登录信息。1、PetaLinux 2017.4 edge_board /dev/ttyPS02、edge_board login:输入用户名root,密码root,即可进入系统,出现了终端标识,代表启动成功。1、root@edge_board:~#总结:系统启动还是比较容易的,不过在启动过程中遇到一个问题,如果插着网线的话,U-Boot会选择从网络启动,会导致系统启动偏慢配置SSH与SMB开发环境EdgeBorad已经配置好了SSH终端以及SMB文件共享服务器,也可参照官方使用步骤:https://ai.baidu.com/docs#/EdgeBoard%20quick%20start/23cb95ae1. 在串口终端查看板子IP1、root@edge_board:~# ifconfig2、eth0 Link encap:Ethernet HWaddr 00:0a:35:00:00:093、inet6 addr: fe80::20a:35ff:fe00:9/64 Scope:Link4、UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:15、RX packets:39 errors:0 dropped:0 overruns:0 frame:06、TX packets:122 errors:0 dropped:0 overruns:0 carrier:07、collisions:0 txqueuelen:10008、RX bytes:4964 (4.8 KiB) TX bytes:25813 (25.2 KiB)9、Interrupt:3010、eth0:avahi Link encap:Ethernet HWaddr 00:0a:35:00:00:0911、inet addr:169.254.1.162 Bcast:169.254.255.255 Mask:255.255.0.012、UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:113、1、Interrupt:302、lo Link encap:Local Loopback3、inet addr:127.0.0.1 Mask:255.0.0.04、inet6 addr: ::1/128 Scope:Host5、UP LOOPBACK RUNNING MTU:65536 Metric:16、RX packets:2 errors:0 dropped:0 overruns:0 frame:07、TX packets:2 errors:0 dropped:0 overruns:0 carrier:08、collisions:0 txqueuelen:19、RX bytes:140 (140.0 B) TX bytes:140 (140.0 B)2. 使用串口读出来的IP,本例中为169.254.1.162即可连接上SSH与SMB。本地输入:169.254.1.162 即可访问edgeboard文件。Win7系统需要注意一些配置,具体请查看Edgeboard使用说明。总结:环境都配置好了,上手还是很简单,在用户目录下发现存在.xfce4的配置文件,莫非带了图形界面?手头没有DP线,后面会试试。EasyDL+EdgeBoard搭建带性别检测的人脸识别模型Edge的卖点之一,就是支持导入EasyDL生成的模型,EasyDL平台是一个使用几十、几百张图片就能训练出一个效果还不错的模型训练平台,官方宣称,对于不了解深度学习用户,可以仅仅依靠可视化操作即可完成深度学习训练。1、登录EasyDl官网创建物体检测模型 http://ai.baidu.com/easydl/。2. 创建训练的数据集,本次测试在百度新闻里抓取了20张包含人脸的图片。3. 数据集标注,Easydl支持在线标注,只需选中图片用鼠标在图片上拉出一个框即可。4. 数据集标注完成后即可训练模型,由于要测试的模型是基于SSD的目标检测,所以此次选中精度较低模型。(高精度是基于RetinaNet的模型),点击开始训练,大概需要30分钟左右,即可训练完成。5. 在线校验模型,训练完成后点击校验模型,可以查看测试模型训练效果。此次发现误识别一个女生为男生,猜测大概是训练集太小,不过人脸识别功能到是没问题。6. 模型导出:由于Easydl还没正式发布模型导出功能,因此此次是通过联系后台人员导出的模型。7. 将Easydl导出的模型,通过SMB传输到EdgeBoard内替换原有的params、model.encrypted:169.254.1.162roothomeworkspacesamplesample_easydlmodel8. 重新编译模型,步骤如下:1、insmod /home/root/workspace/driver/fpgadrv.ko2、cd /home/root/workspace/sample/sample_easyd3、// 如果没有build目录,创建一个4、mkdir build5、cd build6、rm -rf *7、cmake ..8、make 9. 编程成功之后,运行预测程序。1、a、在网络上随意下载一张人物图,修改名字为1.jpg 并替换2、\169.254.1.162roothomeworkspacesamplesample_easydlimage 内的原有图片。3、b.执行./paddle_edgeboard10. 查看图片输出结果。 打开169.254.1.162roothomeworkspacesamplesample_easydlbuildresult.jpg和命令行预测出的四个目标一致,这里由于没有调整阈值所以检测出来四个框。总结:本次是创建了一个简单的Easydl模型并且数据集准备的也小,所以精度不是很高,从可用性和快速部署方面Edgeboard和Easydl的结合可以帮助我们快速开发相关应用产品。运行usb摄像头输入预测示例通过官方文档,发现板子支持USB摄像头以及海思的IPC摄像头接口,翻箱倒柜找到了两个摄像头接下来我们就试试用USB摄像头进行实时的输入检测。1. 连接设备直接将摄像头插入到底板的USB口上即可2. 在开发板中,附带了usb摄像头的驱动与示例工程,依次执行以下命令1、// 查看设备文件是否产生,正常是/dev/video22、ls /dev/video*3、insmod /home/root/workspace/driver/fpgadrv.ko4、cd /home/root/workspace/sample/sample_usb5、mkdir build6、cd build7、rm -rf *8、cmake ..9、make3. 执行预测命令1、./paddle_edgeboard输出结果如下:可以看到实时的检测结果,输出格式为目标的位置,如下图所示总结:本次是通过命令行方式进行的USB摄像头测试,并输出每一帧的目标检测结果,实时性能达到10FPS,效果还不错。但是随机附带的例程并没有实时可视化的功能,我们没能看到实际预测的结果,比较遗憾。运行海思ipc摄像头输入预测示例1. 连接设备,将海思IPC摄像头排线插入插槽内,上电后,摄像头电源指示灯会一并亮起2. 依次执行以下命令1、insmod /home/root/workspace/driver/fpgadrv.ko2、sudo chmod +x /home/root/workspace/driver/media-ctl3、/home/root/workspace/driver/media-ctl -v -f '"a0010000.v_tpg":0[fmt:SRGGB8/1920x10804、field:none]'5、cd /home/root/workspace/sample/sample_bt11206、mkdir build7、cd build8、rm -rf *9、cmake ..10、make3. 执行预测命令1、./paddle_edgeboard输出结果如下:可以看到实时的检测结果,例程里无可视化图片生成,下一步先测试一下摄像头采集地效果。4. 查看摄像头采集图片可视化图1、ls /dev/video*2、/dev/video0 /dev/video13、insmod /home/root/workspace/driver/fpgadrv.ko4、sudo chmod +x /home/root/workspace/driver/media-ctl5、/home/root/workspace/driver/media-ctl -v -f '"a0010000.v_tpg":0[fmt:SRGGB8/1920x10806、field:none]'7、cd /home/root/workspace/tools/bt1120/8、mkdir build9、cd build10、cmake ..11、make12、./bt1120总结:海思ipc摄像头使用方法与USB基本一致,还是有个共同的缺点,没有办法进行实时的可视化效果,无法直观观察到模型运行的效果。感受经过一周的试用,对EdgeBoard也有了初步的了解,总体来说:优点1. 自带环境丰富,无需配置交叉编译环境即可使用。2. 默认的smb+ssh环境基本满足了开发需求,实现了到手即用。3. 与EasyDL结合后,进行目标分类or目标检测的嵌入式集成基本做到了傻瓜化,模型训练容易上手。4. 从上手来看,EdgeBoard作为一个异构的ARM+FPGA加速平台,基本上做到了无需了解嵌入式与FPGA的程度即可使用。缺点1. 板子试用摄像头,缺乏可视化环境,如果可以实现一个小的流媒体服务器或使用DP接口输出,对模型效果的评估可能可以更加直观。2. 风扇噪音较大,在室内长时间开发还是略微吵闹,可能因为没有开发调速策略导致。3.部分win7系统修改系统策略后,仍然无法正常使用SMB连接目标板,希望后续版本可以移植SFTP后续会尝试一下一些已有模型,深度挖掘一下这块板子的功能。作者Litchll

    时间:2019-07-29 关键词: 程序员 edgeboard

发布文章

技术子站

更多

项目外包