姓名:韩宜真
学号:17020120095
转载自:http://mp.weixin.qq.com/s?__biz=MjM5NDk3OTA3OA==&mid=2653790760&idx=1&sn=91e3adc193e69c4f2580c8e643a19eb9&chksm=bd268e418a5107577660ca9cbb5a280e7be75070104aad0698cf90e00d61c7bd786f13d7857f&mpshare=1&scene=23&srcid=1123tdkLUrIG70AFRC9DZ44F&sharer_sharetime=1606138303545&sharer_shareid=3f1a3081900d54d7638a82ca5b9e8a0d#rd
【嵌牛导读】能够在设备上进行深度学习推理的嵌入式视觉系统,可以为不同行业的应用提供强大的解决方案,其中包括装配、协作机器人、医疗技术、无人机、驾驶辅助和自动驾驶等。
【嵌牛提问】嵌入式视觉系统是如何在各领域发挥功能的呢?
【嵌牛鼻子】嵌入式系统 深度学习
【嵌牛正文】能够在设备上进行深度学习推理的嵌入式视觉系统,可以为不同行业的应用提供强大的解决方案,其中包括装配、协作机器人、医疗技术、无人机、驾驶辅助和自动驾驶等。与基于云技术的解决方案相比,在嵌入式设备上部署深度学习的优势包括:可以减少网络负载和降低延迟,从而开辟出新的应用。但是,实施这种方案需要一套合适的工具和硬件。
开发人员必须考虑可用的硬件、处理资源、内存大小和类型以及速度要求,例如成像速率、处理速度和带宽。开发人员还需要考虑图像分辨率或成像质量、功耗和系统的尺寸大小。针对这些系统要求,很多嵌入式图像处理系统都适用,包括智能相机、视觉传感器、单板机(SBC)等。
在深度学习方面,神经网络的训练不在嵌入式设备上进行,而是直接在嵌入式设备上执行训练好的网络(推理)。经过全面训练的神经网络通常只专注于某项特定任务(例如表面检测),但它可以在各种类型的嵌入式系统上运行。为此,经过训练的神经网络被转换为特殊格式,如开放式神经网络交换格式(ONNX),或神经网络交换格式(NNEF,见图1),或是转换为具有共享权重的网络描述文件。在众多神经网络中,卷积神经网络(CNN)凭借高性能、低功耗以及权重参数数量较少的优点,在深度学习技术中脱颖而出。上述优点还使CNN能适用于大多数嵌入式视觉应用。
图1:神经网络交换表单允许硬件制造商在训练框架和推理引擎之间,可靠地交换经过训练的神经网络。
为了节省资源,可以通过压缩和“修剪”的方法精简CNN网络。压缩是指对深度学习的算法和数据的压缩;而修剪是指在对结果影响不大的情况下,删除网络的某些特性、神经元和权重。也可以通过将计算精度降低到8-bit甚至4-bit定点数(量化)来简化CNN。二值神经网络(BNN)可以进一步精简网络,因为此类网络使用二进制权重进行运作,并将神经网络层中的定点乘法降低到1-bit运算。BNN所需的处理能力、功耗和循环率更低,但这是以牺牲计算精度为代价的,对于嵌入式应用来说它的计算精度可能太低。
精度损失所带来的影响因应用而异,不过这也有助于减少对存储空间的需求。三值量化(Trained Ternary Quantization – TTQ)提供了一种将权重转换为三元因子、并以2-bit格式进行储存的方法。使用这一方法可以获得接近全精度权重的数据精度,同时权重数量大大减少。最后,对于嵌入式系统而言,用户都必须要在性能和缩减权重之间取得适当的平衡。
选择合适的方法
在深度学习中,CNN会使用目标检测或模式/异常识别技术来处理图像,来获得例如分类这样的处理结果,从而对相应范本进行标注。嵌入式系统在处理大批量数据方面落后于PC。因此,运行CNN的嵌入式系统需要很高的计算能力(5~50 TOPS)和相应的大带宽容量,并要求尽可能低功耗,通常约为5~50W。系统性能取决于对功耗的需求以及客户对系统成本的承受能力。
根据应用和相应的数据量需求,可以将中央处理单元(CPU)与不同的芯片结合,起到加速应用的效果,其中包括来自Intel Movidius公司的Myriad 2和Myriad X视觉处理单元(VPU),或以色列Hailo公司的Hailo-8深度学习专用处理器(见图2)。此类芯片组经过专门设计,使开发人员和设备制造商能够在嵌入式设备中部署深度神经网络和人工智能应用。
图2:在以8-bit、224×224分辨率运行ResNet-50预训练神经网络时,Hailo-8处理器在1.7W的功率和2.8TOPS/W的算力下,实现了672fps的帧率。
在嵌入式系统中,通常使用基于ARM架构的CPU。CPU本身并不具备并行结构,也没有足够的计算能力,因此依赖于额外的处理器来进行推理运算。图形处理单元(GPU)拥有高度的并行处理能力以及高速存储访问能力,可以大大缓解主处理单元的负载。GPU发热量很大,但是在高计算速度的嵌入式版本中进行了优化,例如NVIDIA公司的Jetson或AMD公司的Ryzen Embedded。
在一个面部识别实验中,使用CPU每秒仅可识别1~4张人脸,相比之下,使用较新的嵌入式GPU则可以识别多达400张人脸。为了缩小这种性能差距,并更有力与GPU一争高下,CPU制造商已经在努力加快CPU的计算速度。
现场可编程门阵列(FPGA)同时具备运算速度高、散热量小和延迟低的特点,因此FPGA作为深度学习处理器的另一种选择,拥有巨大的潜力。例如,通过一些编程工作,开发人员可以像软件编程一样修改FPGA的电路设置,从而运行各种不同的神经网络。如果随着时间的推移,一项应用将需要使用多个神经网络,那么FPGA就是一个不错的选择。
另外还有一种选择,就是专用集成电路(ASIC),它一开始就是专为深度学习加速而设计的,例如它配备一个专用于高速乘法器矩阵和直接卷积的引擎。ASIC计算能力强大,同时发热量也较低。ASIC设备通常会尝试尽量降低内存访问,并在芯片上保持最大数据量,以加快处理速度和传输量。然而,ASIC的可编程性有限,因此在实施过程中的灵活性不足。此外,制造单个ASIC的成本高昂。尽管如此,ASIC依然是嵌入式视觉系统的适合之选,也可以相互组合使用。
总之,用于深度学习的嵌入式视觉系统通常由小型处理板和微型相机模块组成,例如Basler的dart BCON(基于MIPI)开发工具包(见图3)。在这个架构中,片上系统(SoC)是主处理单元,并将CPU作为应用程序加速器,另外还可以添加其他处理器,如GPU、FPGA或深度学习芯片组。系统模块(SoM)中包含一个SoC,并辅以内存(RAM)和电源管理等重要组件,使SoC可以适用于嵌入式深度学习应用。此类系统通常仍需要配备载板,并提供连接外围设备(如相机)所需的物理接头,客户可以自行开发这些载板以满足特定要求。相比之下,单板机的SoC从一开始就安装在载板上,带有适用于连接外围设备的固定端口。此外,还需要使用嵌入式操作系统来控制各个组件。
图3:Baslerdart BCON(基于MIPI)开发工具包包括相机模块、骁龙处理板以及镜头和线材等额外附件。
机器人要求
固定的工业机器人或移动/协作机器人,通常利用3D成像技术来感知周围环境。此类机器人可以进行物体分类、检测异常,并与其他人员、机器、定位工具和组装设备进行安全协作。对于机器人可以完成的许多任务,深度学习技术都可以进一步增加其灵活性。
例如通过迁移学习,经过预训练的神经网络可以直接适用于多个机器人应用,这不但能节省时间,并且具备成本效益。此类网络通过激励机器人的行为,利用深度强化学习来适应新的环境。为了进行奖励或惩罚(负奖励),系统会修改参数,让机器人可以重复良好的操作,使其能够在相对较短的时间段内学习新的工作步骤,即便是困难复杂、情况多变的检测环境(例如设备组装)也没有问题。
修改后的机器人行为可以使用传统算法进行编程,但过程非常费时费力。相反,借助深度学习技术,箱盒取物机器人就可以识别和抓取位置或方向不一致的部件,即使部件处于倾斜状态或被其他部件覆盖也不影响机器人抓取。通过这种方式,机器人可以独立适应环境,并根据输入数据(如普通图像、立体图像或3D图像)来查找已知部件。
适用的目标应用包括包装和打托盘、机器装卸、拾取与放置应用、箱盒取物、自动生产质量检测、电子装配、精细农业、工作步骤自动化以及医疗技术(包括智能设备、疾病早期检测、外科辅助系统)等。
结论
在嵌入式设备中部署深度学习技术,可降低在云端处理受保护图像而产生的相关安全风险。在嵌入式应用中,只需在一处生成和使用数据,就能提高整个工厂的效率。通过使用功能更强大的小型网络、用于嵌入式应用的新处理器以及改进的处理过程(如压缩、精简和量化),可以弥补增加的计算资源。
合适的深度学习芯片组和处理板因具体应用而异,必须针对不同应用来选择能与应用软件精确协调的芯片组和处理板。使用迁移和强化学习等技术,可以快速修改所使用的网络以及整个应用程序。嵌入式设备上的深入学习技术,也将继续在机器人应用之外的领域发挥重要作用。不同的应用应该选择哪些合适的组件和网络?这个问题将继续为系统集成商带来挑战。