1:FPGA与生产力
FPGA被称为万能芯片,通过逻辑编程,可以实现基本上所有功能,其具体原理可见《大话FPGA-“万能的芯片?”》。
那么问题来了,所以如果用FPGA加速人工智能,实现深度学习算法,难度大不大?
难度很大!
如果从AI算法开始,然后从verilog开始编写,调试,优化,再下载到FPGA中运行,中间需要众多的人力,物力,没有个一年半载,很难有收获。
但是,如果有一个FPGA的APP库,里面有各种人工智能APP,可以下载相应的程序到FPGA中,例如下图所示:
有人脸识别的智能相机,缺陷检测,ReID(行人检测/行人跟踪技术),语音识别,多目标人脸识别,智能驾驶辅助等等。
这些应用直接编译下载相应应用到FPGA中,用基于现成的应用进行开发,相对流程就简化很多,达到“即下即用”的效果。
可以很快形成的生产力。
即使有定制的需求,也可以迅速评估路线的可行性,在此基础上二次开发。
这个就比直接从verilog编码开始要更快一些,也效率更高。
那这个怎么操作?
2:怎么做
用FPGA搭建了一个人脸识别系统需要几步?如果用搭载zynq ultrascale+ FPGA的 KV260。总共用了三步:
第一步:组装配件:
KV260是一个基于zynq ultrascale+的FPGA系统,内部包括CPU,FPGA,GPU等等资源。
红色的散热片下面就是Zynq UltraScale+的芯片。上面有一个四核A53处理器,还有256K LC的逻辑资源的FPGA,属于“双剑合璧”的架构。
配件包括,
1:电源: 系统供电。
2:SD卡:烧写操作系统。
3:摄像头:视频输入。
4:USB转串口线:系统串口输出。
5:网线:用于连接互联网,下载智能应用。
6:HDMI线:用于视频输出。
然后将这些部件组装起来。
第二步:下载应用
1:下载linux系统下载到TF卡里,插入TF卡,上电后linux启动。
2:连接网线,检查链接性,可以直接ping一下网关,看看是不是连接成功
3:可以上网后,直接选择安装相应的应用,就是智能摄像头,可以人脸识别。
下图是下载安装应用,点击下载命令后 ,注意,一定要在root模式下下载,sudo dnf install packagegroup-kv260-smartcam。
安装时间有点长,装上后,让子弹飞一会。
第三步:启动测试
启动应用开始测试,在linux系统中挂载应用,然后启动启动人工智能的应用。
sudo smartcam -mipi -W 1920 -H 1080 -r 30 --target dp
这个和大象关在冰箱里分为几步有异曲同工之妙!
然后,效果怎么样。
3:效果怎么样?
这玩意是这个样子的。
我利用这个FPGA系统装在了一个直播杆,然后配上了一个显示器,看起了有点像一个基于工业用相机的直播室。
有了这个“直播室”,看了一下,没有美颜效果。直播就算了。
看看这玩意AI效果如何?
于是给KV260看了一个欧洲杯足球比赛颁奖视频。
为什是欧洲杯颁奖,主要是这个视频里同时出现的人多,并且画面一直在动,主要想测试一下,这个系统的处理能力,
1:人脸识别的数量。
2:处理时延。
那种两三个人的视频,测试不出这个人工智能芯片的能力。
并且画面一直不动,对于时延也没有太高的要求。像是小区门禁的那个人脸识别就会感觉明显延迟。
那可以看看KV260能不能识别视频中多少人脸?
这个比赛是欧洲杯颁奖的比赛,可以看到,kv260立即就识别到了所有夺冠队员的面部。
这个效率很高,我数了一下,最多时,有22张人脸可以可以同时被识别捕捉到。主力和替补全部都捕捉到了。
能够同时捕捉到22张人脸,这个也体现了这个芯片的人脸的识别能力。
并且画面一直在动态切换,具体时延控制不错,只不过就没有办法定量来分析一下。
4:系统及原理
看完FPGA实现这个系统的效果了,下面我们来点干货。
人工智能芯片系统,需要有哪些部分组成?
CPU系统:负责OS运行,系统初始化,数据流控制,信号传输,外设管理等等。
DPU系统:(Deep Learning Processor Unit,深度学习处理器)负责深度学习算法的加速,是一个智能加速引擎引擎。
简单来说:两个部分,控制和计算。
这个就是经典的CPU+FPGA的方案,很多嵌入式工业领域都用此方案,一般是ARM+FPGA;
ARM负责控制管理,各种外设的管理,FPGA负责AI加速
而Zynq UltraScale+就是把这两个做到了一个芯片上,下图就是这个芯片的架构。
其主要资源包括:四核CPU A53,一个Mali GPU,还有支持实时CPU,双核R5F。
DPU这个词,让人联想到xilinx收购深鉴科技,这场收购当时在业界引起了很大影响力。
当时深鉴科技的核心技术,就是基于FPGA的DPU(Deep Learning Processing Unit)技术,当时,深鉴科技号称神经网络压缩编译技术,它不仅可以将神经网络压缩数十倍而不影响准确度,还可以使用“片上存储”来存储深度学习算法模型,减少内存读取,大幅度减少功耗。
现在来看,不知道在Zynq UltraScale+这款芯片上,是不是一脉相承的技术实现,从性能上还是很强的。
其主要的工作流程和性能指标如下图所示:
支持11路mipi的摄像头,11个摄像头,应该足够一个车需要用到的摄像头。
反正能够支持到这么多摄像头的芯片,我印象中还是最多的。
除此之外,最重要的是,这颗芯片FPGA可编程资源非常丰富:256K logic Cell; (logic cell 内部就是LUT和REG )。 其在333Mhz 其配置在可编程逻辑的 深度学习处理器DPU能力达到1.3Tops。
除了智摄像头,还有一些其他的应用可以供不同应用选择
例如智能驾驶,语音识别,安防检测等等。
这里重点提一下ADAS(高级驾驶辅助系统)利用安装于车上的各式各样的传感器, 在第一时间收集车内外的环境数据, 进行静、动态物体的辨识、侦测与追踪等技术上的处理, 从而能够让驾驶者在最快的时间察觉可能发生的危险, 以引起注意和提高安全性的主动安全技术。包括驾驶员疲劳预警和身份识别,人脸识别在乘用车的个性化驾驶舱,以及未来的商业模式都是非常必要的。也有一些原型在做。
总结一下:
1:处理能力:KV260用了zynq ultrascale+ mpsoc 这颗芯片,内部有四核应用处理器,GPU,实时处理器,以及256K LC的FPGA,硬件资源足够来处理人工智能方面的应用。
2:外设接口:KV260支持11路摄像头,能够支持类似汽车辅助设备ADAS ,先进驾驶辅助系统这类应用。
3:软件配套:除了硬件之外,还有很多的软件套件,例如人脸识别,入侵检测,自动驾驶等等一些应用,方便二次开发。
FPGA通过深度学习可以达到毫秒级别的应用,吞吐量大,时延低,这个可能一个优势。前面的人脸测试中,同时识别22张人脸,也侧面说明了人脸识别的数量很多,延时较低。
为什么是22张,是因为找的视频中也就是22张人脸。
当然,这个测试只是提供一个肉眼可以感受的角度。实际的应用可以根据需求进行测试,从测试结果进行评估,从而加速design in的过程。