0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA做图像处理关键优势是:能进行实时流水线运算

FPGA开源工作室 来源:陈年丽 2019-07-19 09:47 次阅读

本人有过多年用FPGA做图像处理的经验,在此也谈一下自己的看法。用FPGA做图像处理最关键的一点优势就是:FPGA能进行实时流水线运算,能达到最高的实时性。因此在一些对实时性要求非常高的应用领域,做图像处理基本就只能用FPGA。例如在一些分选设备中图像处理基本上用的都是FPGA,因为在其中相机从看到物料图像到给出执行指令之间的延时大概只有几毫秒,这就要求图像处理必须很快且延时固定,只有FPGA进行的实时流水线运算才能满足这一要求。

图1 FPGA实现图像的流水处理

所以要了解FPGA进行图像处理的优势就必须理解FPGA所能进行的实时流水线运算和DSPGPU等进行的图像处理运算有何不同。DSP,GPU,CPU对图像的处理基本是以帧为单位的,从相机采集的图像数据会先存在内存中,然后GPU会读取内存中的图像数据进行处理。假如采集图像的帧率是30帧,那么DSP,GPU要是能在1/30秒内完成一帧图像的处理,那基本上就能算是实时处理。

FPGA对图像进行实时流水线运算是以行为单位的。FPGA可以直接和图像传感器芯片连接获得图像数据流,如果是RAW格式的则还可以进行插值以获得RGB图像数据。FPGA能进行实时流水线处理的关键是它可以用其内部的Block Ram缓存若干行的图像数据。这个Block Ram可以说是类似于CPU里面的Cache,但Cache不是你能完全控制的,但Block Ram是完全可控的,可以用它实现各种灵活的运算处理。这样FPGA通过缓存若干行图像数据就可以对图像进行实时处理,数据就这样一边流过就一边处理好了,不需要送入DDR缓存了之后再读出来处理。

这样的数据流处理显然是顺序读取数据的,那么也就只能实现那些顺序读取数据的算法,也就是图像处理中那一大类用3x3到NxN的算子进行的滤波、取边缘、膨胀腐蚀等算法。可能大家会觉得这些运算似乎都是最基本的图像处理运算,只是个前端的预处理,似乎用处不大。但问题是只有FPGA做这样的运算才是速度最快效率最高的,比如用CPU做一个取边缘的算法根本就达不到实时。另外别小看了这种NxN算子法,它可以有各种组合和玩法,可以实现分选多种颜色,甚至分辨简单形状等功能。FPGA进行的这种算子法处理是并行流水线算法,其延时是固定的,比如用3x3的算子进行处理其给出结果的延时是两行图像的时间。还有这个算子法和现在卷积神经网络中最前面的卷积层运算是类似的。

图2 FPGA对图像做n行缓存输出

FPGA中的Block Ram是重要和稀缺资源,能缓存的图像数据行数是有限的,所以这个NxN的算子中的N不能特别大。当然FPGA也可以接DDR把图像缓存到其中再读出来进行处理,但这种处理模式就和CPU差不多了,达不到最高的实时性。其实有些我们认为需要随机读取数据的图像处理算法也是可以并行流水线化的,比如连通域识别。《FPGA实现的连通域识别算法升级》这是我的一篇文章。

现在貌似神经网络也可以用FPGA来实现,并且据说效率比较高。我暂时还没玩过这个,但知道为什么FPGA在进行某些运算的时候效率会比较高。因为在密集运算中,耽误时间和消耗功耗的操作往往不是运算本身,而是把数据从内存中搬来搬去。GPU,CPU在进行运算时要把数据从内存中取出来,算好了在放回去。这样内存带宽往往成了运算速度的瓶颈,数据搬运过程中的功耗占的比重也不会小。FPGA则可以通过堆很多计算硬件的方法把要做的运算都展开,然后数据从中流过,完成一个阶段的运算之后就直接流入第二个阶段,不需要把一个计算阶段完成后的数据再送回内存中,再读出来交给下一个阶段的运算。这样就会节省很多时间和功耗。现在用FPGA做图像处理就是这样干的,比如先用一个3x3的算子进行滤波,再用一个3x3的算子进行取边缘,在FPGA流水线算法中,滤波处理完了数据立即就会进行取边缘处理,是不需要像CPU那样存回内存再读出来的。

图3 简单的神经网络

综上所述,我觉得用FPGA进行图像处理的前景还是挺广阔的,越来越多的工业应用场合都要求更高的实时性,而这正是FPGA所适合的。还有机器学习领域,神经网络这种层状的,不需要很随机的读取数据的运算是比较适合用FPGA来做的。不过FPGA不擅长浮点运算,如果能整出不需要浮点运算的神经网络,那么FPGA在这方面的应用将会更大。

FPGA图像处理视频欣赏

可能制约FPGA在这些方面应用的关键还是人才的缺乏。大家不知道FPGA擅长什么,想用却又不知道怎么用。网上很多传说都说这个FPGA编程很底层,很不好用。这些说法也对也不对。刚开始学的时候是会有一些困惑。关键是这其中要经历一个思维方式的转变,从CPU编程思维到硬件编程思维的转变。转变过来了之后就会发现,其实FPGA还是很单纯很灵活很好用的,硬件描述语言没有高级语言那么复杂。

图4 FPGA图像处理办法的多样化

总结:近年来随着半导体的工艺不断提升,FPGA自身的各种资源容量在不断地提升的同时也出现了一些异构架构的FPGA丰富了FPGA图像处理的方法。

HLS的出现使FPGA开发走向高级语言,也变的更为简单。有一些公司用新的技术快速开发出有图像识别功能的设备。由于FPGA开发慢、成本高、可重复配置、有点门槛等等特点,它能够在DSP、单片机ASIC之间分一杯羹。应用领域主要在量不大、可定制、可升级、成本不敏感的地方,比如军工、医疗、安防。单位主要是科研院所、医疗设备公司、安防设备、视频传输拼接设备公司。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器芯片
    +关注

    关注

    6

    文章

    191

    浏览量

    23576
  • 流水线
    +关注

    关注

    0

    文章

    110

    浏览量

    24988

原文标题:FPGA图像处理的前景如何?

文章出处:【微信号:leezym0317,微信公众号:FPGA开源工作室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    什么是流水线?ARM处理流水线简析

    流水线是为了提高效率,能并发同时进行多个任务。
    的头像 发表于 09-05 15:39 1232次阅读
    什么是<b class='flag-5'>流水线</b>?ARM<b class='flag-5'>处理</b>器<b class='flag-5'>流水线</b>简析

    #FPGA点拨 为什么要进行流水线

    流水线
    电子技术那些事儿
    发布于 :2022年10月10日 21:37:12

    FPGA中的流水线设计

    `流水线设计前言:本文从四部分对流水线设计进行分析,具体如下:第一部分什么是流水线第二部分什么时候用流水线设计第三部分使用
    发表于 10-26 14:38

    荐读:FPGA设计经验之图像处理

    的可以参考一下,欢迎一起交流学习。话不多说,上货。 使用FPGA图像处理优势关键
    发表于 06-08 15:55

    什么是流水线技术

    什么是流水线技术 流水线技术
    发表于 02-04 10:21 3739次阅读

    基于FPGA的高速高阶流水线工作FFT设计

    为了提高快速傅里叶变换( FFT)处理数据的实时性,本文利用现场可编程阵列( FPGA)逻辑资源丰富、运算速度快的特点以及FFT算法的分级特性,实现了高速、高阶FFT的
    发表于 10-01 01:52 55次下载
    基于<b class='flag-5'>FPGA</b>的高速高阶<b class='flag-5'>流水线</b>工作FFT设计

    高速高阶FPGA流水线工作FFT设计

    为了提高快速傅里叶变换( FFT)处理数据的实时性,本文利用现场可编程阵列( FPGA)逻辑资源丰富、运算速度快的特点以及FFT算法的分级特性,实现了高速、高阶FFT的
    发表于 10-28 17:11 32次下载
    高速高阶<b class='flag-5'>FPGA</b><b class='flag-5'>流水线</b>工作FFT设计

    一文读懂处理流水线

    本文将讨论处理器的一个重要的基础知识:流水线。熟悉计算机体系结构的读者一定知道,言及处理器微架构,几乎必谈其流水线处理器的
    发表于 04-08 08:16 2.2w次阅读
    一文读懂<b class='flag-5'>处理</b>器<b class='flag-5'>流水线</b>

    关于利用FPGA图像处理的相关知识盘点

    FPGA图像处理关键的一点优势就是:FPGA能进行
    发表于 02-14 14:33 1188次阅读

    FPGA进行图像处理的前景广阔 应用将会越来越大

    FPGA图像处理关键的一点优势就是:FPGA能进行
    发表于 03-20 16:28 2182次阅读

    FPGA流水线练习5:设计思路

    流水线的工作方式就象工业生产上的装配流水线。在CPU中由5—6个不同功能的电路单元组成一条指令处理流水线,然后将一条X86指令分成5—6步后再由这些电路单元分别执行,这样就能实现在一个
    的头像 发表于 11-29 07:06 2300次阅读

    FPGA之为什么要进行流水线的设计

    流水线又称为装配线,一种工业上的生产方式,指每一个生产单位只专注处理某一个片段的工作。以提高工作效率及产量;按照流水线的输送方式大体可以分为:皮带流水装配线、板链线、倍速链、插件线、网
    的头像 发表于 11-28 07:04 3280次阅读

    各种流水线特点及常见流水线设计方式

    按照流水线的输送方式大体可以分为:皮带流水装配线、板链线、倍速链、插件线、网带线、悬挂线及滚筒流水线这七类流水线
    的头像 发表于 07-05 11:12 6332次阅读
    各种<b class='flag-5'>流水线</b>特点及常见<b class='flag-5'>流水线</b>设计方式

    嵌入式_流水线

    流水线一、定义流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各种部件同时处理是针对不同指令而言的,他们可同时为多条指令
    发表于 10-20 20:51 6次下载
    嵌入式_<b class='flag-5'>流水线</b>

    什么是流水线 Jenkins的流水线详解

    jenkins 有 2 种流水线分为声明式流水线与脚本化流水线,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkin
    发表于 05-17 16:57 667次阅读