当然,好处也是很明显的,举个例子,如下图:
(图7 框的平移转换示意图 来源:网络)
每个Anchor的平移量和变换尺度 ,显然即可用来修正Anchor位置了。红色为提取的foreground anchors,即便红色的框被分类器识别为飞机,但是由于红色的框定位不准,这张图相当于没有正确的检测出飞机,每个Anchor的平移量和变换尺度,即可用来修正Anchor位置了,表现结果即是由只标出主体的红框转换为标记更准的绿框,显然,绿框的精度更准。
相对来说,Yolo系列不区分前景和背景,画框的方式也是做一个回归的问题,这会对密集的目标的画框方式导致不准,yolo会把密集的目标会画成一个框。
( 图8 yolo密集目标检测 来源:雪湖实测 )
除了精度高之外,能做多网融合是Faster RCNN的另外一个很重要的特点。
特别对于车载系统,由于现实的复制性和应用的广泛性,经常会需要添加不同的网络和良好的性能,如增加车道检测等,可以将不同的网络通过interp(双线性插值)层来进行实现不同网络之间的平滑过渡。
利用这个特点,我们可以做很多启发性的探索,前面提到,多传感器融合来构建自动驾驶的感知层是行业共识,如激光雷达在自动驾驶中是个很核心的传感器,有没有将激光雷达和视觉同时融合到一个网络中的方案呢?有人提出这样的方案,如下:
(图9 用FasterRCNN来融合激光雷达和视觉算法 来源:网络)
上图的方案,总体上沿用了Faster RCNN的检测框架,但是在输入、proposal的形式以及Faster RCNN网络上做了较大的改动,以实现视觉与激光点云的信息融合。
这个网络给了我们很大的启示,多传感器融合方案框架是自动驾驶的必备技能,我们必然要考虑不同的传感器的特性和适应该传感器的算法结构,然后将多种算法结构融合到一个算法框架中来,而Faster RCNN网络本身就是基于多网络融合的方案制成的,所以用Faster RCNN来做车载系统有其兼容多传感器方案的巨大优势。
既然Faster RCNN这么多的好处,为什么用的人少呢?主要原因就是算的慢,如下图所示
(图10 FasterRCNN 在TX2上的运行结果 来源:雪湖实测)
由上面图表可以看出,Faster RCNN在TX2的运行结果是非常慢的。算法慢,便无解了吗?未必。因为这里所谓的慢,是针对GPU而言的,是因为算法对GPU不友好导致的结果,而对GPU不友好,未必对其他异构计算平台不友好,事实证明,这恰恰是FPGA的优势所在。
三. 安能得来偷天技?兼顾精度与速度。
在GPU运行慢的网络,可以在FPGA上进行加速实现。而要想提高速度,就要对网络进行具体分析,是哪些层运算速度慢以及慢的原因在哪里?
(图11 Faster RCNN的框架图 来源:网络)
如上图所示,前半部分是基础网络来提取特征值,后半部分在画框,RPN网络负责前景背景分离,排序算法负责筛选,最后全连接输出结果。
总体运行结果,进一步分析每层的耗时:
(图12 Faster RCNN在gpu中每层的耗时 来源:雪湖实测)
关键层interp层的分析:
(图13 Interp层分析 来源:雪湖实测)
通过图12 的分析结果我们得出结论,耗时最长的都集中在了proposal(排序)及以后的层(FC层)。通过图13 Interp层(双线性插值)的分析,我们也得出结论,GPU对Interp层的加速有限,速度没有CPU的运算快。通过这些数据的分析,我们就能很明白的知道GPU的优势和劣势在哪里,GPU的优势在于能重复数据切片,在运算cnn图片时它是有优势的,因为图片可以分成不同的tile片,然后GPU会对每个tile进行并行计算,当算法并不能很好的完成切片动作时,GPU便没有什么实质的优势,从上图可以看出,proposal和FC6都很耗时,proposal层就是在排序,排序对GPU是不友好的。Interp层也是不好切片操作的,所以proposal模块及以后耗时比较大。
知道了相应的数据和原理,在FPGA上就能很好解决这些问题,对FPGA来说,FPGA是可编程的,是可以将整个算法一分为二的,在proposal之前是一部分,在proposal之后是一部分,两者在全流水运算后是一个并行的状态。这样用并行的计算来抵消后面的耗时时间,就能大大的缩小计算时延。
针对Interp层,FPGA可以将相应放大的系数存入BRAM中,这样的时间更短,是CPU的3倍左右的速度。Interp层的意义是很大的,因为前面我们分析过,自动驾驶的感知层很适合做多网络融合的方案,而Interp层正式这些网络结合的连接层,经过大量实验证明,用Interp做分辨率的上下采样切换,能最大的保留原始图片的特征信息,从而使多个网络间能够平滑过渡。这也就意味着多网络融合的方案更适合用FPGA来实现。
除了前面的优化方法之外,我们还可以考虑层合并,切割featuremap,权重共享,减少IO读写时间等方式来进行进一步的优化。另外一个不得不提到优化方向就是量化成8bit数据进行计算,这样FPGA中的DSP每次都能运算两个数,这就可以使用性价比更高的FPGA芯片上进行运算,从而得到更高的收益。雪湖科技就是这样做的。
(图14 雪湖科技开发的Faster RCNN的性能参数)
当然,并非说yolo算法没有优势,雪湖也对yolo系列做了FPGA加速的方案。
(图15 雪湖开发的yolov3-tiny的性能参数)
雪湖做的工作只是说明用什么样的算法应该根据真实情况而定,而不单单是看GPU的运算指标,FPGA有很多很惊艳的东西,它的潜力一直摆在那里,只是尚未被挖掘出来,雪湖在FPGA领域深耕多年,能把FPGA的潜力充分挖掘,只要能做到这一点,出来的结果就足够惊艳。
四. 风景莫道塞外好,江南深处藏雪湖
开发FPGA是有难度的,要对FPGA的逻辑实现和算法优化有很深的理解之外,
没有一支精干的团队,没有一个好的验证平台,没有强有力的EDA开发工具,
将这么复杂的算法要在一个资源有限的FPGA芯片上实现并达到很高的吞吐量,难度是可想而知的。
雪湖科技在这方面下足了功夫,十年磨一剑,打造出一套完全自主产权的完整的先进的工具系统,同时,针对CNN的AI算法这块,专门打磨出一套完整的开发/验证系统。
(图16 雪湖CNN算法实现框架图 来源:雪湖科技)
如上图所示,我们将所有的计算模块都进行封装,并通过不同的command来执行不同的算子操作,最终会加快CNN算法的实现和落地。
可以参考之前写过的相关文章链接:
https://mp.weixin.qq.com/s/QmIuRLtk0thLhD6i7zumWw
将AI算法快速落地,是雪湖的优势所在。雪湖,以算力为根本,为加速而存在,不止步于自动驾驶,不畏惧于技术变迁.以拥有完全自主产权的核心技术为荣,以创新和拼搏为荣.在FPGA芯片加速计算领域(包括但不限于AI算法)绝对是一道亮丽的风景线,正所谓:风景莫道塞外好,江南深处藏雪湖 !
作者简介:杨付收,雪湖科技创始合伙人,一个在硬件圈里努力写诗的软件程序猿。专注在芯片算法相关领域十多年,曾就职于中兴,华为,展讯等知名芯片公司。白天代码几千行,晚上咖啡伴梦香。每天也就一件事,处理bug一箩筐。
---------------------------------------------------------
免责声明:
1.本文援引自互联网,旨在传递更多网络信息,仅代表作者本人观点,与本网站无关。
2.本文仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。