>

干货 | 地平线:面向低功耗 AI 芯片上视觉任务的

- 编辑:广西快乐十分 -

干货 | 地平线:面向低功耗 AI 芯片上视觉任务的

原标题:干货 | 地平线:面向低功耗 AI 芯片上视觉任务的神经网络设计 | 职播间第 2 期

地平线第一代人工智能视觉芯片面世

2017-12-21 09:20出处:盖世汽车网 [转载]责编:张坤

创业两年半,地平线终于推出了自己的第一代人工智能芯片。

12月20 日,地平线在北京宣布推出第一代基于自主研发的高斯架构的人工智能视觉芯片。据悉,这是中国首款嵌入式人工智能视觉芯片,主要面向智能驾驶和智能摄像头,可广泛用于智能驾驶、智慧城市、智能商业等场景。

其中,面向智能驾驶的产品被命名为“征程1.0 处理器”。该产品具备同时对行人、机动车、非机动车、车道线、交通标志牌、红绿灯等多类目标进行精准实时检测与识别的处理能力,可支持L2级别的辅助驾驶系统。而面向智能摄像头的人工智能视觉芯片被命名为“旭日1.0 处理器”,该处理器支持在前段实现大规模人脸检测跟踪、视频结构化,可应用于智能城市、智能商业等场景。

这两款芯片的共同优势为:高性能——实时处理1080P@30帧的视频,并对每帧中的200个目标进行检测、跟踪、识别;低功耗——典型功耗在1.5W;低延时——延时可小于30ms;接口简单——可以与主流应用处理器配合。

在余凯看来,地平线要提供的是基于深度神经网络的算法和芯片相结合的解决方案,这类解决方案必须体现在具体的应用场景中。为此,地平线在发布会上提供了三大解决方案,分别面向智能驾驶、智能城市和智能商业三大场景。其中智能驾驶,作为地平线机器人一直以来的主场项目,更是重中之重。

地平线表示,目前公司已经可以向客户提供基于视觉环境感知的L2 自动驾驶;到 2018 年,地平线将推出第二代 BPU芯片,以支持多传感器的融合,在此芯片基础上,地平线将提供高速 L3 自动驾驶和受限区域 L4 无人驾驶方案。如此循序渐进,助力人工智能在智能驾驶领域的应用落地

AI 科技评论按:随着这几年神经网络和硬件(GPU)的迅猛发展,深度学习在包括互联网,金融,驾驶,安防等很多行业都得到了广泛的应用。然而在实际部署的时候,许多场景例如无人驾驶,安防等对设备在功耗,成本,散热性等方面都有额外的限制,导致了无法大规模应用深度学习解决方案。

近日,在雷锋网 AI 研习社第 2 期职播间上,地平线初创人员黄李超就介绍了 AI 芯片的背景以及怎么从算法角度去设计适合嵌入式平台高效的神经网络模型,并应用于视觉任务中。之后地平线的 HR 也进行了招聘宣讲,并为大家进行了招聘解读。公开课回放视频网址:

黄李超:本科毕业于中山大学,在帝国理工硕士毕业之后于 2014 年加入了百度深度学习研究院,期间研发了最早的基于全卷积网络的目标检测算法——DenseBox,并在 KITTI、FDDB 等特定物体检测数据集上长期保持第一名。 2015 年,他作为初创人员加入地平线,现研究方向包括深度学习系统研发,以及计算机视觉中物体检测,语义分割等方向。

分享主题:面向低功耗 AI 芯片上视觉任务的神经网络设计

分享提纲

  1. 介绍当前 AI 芯片概况,包括现有的深度学习硬件发展情况,以及为何要为神经网络去设计专用芯片。
  2. 从算法角度,讲解如何设计高性能的神经网络结构,使其既满足嵌入式设备的低功耗要求,又满足应用场景下的性能要求。
  3. 分享高性价比的神经网络,在计算机视觉领域的应用,包括实时的物体检测,语义分割等。
  4. 地平线 2019 年最全的校招政策解读。

雷锋网 AI 研习社将其分享内容整理如下:

今天,我将从以下三个方面来进行分享:

第一,当前 AI 芯片发展的现状。这里的 AI 芯片并不是单指狭义的 AI 专用芯片,而是指广义上包括 GPU 在内所有可以承载 AI 运算的硬件平台。

第二,在嵌入式设备的环境下如何设计高效的神经网络。这里我使用的案例都选自业界中比较重要的一些工作——也有一部分来自我们的地平线。同时这一节大部分的工作都已经落地到实际应用场景。

第三,算法+硬件在计算机应用上的一些成果。

介绍 AI 芯片之前,先介绍 AI 的大环境。大家都知道现在是机器学习时代,其中最具代表性的是深度学习,它大大促进图像、语音、自然语言处理方面的发展,同时也给很多行业带来了社会级的影响。例如在社交网络的推荐系统、自动驾驶、医疗图像等领域,都用到了神经图像技术,其中,在图像医疗,机器的准确率甚至大大超过了人类。

图片 1

从整个互联网发展的情况来看,我们先后经历了 PC 互联网、移动互联网时代,而接下来我们最有可能进入一个智能万物互联的时代。PC 时代主要解决信息的联通问题,移动互联网时代则让通讯设备小型化,让信息联通变得触手可及。我相信在未来,所有的设备除了能够互联之外,还能拥有智能:即设备能够自主感知环节,并且能根据环境做出判断和控制。现在我们其实看到了很多未来的雏形,比如无人车、无人机、人脸开卡支付等等。不过,要让所有设备都拥有智能,自然会对人工智能这一方向提出更多要求,迎接更多的挑战,包括算法、硬件等方面。

大规模运用深度学习需要去应对很多挑战。首先从算法和软件上看,如果把 AI 和深度学习用在某个行业中,需要对这个行业的场景有深入的理解。场景中也有很多痛点需要去解决,但是是否一定要用深度学习去解决呢?在特定场景下,往往需要具备能耗比、性价比的解决方案,而不是一个仅仅能够刷数据集的算法。随着这几年算法的快速发展,人们对 AI 的期望也在不断提高,算法的发展是否能跟上大家的期望,这也是一个问题。

从硬件上看,当前硬件的发展已经难以匹配当前深度学习对于计算资源的需求,特别是在一些应用场景中,成本和功耗都是受限的,缺少低成本、低功耗、高性能的硬件平台直接制约了 AI 技术和深度学习方案的大规模应用,这也是我们地平线致力于解决的行业难题。

当前 AI 芯片发展的现状

接下来我们介绍一下 AI 硬件的一些情况。大家都知道,最早神经网络是运行在 CPU 上的。但是 CPU 并不能非常高效地去运行神经网络,因为 CPU 是为通用计算而设计的,而且其计算方式以串行为主——虽然一些运行指令可以同时处理较多数据。除此之外,CPU 在设计上也花了很多精力去优化多级缓存,使得程序能够相对高效地读写数据,但是这种缓存设计对神经网络来讲并没有太大的必要。另外,CPU 上也做了很多其他优化,如分支预测等,这些都是让通用的运算更加高效,但是对神经网络来说都是额外的开销。所以神经网络适合用什么样的硬件结构呢?

图片 2

在讲这个问题之前,我们先从神经网络的特性说起:

第一,神经网络的运算具有大规模的并行性,要求每个神经元都可以独立并行计算;

第二,神经网络运算的基本单元主要还是相乘累加,这就要求硬件必须有足够多的运算单元;

第三,神经元每一次运算都会产生很多中间结果,这些中间结果最后并不会复用,这就要求设备有足够的带宽。一个理想的设备,它应该有就比较大的片上存储,并且带宽也要足够,这样才能放下网络的权重和网络的输入;

第四,由于神经网络对计算的精度并没有那么敏感,所以在硬件设计的时候可以使用更简单的数据类型,比如整型或者 16bit 的浮点数。因此,这几年大家使用的神经网络解决方案,都是 CPU+比较适合于神经网络运算的硬件(可以是 GPU、DSP、FPGA、TPU、ASIC 等)组成异构的计算平台。

最常用的方案是 CPU+GPU,这个是深度学习训练的一个标配,好处是算力和吞吐量大,而且编程比较容易,但是它存在的问题是,GPU 的功耗比较高,延迟比较大,特别是在应用部署领域的场景下,几乎没有人会用服务器级别的 GPU。

应用场景下用的更多的方案是 FPGA 或者 DSP,它们功耗比 GPU 低很多,但是相对的开发成本较大。DSP 依赖专用的指令集,它也会随着 DSP 的型号变化有所差异。FPGA 则是用硬件语言去开发,开发难度会更大。其实也有一起企业会用 CPU+FPGA 去搭建训练平台,来缓解 GPU 训练部署的功耗问题。

虽然刚刚提了很多神经网络加速的解决方案,但是最合适的还是 CPU+专用芯片。我们需要专用 AI 芯片的主要原因是: 虽然现在的硬件工艺不断在发展,但是发展的速度很难满足深度学习对计算力的需求。其中,最重要有两点:

第一,过去人们认为晶体管的尺寸变小,功耗也会变小,所以在相同面积下,它的功耗能保持基本不变,但其实这条定律在 2006 年的时候就已经终结了

第二点,我们熟悉的摩尔定律其实在这几年也已经终结了。

我们可以看到芯片在这几年工艺的发展变得越来越慢,因此我们需要依靠专门的芯片架构去提升神经网络对计算平台的需求。

图片 3

最著名的的一个例子就是 Google 的 TPU,第一版在 2013 年开始开发,历时大约 15 个月。TPU 里面使用了大量乘法单元,有 256*256 个 8 位的乘法器;片上有 28MB 的缓存,能够存储网络的参数和输入。同时,TPU 上的数据和指令经过 PCN 总线一起发过来,然后经过片上内存重新排布,最后计算完放回缓冲区,最后直接输出。第一版 TPU 有 92TOPS 的运算能力,但是只针对于神经网络的前向预测,支持的网络类型也很有限,主要以多层感知器为主。

而在第二版的 TPU 里面,已经能够支持训练、预测,也能够使用浮点数进行训练,单个 TPU 就有 45TFLOPS 的算力,比 GPU 要大得多。

图片 4

其实我们地平线也研发了专用的 AI 芯片,叫做 BPU,第一代从 2015 年开始设计,到 2017 年最终流片回来,有两个系列——旭日和征程系列,都针对图像和视频任务的计算,包括图像分类、物体检测、在线跟踪等,作为一个神经网络协处理器,侧重于嵌入式的高性能、低功耗、低成本的方案。

图片 5

比较值得一提的是,我们在我们的 BPU 架构上设计了弹性的 Tensor Core,它能够把图像计算所需要的基本单元,常用操作例如卷积、Pooling 等硬件化,非常高效地去执行这些操作。中间通过数据路由桥(Data Routing Bridge)从片上读取数据,并负责数据的传输和调度,同时,整个数据存储资源和计算资源都可以通过编辑器输出的指令来执行调度,从而实现更灵活地算法,包括各种类型的模型结构以及不同的任务。

总的来说,CPU+专用硬件是当前神经网络加速的一个较好的解决方案。针对专用硬件,我们可以根据功耗、开发容易度和灵活性进行排序,其能耗跟其他两者(开发容易度和灵活性)是相互矛盾的——芯片的能效比非常高,但是它的开发难度和灵活度最低。

如何设计高效的神经网络

说了这么多硬件知识,接下来我们讨论怎么样从算法角度,也就是从神经网络设计的角度去谈怎么加速神经网络。相信这个也是大家比较关心的问题。

我们先看 AI 解决方案,它从数据处理的方式可以分为云端 AI 和前端 AI。云端 AI 是说我们把计算放在远程服务器上去执行,然后把结果传到本地,这个就要求设备能够时刻连接网络。前端 AI 是指设备本身就能够进行计算,不需要联网,其在安全性、实时性、适用性都会比云端 AI 更有优势,而有一些场景下,也只能使用嵌入式的前端 AI 去解决。

嵌入式前端的场景落地难点在于功耗、成本和算力都是有限的。以网络摄像头即 IP Camera 为例,它通过网线供电,所以功耗只有 12.5 瓦,而常用的嵌入式 GPU——Nvidia TX2,为 10-15 瓦。另外这个 TX2 虽然在计算资源、算力方面都比较强,能达到 1.5T,但它的价格是 400 美元,对于很多嵌入式方案来说都是不可接受的。因此要做好前端嵌入式方案,我们需要在给定的功耗、算力下,最大限度地去优化算法和神经网络模型,达到符合场景落地的需求。

图片 6

我们加速神经网络的最终目标是:让网络在保持不错的性能下,尽量去降低计算代价和带宽需求。常用的一些方法有:网络量化、网络减支和参数共享、知识蒸馏以及模型结构优化,其中,量化和模型结构优化是目前看来最有效的方式,在业界也得到比较广泛的应用。接下来会重点讲一下这几个方法。

第一个是量化,它是指将连续的变量通过近似从而离散化。其实在计算机中,所有的数值表示都是离散化的,包括浮点数等,但是神经网络中的量化,是指用更低 bit 的数字去运行神经网络,而是不是直接使用 32bit 的浮点数(去运行神经网络)。近几年的一些研究发现,其实数值表达的精度对神经网络并没有太大的影响,所以常用的做法是使用 16bit 的浮点数去代替 32bit 的浮点数来进行计算,包括训练和前项预测。这个在 GPU 以及 Google 的 TPU 第二代中已经被广泛采用。此外,我们甚至发现,用半精度浮点数去训练数据,有时候还能得到更好的识别性能。实际上,量化本身就是对数据集正则化的一种方式,可以增加模型的泛化能力。

图片 7

此外,我们还可以将数据精度进行进一步压缩使用,将 8 bit 的整数作为计算的计算单元,包括训练和前项预测,这样带宽就只有 32bit 浮点数的四分之一,这类方法近年来也有不少工作,且已被业界所采用,比如 Tensorflow Lite 已经支持训练时模拟 8bit 整数的运算,部署时真正采用 8 bit 整数去代替,其在浮点和图像分类的性能上相当。我们地平线也有类似的工作,训练工具也是用 Int 8 bit 去训练、预测,并且我们的芯片支持 MXNet 和 TensorFlow 框架训练出来的模型。

能不能把精度压得更低呢,4 bit、2bit 甚至 1 bit?也是有的,但是会带来精度的极大损失,所以没被采用。

量化神经网络模型分为神经网络的权重量化、神经网络特征的量化。权重量化对于结果输出的损失比较小,特征量化其实对模型的输出损失会比较大,另外,大模型和小模型的量化造成的损失也不一样,大模型如 VGG16、AlexNet 这种网络模型,量化后几乎没有损失;而小模型则会有一些损失。现在 8bit 参数和特征量化可以说是一个比较成熟的方案,基本上可以做到跟浮点一样好,并且对硬件也更加友好。下面这个表,是在 Image Net 数据集上的进行的量化结果的评测,也是 Google Tensorflow Lite 的量化方案与我们地平线内部的量化方案的一个对比。

图片 8

我们可以看到,无论是哪一家的方案,损失其实都非常小,其中,小模型 MobileNet 0.25 在 Image Net 的损失方面,Google 在 1.6% 左右,而我们的量化方案能够维持在 0.5% 以内。同时我们这个量化方案在 2016 年就已经成熟了,而 Google 的去年才放出来,从这个角度上讲,我们这方面在业界内是领先的。

除了量化,模型加速还可以通过模型剪枝和参数共享实现。一个典型的案例就是韩松博士的代表性工作——Deep Compression。减支可以是对整个卷积核、卷积核中的某些通道以及卷积核内部任意权重的剪枝,这里就不多说,大家有兴趣可以去看一下原论文。

图片 9

与网络量化相比,剪枝和参数共享从应用角度上来看,并非一个好的解决方案。因为关于剪枝方面的研究,现在这些论文在大模型上做的比较多,所以在大模型上效果比较好,但是在小模型上的损失比较大,当然我们这里说的小模型是比 MobileNet 等模型更小的一些模型。另外,剪枝所带来的数据稀疏(任意结构稀疏),通常需要一个明显的稀疏比例才能带来一个实质性的的加速。结构化的稀疏加速比相对更容易达到,但是结构化的稀疏比较难训练。同时从硬件角度上讲,如果要高效地运行稀疏化的网络结构或者带共享的网络,就要专门设计硬件去支持它,而这个开发成本也比较高。

知识蒸馏也是很常用的压缩模型方法,它的思想很想简单,用一个小模型去学习一个大模型,从而让小模型也能实现大模型的效果,大模型在这里一般叫 Teacher net,小模型叫 Student net,学习的目标包括最终输出层,网络中间的特征结果,以及网络的连接方式等。知识蒸馏本质上是一种迁移学习,只能起到锦上添花的作用,比直接用数据去训练小模型的效果要好。

图片 10

最后讲一讲模型结构优化,它是对模型加速最有效的方式。下图可以看到从最初的 AlexNet 到今年的 MobileNetV2,参数已经从原来的 240MB 缩小到 35MB,模型的计算量也有了一定的减少,但是在图像分类的准确率上,从 57% 提到到了 75%,模型结构优化最直接的方式就是,有经验的工程师去探索小模型结构,而这些年来也有通过机器去进行搜索模型结构的工作。

图片 11

接下来讲一下在模型结构优化中,怎么去设计一个高效的神经网络结构,它需要遵循的一些基本原则。

图片 12

本文由科技发布,转载请注明来源:干货 | 地平线:面向低功耗 AI 芯片上视觉任务的