找回密码
 注册
关于网站域名变更的通知
查看: 272|回复: 1
打印 上一主题 下一主题

FPGA与图像处理

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-26 15:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
FPGA做图像处理最关键的一点优势就是:FPGA能进行实时流水线运算,能达到最高的实时性。因此在一些对实时性要求非常高的应用领域,做图像处理基本就只能用FPGA。例如在一些分选设备中图像处理基本上用的都是FPGA,因为在其中相机从看到物料图像到给出执行指令之间的延时大概只有几毫秒,这就要求图像处理必须很快且延时固定,只有FPGA进行的实时流水线运算才能满足这一要求。* T. j, G& Q2 q: B1 p3 t/ G9 ?; ?; B
2 [0 A& {2 v7 u( a" H: I  t4 Y( a5 A- X9 f- z% F
所以要了解FPGA进行图像处理的优势就必须理解FPGA所能进行的实时流水线运算和DSP,GPU等进行的图像处理运算有何不同。DSP,GPU,CPU对图像的处理基本是以帧为单位的,从相机采集的图像数据会先存在内存中,然后GPU会读取内存中的图像数据进行处理。假如采集图像的帧率是30帧,那么DSP,GPU要是能在1/30秒内完成一帧图像的处理,那基本上就能算是实时处理。# ^; [4 R0 E! ~+ d
; H6 P: S$ R4 v0 `+ t; I$ \- m3 f+ o5 Q# @) N5 ~  X# Q! I, G; s7 ?) H
FPGA对图像进行实时流水线运算是以行为单位的。FPGA可以直接和图像传感器芯片连接获得图像数据流,如果是RAW格式的则还可以进行差值以获得RGB图像数据。FPGA能进行实时流水线处理的关键是它可以用其内部的Block Ram缓存若干行的图像数据。这个Block Ram可以说是类似于CPU里面的Cache,但Cache不是你能完全控制的,但Block Ram是完全可控的,可以用它实现各种灵活的运算处理。这样FPGA通过缓存若干行图像数据就可以对图像进行实时处理,数据就这样一边流过就一边处理好了,不需要送入DDR缓存了之后再读出来处理。# j' P) l' H% i  H0 W' W% {+ H' [: ^; M3 v2 Z1 E  [* m

& I7 o4 [! y% T6 H这样的数据流处理显然是顺序读取数据的,那么也就只能实现那些顺序读取数据的算法,也就是图像处理中那一大类用3x3到NxN的算子进行的滤波、取边缘、膨胀腐蚀等算法。可能大家会觉得这些运算似乎都是最基本的图像处理运算,只是个前端的预处理,似乎用处不大。但问题是只有FPGA做这样的运算才是速度最快效率最高的,比如用CPU做一个取边缘的算法根本就达不到实时。另外别小看了这种NxN算子法,它可以有各种组合和玩法,可以实现分选多种颜色,甚至分辨简单形状等功能。FPGA进行的这种算子法处理是并行流水线算法,其延时是固定的,比如用3x3的算子进行处理其给出结果的延时是两行图像的时间。还有这个算子法和现在卷积神经网络中最前面的卷积层运算是类似的。# f* D+ q9 l1 w
4 Q# J* {$ q) |6 e" m4 m& Y! I% S' v$ Q- J. J
  n1 Y. G. _" {# o! eFPGA中的Block Ram是重要和稀缺资源,能缓存的图像数据行数是有限的,所以这个NxN的算子中的N不能特别大。当然FPGA也可以接DDR把图像缓存到其中再读出来进行处理,但这种处理模式就和CPU差不多了,达不到最高的实时性。其实有些我们认为需要随机读取数据的图像处理算法也是可以并行流水线化的。  ?: A3 F( \/ l0 D

0 k, |( Y3 N' s4 ~# _2 p在密集运算中,耽误时间和消耗功耗的操作往往不是运算本身,而是把数据从内存中搬来搬去。GPU,CPU在进行运算时要把数据从内存中取出来,算好了在放回去。这样内存带宽往往成了运算速度的瓶颈,数据搬运过程中的功耗占的比重也不会小。FPGA则可以通过堆很多计算硬件的方法把要做的运算都展开,然后数据从中流过,完成一个阶段的运算之后就直接流入第二个阶段,不需要把一个计算阶段完成后的数据再送回内存中,再读出来交给下一个阶段的运算。这样就会节省很多时间和功耗。现在用FPGA做图像处理就是这样干的,比如先用一个3x3的算子进行滤波,再用一个3x3的算子进行取边缘,在FPGA流水线算法中,滤波处理完了数据立即就会进行取边缘处理,是不需要像CPU那样存回内存再读出来的。
' f* J' \' P) `8 V5 I& x
: d, N9 m! n7 X: r8 B. wFPGA进行图像处理的前景还是挺广阔的,越来越多的工业应用场合都要求更高的实时性,而这正是FPGA所适合的。还有机器学习领域,神经网络这种层状的,不需要很随机的读取数据的运算是比较适合用FPGA来做的。不过FPGA不擅长浮点运算,如果能整出不需要浮点运算的神经网络,那么FPGA在这方面的应用将会更大。7 c2 a' U: o2 m! U5 o6 |6 H& l8 [  C8 B: X5 J$ e6 W
1 V2 c1 e  ^$ w" C
; ]! U" I/ x5 U+ F! ?( B4 \前些年用matlab和opencv做图像处理。近一段时间通过FPGA处理摄像头视频数据,有太多感触,复杂的算法先不提及,单是上面文章中提到的一些处理手段及策略,非常受用。4 H/ d; y8 N2 h; ^
) X9 I5 [' r  h$ e) h. C* O
6 w/ b/ ^3 ]  M6 b6 q" G感谢来自知乎网的图像处理讨论。非常受益!9 ~; U) c2 }8 t! f' @$ R
' w8 Z( r# e8 E7 k2 H" G
0 A5 |8 ]2 X. x' P: @* S版权所有权归卿萃科技 杭州FPGA事业部,转载请注明出处
  M8 A5 Z  _, N' H/ H) K& G  @5 Y  N4 G. {$ i2 b  v2 k
( _  T! X: V6 w作者:杭州卿萃科技ALIFPGA0 w; D0 H' w$ j  V* n# _% T
2 a: B6 Q6 N  ?
1 F' N/ r7 _: C原文地址:杭州卿萃科技FPGA极客空间
  P- j/ |- d4 C( w; L8 o  [
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-9 13:08 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表