机器人 4.0 白皮书

近日,达闼科技联合英特尔、新松机器人、科沃斯商用机器人共同发布《机器人 4.0 白皮书 ——云-边-端融合的机器人系统和架构》。

报告摘要

近年来,数字经济正在席卷全球,全球经济向数字经济迁移已经势在必然,数字经济已经成为国家的核心竞争力。据上海社科院测算,2016 年到 2018 年,中国数字经济对 GDP 增长的贡献率分别达到了74.07%、57.50%和 60.00%。预计 2019 年中国数字经济增长仍将占到62.50%。

数据成为驱动经济增长的核心生产要素。大数据和云计算等技术的融合,推动了物联网的迅速发展,实现了人与人、人与物、物与物的互联互通,导致数据量呈现爆发式增长。数据如同农业时代的土地、劳动力,工业时代的技术、资本一样,已成为数字经济时代的生产要素,而且是核心的生产要素。数字技术出现后,网络和云计算成为必要的信息基础设施。随着数字经济的发展,数字基础设施的概念更广泛,既包括了信息基础设施,也包括了对物理基础设施的数字化改造。

移动互联网、大数据、云计算、物联网、人工智能等信息技术的突破和融合发展促进了数字经济的快速发展。数字经济驱动未来,数字经济成为经济社会发展的主导力量。作为硬科技代表的机器人行业,将利用数字经济中的技术红利加速机器人的落地。人工智能、5G 通讯、计算的模式等都对机器人领域有着潜在而巨大的贡献。

一 报告正文

迈向云-边-端融合的机器人 4.0 时代

1 .数字经济的基础设施和发展趋势

近年来,数字经济正在席卷全球,全球经济向数字经济迁移已经势在必然,数字经济已经成为国家的核心竞争力。据上海社科院测算,2016 年到 2018 年,中国数字经济对 GDP 增长的贡献率分别达到了 74.07%、57.50%和 60.00%。预计 2019 年中国数字经济增长仍将占到 62.50%。

数据成为驱动经济增长的核心生产要素。大数据和云计算等技术的融合,推动了物联网的迅速发展,实现了人与人、人与物、物与物的互联互通,导致数据量呈现爆发式增长。数据如同农业时代的土地、劳动力,工业时代的技术、资本一样,已成为数字经济时代的生产要素, 而且是核心的生产要素。数字技术出现后,网络和云计算成为必要的信息基础设施。随着数字经济的发展,数字基础设施的概念更广泛,既包括了信息基础设施,也包括了对物理基础设施的数字化改造。

近年来,移动互联网、大数据、云计算、物联网、人工智能等信息技术的突破和融合发展促进了数字经济的快速发展。数字经济驱动未来,数字经济成为经济社会发展的主导力量。作为硬科技代表的机器人行业,将利用数字经济中的技术红利加速机器人的落地。人工智能、5G 通讯、计算的模式等都对机器人领域有着潜在而巨大的贡献。

2 .机器人技术发展主要阶段分析

2017 年,中国信息通信研究院、IDC 国际数据集团和英特尔共同发布了《人工智能时代的机器人 3.0 新生态》白皮书,其中把机器人的发展历程划分为三个时代,分别称之为机器人1.0、机器人 2.0、机器人 3.0。

机器人 1.0(1960-2000),机器人对外界环境没有感知,只能单纯复现人类的示教动作,在制造业领域替代工人进行机械性的重复体力劳动。机器人 2.0(2000-2015),通过传感器和数字技术的应用构建起机器人的感觉能力,并模拟部分人类功能,不但促进了机器人在工业领域的成熟应用,也逐步开始向商业领域拓展应用。机器人 3.0(2015-),伴随着感知、计算、控制等技术的迭代升级和图像识别、自然语音处理、深度认知学习等新型数字技术在机器人领域的深入应用,机器人领域的服务化趋势日益明显,逐渐渗透到社会生产生活的每一个角落。在机器人 2.0 的基础上,机器人 3.0 实现从感知到认知、推理、决策的智能化进阶。

3 .应用领域分析和大规模商用的难点

当前,全球机器人市场规模持续扩大,工业机器人市场增速稳定,服务机器人增速突出。2018 年,全球机器人市场规模达 298.2 亿美元,2013-2018 年的平均增长率约为 15.1%。在装备制造领域,机械臂凭借强大的负重能力和精准的抓取操作代替着工人的双手;在物流领域, 智能仓储机器人和无人搬运车不断提高着运输效率;在生活服务领域,家用清洁机器人和服务机器人正成为许多家庭的私人保姆和小秘书。

工业制造领域分析

目前,工业机器人在汽车、金属制品、电子、橡胶及塑料等行业已经得到了广泛的应用。随着性能的不断提升,以及各种应用场景的不断清晰,2013 年以来,工业机器人的市场规模正以年均 12.1%的速度快速增长,预计到 2020 年将达到 230 亿美元的销售额。随着人力成本的上升,工业制造领域的应用前景良好,将会保持快速增长的势头。同时,工业机器人需要拥有更高的灵活性、更强的自主避障和快速配置的能力,提高整体产品的易用性和稳定性。

消费服务领域分析

服务机器人虽然整体销售额低于工业机器人,但近几年一直维持着较高的年增长率,商用 服务机器人在商场、银行、酒店、机场等应用场景有了更多的落地部署,主要提供导览、问询、送物等基础服务。同时,家用服务机器人悄然进入千家万户,扫地机器人销量在家用服务机器 人销量中占主要份额,成为目前家务机器人中的主导品类。由于本体能力不足,隐私、安全方 面的问题,家庭管家机器人和陪伴型机器人的市场渗透率较低。2013 年以来全球服务机器人市场规模年均增速达 23.5%,预计 2020 年将快速增长至 156.9 亿美元。

从整个技术发展和市场环境看,机器人产业拥有以下发展推力:

  • 成熟的生态系统
  • 老龄化人口趋势和新兴市场
  • 更多智能产品互联和智能家庭建设
  • 人工智能、自然语言理解能力的增强

大规模商用的难点

在以上几点的助推下,机器人产业会继续快速发展,但要达到大规模商用,还有很多难点需要解决。

首先,机器人目前的能力不能满足用户期望,缺少关键场景。得益于人工智能带来的红利, 近年来机器人感知能力提升明显,可以通过视觉进行人脸识别,做语音交互。但是要真正替代 人类的劳动时间,做一些实际工作,机器人除了要具备感知能力,还要能够理解和决策。机器人需要有记忆、场景理解的能力,拥有知识,才能够优化决策,自主实施工作,并进行个性化演进。目前的机器人依然缺少令人瞩目和必不可少的应用场景,大部分人对于在家中拥有一个机器人没有很高的兴趣。在机器人提高自身能力,完成特定和复杂问题之前,这一比例将维持低水平。

其次,价格高,不成规模。传感器和硬件的价格一直在下降,但是机器人的价格依然很高, 不能被广泛的市场用户接受,没有形成市场规模。扫地机器人由于较低的价格,目前快速的进 入大众家庭。但是对于大多数类别的机器人,特别是具有更强功能、高精度移动底盘、机械臂 的机器人,价格依然是一个痛点。

第三,隐私、安全和数据保护问题亟待解决。随着机器人的应用领域越来越广泛,其物理安全和用户的数据安全问题更加凸显。在与机器人的交互过程中,机器人会不断收集用户的图像、语音、行动数据进行导航和决策,这些数据有的在本地处理,有的在云端处理,人们对这些数据的安全抱有疑虑。对于能够自由移动的服务机器人和拥有机械臂的工业机器人,保证机器人自身的物理安全,不被恶意攻击,避免造成人身伤害也至关重要。

4 .机器人 4.0 的定义和发展机会

机器人 3.0 预计将在 2020 年完成,在此之后,机器人将进入 4.0 时代,把云端大脑分布在从云到端的各个地方,充分利用边缘计算去提供更高性价比的服务,把要完成任务的记忆场景的知识和常识很好的组合起来,实现规模化部署。机器人除了具有感知能力实现智能协作,还具有理解和决策的能力,达到自主的服务。在某些不确定的情况下,它需要叫远程的人进行增强,或者做一些决策辅助,但是它在 90%,甚至 95%的情况可以自主完成任务。

要达到这一目标,首先需要利用人工智能和 5G 技术。利用人工智能技术提高机器人本体感知能力的同时,提升个性化自然交互能力。利用 5G 技术,大大缩短从终端到接入网的时间, 带宽大幅度上升,很多东西可以放到边缘端,加入更多的计算能力,包括云端大脑的一些扩展, 助力机器人规模化部署。

类似互联网的三级火箭发展模式,第一阶段——关键场景,把握垂直应用,提高场景、任 务、能力的匹配,提高机器人在关键应用场景的能力,扩大用户基础;第二阶段——人工增强, 通过加入持续学习和场景自适应的能力,延伸服务能力,取代部分人力,逐步实现对人的替代, 让机器人的能力满足用户预期;第三阶段——规模化,通过云-边-端融合的机器人系统和架构, 让机器人达到数百万千万级水平,从而降低价格成本,实现大规模商用。

5 .白皮书结构说明

本白皮书由英特尔、达闼科技、新松机器人、科沃斯商用机器人共同发布,分为八章。第 一章分析机器人发展情况,并定义机器人 4.0;第二章阐述人工智能和 5G 通讯技术推动机器人架构创新,并提出云-边-端融合的机器人系统和架构;第三章重点分析机器人 4.0 所需的核心技术;第四章探讨云端大脑和安全专网;第五章讨论边缘智能如何支持多机器人协作;第六章 思考服务机器人的场景认知、进化和业务;第七章描述协同创新与合作共赢的关键领域和方向;第八章进行总结与展望。

二 人工智能和 5G 通讯技术推动机器人架构创新

1 .人工智能技术演进和应用现状

人工智能技术的正式提出始于 1956 年,到目前为止已经取得不少进展。从技术上而言, 可以初略划分为两类方法,一类是符号方法,一类是统计方法(支持向量机,神经网络,深度学习都可以归为这一类)。

人工智能的发展可以大致分为两个阶段,1990 年以前主要是符号方法,包括基于规则,逻辑等。八十年代的基于知识库的专家系统是这个时期人工智能走向应用的一个尝试,取得了 一定的成果,但也很快显现了这类方法的问题,比如相对开放领域的知识库很难建立完整(尤其是常识知识很难表示完全),知识库增大后知识推理的组合爆炸,缺乏学习能力等问题。

上世纪 90 年代开始,统计方法开始盛行,取得了不少的进展,包括支持向量机等机器学习方法,并广泛应用于语音识别,自然语言处理,计算机视觉,数据挖掘等领域。从 2012 年开始,深度学习方法在计算机视觉,语音识别方面取得了较大的突破,不少任务的性能在大规模数据集上面得到大幅度提升。人工智能尤其是深度学习方法已经在不少领域开始广泛应用,包括语音识别,人脸识别等,作为机器人 3.0 的核心技术,在机器人的应用中起到了重要的作用。近年来人们发现了困扰传统机器学习方法的一些问题,如鲁棒性、可解释性,小数据学习在深度学习方法的框架下仍然没有得到解决。

总体说来,人工智能技术 60 多年来取得了不少的突破,但也存在不少亟待解决的问题。人工智能之父明斯基在发布他的新书之前发表的一篇论文也深刻地指出,目前人工智能的进展低于他的期望,其中一个主要原因是主流的方法(符号方法,统计方法或更细分的方法)都是想基于单一方法来解决人工智能问题,而真正的人类智能则是有机地结合了多种方法并进行选择应用的结果,未来的人工智能需要走这个方向才能进一步突破。机器人领域的应用对人工智能提出了尤其更高的要求,这也就需要在人工智能领域取得更多的突破。

2 .5G 通讯技术的演进和应用现状

5G 是第五代移动通信技术的简称,5G 标准自 2016 年在 3GPP正式开始立项,于 2017 年 12 月完成了5G R15 非独立组网的标准制定,支持在 4G 网络下同时部署 5G 网络,并于 2018 年 6 月完成了 5G R15 独立组网的标准制定。目前 5G 在各个国家开始了实验性部署。

在国内, 三大运营商从 2018 年开始 5G 实验网的测试,2019 年已经在部分城市完成了在 sub-6Ghz 频段以下的 5G 规模测试。5G 实验网峰值速率可以达到 10Gbps,在密集部署城区平均速率达到了 100Mbps,在低时延模式下,5G 终端和基站传输时延达到 1 毫秒以内,满足了 ITU 最初制定 5G 需求。2019 年 6 月,国内正式发布了5G 的牌照,中国移动、中国联通、中国电信和广电开始了商用部署。4G技术从 2008 年 3GPP release8 标准完成到 2013 年4G 牌照的发布用了5 年时间,5G 从标准完成到牌照的发布只用了一年,凸显了国内 5G 发展的迫切和重要。

除了网络传输能力的提升,5G 还制定了非常灵活的空中接口和核心网标准,增强了对不同业务支持的能力,相对于 4G 以移动宽带(MBB)为主的应用,5G 的应用领域进一步加强移动宽带业务(eMBB),比如高清/全景视频,移动 VR/AR 等等,同时 5G 的应用拓展到海量 连接的物联网(mMTC)和高可靠低时延(URLLC)的业务。URLLC 的业务包括车联网、自动驾驶、远程医疗、工业自动化等应用。

国内的 5G Sub-6Ghz  频段部署,eMBB, URLLC, mMTC 应用都可以得到很好的支持。在高频段,比如28GHz 左右,目前在国内还在实验阶段,高频段将主要支持 eMBB 应用。对于云端机器人应用,既有时延和可靠性要求不高的应用,比如数据备份、训练数据的采集等等,也有实时视频传输交互,还有对时延和可靠性要求非常高 的机器人的运动控制、远程操控等等。这些应用,可以在 5G  网络上,通过灵活的配置得到更好的支持。

对于 5G 的应用,其最初的商用部署是针对 eMBB 业务,比如 5G 的手机等等,由于标准和网络设备的复杂性,5G 设备和网络的功能会根据需求演进。如果 eMBB 模式不能完全满足需求,就需要积极和运营商、设备商沟通、合作,推动对该业务的支持。同时5 的 标准也在不断的演进,目前 5G R16 版本的标准正在制定过程中,计划将于 2019 年底完成。R16 版本将包含对 5G 网络效率的提升和应用的增强,比如对车联网、工业 IoT 和 URLLC 业务的增强。5G 网络的持续演进将进一步增强网络的能力和灵活性,满足机器人 4.0 的云-边-端的更高的互联要求。

3 .云端大脑对机器人能力的增强

2010 年提出的云机器人概念引入了云端大脑,机器人尝试引入云计算、云存储及其它云技术,达到机器人融合基础设施和共享服务的优点。相比于独立的机器人本体,连接云端大脑后的机器人拥有以下四个核心优势。

  • 信息和知识共享:一个云端大脑可以控制很多机器人,云端大脑可以汇集来自所有连接机器人的视觉、语音和环境信息,经云端大脑智能分析处理后的数据信息可以被所有连接机器人使用。利用云服务器,各机器人本体获取和处理的信息可以保持最新, 并安全备份。
  • 平衡计算负载:一些机器人功能需要较高的计算能力,利用云端平衡计算负载可以降低机器人本体的硬件需求,在保证能力的同时,让机器人更轻、更小、更便宜。
  • 协同合作:通过云端大脑,机器人本体不再独立工作,多机器人可以协同工作,例如共同搬运货物,配合完成一整套工作流程等。
  • 独立于本体持续升级:借助云端大脑,机器人可以独立于本体持续升级,不再依赖于本体硬件设备。

4 .边缘计算对机器人服务的提升

IoT 应用的快速发展,使得大量数据在网络边缘产生,推动了边缘计算的产生和发展。边缘计算的提出始于4G 时代,将计算和存储资源部署到网络边缘,不仅可以减少核心网和互联网上的流量,还可以显著降低传输时延,提高网络可靠性。

低时延的业务需要终端、移动蜂窝网(接入网和核心网)、互联网、数据中心的端到端的保障。目前的测试结果表明 5G 手机和基站的数据通路延时可以达到 4 毫秒,在 URLLC 模式下,手机和基站的延时可以达到1毫秒以下,相比 4G 的 20 毫秒提高了 20 倍左右。对于互联网和数据中心的时延,一般情况下由于地理位置分布广和未针对低时延优化,从核心网网关到互联网数据中心可在几十到几百毫秒之间。在 5G中,其核心网引入了分布式网关,网关可以下沉到基站附近,边缘服务器可以直接连接到分布式网关上,大大降低网络的端到端时延。

边缘计算的引入将解决终端能力受限和云计算的实时响应的问题,增强机器人云端大脑的 实时响应能力,对于满足机器人 4.0 的要求十分关键,比如实时的推理、场景理解、操控等等。边缘计算和云计算的结合,将突破终端的计算能力和存储的限制,提高 AI 算法的训练和推理能力,比如提升精度和降低训练时间。

同时将大部分机器人的智能布署在边缘和云端,通过协 作和不断的训练,持续不断的提高机器人智能,比如通过边缘计算能更好的支持实时的多机协 作,支持实时的知识图谱提取、理解和决策,持续不断的提高机器人的智能。边缘计算和云计算还可以解决机器人终端升级维护的困难,在机器人本体的生命周期内不断升级,提高机器人的能力,增强数据安全和隐私保护,充分利用摩尔定律带来的性能提升。

5 .云-边-端一体化对机器人系统的支撑

云-边-端一体化构建了一个通过机器人提供多样化服务的规模化运营平台。其中,服务机器人本体是服务的实施者,而实际功能则根据服务的需要无缝地在终端计算(机器人本体)、边缘计算和云计算之间分布和协同。机器人系统类似现在智能手机上的各种 APP,主要关注如何实现高性价比的多模态感知融合、自适应交互和实时安全计算。

  • 多模态感知融合:为了支持机器人的移动、避障、交互和操作,机器人系统必须装备 多种传感器(如摄像头、麦克风阵列、激光雷达、超声波等)。同时,环境里的传感 器可以补足机器人的物理空间局限性。大部分数据需要在时间同步的前提下进行处理, 并且调用不同复杂度的算法模块(例如 SLAM,图像处理,人和物体的识别等)。机器人硬件系统和边缘计算需要协同来支持(可能来自多个机器人的)多传感器数据同 步和计算加速,因此应该采用能灵活组合 CPU、FPGA 和 DSA (Domain-Specific Accelerator)的异构计算平台。另一部分没有强实时性要求的感知任务(如人的行为 识别、场景识别等),可以由云计算支持。
  • 自适应交互:为了支持机器人的个性化服务和持续学习能力,需要将感知模块的输出与知识图谱结合对环境和人充分理解,并且逐步提取和积累与服务场景和个人相关的个性化知识。通用知识和较少变化的领域知识应该存放在云端,而与地域和个性化服务相关的知识应该存放在边缘或者终端。无论知识存放在哪里,在机器人系统中应该有统一的调用接口,并可以保证实时通讯。基于 ROS2 构造涵盖终端和网络侧的软件系统框架可以满足未来的需求。
  • 实时安全计算:未来的服务机器人应用将有大量需要实时响应的情形(如语音交互、协同操作等),因此需要在边缘服务器部署相应的加速硬件。同时,机器人也将处理 大量涉及用户隐私的数据(如视频、图像、对话等)。云-边-端一体化架构需要构建隐 私数据的安全传输和存储机制,并且限定物理范围。对于可以进行物理操作的机器人, 要构建独立的安全监测机制,保证即使机器人系统被远程攻击劫持后也不会造成物理 安全损害。

三 机器人 4.0 核心技术

在机器人 3.0 时代,服务机器人可以做到一些物体识别、人脸识别,在 4.0 时代需要加上自适应能力。因为用深度学习做物体识别、人脸识别的时候需要很多的数据来源,但是真正到家庭场景时没有那么多数据,这就要求机器人必须通过少量数据去建立识别能力,自己去找到不同的位置,不同的角度做训练。

这些就是机器人 4.0 要做的,首先对三维环境语义的理解,在知道它是什么的基础上,把看到的信息变成知识,让存储就变得更加合理,而且可搜索,可查询,可关联,也可推理。应用层可以根据这个知识和观测为现场场景做出智能的提醒,寻找物品,进行行为检测。例如,老人要出门,机器人的知识库告诉他,今天预报要下雨,但是检测到老人没有带伞,然后查询伞的位置,机器人就可以把伞送到老人手里。这都是结合内部知识和外部情况所做的决策。

知识图谱在整个学术界和工业界越来越受到重视。获得图灵奖的杰夫∙辛顿教授在加入谷歌的时候就说要建一个知识图谱给全世界用。阿里研究院发布 2019 年的十大技术趋势 [8] 里面也专门提到了知识图谱的重要性。这是人工智能迈向下一个阶段的必由之路,也是必做之事。

总结下来,机器人 4.0 主要有以下几个核心技术,包括云-边-端的无缝协同计算、持续学习、协同学习、知识图谱、场景自适应和数据安全。

1 .云-边-端的无缝协同计算

受制于网络带宽以及延迟的制约,当前绝大多数机器人 3.0 系统是以机器人本体计算为主, 云端处理非实时、大计算量的任务为辅的系统架构。机器人的主要任务可以简单划分为感知、 推理及执行三大部分。为了能够精准地感知理解环境以服务于人机交互,机器人系统通常集成 了大量的传感器,因而机器人系统会产生大量的数据。比如采用了高清摄像头,深度摄像头, 麦克风阵列以及激光雷达等传感器的机器人,每秒钟可以产生 250MB 以上的数据量。如此海量的数据全部传输到云端处理既不现实,也不高效。因此,需要将数据处理合理地分布在云- 边-端上。

另一方面,完成感知和理解的 AI 算法也非常复杂。机器人所使用的 AI 算法通常需要很强的算力,例如Faster RCNN 算法在 GPU上可以达到 5fps 的处理能力,但是 GPU 的功耗达到 200W 以上,机器人本体很难承受,从计算成本而言同样也非常昂贵。虽然机器人本体计算平台的计算能力仍在不断提高,但是相对于 AI 算法的需求依然有限。为了完成机器人的计算需求,需要在云和边缘侧提供算力的支持,以实现在大规模机器人应用场景下,更有效、更经济的计算力部署。

随着 5G 和边缘计算的部署,机器人端到基站的延迟可以达到毫秒级,使得 5G 的网络边缘可以很好地支持机器人的实时应用。同时,边缘服务器可以在网络的边缘、很靠近机器人的地方处理机器人产生的数据,减少对于云端处理的依赖,构成一个高效的数据处理架构。

云-边-端一体的机器人系统是面向大规模机器人的服务平台,信息的处理和知识的生成与应用同样需要在云-边-端上分布处理协同完成。例如,汇集来自所有连接机器人的视觉、语音和环境信息,加以分析或重构后,被所有连接的机器人所应用。

因此,在通常情况下,云侧可以提供高性能的计算以及通用知识的存储,边缘侧可以更有效的处理数据,提供算力支持,并在边缘范围内实现协同和共享,机器人终端完成实时的操作和处理等基本机器人的功能。然而由于机器人的业务需求多种多样,协同计算的部署也不是一成不变的,机器人 4.0 系统还要支持动态的任务迁移机制,合理的根据业务需求将不同的任务迁移到云-边-端,实现云-边-端的无缝协同计算。

2 .持续学习和协同学习

在机器学习方面,机器人 3.0 主要是采用基于大量数据进行监督学习的方法,这也是目前机器学习的主流方法,而在机器人 4.0,还需要加上持续学习和协同学习的能力,才能使得机器人能够适应更复杂的应用场景。

在 3.0 时代,服务机器人可以做到一些基本的物体识别、人脸识别,但由于机器人应用对感知识别的正确率要求很高,尽管这些方法在别的要求不高的领域已经可以满足应用需求(例如互联网搜索有 80%的正确率就够了),但对于机器人应用而言则远远不够。

第一是机器学习 所固有的鲁棒性方面的问题,深度学习方法也不能幸免,识别结果可能出错,而且出错的时候 系统也不知道自己错了,这样就可能造成服务的失败和错乱。例如人需要机器人取东西 A,而机器人却取了东西 B, 轻则闹笑话,引起用户不满,严重的可能会造成对用户的伤害(比如取错药品的情况)。鲁棒性的问题是目前所有机器学习方法自身的一个通病,因为训练数据中总 是存在着长尾数据无法被准确识别,该问题很难通过现有的监督学习方法在部署产品前就解决。

第二是数据不足,这也是现实应用中普遍出现的情况,例如用人体特征进行身份识别的时候需要大量的数据(几百张以上的不同人体姿态、角度的照片),而这些数据又无法事先获得。总结下来,这两方面的问题都和缺少数据直接相关。

要解决这些问题必须让机器人具有自主的持续学习能力。具体说来,机器人可以先通过少 量数据去建立基本的识别能力,然后会自主的去找到更多的相关数据并进行自动标注(或通其 他方式,例如与人交互来获得标注,但要注意尽量减少对用户的打扰)。用这些新的数据来对 已有的识别模型进行重新训练以改进性能,随着这个过程不断进行,机器人可以把识别的性能 不断提高。具体拿物体识别来说,机器人应该先通过少量数据来建立对该物体的基本识别能力, 然后可以自己去找到不同的位置,不同的角度做训练,不断提高对这个物体的识别精度,在一 段时间的持续学习后达到接近 100%,一个初步实现参见文献。

在实际应用中,一个机器人能接触到的数据是有限的,其持续学习的速度可能会受到限制。机器人 4.0 是一个云-边-端融合的系统,如果能够在机器人间或机器人与其他智能体间通过这个系统来共享数据、模型、知识库等,就能够进行所谓的协同学习。通过云端的模拟器来进行虚拟环境中的协同学习也是一种行之有效的方法,可以充分利用云的大规模并行处理能力和大数据处理能力。协同学习使得机器人的持续学习能力进一步增强,可以进一步提高学习的速度和精度。

3 .知识图谱

知识图谱在互联网和语音助手方向已经开始较为广泛的应用,尤其是百科知识图谱。机器人也有百科知识问答类的应用场景,对于这类的知识图谱可以直接加以应用。但不同于通常的百科知识类的知识图谱,机器人应用的知识图谱有一些不同的需求:

(1)需要动态和个性化的知识。机器人往往需要对所在的环境和人进行更深入的理解才能进行更好的服务,而且不仅仅是当前的情况,要对过去发生的一些情况进行记录(例如要了解老人通常什么时候起床,某个物体一般放在什么位置)。因此,机器人需要记录环境里不同时间的人和物、发生的事件等相关信息,这些都是通用知识图谱所不能事先提供的,必须在环境里去获取。这些动态的个性化知识能很好的对人进行个性化的服务,例如通过对某用户的观察,机器人可以观察到该用户的一些喜好,或者一些行为模式,这些信息可以帮助对该用户提供更好的服务。

(2) 知识图谱需要和感知、决策紧密结合, 并帮助实现更高级的持续学习能力。从人工智能发展的历史看,单一方法很难彻底解决 AI 问题,前面的介绍也提到不论符号方法还是统计方法都已经显现了瓶颈,而且目前在单一方法里都没有很好的方法解决这些瓶颈问题。按照明斯基的分析,未来需要多种方法结合的 AI 系统。从最近几年的研究进展看,这也是未来人工智能取得进一步突破的必经之路。

所以不同于以往知识图谱和计算机视觉等统计方法基本是独立运作的做法,知识图谱必须和感知决策更深入、有机的结合。具体来说,知识图谱的信息是从感知中获取的,通过基础的感知,加上场景理解,获得的信息可以存入知识图谱,然后这些知识可以进一步进行模式的挖掘(比如时间空间相关的模式)来获得更高层的知识。

知识图谱的一些知识又可以作为环境上下文信息提供给感知算法来进行连续学习,从而实现自适应的感知算法。从某种意义来说,这已经不是传统意义上的纯符号方法的知识图谱,而是一种混合的知识图谱,即符号方法和统计方法结合的知识图谱。这也是未来很有潜力取得突破的一个方向。

由于云-边-端融合的需要,知识图谱会分别存放在机器人侧,边缘侧和云侧,其接口可以采用统一的接口以利于系统对知识图谱进行统一的调用。由于协同学习和实时处理的需要,知识和其他相关信息(如数据,模型等)还可以通过云侧、边缘侧来进行共享,通过一定的冗余备份来达到更高的实时性。这类似于计算机架构中的高速缓存机制(Cache), 比如部分存储在云端的知识经常被调用,可以缓存到边缘端或机器人端提高其存取的速度。在 5G 网络下,延迟本身不是大问题,主要考虑更充分的利用边缘端和机器人端的计算能力,达到整体资源的最优利用。

4 .场景自适应

有了持续学习和知识图谱, 系统在感知方面的鲁棒性大大提高,也在场景分析方面获得了丰富的信息并存在知识图谱中,这就使得机器人能够根据当前的场景进行相应的行动。

场景自适应技术主要通过对场景进行三维语义理解的基础上,主动观察场景里人与物的变化,并预测可能发生的事件,从而产生与场景发展相关的行动建议。例如在养老/助老应用中老人端着一碗汤走向冰箱,机器人可以通过以往的经验或知识预测老人是要去开冰箱放东西, 就可以帮老人打开冰箱。再例如,机器人看到地上有一块果皮,预测可能会导致老人摔倒,这时机器人可以主动捡起果皮(机器人配备了手臂操控的情况下)或站到果皮边并警告老人。

这部分的关键技术是场景预测能力。场景预测就是通过对场景里的人、物、行为等的长期 观察,并结合相关的知识和统计模型来总结出一些个人偏好或行为模式,并据此来预测目前场 景要发生的事件。过去人工智能的符号方法中框架、脚本表示在这里可以作为知识表达的形式, 但更关键的是需要把符号方法和统计方法结合起来,从而解决以往单独用符号方法无法解决的 问题(比如缺少学习能力)。这部分的研究还处于比较初期的阶段,但相信在基于持续学习、知识图谱等技术充分结合的基础上,该方向在未来几年会有较大的突破。最终使得整个机器人 的闭环系统,即感知-认知-行动,变得更加智能和人性化。

云端融合在这里起到非常重要的作用,尤其是知识的共享方面。例如前面的水果皮的例子, 这方面的模式可能发生的不多,在单个机器人的情况下可能从来没见过这个情况,也就无法知 道是危险的。如果通过云-边-端融合,只要有一个机器人看到过这个危险情况的发生,就可以 把该知识分享给所有的机器人,所有的机器人就可以去预测这些危险情况了。除了通过在实际 的物理世界中观察,在云端通过大规模的模拟来预演生活中可能发生的情况,可能也是另外一 个有效的方法来获得更多的事件模式。

5 .数据安全

由于机器人配备了多种多样的传感器,在工作过程中可以搜集到很多的信息,包括视觉数 据,语音数据,位置数据等,这些重要的隐私数据都需要得到保护。在机器人处于云-边-端融 合的环境中,数据的处理根据需求会发生在机器人侧,边缘侧或者云侧,在网络受到攻击的情 况下,保护用户的隐私数据的安全变得尤其重要。

一方面可以通过数据脱敏的手段来消除隐私性;但是从根本上而言,云-边-端融合的机器人系统需要完整的数据安全保障机制,既要求保 证端到端的安全传输,也要保障在服务器端的安全存储。在机器人侧,传感器数据安全地传输 到可信计算单元,以及控制命令安全地传输到执行单元尤其重要,只有确保输入输出的安全, 才可以确保机器人在受到网络攻击的情况下,也能保证机器人物理安全的逻辑得到正确的执行。因此,在机器人侧,需要构建一个从传感器和执行器到可信计算单元之间的可信传输通道。

除了原始的隐私数据外,通过用户数据推理得到的个性化知识也包含了用户的隐私信息, 同样需要得到安全的保障。在云-边-端融合的环境下,机器人侧,边缘侧以及云侧的数据安全需求不同,因此需要不同的安全保障机制。在机器人本体方面需要保证重要的隐私数据的物理安全和安全相关应用的代码安全,网络侧和边缘端需要对用户的数据,以及根据用户数据推理得到的隐私信息做好保护,只有被授权的用户才可以得到访问权。尽量避免敏感数据上传到云端,存储在云端的数据需要提供安全存储鉴别机制。

四 云端大脑和安全专网的实践与思考

1 .云端智能机器人架构

为了让机器人具备通用智能,包括类人的感知和认知能力,类人的动作行为和类人自然交 互能力,并同时最大限度地保障机器人的运行安全,需要构建类人“大脑”的智能体。目前机 器人本体计算能力有限,必须通过可以无限扩展的云端计算能力来提供智能机器人所需的能力。

通过无线 5G 通信网络和一个安全高速骨干网络构成机器人“神经网络”,实现机器人本体和云 端大脑的连接。云端大脑包括机器人视觉系统、对话系统、运动智能和极限现实系统等技术, 其通过人工智能算法不断训练进化,使得前端机器人本体智能随之迅速提高。因此,采用云-网-端结合的智能机器人系统架构,具有更强的适应性和扩展性。

达闼科技提供的机器人云端智能大脑,利用深度学习、强化学习和迁移学习技术,通过物理和虚拟平行智能平台,以及多模态 AI 能力,让机器人的智能快速向人类智能汇集。必要时刻的人类干预确保了 AI 决策的安全性和可控性。极限现实系统借助流行的游戏引擎,有助于利用大量的游戏开发者进行环境的建设。

为了让机器人更加智能,更好的为人类提供服务,云端智能机器人不再是可以和人类简单对话、唱歌、跳舞的娱乐工具,而是需要在实际应用场景中帮助人们完成多种特定的任务,包括抓取目标物体、移动到指定位置等。具备这种云端大脑的新型云端智能机器人将可满足各种服务性行业(如医院、银行、营业厅、迎宾接待、教育等),以及家庭保姆服务等不同场景的需求。支撑机器人在营业厅 VIP 室端茶送水,在养老院与老人聊天、下棋、陪护、护理,在家中做饭、打扫、与人沟通、照看老人小孩以及陪伴应用场景等。

2 .云端机器人大脑

云端机器人“大脑”(如图 5)是由一个可以运行足够大规模机器人,并面向人工智能服务的平台;包含机器学习、人工智能视觉、自然语言处理和机器人运动智能,以及平行智能体的虚拟空间的综合智能平台;人类智慧增强的人机融合机器人运营服务平台;和面向各类机器人应用服务的云端智能开放能力平台四大部分构成。通过云端将机器人的智能视觉系统、智能语音对话系统、运动智能和极限现实系统等融合起来,形成真正可为人类服务的智能机器人。该技术架构富有弹性和无限的潜力,机器智能可以在很多应用场景下为人提供多种应用服务。

云端智能“大脑”具备提供机器人角色和对应智能技能服务,其中人工智能技能服务提供包括但不限于视觉自主导航和运动、行为智能(如视觉反馈抓取物体)等智能运动系统,人脸识别、人体识别、2D/3D 物体识别、环境识别、3D 重建/语义分割等智能视觉系统,包括自动语音识别、自然语言理解、情绪识别以及对话知识库等智能对话系统,以及用来模仿学习和训练机器人综合智能的虚拟平行智能平台。

通过大规模计算力来构建机器人的大脑中枢系统,通过深度学习、强化学习、模仿学习等 AI 技术,通过物理世界和平行虚拟空间智能融合,以及多模态智能交互,来训练机器人的通用智能能力。通过机器人身体上的各种传感器感知真实物理世界,并对物理世界进行三维重建,通过语义分割形成三维环境的高精度语义地图,让机器人真正理解当前的物理世界以及客观物体之间的关系。三维语义地图同时也构建了机器人数字孪生(Digital Twin)运行的虚拟物理空间,可持续不断地模拟和训练各种智能机器人的智能能力。这种云端智能“大脑”可支持同时为百万级实体机器人提供云端 AI 智能服务,帮助机器人理解物理世界。

人类智慧增强人机融合机器人运营服务平台,在必要的时刻,通过人机无缝融合的方式来支撑云端机器人规模化商用运行和安全管控服务。人类将直接正向干预(Human Intelligence),确保人工智能的安全性和决策可控性,在提供无差错的商用级服务的同时,这些人类的干预形成强化学习,智能反馈到 AI 训练系统中,从而让机器人智能快速向人类智能进化。

3 .机器人安全专网的实践

公众互联网中存在大量数据隐私泄露、病毒木马和漏洞攻击等问题,如果智能机器人与云端大脑的网络通信完全基于公众互联网,必将给云端智能架构带来极大的安全隐患。为了提高云端智能架构与系统的安全性,达闼科技构建了机器人安全专网 VBN (全称:Virtual Backbone Network),机器人本体通过物联网或移动互联网就近接入至 VBN 专网接入点,然后通过专网专有线路去访问云端大脑

达闼科技机器人安全专网叠加在运营商的网络基础设施之上,基于运营商的专有线路而不是互联网线路进行网络传输。作为云-边-端融合机器人系统的神经网络,它为机器人和云端大脑提供安全可靠的网络连接。达闼科技机器人专网从如下几个方面加强云端超融合机器人系统的整体安全性:

(1) 机器人专网 POP 点之间的传输线路为点对点 SDH 线路或 MPLS VPN 专线等专有线路, 专网的核心设备不提供互联网接入,设备和线路均与互联网物理隔离。只在有互联网接入需求的站点单独增加互联网接入设备,由该设备实现与互联网对接,但是针对这种场景会增加严格的 L3 到 L7 层的安全防护策略以及安全接入认证策略。总体来说,达闼科技机器人专网在物理上实现了与公众互联网的隔离,逻辑上则利用虚拟专网技术实现租户之间的业务隔离,为最终用户进一步提升了业务的安全性。

(2) 云端大脑与机器人专网一体化部署,即云端大脑部署在机器人专网 POP 点内,或者是通过专有线路与机器人专网互通。机器人只有在接入到专网 POP 点并通过认证后,才能去访问特定的云端大脑服务。对于互联网用户,云端大脑完全不可见,这大大降低了云端大脑被网络攻击的风险,提升了系统安全性。

(3) 智能机器人在接入到 VBN 专网时需要更严格的准入和认证机制。首先机器人在申请接入之前,相关信息必须在云端平台登记,必须在经过该平台的注册和激活后才能申请接入到专网,这样可以充分提升接入实体的可信性。机器人在接入到专网的过程中,须经过多重认证。对于物联网接入方式,必须使用定制的物联网卡,并设置特定的接入点和用户名密码,在通过物联网认证后到达 VBN 专网部署的专用接入网关,在该网关上再做一次认证。为提升第二次认证的可靠性,集成了 SDP 思想,将区块链技术引入到认证系统中,只有在许可链中写有访问权限的设备才能发现和访问 VBN 专网,即使链中的部分节点受损或被攻击,链也可以立即隔离这些节点并继续运行,从而提升网络认证体系的可靠性。

(4) 智能机器人可能通过物联网,也可能通过 4G/5G 互联网接入到 VBN 专网提供的接入点,VBN 专网接入点是和其他网络(如物联网、互联网等)的主要连接点,也可能是系统的主要风险点。除了严格的准入和认证机制外,此处会专门部署基于云的防火墙,该防火墙会基于从 L3 到 L7 等多个层面,针对每个接入租户或用户进行安全策略部署,包含但不限于对源和目的 IP 的策略限制、对源和目的端口号的策略限制、对应用层的安全策略等等。通过在 VBN 专网的入口处部署高等级的安全管控策略,非法用户即使是接入到专网后能攻击的范围也极其有限,能极大的降低 VBN 专网以及在专网后端运行的云端大脑被攻击的风险,从而为云端超融合机器人系统的整体安全性提供保障。

未来,云端智能机器人系统可以把人工辅助监督、记忆知识内容、低频次的认知类决策神经网络等功能仍然放在云端大脑,逐步把视觉识别、语音识别和智能运动等 AI 感知能力,以及需要实时响应的功能模块放在端侧和边缘计算节点,边缘计算节点和云端大脑通过机器人安全专网相连。

云端智能机器人天然具备移动通信的属性,它将是 5G 网络的杀手级应用。5G 网络为云端智能机器人与云端的网络连接提供最佳传输载体。云-边-端智能机器人正在向机器人本体—5G 网络—边缘计算节点—机器人安全专网和大规模云端“大脑”的架构发展。达闼科技打造的智能机器人云端“大脑”,在实施商业化运营和云端的安全控制的过程中,必然需要依托大带宽、低时延、超高可靠性、网络切片和边缘计算的 5G 网络来进一步增加机器人专网,这将是智能服务机器人产业化的必由之路。

五 边缘智能支持多机器人协作的实践与思考

1 .工业机器人发展趋势

近年来,随着物联网、云计算、大数据和人工智能为代表的新一代信息技术与传统工业技术的加速融合,全球新一轮科技革命和工业革命正蓬勃兴起。在这种世界科技和工业发展背景下,德国、美国、日本、英国和中国等世界主要国家分别推出了工业 4.0、工业互联网、工业智能化、工业 2050 和中国制造 2025 等一系列振兴工业的国家战略。习总书记曾经在两院院士大会上指出:机器人是“制造业皇冠顶端的明珠”。作为智能制造的核心装备,工业机器人在智能制造的发展过程中起到了不可替代的作用。

工业 3.0 通过广泛应用信息技术,已经使得工厂生产线的自动化程度和生产效率大幅度提高。但随着时间的推移,业界逐渐意识到了一些问题:如今消费者的个性化需求繁多,生产线 无法按照消费者需求生产出相应的产品,导致产品不畅销或者产能过剩造成资源浪费。另一个 重要的问题是,并没有很好的利用整个产品生命周期产生和累积的数据。近年来随着互联网的 蓬勃发展与人工智能算法的不断改善,使得业界可以在一定程度上解决上述问题,工业 4.0 即智能制造应运而生。

通过赋予生产线智能属性,可以增加生产线的柔性,满足消费者个性化需 求,利用数据仓库和数据挖掘做出生产决策,平衡多生产线负荷,提高有效产能避免资源浪费。同时又不得不面临新的问题:原始设备的运算和存储能力不足以满足智能制造的要求,而随着 产品生命周期中产生的数据量的不断累计势必会增加云端成本,并且数据安全如何保障也是一 个问题。基于以上问题,新松构建了以云-边-端为框架的平台。边缘计算设备可以满足数据的 实时传送与运算,并且在数据上传到公有云之前对数据进行分析与压缩,私有云则保证了数据 的安全性,将控制力留在企业边界。

当前,工业机器人呈现出以下三个方面的发展趋势:
1)泛在互联。由于以 AGV 为代表的移动工业机器人将在未来广泛使用,高可靠、高并发和低延迟的无线接入方式将成为工业机器人云平台的重要接入方式(包括环境的参数,多种设备接入的需求);
2)云端融合。一方面, 工业机器人的功能越来越强大,智能化程度越来越高,同时随着大数据、云计算和人工智能技 术的快速发展,把基于大数据的智能化计算移到云端实现是工业机器人的重要发展趋势(工业 机器人现场的数量的剧增,对分布式存储和处理的需求);
3)智能服务。工业机器人发展至今, 在工艺过程优化、远程监控、状态分析和预测性维护等生产使用环节积累了大量的数据和规则, 如何利用机器学习和云计算技术将这些海量数据、规则和知识形成机器人的智能服务,成为工 业机器人云平台发展的必然要求(全生命周期的管理)。

机器人是靠近产线和数据源头的网络边缘侧的重要制造设备,也是融合网络、计算、存储、应用等核心能力的重要载体和平台。在网络的边缘智能侧,机器人面向产线,就近提供边缘智 能服务,满足行业数字化敏捷连接、实时业务、数据优化、应用智能、安全与隐私保护等方面 的关键需求。

2 .多机协作应用

随着小批量、多品种、个性定制等生产需求的不断改变,对生产模式的柔性化要求越来越迫切,整个制造系统的数字化、网络化和智能化是发展的必然趋势。智能制造的“执行层”主要包括智能作业和智能物流,而工业机器人和移动机器人是其核心装备:工业机器人完成在固定工位的精密、快速、高强度作业,移动机器人在生产车间、仓库完成物料的搬运。

未来多机器人协作的边缘智能将实体空间中的人员、设备、资源、环境、活动等要素,以数据驱动的方式在赛博空间中建立从个体到集群的状态模型、关系模型、决策模型,通过状态感知-实时分析-优化决策-精确执行的闭环过程实现对实体空间要素的精确管理和协同优化。

3 .多机器人边缘智能系统架构

数据采集

针对不同类机器人或智能设备的数据,搭建统一的数据信息集成平台,形成设备“纵向”(设备端——管理层)与“横向”(设备产业链各环节之间)的二维信息联通平台,筛选出真正有用的数据,重点是将“原始数据”变为“有用数据”。

边缘计算

利用网络计算资源,将知识镜像建模和知识挖掘,在网络层中形成实体的镜像对称模型和大数据环境,通过对实体运行历史数据中的关联性和逻辑性进行挖掘,产生能够支持决策的制造知识,重点是将对数据的洞察变为支持决策的知识,形成知识库。边缘计算设备作为边缘设备的输出端,需要较高的实时性与扩展性。面对复杂的 IT 与 OT 设备混连的环境,我们需要有按照优先级处理事件的方案或者协议,比如TSN。而作为云端的输入端则需要较高的稳定性。我们需要对边缘计算设备做冗余以避免整个生产线失控的场景,比如分布式架构。而其自身的边缘智能则需要较强的浮点运算能力以进行智能分析与决策,比如使用专用的加速芯片。

边缘智能部署在边缘计算设备上。与端设备,采用的 TSN 硬件协议与 OPC 应用协议,最大限度保证了 IT 与 OT 的通信实时性与效率。与云设备,则是采用了 TCP 传输数据与 RPC 进行远程调用,保证了数据传输的安全稳定性,降低云端与边端之间的通信开发难度,提高系统稳定性与扩展性。

(1) 智能分析。将隐性问题显性化,通过设备端的智能分析,准确评估设备真实的健康状态(安全性,可靠性,实时性和经济性等多个维度)和未来趋势,并能够对潜在的故障和隐性问题进行预诊和定位,为设备使用、维护和管理的智能决策提供重要决策支持依据,重点是将“有用数据”变为“有用信息”。

(2) 智能决策。对状态的识别和决策,以优化、协同为核心手段,基于装备真实健康状态和衰退趋势,结合用户决策的定制化需求,提供设备使用、维护和管理的最优决策支持,并达成任务活动与设备状态的最佳匹配,以保障生产系统的持续稳定运行(近零故障运行),将有用的信息变为最优决策。

边缘应用

形成工业的典型应用场景,不断对于智能系统的动态优化和重构,将智能优化后的决策同步到设备的运行和企业资源运营的执行系统中,实现决策与价值的闭环。

(1) 优化生产线工艺流程。针对生产线中多机器人协同作业存在的作业时间不一致、路径冲突等问题,基于多机器人协同工艺优化方法,挖掘多维工艺参数与作业效率、节拍之间的隐含关系,以生产作业效率、路径最优为目标,实现基于群体智能的多机器人协同作业工艺参数与运动轨迹优化。

(2) 完善生产的运营管理数据,为更好的决策提供数据基础。依据机器人的设计工艺、应 用工艺,在三维环境下对机器人进行轨迹规划、可达性分析以及干涉检验等仿真;通过机器人 作业效率分析实现对工艺方案的评价及优化。根据机器人生产线工艺规划、多机协同作业规划、排产及物流控制方案,驱动三维模型进行生产过程模拟,依据仿真结果进行机器人及其所在单 元的应用工艺设计或优化过程的校验与评估,实现机器人生产线运行效率、节拍平衡等目标优 化。将仿真分析结果反馈至设计和应用环节进行验证;更新机器人工艺设计知识库,实现工艺 操作透明化及工艺过程自主优化。

综上,边缘计算是扩展机器人个体智能的途径。在未来的多机器人协作过程中,对于机器 人的预测性维护,生产线的智能排产等方面也都是机器人在边缘智能的重要应用方向。边缘智能技术通过协同机器人设备与边缘服务器,利用深度学习模型优化,深度学习计算迁移等方法, 使机器人在未来的使用中,能更好的自主决策,同时也让产线变得更智能,能够支撑生产计划 灵活适应产线资源的变化,最终使产线变得柔性化、个性化、智能化,实现智能制造的升级。

六 服务机器人的场景认知、进化和业务赋能的思考

1 .服务机器人多源异构数据协同认知

环境认知对于机器人而言是一个重要的研究环节。机器人对环境认知的目的是为复杂未知 环境下的机器人提供足够的决策信息。这就需要将机器人通过图像识别、导航定位、语音交互、触觉感知等技术获取的异构数据进行融合,实现优势互补,从而提升机器人对周围环境的感知能力。进一步,通过网络与其它智能体协同,并结合知识,可以显著提高认知的置信度。

未来将有多个服务机器人在智能环境中共同工作。多机器人之间、机器人与环境之间都可以通过网络和边缘计算共享它们的感知信息和场景状态信息。从认知数据融合的方法出发,将对自然环境的感知与理解从片面的、离散的、被动的感知层次提高到全局的、关联的、主动性的认知层次上,全面深入分析机器人系统与环境之间的交互关系,以实现灵活、稳定、可靠的机器人环境认知系统。

2 .云端一体架构支撑下的服务机器人认知进化

2010 年云计算技术将从概念层面逐渐走向应用层面,许多研发公司已经将云计算作为新的战略核心,并探索其企业级、社会级的应用。构建云端一体架构,实现从样本数据采集、标注、模型训练到端侧部署的整个过程。商用服务机器人领域,由于B端客户的需求多样,场景复杂,更需要机器人具备较高的场景自适应能力。机器人作为端侧智能设备,可以通过云端训练支持,端侧推理引擎部署,在云端一体架构支撑下获得认知能力的持续进化。

云平台从终端机器学习、深度学习需求出发,把内存、I/O、存储和计算容量通过网络集 成为一个虚拟的资源池来使用。在云端搭建训练平台,集成分布式计算、并行处理等核心技术, 构建虚拟化、高效、低成本、开放共享的系统架构,从终端机器学习需求出发,建立私有云业 务样本数据库,通过增量式学习和训练,不断优化前端模型准确度,构建差异化、个性化核心 技术能力,为前端业务持续赋能,为业务决策提供更“精准”、更“智能”、更“广泛”的技术 支撑。

云平台提供多元化的数据采集工具、智能爬虫工具和数据标注工具,提供从数据采集获取、数据清洗和后续的数据标注等一整套服务。依托机器人实际应用场景中的数据采集和大量已经 收录的公开数据集数据,包含文本、图片、音频、视频等类型数据,覆盖包括人脸检测、人脸 识别、人体检测、物体识别、语音识别、智能安防等领域,提供更全面、更精准的原始数据和 定制数据的采集、管理服务。

通过相机等图像设备采集实际应用场景中的视频数据,通过麦克风阵列等音频采集设备采 集音频数据,云平台进行数据管理、分类、存储。分类的标准依据实际应用场景进行,可以根 据数据类别,如人体样本、桌子、椅子、显示器、键盘样本等分类,也可以根据垂直领域分类, 如仓库数据、银行大厅数据、商超数据等。存储的数据可以通过标注训练、更新模型,更好地 在垂直领域部署图像智能和对话智能任务,实现机器人的能力面向垂直领域的逐步进化。

对于智能对话任务,在产品化项目测试完成后,整个系统将进行上线。接下来,伴随着客 户对产品的使用,将产生大量的对话数据和协作数据,这些数据都将导入到云平台的数据库中。随后,数据平台将提供接下来的技术和流程界面支撑,包括数据自动标签,数据人工标签,数据人工分析,数据扩容,框架/模型训练,框架/模型测试相关模块,从而达到整个系统知识库的完善,模型场景精确度提高,框架合理性技术提升,系统的智能进化,最终客户满意度的持 续提升。

传统的标注方式为模型给出候选结果,人工进行判别、修改和再标注。云平台可以结 合用户反馈,如在VIP 打招呼时用户是否答应,在回答问题后观察用户表情等方式,自动对回答进行判别标注,更新模型。此外,还可以通过“众包模式”,通过用户测试反馈点击机器人 回答是“好”是“坏”,作为标注方式。通过增量式的学习和训练,形成图像智能和对话智能 的自我进化能力。

3 .AIOT 技术浪潮背景下服务机器人如何赋能业务

(1)服务机器人与业务场景的深度连接

AIOT 被视作一种将影响人类社会形态的技术浪潮,其实现路径也值得服务机器人产业关注。换言之,AIOT 技术浪潮下服务机器人如何赋能业务?

如前文所述,服务机器人对场景的综合认知能力和业务处理能力涉及对话智能、图像智能、运动智能等技术环节。这其中,云端机器学习训练平台和云端业务管理平台的开发维护至关重 要,其意义不仅在于服务机器人本身的学习进化、日常运行、业务处理,也在于有机会与业务 场景云端实现某种意义上的对接,实现“云端一体化”。

而除了云端的对接,服务机器人的 AIOT 之路还需实现智慧场景下的多设备协同。机器人厂商可通过为B 端客户深度定制可信网络传输协议,实现服务机器人与传统设备间的数据传输链路,让服务机器人与场景中的各类设备互联互通。举例而言,在第三方设备接入方面,机器人厂商需为机器人预留丰富的可扩展软硬件接口;在通信方面,需支持 WiFi、4G、蓝牙、NB-IoT 等多种通信方式;在软件方面,需预留可与客户业务系统对接的接口,且机器人需具备集成能力;在架构设计方面,需在底层实现模块和模块之间的解耦,在应用层实现决策级或特征级的数据融合。

如此一来,服务机器人将成为诸多行业业务场景 AIOT 网络的重要实体终端;而通过提高网络接入能力和计算能力,机器人又成为边缘结点之一,最终实现帮助客户提升业务效率、服务水平的目的。

(2)案例简析:服务机器人 AIOT 赋能智慧银行、智慧检务

下面,以科沃斯商用机器人有限公司打造的银行服务机器人、案管机器人为例,分析AIOT 技术浪潮下服务机器人赋能行业的具体路径,以及不同垂直领域的共性与差异。

a .银行服务机器人

行业需求分析

如今,传统银行网点存在运营成本高、使用价值低等问题,正逐步向智慧银行方向转型升级。智慧银行以提升用户服务体验为中心,利用人工智能、大数据等新兴技术实现银行服务方式与业务模式的再造和升级。其中,智能设备间的互联互通尤为关键,它使得信息传递的效率加快、准确性提高,让众多设备实现N+N>2N 的联动效果。

产品价值分析

科沃斯银行服务机器人通过迎宾接待、业务咨询、二次营销等功能,为顾客提供智能化、人性化的服务体验,以服务为切口、以 AIOT 为路径,赋能银行智慧化转型。下面结合科沃斯银行服务机器人落地应用情况,简析银行服务机器人价值要素。

降低网点运营成本,优化网点营销收益,提升银行社会形象是银行服务机器人的三大核心价值.目前,科沃斯银行服务机器人已覆盖中国建设银行、中国农业银行、中国银行、平安银行、兴业银行等 20 余家知名银行。在位于新加坡的中国银行全球首家创新研发基地,为国际嘉宾承担引导服务工作。截至目前,其为银行网点顾客提供的服务总量已超 800 万人次,引导分流客户成功总量约 30 万人次,金融商品营销成功总量超过 30 万人次。通过提升银行服务水准升级零售业务,旺宝深入银行科技化进程。科沃斯智慧银行应用案例已入选工信部《人工智能实践录》。

b.案管机器人

行业需求分析

根据《最高人民检察院关于深化智慧检务建设的意见》,到 2020 年底,充分运用新一代信息技术,推进检察工作由信息化向智能化跃升,研发智慧检务的重点应用;到 2025 年底,全面实现智慧检务的发展目标,以机器换人力,以智能增效能,打造新型检察工作方式和管理方式。

目前,检务工作中的一些难点需要以开创性的方式解决。如来访人员在办事过程中不熟悉流程,检察机关人员需要花费大量的时间去回答办事流程类的问题;辩护人和诉讼代理人缺少案件查询与追踪的平台;办事人员对案件信息和法律文书有快速查询需求等等。

产品价值分析

科沃斯商用机器人有限公司推出的案管机器人基于良好的人机交互能力和定位导航自主运动能力,能够为客户提供主动迎宾、身份审核、业务咨询与案件信息查询、电子卷宗刻录、本异地事项办理等五大功能。案管机器人在检察院业务场景中,类似于银行服务机器人之于银行场景,承担了业务入口的重任,通过与现场机具的互联互通,深度嵌入现有业务流程,优化业务逻辑,提高办事效率,为客户创造实实在在的价值。

(3)展望:AIOT 领域服务机器人的市场机遇

综上可见,服务机器人融入业务场景的重要抓手是人机交互能力。而在基于 IoT 技术的市场中,与人发生联系的场景(无论是智慧政务还是智慧医疗、智慧办公等)逐渐丰富,人机交互的需求愈发强烈。随着近些年智能终端设备的发展,用户对于人与机器间的交互方式也提出了全新要求,从被动交互到主动交互,从限定场景交互到多场景自适应交互,尤其在 AIOT 技术浪潮下,云、边、端能力的发展和一体化,服务机器人的人机交互能力将取得长足进展。

以科沃斯银行服务机器人、案管机器人为代表的 to B 服务机器人产品,在对话智能、图像智能、运动智能融合的基础上,通过与场景中其他设备之间的互联互通以及云端的服务能力, 形成从端智能到云平台的一揽子 AIOT 智慧化解决方案,与业务场景深度耦合,为客户提供从共性到个性的定制化服务。未来随着服务场景的快速拓展和持续进化,服务机器人解决方案提供商需要抽象不同行业场景的共性需求,形成共性平台+应用子集的整体解决方案架构,通过共性部分的规模化降低行业服务成本,应用子集部分则需要通过服务中台的抽象和建立,构建针对 B 端客户个性化定制需求的快速响应能力,最终实现服务机器人产品的实质性落地和可持续发展。

七 协同创新与合作共赢

为了加速下一代服务机器人的规模化和商用化,亟需多方参与共同推进技术、产品、服务的尝试、迭代和更新。在优势互补的开放创新框架下,探讨长期愿景、研发前沿技术、推广商业合作、搭建创新生态,吸引商业实体、科研院所、开源社区的广泛参与和贡献。

在机器人 4.0 演进过程中,要摆脱线性思维,建立跳跃式发展框架。具体来说,人工智能和人工增强要按需融合,在核心技术逐步演进过程中,从优化垂直应用场景入手,率先在关键场景为用户提供稳定可靠的服务。在 5G 通信技术的支撑下,本地数据采集和云端知识共享应高效连接,通过不断延伸服务场景,逐步减少人工增强的比例。在共享计算、存储、通信资源基础上,智能算法持续从(云端)大数据和(本地端)个性化数据中抽取知识,逐步从特定场景适应到通用场景,最终实现机器人即服务(Robot As A Service)的长期愿景。

1 .机器人 4.0 的基础通用参考平台

针对这些需求,英特尔中国研究院提供了面向机器人 4.0 的基础通用参考平台——HERO系统平台。底层是硬件计算平台,上面是软件层。机器人 3.0 的部分,包括基本感知和交互、运动导航、规划、操纵。机器人 4.0 部分更多支持自适应交互和持续学习,包括三维场景的语义理解和个性化的知识图谱。

HERO 平台不仅可以提供基础的软硬件能力,并且可以基于该平台进一步扩展。例如,异构计算平台可以加入第三方硬件加速模块,知识图谱可以针对特定应用领域去扩展该领域的通用知识图谱,可以利用其中提供的动态知识图谱部分来获取动态的人性化知识。自适应学习部分也可以加入更多的感知模块来增强已有的感知功能或补充新的感知功能。

2 .知识融合

越来越多的研究者认为,人工智能技术将会从模仿人的行为和决策过程过渡到了解人类的 学习能力和运用知识的能力。在数字化时代,越来越多的信息被分析和存储后,将被映射为结构化的知识库。知识工程和人工智能的结合,会大大提高模式识别和机器学习算法的精度。随着认知科学、机器人学、自然语言理解等相关领域的发展,将催生出超越现有 Apple Siri、Google Now、IBM Watson 的推荐系统和问答系统,并且会跨越不同语言的边界。通过建立知识库和智能算法的良性循环,不断完善对假设的验证,实现预测和自我诊断。

3 .众包与群体智慧

深度学习算法在语音识别和图像分类中取得跳跃式发展的成绩,很大程度上得益于规模足 够大的数据集、以及通过众包技术给训练数据打标签的做法。在过去十几年,众包技术从 早期的创造内容Wikipedia,到标注数据 Amazon Mechanical Turk,到投资创新项目Kickstarter。在下一阶段,群体智慧将会扩展到创造新产品、打造新服务。未来的众包任务会更加细分、更 加多样化,和人工智能算法有关的包括标注数据、训练模型,和人类增强有关的包括提出 问题、做出决策,和云端融合有关的包括可视化工具和人机交互接口。

4 .仿真训练

在物理世界收集训练数据,让机器人从头开始学习决策策略,会遇到很多挑战。收集过程通常费时费事,有些任务会对人带来危险,有些极端案例不容易收集到。计算机图形学与仿真技术可以解决上述挑战,通过在虚拟场景中配置不同的环境和任务参数,分解机器人的感知、决策、控制模块,搭建模块与模块之间的状态表征方法,实现从虚拟仿真到真实操作的跨越。目前,基于增强学习框架,在奖励函数和机器人操作之间形成映射和迁移关系,在模拟器中超实时地迭代训练,可以大大缩短训练时间和降低学习成本。

5 .机器人即服务

机器人即服务结合了云计算、人工智能、机器人学、虚拟现实、自动化等,是数字经济时 代的全新业务模式,是“软件即服务”、“平台即服务”、“基础设施即服务”之后的新型服务 模式。通过租借机器人服务,企业能够以低成本、灵活、方便的形式完成不同的任务。机器人 本体需要提供动态、可定制、可编程的接口和模块,即可以在零售、农业、健康、物流、教育、制造等不同领域,填补日益扩大的劳动力短缺的缺口,提升运营效率,提高投入产出比。就像 智能手机与手机应用市场的经济模式类似,未来的机器人服务会激发硬件工程师、软件工程师、交互设计师、产品经理、算法工程师、人工训练师等参与,协同打造出机器人的应用市场、模 型市场、技能市场、服务市场等。预计从 2016 年到 2026 年这十年间,机器人即服务的市场规模会增长到 340 亿美元,复合年增长率达到 66%。

八 总结与展望

机器人技术是多学科交叉的科学工程, 涉及机械、电子、计算机、通信、人工智能和传感器,甚至纳米科技和材料技术等。毫不夸张地说,智能机器人是人工智能应用“皇冠上的明珠”。

近年来,人工智能和机器学习获得快速发展,但机器人个体的自主智能距离人们的期待还 有较大的差距,影响了机器人产业的规模化发展。如何利用跨领域的技术推动力,加速对机器 人的赋能是机器人产业亟待解决的问题。本机器人 4.0 白皮书针对当前机器人产业现状和瓶颈, 提出构建云边端一体化的协同计算平台,并在此平台上支持机器人持续学习和协同学习的能力, 实现基于个性化知识图谱和场景自适应的融合,通过协同创新实现机器人产业规模化。

边缘计算是最近几年提出的新概念,其推广和落地非常依赖于具体的应用,尤其适用于对实时性要求较高的场景。机器人应用正是非常合适的应用场景。边缘实时计算加上云计算的无限处理能力,可以大大提升机器人本体的人机交互和场景自适应能力,也会增强自主移动和感知能力。通过基于 5G 的云边端一体化,机器人本体的能力设计具有很大的弹性空间,从而解耦对机器人本体硬件能力的依赖,降低成本,推动大规模的部署就成为可能。

由于篇幅所限,白皮书对有些相关的问题没有深入探讨,例如机器人的灵巧操控技术、多模态感知融合技术、多智能体学习等等。我们希望未来通过深化产业协同创新,对这些问题继续探索。

虽然未来总是充满不确定性,我们坚信 AI 与 5G 的互相促进是机器人规模化发展的必经之路。希望机器人 4.0 白皮书中阐述的核心技术、云边端融合的系统框架和机器人跳跃式发展的思路,可以引领机器人技术和产业发展的方向。云端大脑和安全专网的实践和思考,以及智能制造和商业应用领域的经验解析,能够优化实施路径,让机器人尽快大规模地走进各行各业, 走进千家万户!

哈工大NLP工具:PyLTP

一、哈工大 LTP

LTP(Language Technology Platform)中文为语言技术平台,是哈工大社会计算与信息检索研究中心开发的一整套中文语言处理系统。LTP 制定了基于 XML 的语言处理结果表示,并在此基础上提供了一整套自底向上的丰富而且高效的中文语言处理模块(包括词法、句法、语义等 6 项中文处理核心技术),以及基于动态链接库(Dynamic Link Library,DLL)的应用程序接口,可视化工具,并且能够以网络服务的形式进行使用。

二 . pyltp 终极安装

下面介绍 Windows10 Python 环境下 LTP 的扩展包 pyltp 安装过程。

1. 常见错误

大家通常会调用 “pip install pyltp” 安装该扩展包,但会遇到各种错误,下面介绍一种可行的方法。

2. 安装pyltp包

首先,安装 Python3.6 环境,如下图所示“python-3.6.7-amd64.exe”。

python-3.6.7-amd64.exe
python-3.6.7-amd64.exe

接着,下载 pyltp 扩展包的 whl 文件至本地,调用 CMD 环境进行安装,注意需要将所在文件的路径写清楚。

  1. pyltp-0.2.1-cp35-cp35m-win_amd64.whl (对应Python3.5版本)
  2. pyltp-0.2.1-cp36-cp36m-win_amd64.whl (对应Python3.6版本)
  3. pip install C:\Python36\Scripts\pyltp-0.2.1-cp36-cp36m-win_amd64.whl

whl下载地址:
https://download.csdn.net/download/qq_22521211/10460778

注意,如果报错“error:Microsoft Visual C++ 9.0 is required”,则安装下面 exe文件。

exe文件
exe文件

3 .下载模型文件

最后需要下载模型文件,其下载地址为:

本文下载 3.4 版本的模型,下载解压如下图所示:

3.4版本的模型
3.4版本的模型

在编写代码时,需要导入指定文件夹中的模型,再进行中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注等分析。例如:

#词性标注

pdir='AgriKG\\ltp\\pos.model'

pos = Postagger()

pos.load(pdir)

postags = pos.postag(word) #基于分词得到的list将下词性标注

postags = list(postags)

print(u"词性:", postags)

分词、词性标注、句法分析一系列任务之间存在依赖关系。举例来讲,对于词性标注,必须在分词结果之上进行才有意义。LTP 中提供的 5 种分析之间的依赖关系如下所示:

讲到这里,哈工大 pyltp 基本安装成功,接下来将介绍它的基本用法。
基础性文章,希望对入门者有所帮助。

三.中文分句和分词

1.中文分句

# -*- coding: utf-8 -*-

from pyltp import SentenceSplitter

from pyltp import Segmentor

from pyltp import Postagger

from pyltp import NamedEntityRecognizer

#分句

text = "贵州财经大学要举办大数据比赛吗?那让欧几里得去问问看吧!其实是在贵阳花溪区吧。"

sents = SentenceSplitter.split(text)

print('\n'.join(sents))

中文分句的输出结果如下所示:

  1. 贵州财经大学要举办大数据比赛吗?
  2. 那让欧几里得去问问看吧!
  3. 其实是在贵阳花溪区吧。

2.中文分词

# -*- coding: utf-8 -*-

from pyltp import SentenceSplitter

from pyltp import Segmentor

from pyltp import Postagger

from pyltp import NamedEntityRecognizer

 

text = "贵州财经大学要举办大数据比赛吗?那让欧几里得去问问看吧!其实是在贵阳花溪区吧。"

 

#中文分词

segmentor = Segmentor() #初始化实例

segmentor.load("AgriKG\\ltp\\cws.model") #加载模型

words = segmentor.segment(text) #分词

print(type(words))

print(' '.join(words))

segmentor.release() #释放模型

输出结果如下所示(人工换行):

  1. <class ‘pyltp.VectorOfString’>
  2. 贵州 财经 大学 要 举办 大 数据 比赛 吗 ?
  3. 那 让 欧 几 里 得 去 问问 看 吧 !
  4. 其实 是 在 贵阳 花溪区 吧 。

 

NVIDIA 开源 TensorRT 中的解析器和插件

TensorRT 是一款高性能深度学习推理平台,可为基于 NVIDIA GPU 的推荐、语音和图像/视频等应用提供低延迟和高吞吐量。它包含用于导入模型的解析器、以及能够在对推理进行优化之前支持新操作和层的插件。

今日,NVIDIA 将 TensorRT 中的解析器和插件开源,使广大的深度学习社区能够对这些组件进行自定义和扩展,让应用程序充分利用强大的 TensorRT 优化。

NVIDIA 一直以来都坚定不移地为开源社区提供大力支持,GitHub 页面 提供了超过 120 个存储库,我们的深度学习框架团队为深度学习项目贡献了超过 1500 项,以及诸多大型项目,如 RAPIDS 、NVIDIA DIGITS、NCCL、TensorRT 推理服务器、以及如今的 TensorRT。

多种方式参与其中,贡献你的智慧:

针对 ONNX 格式和 Caffe 扩展解析器,将可实现新操作的模型导入 TensorRT
插件使你能够在 TensorRT 中运行自定义操作。你可以将开源插件用作参考,或构建新插件以支持新的层并与社区共享
样本为你的推理应用程序提供了一个起点,提供涵盖新工作流程和管线的样本

TensorRT github 存储库访问链接 https://github.com/NVIDIA/TensorRT,其中包括有关如何参与其中的贡献指南。

我们欢迎社区对所有部分的大力贡献,访问https://github.com/NVIDIA/TensorRT/blob/master/CONTRIBUTING.md,参考贡献指南。当新版本发布可用时,NVIDIA 会将最新代码与 TensorRT 合并发布。

人体姿态智能估算

大片中的人物特效如何实现,少不了应用人体姿态估计。这篇博客简介了使用深度学习技术的多人姿态估计方法,及其应用。人体姿态骨架图 (skeleton) 用图形格式表示人的动作。本质上,它是一组坐标,连接起来可以描述人的姿势。骨架中的每个坐标都被称为这个图的部件(或关节、关键点)。我们称两个部件之间的有效连接为对(pair,或肢)。但是要注意的是,并非所有部件组合 都能产生有效的对。下图是一个人体姿态骨架图的示例。

左:人体姿态骨架图的 COCO 关键点格式 ;右:渲染后的人体姿态图
左:人体姿态骨架图的 COCO 关键点格式 ;右:渲染后的人体姿态图

人体姿态信息的获取为多个现实应用开辟了道路,本博客的最后也会讨论其中一些应用。近年来,研究人员提出了多种人体姿态估计方法,其中最早(也是最慢)的方法通常是在只有一个人的图像中估计一个人的姿势。这些方法通常先识别出各个部件,然后通过在它们之间形成连接来创建姿势。

当然,如果是在包含多人的现实场景,这些方法就不是很有用了。

多人姿态估计

由于不知道图像中每个人的位置和总人数,因此多人姿态估计比单人姿态估计更困难。通常,我们可以通过以下方法来解决上述问题:

简单的方法是:首先加入一个人体检测器,然后分别估计各个部件,最后再计算每个人的姿态。这种方法被称为「自顶向下」的方法。

另一种方法是:检测图像中的所有部件(即所有人的部件),然后将属于不同人的部件进行关联/分组。这种方法被称为「自底向上」方法。

上部: 传统的自顶向下的方法;下部: 传统的自底向上的方法。
上部: 传统的自顶向下的方法;下部: 传统的自底向上的方法。

通常,自顶向下的方法比自底向上的方法更容易实现,因为添加人体检测器要比使用关联/分组算法容易得多。整体上很难判断哪种方法性能更好,因为归根结底是对比人体检测器和关联/分组算法哪个更好。

在这篇博客中,我们主要关注使用深度学习技术的多人姿态估计技术。在下一节中,我们将回顾一些流行的自顶向下和自底向上方法。

深度学习方法

1. OpenPose

OpenPose 是最流行的自底向上多人姿态估计方法之一,部分原因在于其 GitHub 实现的文档注释很友好。与许多自底向上的方法一样,OpenPose 首先检测图像中的部件(关键点),然后将部件分配给不同的个体。下图展示的是 OpenPose 模型的架构。

OpenPose 架构的流程图
OpenPose 架构的流程图

OpenPose 网络首先使用前几层(上图中是 VGG-19)从图像中提取特征。然后将这些特征输入到卷积层的两个并行分支中。第一个分支预测了一组置信图(18 个),每个置信图表示人体姿态骨架图的特定部件。第二个分支预测另外一组 Part Affinity Field (PAF,38 个),PAF 表示部件之间的关联程度。

使用 OpenPose 进行人体姿态估计的步骤
使用 OpenPose 进行人体姿态估计的步骤

OpenPose 其余步骤的作用是细化每个分支做出的预测。利用部件置信图,在部件对之间形成二分图(如上图所示)。然后利用 PAF 值,对二分图中较弱的链接进行剪枝。通过以上步骤,我们可以估计出人体姿态骨架图,并将其分配给图像中的每一个人。

2. DeepCut

DeepCut 是一种自底向上的方法,可用于多人姿态估计。其作者通过定义以下问题来完成这项任务:

  • 生成一组身体部件候选项集合 D。这个集合表示图像中所有人身体部位的所有可能位置。从身体部件候选集中选择身体部件的子集。
  • 使用身体部件类 C 中的类别标注选中的每个身体部件。身体部件类表示部件的类型,如「手臂」、「腿」、「躯干」等。
  • 分配属于同一个人的身体部位。
DeepCut 方法图示
DeepCut 方法图示

上述问题可以通过建模为整数线性规划问题(Integer Linear Programming,ILP)来解决。使用二元随机变量(binary random variable)的三元组 (x, y, z) 进行建模,二元随机变量的域如下图所示:

二元随机变量的域
二元随机变量的域

考虑来自身体部件候选项集合 D 的两个身体部件候选项 d 和 d’,以及来自类别集 C 的类别 c 和 c’,其中身体部件候选项是通过 Faster RCNN 或 Dense CNN 获得的。现在,我们可以开发以下语句集。

  • 如果 x(d,c) = 1,则表示身体部件候选项 d 属于类别 c。
  • 如果 y(d,d’) = 1,则表示身体部件候选项 d 和 d’属于同一个人。
  • 他们还定义了 z(d,d』,c,c』) = x(d,c) * x(d』,c』) * y(d,d』)。如果上述值为 1,则表示身体部件候选项 d 属于类别 c,身体部件候选项 d’ 属于类别 c’,最后身体部件候选项 d,d ‘ 属于同一个人。

最后一个语句可以用来划分属于不同人的姿势。上述语句显然可以用线性方程表示为 (x,y,z) 的函数。通过这种方法,我们就可以建立整数线性规划 (ILP) 模型,并估计出多人的姿态。完整方程和详细分析参见论文《DeepCut: Joint Subset Partition and Labeling for Multi Person Pose Estimation》。

3. RMPE (AlphaPose)

RMPE 是一种流行的自顶向下的姿态估计方法。其作者认为,自顶向下的方法通常依赖于人体检测器的表现,因为姿态估计是对有人在的区域上执行的。因此,定位误差和重复的边界框预测可能会导致姿态提取算法只能得到次优解。

重复预测的影响(左)和低置信度边界框的影响(右)
重复预测的影响(左)和低置信度边界框的影响(右)

为解决这一问题,作者提出利用对称空间变换网络 (Symmetric Spatial Transformer Network, SSTN) 从不准确的边界框中提取高质量的单人区域。在该区域中,利用单人姿态估计器 (SPPE) 来估计这个人的人体姿态骨架图。然后我们再利用空间去变换器网络 (Spatial De-Transformer Network, SDTN) 将估计的人体姿态重新映射回原始图像坐标系。最后,利用参数化姿态非极大值抑制 (parametric pose NMS) 技术解决冗余问题。

此外,作者还介绍了姿态引导的 proposal 生成器(Pose Guided Proposals Generator)来增强训练样本,以更好地帮助训练 SPPE 和 SSTN 网络。RMPE 的显著特点是,这一技术可以扩展为人体检测算法和 SPPE 的任意组合。

4. Mask RCNN

Mask RCNN 是用于执行语义和实例分割的流行架构。该模型可以并行地预测图像中各种对象的边界框位置和对对象进行语义分割的掩码(mask)。而这种基本架构可以轻松地扩展成用于人体姿态估计的方法。

Mask RCNN 架构流程图
Mask RCNN 架构流程图

该基本架构首先使用 CNN 从图像中提取特征图。区域候选网络(Region Proposal Network,RPN)使用这些特征图来获取对象的候选边界框。这些候选边界框就是从 CNN 提取的特征图中选择区域(region)而得到的。由于候选边界框可以具有各种尺寸,因此我们使用一个叫作 RoIAlign 的层来减小所提取特征的尺寸,使得它们的大小一致。现在,将提取到的特征传递到 CNN 的并行分支,以最终预测边界框和分割掩码。

现在我们看一下执行分割的分支。首先假设图像中的一个对象属于类别集合 K。分割分支可以输出 K 个大小为 m x m 的二进制掩码(mask),其中每个二进制掩码表示仅属于该类的所有对象。我们可以将每种类型的关键点建模为不同的类,并将其作为分割问题来处理,从而提取出属于图像中每个人的关键点。

同时,我们还可以训练目标检测算法来识别人的位置。通过结合人的位置信息和他们的关键点,我们可以得到图像中每个人的人体姿态骨架图。

这种方法类似于自顶向下的方法,但是人体检测阶段是与部件检测阶段并行执行的。也就是说,关键点检测阶段和人体检测阶段是相互独立的。

其他方法

多人人体姿态估计有很多解决方法。简洁起见,本文仅解释了几种方法。有关更详尽的方法列表,大家可以查看以下资料:

应用

姿态估计在许多领域都有应用,下面列举其中的一些应用

1. 活动识别

追踪人体在一段时间内姿势的变化也可以用于活动、手势和步态识别。这样的用例有:

  • 检测一个人是否跌倒或生病的应用。
  • 可以自主地教授正确的锻炼机制、体育技术和舞蹈活动的应用。
  • 可以理解全身手语的应用(例如:机场跑道信号、交通警察信号等)。
  • 可以增强安全性和用来监控的应用。
追踪人的步态对于安全和监控领域是很有用的
追踪人的步态对于安全和监控领域是很有用的

2. 动作捕捉和增强现实

CGI 应用是一类有趣的应用,它也利用了人体姿态估计。如果可以估计人的姿势,就能够将图、风格、设备和艺术品叠加在人身上。通过追踪这种人体姿势的变化,渲染出的图形可以在人移动时「很自然地适应」人。

CGI 渲染示例
CGI 渲染示例

Animoji 是一个很好的例子。尽管上面的研究只追踪了人脸的结构,但这个思路可以扩展用于人体关键点追踪。同样的概念也可以用来渲染一些模仿人类动作的增强现实 (AR) 元素。

3. 训练机器人

我们可以不通过手动对机器人进行编程来追踪轨迹,而是沿着执行某个动作的人体姿态骨架的轨迹运行。人类教练可以通过演示动作,有效地教机器人这些动作。然后,机器人可以通过计算得知如何移动关节才能执行相同的动作。

4. 控制台动作追踪

姿态估计的另一个有趣的应用是在交互式游戏中追踪人体的运动。通常,Kinect 使用 3D 姿态估计(利用红外传感器数据)来追踪人类玩家的运动,并使用它来渲染虚拟人物的动作。

运行中的 Kinect 传感器
运行中的 Kinect 传感器

原文链接:https://medium.com/beyondminds/an-overview-of-human-pose-estimation-with-deep-learning-d49eb656739b

下一代 AI 系统基石:知识图谱将何去何从?

AI 前线导读:2012 年,Google 提出知识图谱的概念并将其用于搜索引擎中, 伴随 AI 技术的快速发展,智能服务的出现让知识图谱显得尤为重要,那么,作为知识工程的重要分支,它会给智能服务带来哪些影响?知识图谱真正要做到成熟可用,还将面临哪些挑战?

5 月 30 日,北京智源人工智能研究院在清华大学开展了以「知识与认知图谱」为主题的讲座,本次讲座上,来自清华大学计算机系的四位学者分别从知识工程、深度学习、自然语言处理和异质资源搜索与推荐四个角度,介绍清华大学近些年相关领域的研究成果。

本文将会以李涓子教授和刘知远副教授两位讲师的内容出发,重点介绍知识图谱的发展现状以及它在应用中存在的问题和解决方案。

处于技术启动期的知识图谱

大数据时代,通过对数据进行语义层面的解释可以挖掘到许多隐藏的知识,它们被用于机器智能,这是从数据到智能的转化过程。

数据到智能的转化过程
数据到智能的转化过程

专家系统的出现让知识显得尤为重要,它是人工智能对客观世界认知的渠道。不同于富含语义的人类交流,大数据的机器学习仍集中于低维特征空间。由于两者之间互不相通,因此作为桥梁的知识图谱起到了重要作用,同时,它也是整合客观事件与实体的关键。

作为新一代人工智能系统的基础,知识图谱的重要性不言而喻,根据 2018 年下半年发布的 Gartner 曲线可以得知,知识图谱的发展至少还需要 5 – 10 年时间才能到达一个相对成熟的阶段,而通用人工智能的实现则更是需要至少 10 年。

Gartner 曲线
Gartner 曲线

综上所述,知识图谱的发展必定要解决这两个问题:

  • 加强高质量知识图谱的自动标注,减少人为干涉。
  • 整体形态不再局限于三元组,更丰富的信息形态可以带来更好的表现。

知识图谱存在的问题与解决方案

知识图谱在发展过程中仍存在许多技术难题,目前主要有以下几点:

  • 机器学习中实现可解释智能的方法;
  • 大数据环境下实现基于知识和数据驱动的方法;
  • 知识不确定和不完整的情况下完成知识推理;
  • 对高质量、大规模知识的研究获取算法。

知识图谱不仅仅是知识库,它在物联网时代会发挥更大的作用,以 IBM 的 IoT 项目为例,物联网设备在知识图谱上存在相互联系的关系,假设传感器是一个节点,那么通过解析传感器之间传输的数据便可以为用户提供服务。

除了表示学习,实体和词向量的表示学习同样存在许多挑战,这其中包括词的歧义和词与实体联合表示两部分。

词的歧义是指一词多意的问题,这在词向量表示中问题较为明显,由于同一实体可能对应不同客观事物的问题,因此词向量表示的同时也需要对相关词的词义做对应的表示。
以乔丹这个词为例,假设迈克尔·乔丹对应两个实体,那么在做实体表示的同时就需要使用不同的向量表示,如果篮球乔丹是实体,那么其应该与篮球相关的词在向量上更为接近,而教授乔丹则与机器学习相关的词更为接近。

两种解决方案
两种解决方案

这个问题目前有两种解决方案,即词义表示与基于词义的词和实体联合表示。
其中,联合表示学习主要是通过将词和实体映射到统一低维向量空间,让具有相似语义或知识结构的词和实体具有相近的向量表示,以实现跨语言、文本和知识库的联合推演。相较于词义表示,联合表示学习具有以下几点优势:

  • 支持联合计算,促进词和实体语义互操作和语义融合;
  • 提升表示精度,解决文本中词和实体的潜在歧义问题;
  • 缩小语言鸿沟,支持跨语言自燃语言理解等相关任务。

此外,词和实体的联合表示学习又被分为基于词义的词和实体联合表示学习,及远程监督的跨语言词和实体的联合表示学习。在这两项技术的基础之上,利用神经网络将跨语言协同实体连接,这样可以解决跨语言的词和实体表示问题。

利用神经网络将跨语言协同实体连接
利用神经网络将跨语言协同实体连接

词义的词和实体联合表示学习分为实体表示学习、对齐模型、词和实体提及表示学习三个部分,其中实体关系图被用于实体表示学习,带有锚文本的文档在提取义项映射词后分别被用于对齐模型和表示学习两个部分。

表示学习三个部分
表示学习三个部分

其中,跨语言联合表示学习利用实体关系图打破语言界限,结合跨语言相似句对以及图神经网络,让实体与实体之间通过映射对应语义的上下文,结合联合表示学习最终得到跨语言的语义向量空间。

跨语言的语义向量空间
跨语言的语义向量空间

在跨语言的词和实体表述基础上,词和实体的表示就可以实现对任意文本的实体链接,再通过映射对应语义的上下文以实现大规模实体训练。
目前,这项技术已经被用于构建专家知识库的「学者画像」,这其中最简单的应用就是分类体系的概念,其中兴趣标签可以看作是知识图谱里面的知识标签,利用知识标签和上下文关系的解析,可以得到更为详细的信息。

「学者画像」
「学者画像」

通过「学者画像」,学术界可以得到关于他更多的信息描述,其中包括研究兴趣的变化、学术活跃度、研究多样性等方面,这些均通过分析论文以及合作者关系得出。此外,这项技术还可以被用于会议的搜索和挖掘,例如会议上发表论文最多的学者以及引用最多的作者以及论文内容。

「学者画像」2
「学者画像」2

除此之外,利用「学者画像」得到的一些数据还可以被用于制作技术发展报告,以便于实现对某领域技术发展趋势的预测。

知识图谱对自然语言模型的影响

自然语言处理技术中,复杂的知识库可以提升深度学习的理解能力,经过统一语义表示空间处理后文字、句子、短语甚至文章等语言单元可被用于复杂的自然语言处理任务,其中不乏包括语义分析、句法分析和词法分析等。

自然语言文本中蕴含丰富的语言知识和世界知识,知识图谱和深度学习的双向驱动可以有效提升自然语言处理的效率,此外,机器翻译的神经网络模型则有以下两个特点:

  • 将所有的语义表示为低维向量空间;
  • 语言之间的翻译实际上是低维网络空间里面的多层跳转。

另外,它还包含非常多的语言单元,主要分为字、词、短语、句子和文档五个部分,翻译可以看做是不同语言之间的语句联系,以问答系统和信息检索为例,自然语言处理主要是被用于解决语言单元之间语义联系。

数据驱动+知识指导
数据驱动+知识指导

目前,自然语言处理技术尚无法实现数据层次到更深层次的理解,因此知识提取十分重要,深度学习在理解海量数据之后可以获得大量知识,并以此构建对应的知识图谱。同时,经过表示学习获取的知识也可以被用于深度学习的知识指导。

人类知识以离散符号的形式表示
人类知识以离散符号的形式表示

人类知识以离散符号的形式表示,但它不与深度学习低维向量相容,通过将结构化知识映射到低维向量空间,便可以将语言中知识、文档、句子和词汇等单元与符号相融合,实现跨领域知识理解。
那么,这些问题该如何解决?这就不得不提及语言知识库。

目前,知识领域比较有名的两个语言知识库分别是英文知识库 WordNet 和中文知识库 HowNet(知网),其中 HowNet 提出的义原概念,让人类语言的所有词汇、短语、句子甚至文档被分解成更为细化的部分。

语言知识库
语言知识库

其中,每一个义原可以看做是独特的词义标签,这个标签的意义是明确固定且互相独立的,义原之间还标记了对应的语义关系,那么,是否可以让义原知识协助指导数据驱动知识学习?目前已经有两种方案:
利用自然语言处理比较有名的词表示学习,其中比较有名的就是以纯数据驱动的 word2vec 算法,引入 HowNet 知识库可以实现义原、词义和词汇进行联合表示学习。
而在句子层面,语言模型显得尤为重要,目前深度学习框架一般采用 CNN 或者 RNN 训练语言模型。

一般采用 CNN 或者 RNN 训练语言模型
一般采用 CNN 或者 RNN 训练语言模型

但是在实际文本中,依旧有大量的词没有在 HowNet 里面被标注,不过这个问题可以利用义原的自动推荐解决,它主要是通过整合词组成的义原实现,目前这项技术已经可以达到比较好的预测结果,它也可以被看做是未来重要的方向。

利用深度学习帮助单词相关义原知识的预测,之后再用义原知识来协助理解互联网上的文本信息,这项技术可以被用于语言和常识知识库的探索。

语言和常识知识库的探索
语言和常识知识库的探索

除了以 HowNet、WordNet 等为首的语言知识库,还有商业引擎和大型知识图谱构建的世界知识库,它不仅包含了现实世界中各种各样的实体,还涵盖了他们之间的关系,世界知识库、语言知识库整合至数据训练库中,机器学习的性能会显著提升。

世界知识库可以协助理解复杂知识文本,深度学习自然语言处理的同时协助文本中的知识获取可以让相关工作形成闭环,以此实现知识图谱和深度学习双向驱动的效果。

知识图谱的发展以及学术界的探讨

整体来看,语言知识库和知识图谱是提升机器学习性能的关键。目前大多数知识图谱依赖人工构建,仍然缺乏从大规模数据里获取的手段。

本次论坛中,清华大学的李涓子教授表示他们将会在以下几个方面做出基础性和建设性工作:

  • 支持鲁棒可解释的知识表示获取和推理的基础理论以及方法研究工作;
  • 建立大规模的知识库以及对应平台,其中知识平台主要是用于维持知识的生态系统;
  • 利用科技情报大数据简历基于学者和知识的平台,并以其为基础提供相应的智能服务;
  • 构建一个集群体智慧、开放、融合、结构化的知识图谱基础平台,从而降低构建门槛。

目前,清华的 XLORE 跨语言知识图谱已经包含大约 137 万条知识,此外,他们还基于跨语言知识库推出双语协同实体链接系统 XLink。大数据挖掘与智能服务平台 —— AMiner 则被用于学者搜索,通过给学者打上兴趣标签,用户可以利用这些标签对需要查找的专家有更深层次的了解。

除了跨语言知识图谱 XLORE、双语协同实体链接系统 XLink 和专业数据智能服务平台 AMiner ,清华还在 Github 推出集义原计算、知识表示和知识获取等算法工具汇总的工具包 Thunlp,其主要包括以下几种工具:

  • THULAC —— 中文词法分析
  • THUCTC —— 中文文本分类
  • THUTAG —— 关键词抽取与社会标签推荐
  • OpenKE —— 知识表示学习
  • OpenNRE —— 神经网络关系抽取
  • OpenNE —— 网络表示学习
  • OpenQA —— 开放域自动回答

对这套工具感兴趣的读者可以在:

GitHub地址项目 GitHub 地址

了解更多信息

新一代 MNIST 数据集 – QMNIST

在机器学习研究中,MNIST 手写数字图像数据集已经作为基准使用了二十余年。该数据集虽然经典,但也存在测试集过小等问题。近日,来自 Facebook 和纽约大学的研究者重建并扩展了该数据集,在测试集中新增了 50,000 个样本。MNIST 作者之一的 Yann LeCun 在推特中表示

如果多次使用原版的 MNIST 测试集,你的模型可能在测试集上已经过拟合了。是时候在新增的样本上试一下了。

MNIST 数据集
MNIST 数据集

MNIST 是一个由 Yann Lecun 等人创建的手写数字图像数据集,是研究者研究机器学习、模式识别等任务的高质量数据库。它包含训练集和测试集,训练集包含 60,000 个样本,测试集包含 10,000 个样本。

MNIST 数据集抽取自 NIST 数据库。NIST 手写字符集第一个分区的发布要早一年,其训练集是由 2,000 名人口普查局雇员手写的,而测试集更加有挑战性,是由 500 名在校生手写的。

LeCun、Cortes 和 Burges 的其中一个目的是创建一个分布相似的训练集和测试集。据他们描述,这个过程产生了两个 60,000 个样本的集合。然后通过下采样将测试集样本数降低到 10,000 个,可能是因为用当时的电脑处理这样一个数据集会非常慢。剩余的 50,000 个样本从此就丢失了。

20 多年来,MNIST 数据集都被认为是标准的机器学习基准。在过去的十年来,许多研究者都表达过这个数据集已经被过度使用的观点。尤其是其测试集过小,只有 10,000 样本,这引起了很多担忧。数以百计的论文都依据这同一个测试集,得到的性能越来越高。那么模型是否已经在测试集上过拟合?我们还能否相信在该数据集上取得的新结论?机器学习数据集到底能用多久?

为了解决原版 MNIST 测试集过小等问题,来自 Facebook 和研究者决定重建该数据集。QMNIST 的 GitHub 页上提供了 Pytorch 平台的 QMNIST 数据加载器,需要将数据集下载至与 pytorch.py 相同的文件夹下将网络下载选项设置为 download=’True’。

from qmnist import QMNIST

# the qmnist training set, download from the web if not found
qtrain = QMNIST('_qmnist', train=True, download=True)

# the qmnist testing set, do not download.
qtest = QMNIST('_qmnist', train=False)

# the first 10k of the qmnist testing set with extended labels
# (targets are a torch vector of 8 integers)
qtest10k = QMNIST('_qmnist', what='test10k', compat=False, download='True')

# all the NIST digits with extended labels
qall = QMNIST('_qmnist', what='nist', compat=False)

它与标准的 Pytorch MNIST 数据加载器兼容。

GitHub地址项目 GitHub 地址

开源NLP(自然语言处理)库对比

自然语言处理NLP)在越来越多的AI应用程序中至关重要。如果您正在构建聊天机器人,搜索专利数据库,将患者与临床试验相匹配,对客户服务或销售电话进行评级,从财务报告中提取事实,必须从自由文本中提取准确信息。在开发和生产中,最受欢迎的 NLP 库列表如下:

显然,NLP 领域还有更多的库。但是,这些库更通用,涵盖更多功能,而不只是专注于特定用例。例如,gensim 是一个 NLP 库,一开始是为构建文本主题模型而创建的,不能用于完整的 NLP 管道。此前,Maziyar Panahi 和 David Talby 提供了一个选择开源 NLP 库的备忘单。在本文的分析中,我们只考虑提供如下核心功能集合的库:

  • 句子检测
  • 单字/单词的细粒度单位化
  • 词干提取
  • 语法标记
  • 词性(POS)
  • 命名实体识别(NER)
  • 依赖分析器
  • 训练特定域的语言模型

以及,提供以下的部分或全部功能:

  • 文本匹配
  • 日期匹配
  • 文本分块
  • 拼写检查
  • 情绪检测
  • 很多其他功能!

这里比较的所有五个库都有一些可以定义的 NLP 数据管线的概念 – 因为大多数 NLP 任务需要组合这些功能中的某些,来获得有用的结果。这些管线,可以是『传统』的管线,也可以是基于深度学习的管线。

传统 NLP 与深度学习 NLP 对比
传统 NLP 与深度学习 NLP 对比

这是最受欢迎的 NLP 库的功能比较:

名称 SparkNLP NLTK SpaCy CoreNLP
句子检测
细粒度单位化
词干提取
语法
磁性标注
命名实体识别
依赖分析
文本匹配
日期匹配
段落分解
拼写检查
情绪检测
预训练模型
训练模型

NLP 研究者的编程指南

最近 AllenNLP 在 EMNLP2018 上做了一个主题分享,名为「写给 NLP 研究者的编程指南」(Writing Code for NLP Research)。该演讲从写原型和写模块两方面介绍了 NLP 研究该如何复制别人的代码、测试自己的代码块、记录及分享研究等,总之在研究者也要高效码代码的年代,这是一份浓缩的实践经验。

读者可以直接下载 PPT 了解详细内容,其中每一页 PPT 都带有简要的备注,根据这些备注可以将所有 PPT 以及整场演讲串联起来。

下载《Writing Code for NLP Research》

下面是整个分享的大纲。通过这次演讲,你可以学到如何写代码来促进你的研究,以及可复现的实验。当然读者最好还是知道一点 NLP 相关的知识,因为这一份分享会以深度学习中的 NLP 问题作为案例。此外,能够大致读懂 Python 代码也是很好的背景,这篇文章都是以 Python 接口调用 DL 框架为例。

NLP
NLP

这里有两种写研究代码的模式,一种是写原型,一种是写组件。作为一名研究者,大多数时候我们都希望写原型,但是在没写好组件前是写不好原型的。而通过原型设计,有时候做出来的东西又是希望下次再复用的组件。因此这是编写代码的两种模式,它们并不独立。

两种写研究代码的模式
两种写研究代码的模式

我们先从写原型的方式开始介绍:

写原型

写原型
写原型

当我们开始写一个原型代码的时候,我们要做到下面三点:

1. 写代码要快
2. 跟踪实验结果
3. 分析模型结果

快速开发

快速开发
快速开发

要做到快速编程,不要从头开始写所有内容,而是使用框架。这里的框架不仅指 tensorflow 或 pytorch 之类的框架,也可以理解为模板。比如上图中如果写 training loop 的部分,已经有人写好了。我们只要看懂后,直接拿来用就行,没有必要从头开始自己写所有部分。

快速编程
快速编程

上面提到的一些内容,都是可以找到现成框架来套用的。很多时候我们在编程时遇到的问题不是构建模型,而是数据读取、预处理和写训练循环等部分。如果有人把你想用的东西模块化了,还等什么,直接拿来用啊!

当然拿来用也是有步骤的,首先我们应该获得基线模型的性能,这也是一个很好的研究实践。基线模型可能是别人的代码,你要是能修修改改就更好了。其次复现 SOTA 基线结果对于理解模型和做更多的研究是非常有帮助的。

基线模型
基线模型

要想快速开发,另一个建议就是先复制,再重构。要记住,我们是在写原型,不用在乎什么可用性,先把代码写 work 了再说。如果实现的效果不错的话,再回去重构。

代码
代码

另外,我们要有好的编程习惯。比如起有意义的变量名,写注释帮助理解。记住,我们是写给人看的,不是机器!此外在使用基线模型做试验的时候,我们可以现在小数据集上做测试,并确保模型能准确读取数据。

准确读取数据
准确读取数据

如果在做原型设计时,我们将 LSTM 写死了(hard-code),那么在我们希望使用 Transformer 等模块的时候就需要重新改代码。因此使用多态可以借助更高级的抽象扩展代码,这样在换模块时就能只修改少量代码。

跟踪实验结果

在写原型的时候你需要运行很多东西,这导致很难追踪发生了什么以及对应的代码部分。

跟踪实验结果
跟踪实验结果

可以准备一个 Excel 表格,来记录实验结果。

黑箱对比对于上下文理解有帮助,但不能深入理解两个结果之间的关系,因为有太多的变量在同时变化。我们需要每次仅改变一个变量,可以在代码中设置「开关」,将开关配置一些全局状态/依赖注入。

全局状态 依赖注入
全局状态 依赖注入

每次只改变一个部分,方便跟踪实验结果的变化其原因在于哪里。

每次只改变一个部分
每次只改变一个部分

这里光是 embedder,我们就有很多种选择

embedder
embedder

使用设定文件来记录模型的改变,方便我们以后查询当时的设定。

分析模型结果

在训练的时候,可视化对于分析模型表现是非常重要的。这个技能必须掌握。

分析模型结果
分析模型结果

Tensorboard 可以提供很多分析结果。

Tensorboard
Tensorboard

Tensorboard 能帮我们找到优化的 bug。比如上图中的 embedding 梯度有两个数量级的差别。

Tensorboard
Tensorboard

原因在于 embedding 的梯度是稀疏梯度,即只有一部分会被更新。但是 ADAM 中的动量系数是针对整个 embedding 计算的,所以解决方法是直接引入特定的优化器:DenseSparseAdam。

在解释你的模型的预测输出时,好的展示是静态预测;更好的展示是交互地查看预测;最好的展示是交互地查看内部过程。

best
best

对于预测结果,如果可以做到交互式的方式来查看的话,是最好的。

开发组件

与写原型不同,开发可重复使用的组件有很多要注意的地方。我们的代码需要写清楚,这样就能聚焦于建模决策,而不考虑代码到底在做什么。

Code Reveiw
Code Reveiw

Code Reveiw 是必不可少的。Review 的时候,不仅能发现错误,还能提高代码的可读性。

持续整合 以及构建自动化
持续整合 以及构建自动化

如果我们不是软件开发人员的话,对于持续整合 以及构建自动化 这两个词可能比较陌生。通常我们只说持续整合的时候,也包含了构建自动化的意思。想要做到这点,要多写测试才行。

当然,如果我们不是开发一个很多人都会用到的库,上面这些步骤是用不到的。不过测试很重要,如果是原型开发,也要做一些最基本的测试。

最基本的测试
最基本的测试

如上对读取的数据进行测试,看是否正确。这里在进行单元测试时常用的就是 assert 语句,如果程序有问题,运行到这边就自然会报错,这样可以让我们尽快找到错误。

 assert 语句
assert 语句

如上所示,当然我们也可以使用 assert 语句检查维度是否一致。这在模型运算部分经常会用到,例如判断每个卷积层输出结果的尺寸和深度等。可以看到这两种测试的代码都不会很多。所以不要犯懒了,好好写测试吧。

关于 AllenNLP 库的一些介绍,这里就不花时间讨论了,感兴趣的可以看 slide 中 p141~p205 的部分。下面直接进入分享的部分。

GitHub地址项目 GitHub 地址

分享研究

简化安装的流程
简化安装的流程

简化安装的流程,令代码运行在任何平台,使用隔离的环境。

下面是使用 Docker 的一些优点。

Docker
Docker
Docker 2
Docker 2

用 docker 开发的好处不用多说,大家想必也已经都知道了。当然,缺点也是有的。

cons of docker
cons of docker

至于 Python 的包管理系统,AllenNLP 采用了 ANACONDA

Python
Python

Docker 是不错,但不适合做本地开发,这样的话,使用一些本地的包管理系统反而更方便。

最后做个总结

in conclusion
in conclusion
  • 快速开发原型(要安全)
  • 写安全的产品代码(要快)
  • 好的流程有利于做出好的研究
  • 使用正确的抽象
  • 查看 AllenNLP(广告)

这次分享的 slide 看了几遍,很多地方看得自己脸上发热,不写测试什么的说到了痛处。现在人工智能领域对于算法工程师的要求已经不是能掉个包,谈谈研究那么简单了,工程实践能力已经变得越来越重要。写优秀的代码,做优秀的研究,二者是一个互相促进的过程。

解读 2019 中国大数据与实体经济融合发展白皮书

在第二届数字中国建设峰会大数据分论坛大数据分论坛上,中国信息通信研究院总工程师余晓晖发布了《中国大数据与实体经济融合发展白皮书( 2019 年)》。

该白皮书对大数据与实体经济融合发展情况进行了全景展现,报告显示我国大数据融合发展已具备技术、产业、应用和政策基础,大数据在制造业、农业、服务业等实体经济各领域应用不断深入,给经济社会带来的益处和价值日益显现。

此外,白皮书还对大数据与实体经济融合发展机遇与挑战进行了深入分析,对推动我国大数据与实体经济融合创新发展提出了政策建议。

白皮书
白皮书

当前,世界经济正在加速向以数字生产力为标志的新阶段迈进,大数据是信息社会的重要战略资源,与实体经济各领域的渗透融合已成为我国经济实现高质量发展的重要驱动力。

1 . 白皮书前言(节选)

当前,以互联网、大数据、人工智能为代表的新一代信息技术日新月异,给各国经济社会发展、国家管理、社会治理、人民生活带来重大而深远的影响。

近年来,我国大数据产业保持良好发展势头,大数据与实体经济各领域渗透融合全面展开,融合范围日益宽广,融合深度逐步加深,融合强度不断加大,融合载体不断完善,融合生态加速构建,新技术、新产业、新业态、新模式不断涌现,战略引领、规划指导、标准规范、政策支持、产业创新的良性互动局面加快形成。

中国信息通信研究院结合我国大数据与实体经济融合的发展趋势,从融合发展的意义、融合发展的基础、融合发展的成效以及未来发展的重点任务四个方面对我国大数据与实体经济融合发展分析总结,形成白皮书,勾画了我国大数据与实体经济融合发展的全景,望为社会各界深入了解大数据与实体经济各领域渗透融合的最新情况和发展机遇提供有价值的参考。

2.  白皮书目录

一、大数据与实体经济融合是新时代发展的内在要求

  1. 大数据与实体经济融合是建设现代化经济体系的必由之路
  2. 大数据与实体经济融合是推动国家治理现代化的必然选择
  3. 大数据与实体经济融合是满足人民美好生活需要的重要举措

二、大数据与实体经济融合发展具备基础

  1.  技术基础不断强化
  2.  产业基础日益坚实
  3.  应用基础加快构筑
  4.  政策环境持续完善

三、大数据与实体经济融合发展成效初显

  1. 大数据与实体经济融合走向纵深
  2. 数据推动制造业转型升级提速
  3. 大数据促进数字农业建设稳步推进
  4. 大数据助力服务业新兴业态蓬勃发展
  5. 大数据支撑公共服务智慧高效

四、努力开创大数据与实体经济融合发展的新局面

  1. 大数据与实体经济融合发展机遇与挑战并存
  2. 新思路、新举措力促大数据与实体经济融合创新发展

以下为白皮书解读 PPT :

解读
解读
大数据与实体经济融合是新时代发展的内在要求
大数据与实体经济融合是新时代发展的内在要求
大数据与实体经济融合发展具备基础
大数据与实体经济融合发展具备基础
技术基础不断强化
技术基础不断强化
产业基础日益坚实1/2
产业基础日益坚实1/2
产业基础日益坚实2/2
产业基础日益坚实2/2
应用基础加快构筑
应用基础加快构筑
政策环境持续完善
政策环境持续完善
大数据与实体经济融合发展成效初显
大数据与实体经济融合发展成效初显
与实体经济融合走向纵深
与实体经济融合走向纵深
数字化转型
数字化转型
促进数字农业建设稳步推进
促进数字农业建设稳步推进
数据推动制造业转型升级提速
数据推动制造业转型升级提速
助力服务业新兴业态蓬勃发展1/2
助力服务业新兴业态蓬勃发展1/2
助力服务业新兴业态蓬勃发展2/2
助力服务业新兴业态蓬勃发展2/2
支撑公共服务智慧高效
支撑公共服务智慧高效
努力开创大数据与实体经济融合发展的新局面
努力开创大数据与实体经济融合发展的新局面
机遇与挑战并存
机遇与挑战并存
新思路新与举措1/4
新思路新与举措1/4
新思路新与举措2/4
新思路新与举措2/4
新思路新与举措3/4
新思路新与举措3/4
新思路新与举措4/4
新思路新与举措4/4

NLP 科研现状更新

一、资源简介

自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。

中科院自动化研究所自然语言处理团队负责人宗成庆研究员的报告从学科产生与发展、技术挑战、基本方法、应用举例、技术现状等多个视角对自然语言处理领域进行了全面梳理,以及对该学科未来发展方向的分析和展望。我们希望这份报告能够帮助读者了解学科发展的脉络,激发研究兴趣,思考核心问题,领悟未来走向。

作者团队主要研究方向包括自然语言处理基础任务、机器翻译、知识图谱、信息抽取、问答系统、情感分类、基于多模态信息融合的自然语言处理、类脑启发的自然语言处理方法研究等,在上述各方向上都进行了深入研究和探索,产出了一批优秀成果,包括三部专著:《统计自然语言处理》、《文本数据挖掘》和《知识图谱》。对该学科未来发展的趋势和方向进行了简要分析和展望。

二、主要内容目录

PPT 的提纲为:

  1. 学科产生与发展
  2. 技术挑战
  3. 基本方法
  4. 应用举例
  5. 技术现状
  6. 我们团队

三、资源分享

同时为了方便大家,我们把最新 《自然语言处理方法与应用》PDF 打包好了,可以直接下载。

计算机视觉各研究方向汇总

所谓计算机视觉,即 compute vision ,就是通过用计算机来模拟人的视觉工作原理,来获取和完成一系列图像信息处理的机器。计算机视觉属于机器学习在视觉领域的应用,是一个多学科交叉的研究领域,涉及数学,物理,生物,计算机工程等多个学科,由此也可以想象到计算机视觉的研究范围非常广,也是图像,语音,自然语言处理领域中从业人数最多的。

1. 图像分类

1.1 基本概念

图像分类是计算机视觉中最基础的一个任务,也是几乎所有的基准模型进行比较的任务,从最开始比较简单的 10 分类的灰度图像手写数字识别 mnist ,到后来更大一点的 10 分类的 cifar10 和 100 分类的cifar100 ,到后来的 imagenet ,图像分类任务伴随着数据库的增长,一步一步提升到了今天的水平。

现在在 imagenet 这样的超过 1000 万图像,2 万类的数据集中,计算机的图像分类水准已经超过了人类。

图像分类,顾名思义,就是一个模式分类问题,它的目标是将不同的图像,划分到不同的类别,实现最小的分类误差。

总体来说,对于二分类的问题,图像分类可以分为跨物种语义级图像分类,子类细粒度图像分类,以及实例级图像分类三大类别。

图像分类三大类别
图像分类三大类别

传统机器学习方法:
通过各种经典的特征算子+经典分类器组合学习,比如 HoG+SVM。

深度学习方法:
各种分类网络,最为大家熟知的就是 ImageNet 竞赛了。

2012 年 Alexnet 诞生,意味着 GPU 训练时代的来临。
Alexnet 是第一个真正意义上的深度网络,与 LeNet5 的 5 层相比,它的层数增加了 3  层,网络的参数量也大大增加,输入也从 32 变成了 224 。

2014 年 VGG 诞生,它共包含参数约为 550M 。全部使用 3*3* 的卷积核*和 2*2 的最大池化核,简化了卷积神经网络的结构。VGG 很好的展示了如何在先前网络架构的基础上通过增加网络层数和深度来提高网络的性能,网络虽然简单,但是却异常的有效,在今天 VGG 仍然被很多的任务选为基准模型。

同一年 GoogleNet 诞生,也被成为 Inception Model ,它的核心是 Inception Module 。一个经典的   inception 结构,包括有四个成分,1*1 卷积,3*3  卷积, 5*5  卷积,3*3  最大池化,最后对运算结果进行通道上组合,可以得到图像更好的表征。自此,深度学习模型的分类准确率已经达到了人类的水平(5%~10%)。

2015 年,ResNet 被提出。ResNet 以  3.57% 的错误率表现超过了人类的识别水平,并以 152 层的网络架构创造了新的模型记录。由于 resnet 采用了跨层连接的方式,它成功的缓解了深层神经网络中的梯度消散问题,为上千层的网络训练提供了可能。

2016 年 ResNeXt 诞生,101 层的 ResNeXt 可以达到 ResNet152  的精确度,却在复杂度上只有后者的一半,核心思想为分组卷积。即首先将输入通道进行分组,经过若干并行分支的非线性变换,最后合并。

在 resnet 基础上,密集连接的 densenet 将前馈过程中将每一层与其他的层都连接起来。对于每一层网络来说,前面所有网络的特征图都被作为输入,同时其特征图也都被其他网络层作为输入所利用。

2017 年,也是 imagenet 图像分类比赛的最后一年,senet 获得了冠军。这个结构,仅仅使用了“特征重标定”的策略来对特征进行处理,也就是通过学习获取每个特征通道的重要程度,根据重要性去抑制或者提升相应的特征。

1.2 方向特点

图像分类的比赛基本落幕,也接近算法的极限。但是在实际的应用中却面临着比比赛中更加复杂,比如样本不均衡,分类界面模糊,未知类别等。

2. 目标检测

2.1 基本概念

分类任务给出的是整张图片的内容描述,而目标检测任务则关注图片中特定的目标。

检测任务包含两个子任务,其一是这一目标的类别信息和概率,它是一个分类任务。其二是目标的具体位置信息,这是一个定位任务。

face 0.996
face 0.996

与计算机视觉领域里大部分的算法一样,目标检测也经历了从传统的人工设计特征和浅层分类器的思路(以),到大数据时代使用深度神经网络进行特征学习的思路

在传统方法时代,很多的任务不是一次性解决,而是需要多个步骤的。而深度学习时代,很多的任务都是采用 End-To-End 的方案,即输入一张图,输出最终想要的结果,算法细节和学习过程全部丢给了神经网络,这一点在物体检测这个领域,体现得尤为明显。

不管是清晰地分步骤处理,还是深度学习的 end-to-end 的方法,目标检测算法一定会有 3 个模块。第一个是检测窗口的选择,第二个是图像特征的提取,第三个是分类器的设计。

2.2 方法分类

传统机器学习方法:
以保罗·维奥拉和迈克尔·琼斯于 2001 年提出的维奥拉-琼斯目标检测框架为代表,这是第一篇基于Haar+Adaboost 的检测方法,也是首次把检测做到实时的框架;

此方法在 opencv 中被实现为

cvHaarDetectObjects()

是 opencv 中最为人熟知的目标检测方法。

速度非常快,检测召回率相对如今的算法较低。

深度学习方法:
仍然要解决区域选择、提取特征、分类回归三个问题。但是在演变过程中,却发展出了 multi-stage和one-stage 的方法。其中 multi-stage 方法,是分步骤完成上面的任务,甚至可能需要单独训练各个网络。而 one-stage 则是一步到位。

RCNN 的框架是 multi-stage 方法的典型代表。它使用了 Selective search 先生成候选区域再检测,候选窗口的数量被控制在了 2000 个左右。选择了这些图像框之后,就可以将对应的框进行 resize 操作,然后送入 CNN 中进行训练。由于 CNN 非常强大的非线性表征能力,可以对每一个区域进行很好的特征表达,CNN 最后的输出,使用多个分类器进行分类判断。该方法将 PASCAL VOC 上的检测率从  35.1%  提升到了 53.7% ,其意义与  Alexnet 在 2012 年取得分类任务的大突破是相当的,对目标检测领域影响深远。

随后 Fast R-CNN 提出 RoIPooling 从整图对应的卷积特征图选取区域特征,解决了重复提取特征的问题。Faster R-CNN 则提出 Region Proposal , anchors 把一张图片划分成  n*n 个区域,每个区域给出 9 个不同 ratio 和 scale 的 proposal ,解决了重复提取候选 proposal 的问题。 RCNN 系列在工业届应用非常广泛,因此从事目标检测的同学必须掌握。

除了 multi-stage 方法,还有 one-stage 方法。以 YOLO 为代表的方法,没有显式的候选框提取过程。它首先将图片 resize 到固定尺寸,将输入图片划分成一个 7×7 的网格,每个网格预测 2 个边框,对每一个网络进行分类和定位。YOLO 方法也经过了许多版本的发展,从 YOLO v2  到  YOLO v3 。YOLO 的做法是速度快,但是会有许多漏检,尤其是小的目标。所以 SSD 就在  YOLO 的基础上添加了 Faster R-CNN 的   Anchor  概念,并融合不同卷积层的特征做出预测。虽然 YOLO 和 SSD 系列的方法没有了 region proposal 的提取,速度更快,但是必定会损失信息和精度。

2.3 方向特点

目标检测方向有一些固有的难题,比如小脸,遮挡,大姿态。

小脸,遮挡,大姿态
小脸,遮挡,大姿态

而在方法上,多尺度与级联网络的设计,难样本的挖掘,多任务 loss 等

3. 图像分割

3.1 基础概念

图像分割属于图像处理领域最高层次的图像理解范畴。所谓图像分割就是把图像分割成具有相似的颜色或纹理特性的若干子区域,并使它们对应不同的物体或物体的不同部分的技术。这些子区域,组成图像的完备子集,又相互之间不重叠。

图像分割
图像分割

在图像处理中,研究者往往只对图像中的某些区域感兴趣,在此基础上才有可能对目标进行更深层次的处理与分析,包括对象的数学模型表示、几何形状参数提取、统计特征提取、目标识别等。

传统方法:
图像分割问题最早来自于一些文本的分割,医学图像分割。在文本图像分割中,我们需要切割出字符,常见的问题包括指纹识别,车牌识别;由于这一类问题比较简单,因为基于阈值和聚类的方法被经常使用。

基于阈值和聚类的方法虽然简单,但因此也经常失效。以 graphcut 为代表的方法,是传统图像分割里面鲁棒性最好的方法。Graphcut 的基本思路,就是建立一张图,其中以图像像素或者超像素作为图像顶点,然后移除一些边,使得各个子图不相连从而实现分割。图割方法优化的目标是找到一个切割,使得移除边的和权重最小。

深度学习方法:
全卷积神经网络(Fully connected Network)是第一个将卷积神经网络正式用于图像分割问题的网络。

一个用于分类任务的深度神经网络通过卷积来不断抽象学习,实现分辨率的降低,最后从一个较小的featuremap 或者最后的特征向量,这个 featuremap 通常为 5*5 或者 7*7 等大小。而图像分割任务需要恢复与原尺度大小一样的图片,所以,需要从这个 featuremap 恢复原始图片尺寸,这是一个上采样的过程。由于这个过程与反卷积是正好对应的逆操作,所以我们通常称其为反卷积。

实际上并没有反卷积这样的操作,在现在的深度学习框架中,反卷积通常有几种实现方式,一个是双线性插值为代表的插值法,一个是转置卷积。

转置卷积
转置卷积

3.2 方向特点

在基于深度学习的图像分割中,有一些比较关键的技术,包括反卷积的使用,多尺度特征融合,crf  等后处理方法。

多尺度与上下文信息:
多尺度的信息融合可以从特征图,还可以直接采用多尺度的输入图像,不过这两者本质上没有太多的差异。使用金字塔的池化方案可实现不同尺度的感受野,它能够起到将局部区域上下文信息与全局上下文信息结合的效果。对于图像分割任务,全局上下文信息通常是与整体轮廓相关的信息,而局部上下文信息则是图像的细节纹理,要想对多尺度的目标很好的完成分割,这两部分信息都是必须的。

CRF:
由于经典的 cnn 是局部的方法,即感受野是局部而不是整个图像。另一方面,cnn 具有空间变换不变性,这也降低了分割的边缘定位精度。针对 cnn 的这两个缺陷,crf 可以进行很好的弥补。crf 是一种非局部的方法,它可以融合 context 信息,Deeplab 系列就使用了cnn 加上全连接的 crf 的方式。

另一方面,前面我们说的图像分割,是属于硬分割,即每一个像素都以绝对的概率属于某一类,最终概率最大的那一类,就是我们所要的类别。但是,这样的分割会带来一些问题,就是边缘不够细腻,当后期要进行融合时,边缘过渡不自然。此时,就需要用到 image matting 技术。

4. 目标跟踪

4.1 基本概念

目标跟踪,指的其实就是视频中运动目标的跟踪,跟踪的结果通常就是一个框。目标跟踪是视频监控系统中不可缺少的环节。

目标跟踪
目标跟踪

根据目标跟踪方法建模方式的不同,可以分为生成式模型方法与判别式模型方法。

生成式模型跟踪算法以均值漂移目标跟踪方法和粒子滤波目标跟踪方法为代表,判别式模型跟踪算法以相关滤波目标跟踪方法和深度学习目标跟踪方法为代表。

生成类方法:
在原始影像帧中对目标按指定的方法建立目标模型,然后在跟踪处理帧中搜索对比与目标模型相似度最高的区域作为目标区域进行跟踪。算法主要对目标本身特征进行描述,对目标特征刻画较为细致,但忽略背景信息的影响。在目标发生变化或者遮挡等情况下易导致失跟现象。

判别类方法:
通过对原始影像帧,对目标及背景信息进行区分建立判别模型,通过对后续影像帧搜索目标进行判别是目标或背景信息进而完成目标跟踪。

判别类方法与生成类方法的根本不同在于判别类方法考虑背景信息与目标信息区分来进行判别模型的建立,由于判别类方法将背景与目标进行区分,因此该类方法在目标跟踪时的表现通常更为鲁棒,目前已经成为目标跟踪的主流跟踪方式。判别类方法包括相关滤波,深度学习方法。

4.2 方向特点

目标跟踪有一些难点:

  1. 目标表征表达问题,虽然深度学习方法具有很强的目标表征能力,但是仍然容易受相似环境的干扰。
  2. 目标快速运动,由于很多跟踪的物体都是高速运动,因此既要考虑较大的搜索空间,也要在保持实时性的前提下减小计算量。
  3. 变形,多尺度以及遮挡问题,当目标发生很大的形变或者临时被遮挡如何保持跟踪并且在目标重新出现时恢复跟踪。

5. 图像滤波与降噪

5.1 基本概念

现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响,称为含噪图像或噪声图像。减少数字图像中噪声的过程称为图像降噪,有时候又称为图像去噪。

降噪可以应用于图像增强和美颜等领域。

图像降噪
图像降噪

传统方法:
传统降噪算法根据降噪的原理不同可分为基于邻域像素特征的方法,基于频域变换的方法,和基于特定模型的方法。

基于空域像素特征的方法,是通过分析在一定大小的窗口内,中心像素与其他相邻像素之间在灰度空间的直接联系,来获取新的中心像素值的方法,因此往往都会存在一个典型的输入参数,即滤波半径r。此滤波半径可能被用于在该局部窗口内计算像素的相似性,也可能是一些高斯或拉普拉斯算子的计算窗口。在邻域滤波方法里面,最具有代表性的滤波方法有以下几种:算术均值滤波与高斯滤波,统计中值滤波,双边滤波,非局部平均滤波方法,BM3D 算法。

深度学习方法:
在 2012 年,随着 Alexnet 的出现,深度学习做去噪的工作取得了一些进展,可以达到和 BM3D 差不多的水平。对于仿真的噪声和固定的噪声,深度学习已经可以很好的去除,达到或超过传统领域里最好的算法。

利用卷积神经网络去除噪声的原理很简单,输入是一张有噪声的图,标签是一张无噪声的图,输出是一张降噪后的图,损失函数是无噪声 groundtruth 与网络输出的 L2 距离,网络通常就是与图像分割算法一样的网络,卷积+与之对称的反卷积。

5.2 方向特点

降噪的研究聚焦在真实数据的去噪声,因为真实世界的噪声不符合高斯加性噪声的假设,而且是依赖于信息本身的。不过,真实噪声图像和相应的无噪声图像获取是非常困难,慢慢的也有了一些 benchmark 。

6. 图像增强

6.1 基本概念

图像增强,即增强图像中的有用信息,改善图像的视觉效果。

图像增强
图像增强

图像增强实际上包含了很多的内容,上面的降噪也属于其中,只是因为降噪多了美颜这一个应用单独拿出来说一下。

对比度增强,用于扩大图像中不同物体特征之间的差别,抑制不感兴趣的特征,可用于改善图像的识别效果,满足某些特殊分析。

超分辨,使图像变得更加清晰,可以用于视频的传输先进行降采样,再进行升采样,即降低了传输成本,又增加了视觉效果。

图像修复,重建图像和视频中丢失或损坏的部分,也被称为图像插值或视频插值,主要是替换一些小区域和瑕疵,如 photoshop 中的印章工具。随着发展,已经从原先针对划痕、污点等的修复到现在对图像、视频中文字、物体等的移除,比如水印等。

传统方法:
传统的方法就是一个预定义好的非线性变换,主要有三大类方法,一类是点操作,一类是直方图操作,一类是 Retinex 理论。

点操作也被称为直接对比度增强,将每个像素独立操作,包括对数变化,指数变化,负图像,阈值化等。我们熟知的 gamma 变换如下,可以进行不同形状的映射。

直方图操作也被称为间接对比度增强,包括直方图均衡,直方图匹配等。直方图均衡化通常用来增加图像的全局对比度,尤其是当图像中主体和背景对比度相当接近的时候。直方图均衡化的效果就是让直方图更均衡的分布,这种方法对于背景和前景都太亮或者太暗的图像非常有用,通常是曝光过度或者曝光不足的图片。

Retinex 理论,即颜色恒常知觉的计算理论,Retinex 是一个合成词,它的构成是 retina (视网膜)+cortex (皮层),它将图像认为是 reflectance 和 illumination 的点乘,理论基础是在不同的照明条件下,物体的色彩不受光照非均性的影响是恒定的,而物体的颜色是由物体对长波、中波和短波光线的反射能力决定的而不是由反射光强度的绝对值决定。

深度学习方法:
以增强对比度为例,深度学习方法使用了CNN 来进行非线性变换的学习,而且通常不仅仅局限在对比度增强,经常会同时学习到降噪。深度学习的方法有两种,一种是采用成对的图片训练,比如 pix2pix,learning in the dark ,缺点是没有普适性,只能对所实验的数据集有用。一种是不需要成对图片训练,只需要好图,比如 WESPE ,常配合 GAN 使用。

6.2 方向特点

一个图像增强任务,传统方法需要分别进行降噪,颜色校正,对比度增强等各种操作,而深度学习算法的好处就是 end-to-end 输出,将整个流程丢给了网络。目前图像增强相对于前面的一些方向还是一个蓝海,覆盖的方向和应用非常广,有精力的朋友可以好好研究。

7. 风格化

图像风格化之所以引起我们的注意,完全是因为 2015 年的一个研究,可以将任意的图像转换为梵高的画作风格。 也是得益于深度学习技术的发展,传统的方法做不到这么好的效果。而随着美图秀秀,天天 P 图等 app 层出不穷的滤镜,风格化已经成为了单独的一个研究领域。

图像风格化是一个综述性的技术应用,为了简单起见,就理解为艺术类滤镜把,它指通过算法,将数码相机拍摄的照片,变成绘画、素描等艺术类的非数码相机效果,是后期程度最深的操作,将彻底改变相片的风格。

风格化
风格化

深度学习方法:
以 A Neural Algorithm of Artistic Style 论文发表为起始,Prisma 滤镜为典型代表。虽然风格迁移技术的发展日新月异,但是最革命性的还是该文章的方法,这是德国图宾根大学的研究,它通过分析某种风格的艺术图片,能将图片内容进行分离重组,形成任意风格的艺术作品,最开始的时候需要将近一个小时来处理。

就是把一幅图作为底图,从另外一幅画抽取艺术风格,重新合成新的艺术画,可以参考上面的图。

研究者认为,图片可以由内容层(Content)与风格层(Style)两个图层描述,相互分离开。在图像处理中经常将图像分为粗糙层与细节层,即前者描述图像的整体信息,后者描述图像的细节信息,具体可以通过高斯金字塔来得到。

卷积神经网络的各个神经元可以看做是一个图像滤波器,而输出层是由输入图像的不同滤波器的组合,深度由浅到深,内容越来越抽象。

底层信息重建,则可以得到细节,而从高层信息重建,则得到图像的”风格“。因此,可以选择两幅图像,一幅构建内容信息,一幅构建风格信息,分别进行 Content 重建与 Style 重建。通过将内容与风格组合,可以得到新的视觉信息更加有意思的图像,如计算机油画,这就是它的基本原理。方法的核心在于损失函数的设计,包括内容损失和风格损失

内容损失在像素空间,要求风格化后的图能够保证内容的完整性。风格损失使用 vgg 特征空间的 gram 矩阵,这样就有了较高的抽象层级,实践结果表明可以很好的捕捉风格。

7.2 方向特点

如今风格化方法在很多地方都有应用,比如大家熟悉的变脸等。方法也演变成了几个方向;

  1. 单模型单风格,即一个网络只能做一种风格化。
  2. 单模型多风格,即一个网络可以实现多种风格,比(1)实用的多。
  3. 单模型任意风格,即一个网络可以任意风格,视输入图像而定,这是最好的,更多的研究我们以后会开专题。

8. 三维重建

8.1 基本概念

什么是三维重建呢?广义上来说,是建立真实世界的三维模型。随着软硬件的成熟,在电影,游戏,安防,地图等领域,三维重建技术的应用越来越多。目前获取三维模型的方法主要包括三种,手工建模,仪器采集与基于图像的建模。

三维重建
三维重建
  1. 手工建模作为最早的三维建模手段,现在仍然是最广泛地在电影,动漫行业中应用。顶顶大名的3DMax 就是典型代表,当然了,它需要专业人士来完成。
  2. 由于手工建模耗费大量的人力,三维成像仪器也得到了长期的研究和发展。基于结构光(structured light)和激光扫描技术的三维成像仪是其中的典型代表。这些基于仪器采集的三维模型,精度可达毫米级,是物体的真实三维数据,也正好用来为基于图像的建模方法提供评价数据库。由于仪器的成本太高,一般的用户是用不上了。
  3. 基于图像的建模技术(image based modeling),顾名思义,是指通过若干幅二维图像,来恢复图像或场景的三维结构,这些年得到了广泛的研究。

我们这里说的三维重建,就特指基于图像的三维重建方法,而且为了缩小范围,只说人脸图像,并简单介绍其中核心的 3DMM 模型。

3DMM 模型:

人脸三维重建方法非常多,有基于一个通用的人脸模型,然后在此基础上进行变形优化,会牵涉到一些模板匹配,插值等技术。有基于立体匹配(各种基于双目,多目立体视觉匹配)的方法,通过照相机模型与配准多幅图像,坐标系转换,获取真实的三维坐标,然后进行渲染。有采用一系列的人脸作为基,将人脸用这些基进行线性组合的方法,即 Morphable models 方法。

其中,能够融会贯通不同传统方法和深度学习方法的,就是 3D Morphable Models 系列方法,从传统方法研究到深度学习。

它的思想就是一幅人脸可以由其他许多幅人脸加权相加而来,学过线性代数的就很容易理解这个正交基的概念。我们所处的三维空间,每一点(x,y,z),实际上都是由三维空间三个方向的基量,(1,0,0),(0,1,0),(0,0,1)加权相加所得,只是权重分别为 x,y,z。

转换到三维空间,道理也一样。每一个三维的人脸,可以由一个数据库中的所有人脸组成的基向量空间中进行表示,而求解任意三维人脸的模型,实际上等价于求解各个基向量的系数的问题。

每一张人脸可以表示为:
形状向量 Shape Vector:S=(X1,Y1,Z1,X2,Y2,Z2,…,Yn,Zn)
纹理向量 Texture Vector:T=(R1,G1,B1,R2,G2,B2,…,Rn,Bn)

形状向量 纹理向量
形状向量 纹理向量

而一张任意的人脸,其等价的描述如下:

形状和纹理的平均值
形状和纹理的平均值

其中第一项 Si,Ti 是形状和纹理的平均值,而 si,ti 则都是 Si ,Ti 减去各自平均值后的协方差矩阵的特征向量。 基于 3DMM 的方法,都是在求解 α,β 这一些系数,当然现在还会有表情,光照等系数,但是原理都是通用的。

8.2 方向特点

人脸的三维建模有一些独特的特点:

1.预处理技术非常多,人脸检测与特征点定位,人脸配准等都是现在研究已经比较成熟的方法。利用现有的人脸识别与分割技术,可以缩小三维人脸重建过程中需要处理的图像区域,而在有了可靠的关键点位置信息的前提下,可以建立稀疏的匹配,大大提升模型处理的速度。

2.人脸共性多。正常人脸都是一个鼻子两只眼睛一个嘴巴两只耳朵,从上到下从左到右顺序都不变,所以可以首先建立人脸的参数化模型,实际上这也是很多方法所采用的思路。

人脸三维重建也有一些困难:

  1. 人脸生理结构和几何形状非常复杂,没有简单的数学曲面模型来拟合。
  2. 光照变化大。同一张脸放到不同的光照条件下,获取的图像灰度值可能大不一样的,这些都会影响深度信息的重建。
  3. 特征点和纹理不明显。图像处理最需要的就是明显的特征,而光滑的人脸除了特征关键点,很难在脸部提取稠密的有代表性的角点特征。这个特点,使得那些采用人脸配准然后求取三维坐标的方法面临着巨大的困难。

9. 图像检索

9.1 基本概念

图像检索的研究从 20 世纪 70 年代就已经开始,在早期是基于文本的图像检索技术(Text-based Image Retrieval,简称 TBIR ),利用文本来描述图像的特征,如绘画作品的作者、年代、流派、尺寸等。随着计算机视觉技术的发展,90年代开始出现了对图像的内容语义,如图像的颜色、纹理、布局等进行分析和检索的图像检索技术,也就是基于内容的图像检索(Content-based Image Retrieval,简称 CBIR )技术,本小节的图像检索就特指基于内容的图像检索。

基于内容的图像检索也经历了传统方法和深度学习方法两个主要阶段,传统的基于内容的图像检索通常包括以下流程:

图像检索流程
图像检索流程

预处理,通常包括一些图像归一化,图像增强等操作。特征提取,即提取一些非常鲁棒的图像特征,比如SIFT,HoG 等特征。特征库就是要查询的库,库中不存储图像而是存储特征,每一次检索图像完成特征提取之后,就在特征库中进行匹配和相似度计算。索引就是在某种相似性度量准则下计算查询向量到特征库中各个特征的相似性大小,最后按相似性大小进行高效的排序并顺序输出对应的图片。

图像检索的中最复杂的一步就是检索,在这一步完成验证过程。

图像检索验证过程
图像检索验证过程

最简单的方法就是暴力(brute-force) 搜索方法(又称线性扫描),即逐个与数据库中的每个点进行相似性计算然后进行排序,这种简单粗暴的方式虽然很容易实现,但是会随着数据库的大小以及特征维度的增加其搜索代价也会逐步的增加,从而限制在数据量小的小规模图像数据库,在大规模图像库上这种暴力搜索的方式不仅消耗巨大的计算资源,而且单次查询的响应时间会随着数据样本的增加以及特征维度的增加而增加,为了降低搜索的空间的空间复杂度与时间复杂度,研究者们提出了很多高效的检索技术,其中最成功的大家也最熟悉到方法是基于哈希的图像检索方法

深度学习在图像检索里面的作用就是把表征样本的特征学习好,就够了。

9.2 方向特点

图像检索系统具有非常大的商业价值,从搜索引擎的以图搜图,到人脸验证和识别系统,到一些搜索排序系统(比如基于美学的摄影图库)。由于图像特征的学习是一个通用的研究方向,因此更多的在于设计高效的检索系统。

10. GAN

10.1 基本概念

GAN,即 Generative adversarial net ,被誉为新的深度学习,涉及的研究非常多,可以单列为一个方向,一个经典的网络结构如下。

Generative adversarial net
Generative adversarial net

GAN 的原理很简单,它包括两个网络,一个生成网络,不断生成数据分布。一个判别网络,判断生成的数据是否为真实数据。

Generative adversarial net
Generative adversarial net

上图是原理展示,黑色虚线是真实分布,绿色实线是生成模型的学习过程,蓝色虚线是判别模型的学习过程,两者相互对抗,共同学习到最优状态。

关于 GAN 的基础,我们以前已经写过相关的内容,大家去看就可以了。

10.2 方向特点

作为新兴和热门方向,GAN 包含的研究方向非常的广,包括 GAN 的应用,GAN 的优化目标,GAN 的模型发展,GAN 的训练技巧,GAN 的理论分析,GAN 的可视化等等。

开源 Python 爬虫网站秒搜所有豆瓣好书

程序员在提升自己的道路,大多还是会选择阅读编程书籍这一途径,但找到一本好书就没那么容易了。

通过查看各大销售网站的销量数据和评价,以及豆瓣评分和评价人数,可以帮助我们更快的挖掘出经典的计算机书籍,还有那些被人们忽视的好书。

为什么说它很好用呢?演示一遍你就知道了:

好书一下
好书一下

可以看出这网站的界面非常简洁,没有花里花哨的内容,只有干货,你可以直接通过关键字、分数、和评价人数这三个选项进行搜索,比如我们可以搜索关键字:编程;分数:9.0;评价人数:100 人以上

查找结果的显示方式有按照分数排序和人数排序两种,按照分数排序的截图如下:

分数排序
分数排序

按照评价人数排序的截图如下:

人数排序
人数排序

除了以上演示的操作,这个网站并实现了以下功能:

  • 可以爬下豆瓣读书标签下的所有图书
  • 按评分排名依次存储
  • 存储到 Excel 中,可方便大家筛选搜罗,比如筛选评价人数 >1000 的高分书籍;可依据不同的主题存储到 Excel 不同的 Sheet
  • 采用 User Agent 伪装为浏览器进行爬取,并加入随机延时来更好的模仿浏览器行为,避免爬虫被封

也就是说你不仅可以在网站上搜索,还能通过下载各类目下的 Excel 书单文件,直接在 Excel 中搜索

Excel书单文件
Excel书单文件

效果截图如下:

效果截图
效果截图

GitHub地址项目 GitHub 地址

12 大深度学习框架的入门项目

概述

开源框架总览:现如今开源生态非常完善,深度学习相关的开源框架众多,光是为人熟知的就有 caffe,tensorflow,pytorch/caffe2,keras,mxnet,paddldpaddle,theano,cntk,deeplearning4j,matconvnet 等。如何选择最适合你的开源框架是一个问题。一个合格的深度学习算法工程师怎么着得熟悉其中的 3 个以上吧。下面是各大开源框架的一个总览。

开源框架总览
开源框架总览

在这里我们还有一些框架没有放上来,是因为它们已经升级为大家更喜欢或者使用起来更加简单的版本,比如从 torch->pytorch,从 theano 到 lasagne。另外这些框架都支持 CUDA ,因此编程语言这里也没有写上 cuda 。

在选择开源框架时,要考虑很多原因,比如开源生态的完善性,比如自己项目的需求,比如自己熟悉的语言。当然,现在已经有很多开源框架之间进行互转的开源工具如 MMDNN 等,也降低了大家迁移框架的学习成本。

除此之外还有 tiny-dnn,ConvNetJS,MarVin,Neon 等等小众,以及 CoreML 等移动端框架,就不再一一介绍。总的来说对于选择什么样的框架,有三可以给出一些建议。

  1. 不管怎么说,tensorflow/pytorch 你都必须会,是目前开发者最喜欢,开源项目最丰富的框架。
  2. 如果你要进行移动端算法的开发,那么 Caffe 是不能不会的。
  3. 如果你非常熟悉 Matlab,matconvnet 你不应该错过。
  4. 如果你追求高效轻量,那么 darknet 和 mxnet 你不能不熟悉。
  5.  如果你很懒,想写最少的代码完成任务,那么用 keras 吧。
  6. 如果你是 java 程序员,那么掌握 deeplearning4j 没错的。

其他的框架,也自有它的特点,大家可以自己多去用用。

如何学习开源框架

要掌握好一个开源框架,通常需要做到以下几点:

  •  熟练掌握不同任务数据的准备和使用。
  • 熟练掌握模型的定义。
  • 熟练掌握训练过程和结果的可视化。
  • 熟练掌握训练方法和测试方法。

一个框架,官方都会开放有若干的案例,最常见的案例就是以 MNISI 数据接口+预训练模型的形式,供大家快速获得结果,但是这明显还不够,学习不应该停留在跑通官方的 demo 上,而是要解决实际的问题。我们要学会从自定义数据读取接口,自定义网络的搭建,模型的训练,模型的可视化,模型的测试与部署等全方位进行掌握。这是一个二分类任务,给大家准备了500 张微笑表情的图片、500 张无表情的图片,放置在 git 工程的data 目录下,图片预览如下,已经全部缩放到 60*60 的大小:

这是无表情的图片:

无表情的图片
无表情的图片

这是微笑表情的图片:

微笑表情的图片
微笑表情的图片

因此,我们的目标就是利用这 500 张图片完成好这个图像分类任务。

在下面的所有框架的学习过程中,我们都要完成下面这个流程,只有这样,才能叫做真正的完成了一个训练任务。

流程
流程

另外,所有的框架都使用同样的一个模型,这是一个 3 层卷积 +2 层全连接的网络,由卷积+BN 层+激活层组成,有的使用带步长的卷积,有的使用池化,差别不大。

  • 输入图像,48*48*3 的 RGB 彩色图。
  • 第一层卷积,通道数 12,卷积核 3*3。
  • 第二层卷积,通道数 24,卷积核 3*3。
  • 第三层卷积,通道数 48,卷积核 3*3。
  • 第一层全连接,通道数 128。
  • 第二层全连接,通道数 2,即类别数。

这是最简单的一种网络结构,优化的时候根据不同的框架,采用了略有不同的方案。因为此处的目标不是为了比较各个框架的性能,所以没有刻意保持完全一致。

开源框架

下面我们开始对各个框架进行简述。

1.  Caffe

概述:Caffe 是伯克利的贾扬清主导开发,以 C++/CUDA 代码为主,最早的深度学习框架之一,比TensorFlow、Mxnet、Pytorch 等都更早,需要进行编译安装。支持命令行、Python 和 Matlab 接口,单机多卡、多机多卡等都可以很方便的使用。目前 master 分支已经停止更新,intel 分支等还在维护,caffe  框架已经非常稳定。

caffe 的使用通常是下面的流程:

caffe
caffe

以上的流程相互之间是解耦合的,所以 caffe 的使用非常优雅简单。

caffe 有很明显的优点和缺点。

优点:

  • 以 C++/CUDA/python 代码为主,速度快,性能高。
  • 工厂设计模式,代码结构清晰,可读性和拓展性强。
  • 支持命令行、Python 和 Matlab 接口,使用方便。
  • CPU 和 GPU 之间切换方便,多 GPU 训练方便。
  • 工具丰富,社区活跃。

缺点:

  • 源代码修改门槛较高,需要实现前向反向传播,以及 CUDA 代码。
  • 不支持自动求导。
  • 不支持模型级并行,只支持数据级并行
  • 不适合于非图像任务。
caffe
caffe

2. Tensorflow

概述:TensorFlow 是 Google brain 推出的开源机器学习库,可用作各类深度学习相关的任务。TensorFlow = Tensor + Flow,Tensor 就是张量,代表 N 维数组,这与 Caffe 中的 blob 是类似的;Flow  即流,代表基于数据流图的计算。

特点:TensorFlow 最大的特点是计算图,即先定义好图,然后进行运算,所以所有的 TensorFlow 代码,都包含两部分:

  • 创建计算图,表示计算的数据流。它做了什么呢?实际上就是定义好了一些操作,你可以将它看做是Caffe 中的 prototxt 的定义过程。
  • 运行会话,执行图中的运算,可以看作是 Caffe 中的训练过程。只是 TensorFlow 的会话比 Caffe 灵活很多,由于是 Python 接口,取中间结果分析,Debug 等方便很多。
tensorflow
tensorflow

3 . Pytorch

概述:一句话总结 Pytorch = Python + Torch。Torch 是纽约大学的一个机器学习开源框架,几年前在学术界非常流行,包括 Lecun 等大佬都在使用。但是由于使用的是一种绝大部分人绝对没有听过的 Lua 语言,导致很多人都被吓退。后来随着 Python 的生态越来越完善,Facebook 人工智能研究院推出了 Pytorch 并开源。Pytorch 不是简单的封装 Torch 并提供Python 接口,而是对 Tensor 以上的所有代码进行了重构,同 TensorFlow 一样,增加了自动求导。

后来 Caffe2 全部并入 Pytorch,如今已经成为了非常流行的框架。很多最新的研究如风格化、GAN 等大多数采用 Pytorch 源码。

特点:

  • 动态图计算。TensorFlow 从静态图发展到了动态图机制 Eager Execution ,pytorch 则一开始就是动态图机制。动态图机制的好处就是随时随地修改,随处 debug ,没有类似编译的过程。
  • 简单。相比 TensorFlow1.0 中 Tensor、Variable、Session 等概念充斥,数据读取接口频繁更新,tf.nn、tf.layers、tf.contrib 各自重复,Pytorch 则是从 Tensor 到 Variable 再到 nn.Module ,最新的Pytorch 已经将 Tensor 和 Variable 合并,这分别就是从数据张量到网络的抽象层次的递进。有人调侃TensorFlow 的设计是 “make it complicated” ,那么 Pytorch 的设计就是 “keep it simple”。
pytorch
pytorch

4 . Mxnet

概述:  Mxnet 是由李沐等人领导开发的非常灵活,扩展性很强的框架,被 Amazon 定为官方框架。

特点:  Mxnet 同时拥有命令式编程和符号式编程的特点。在命令式编程上 MXNet 提供张量运算,进行模型的迭代训练和更新中的控制逻辑;在声明式编程中 MXNet 支持符号表达式,用来描述神经网络,并利用系统提供的自动求导来训练模型。Mxnet 性能非常高,推荐资源不够的同学使用。

Mxnet
Mxnet

5.  Keras

概述:  Keras 是一个对小白用户非常友好而简单的深度学习框架,严格来说并不是一个开源框架,而是一个高度模块化的神经网络库。

Keras 在高层可以调用 TensorFlow,CNTK,Theano ,还有更多的库也在被陆续支持中。 Keras 的特点是能够快速实现模型的搭建,是高效地进行科学研究的关键。

特点:

  •  高度模块化,搭建网络非常简洁。
  •   API 很简单,具有统一的风格。
  •  容易扩展,只需使用 python 添加新类和函数。
Keras
Keras

6.  Paddlepaddle

概述:  正所谓 Google 有 Tensorflow,Facebook 有 Pytorch,Amazon 有 Mxnet,作为国内机器学习的先驱,百度也有 PaddlePaddle,其中 Paddle 即 Parallel Distributed Deep Learning (并行分布式深度学习)。

特点:  paddlepaddle 的性能也很不错,整体使用起来与 tensorflow 非常类似,拥有中文帮助文档,在百度内部也被用于推荐等任务。另外,配套了一个可视化框架 visualdl,与 tensorboard 也有异曲同工之妙。国产框架不多,大家多支持啊!

paddlepaddle
paddlepaddle

7.  CNTK

概述:  CNTK 是微软开源的深度学习工具包,它通过有向图将神经网络描述为一系列计算步骤。在有向图中,叶节点表示输入值或网络参数,而其他节点表示其输入上的矩阵运算。

CNTK 允许用户非常轻松地实现和组合流行的模型,包括前馈 DNN,卷积网络(CNN)和循环网络(RNN / LSTM)。与目前大部分框架一样,实现了自动求导,利用随机梯度下降方法进行优化。

特点:

  • CNTK 性能较高,按照其官方的说法,比其他的开源框架性能都更高。
  • 适合做语音,CNTK 本就是微软语音团队开源的,自然是更合适做语音任务,使用 RNN 等模型,以及在时空尺度分别进行卷积非常容易。
cntk
cntk

8.  Matconvnet

概述:  不同于各类深度学习框架广泛使用的语言 Python,MatConvnet 是用 matlab 作为接口语言的开源深度学习库,底层语言是 cuda。

特点:  因为是在 matlab 下面,所以 debug 的过程非常的方便,而且本身就有很多的研究者一直都使用 matlab 语言,所以其实该语言的群体非常大。

matconvnet
matconvnet

9. Deeplearning4j

概述:  不同于深度学习广泛应用的语言 Python,DL4J 是为 java 和 jvm 编写的开源深度学习库,支持各种深度学习模型。

特点:  DL4J 最重要的特点是支持分布式,可以在 Spark 和 Hadoop 上运行,支持分布式 CPU 和 GPU 运行。DL4J 是为商业环境,而非研究所设计的,因此更加贴近某些生产环境。

Deeplearning4j
Deeplearning4j

10 .  Chainer

概述:  chainer 也是一个基于 python 的深度学习框架,能够轻松直观地编写复杂的神经网络架构,在日本企业中应用广泛。

特点:  chainer 采用 “Define-by-Run” 方案,即通过实际的前向计算动态定义网络。更确切地说,chainer 存储计算历史而不是编程逻辑,pytorch 的动态图机制思想主要就来源于 chaine

chainer
chainer

11 .  Lasagne/Theano

概述:  Lasagen 其实就是封装了 theano,后者是一个很老牌的框架,在 2008 年的时候就由 Yoshua Bengio 领导的蒙特利尔 LISA 组开源了。

特点:  theano 的使用成本高,需要从底层开始写代码构建模型,Lasagen 对其进行了封装,使得 theano 使用起来更简单。

Theano
Theano

12 .  Darknet

概述:  Darknet 本身是 Joseph Redmon 为了 Yolo 系列开发的框架。
Joseph Redmon 提出了 Yolo v1,Yolo v2,Yolo v3。

Darknet
Darknet

特点:  Darknet 几乎没有依赖库,是从 C 和 CUDA 开始撰写的深度学习开源框架,支持 CPU 和 GPU。Darknet跟 caffe 颇有几分相似之处,却更加轻量级,非常值得学习使用。

上市的 Uber 背后有哪些强大的开源项目

当地时间 5 月 10 日上午,出行巨头 Uber 在纽交所挂牌上市,Uber 崛起背后的技术文化,也是众多专家们研究的对象之一,本文将和大家盘点下 Uber 都开源了哪些项目

1. deck.gl

GitHub地址项目 GitHub 地址 Star 6063

deck.gl
deck.gl

deck.gl ,是由 Uber 开源的基于 WebGL 的可视化图层。用于React 的 WebGL 遮罩套件,提供了一组高性能的数据可视化叠加层。为数据可视化用例提供测试、高性能的图层,如 2 维和 3 维的散点图、choropleths 等。

2.  react-vis

GitHub地址项目 GitHub 地址 Star 5590

react-vis
react-vis

react-vis 是 Uber 公司开源的数据可视化库,能够制作折线图、饼状图等常用图表。

3.  ludwig

GitHub地址项目 GitHub 地址 Star 4597

ludwig
ludwig

这是一款基于 Google TensorFlow 框架上的开源工具箱。藉由 Ludwig,用户无需再编写任何代码即可进行深度学习的开发。

4. Kraken

GitHub地址项目 GitHub 地址 Star 2519

P2P 的镜像仓库,这个项目着重于可扩展性和可用性,并且适用于再混合云架构中的镜像管理,复制和分布。Kraken 还支持后台扩展,可以以其他容器仓库为后台,单纯的作为发布层来部署。

5. RIBs

GitHub地址项目 GitHub 地址 Star 4586

Uber 的移动架构框架,构建具有类似架构的跨平台应用程序,使 iOS 和 Android 团队能够交叉审查业务逻辑代码

RIBs
RIBs

上图是一个 RIB 各组件之间相互协作的依赖关系。

6. cadence

GitHub地址项目 GitHub 地址 Star 1908

Cadence 是一种分布式,可扩展,持久且高度可用的编排引擎,可以以可伸缩和弹性的方式执行异步长期运行的业务逻辑。

7. luma.gl

GitHub地址项目 GitHub 地址 Star 1409

一个用于数据可视化的 JavaScript WebGL 框架

8. react-map-gl

GitHub地址项目 GitHub 地址 Star 4452

react-map-gl 提供一个围绕 Mapbox GL JS的React 友好 API 封装,是一个基于 webGL 的矢量瓦片地图库。

9. AresDB

GitHub地址项目 GitHub 地址 Star 1916

AresDB 是 Uber 开源的一个基于 GPU 运算的实时分析存储引擎和查询引擎。具备低查询延迟、高数据刷新率和高效内存和磁盘存储管理。AresDB 的查询引擎使用 C++ 编写,存储管理和其他查询组件使用 Go 编写。

10. AutoDispose

GitHub地址项目 GitHub 地址 Star 2193

AutoDispose 是 Uber 开发的自动绑定+处理 RxJava 2 流的 Java 库。可以用来解决 Android 生命周期组件导致的 RxJava 的内存泄漏情况。

11. Makisu

GitHub地址项目 GitHub 地址 Star 1604

  • Uber 开源的快速 Docker 镜像生成工具,其特点包括:
  • 不需要特殊权限,开发过程更加容易移植;
  • 开发集群内部使用分布式层间缓存提高性能;
  • 提供灵活层间管理,减少 images 中不必要文件;
  • 与容器 Docker 兼容;支持标准和多阶段开发命令。

12. NullAway

GitHub地址项目 GitHub 地址 Star 2509

NullAway 是 Uber 开源的一款帮助你清除 Java 代码中的 NullPointerException(NPE)的工具,快速且实用。NullAway 类似于 Kotlin 和 Swift 语言中的基于类型的可空性检查,能显着提高开发人员的生产力,同时也满足高要求的安全检查需求。

13. h3

GitHub地址项目 GitHub 地址 Star 1348

蜂窝多边形算法 H3,首先这个包是用 C 写的,要在 Python上用,就必须要 gcc 和 make 来进行编译。

14. pyflame

GitHub地址项目 GitHub 地址 Star 2285

pyflame 则是由 Uber 开源出来的针对 python 程序生成火焰图的工具。

15. tchannel

GitHub地址项目 GitHub 地址 Star 1058

TChannel 是用于 RPC 的网络复用和成帧协议。

深度学习最常见的 26 个模型 – 含实现代码

本文首先从 4 个方面(张量、生成模型、序列学习、深度强化学习)追踪深度学习几十年的发展史,然后再介绍主流的 26 个深度学习模型。

1. 深度学习发展史

主要按最早研究出现的时间,从 4 个方面来追踪深度学习的发展史。

1.1 张量

  • 1958 年 Frank 提出感知机,但后来被一些学者发现因算力的不足,制约了较大神经网络的计算,导致很长时间发展缓慢。
  • Fukushima 在 1979 年左右提出 Neocognitron,感觉这是卷积和池化的雏形。
  • Hinton 在 1986 年提出反向传播的思想和多层感知机(BPNN/MLP),有非常大的意义,对未来几十年(可以说直到现在)影响深远。
  • 接下来比较重要的发展是,LeCun 在 1998 年提出 LeNet-5,7 层的 CNN 做数字识别。
  • 然后 AlexNet 在 12 年在 ImageNet 夺冠,主要是 CNN+Dropout+Relu,又是 Hinton 极大的带动了 DL 的发展,大佬的地位毋庸置疑。另外相似的还有 15 年的 GoogLeNet。
  • 总算有华人大佬作出大贡献了,16 年何恺明(CV领域应该无人不知)提出 Resnet,还拿了 best paper,影响较大,当然效果也很好。另外相似的还有 17 年的 DenseNet。
  • 17年 Capsule Network 登场了,又是 Hinton。我比较看好胶囊网络在 NLP 领域的发展,虽然现在还没太明显的效果。因为用胶囊网络来做文本的特征表示的话,可以极大的丰富特征,更适合处理文本这种比较灵活的数据

1.2 生成模型

  • 上世纪 80 年代提出 RBM,06 年叠加成 Deep Belief Network(DBN),这算是重新叠加网络的一个比较重要的开始吧。
  • 上世纪 80 年代 Hinton 提出 Auto-Encode,过了较长时间 Bengio 在 08 年提出 Denoise Auto-Encode。Welling 在 13 年提出 Variational Auto-Encode。
  • 接下来,在 14 年 Goodfellow 和 Bengio 等提出 GAN,从此生成网络不仅是 AE 以及其变种(Denoise Auto-Encode、Variational Auto-Encode等)了,可以这么说:GAN 的出现极大的提高了生成模型的地位和热点,GAN 也是席卷 NLP、CV、AI 等领域的各大顶会,甚至是一些 best paper。另外,陆续出现很多很多 GAN 的变种,比如 DCGAN、CGAN、PGGAN、LAPGAN、InfoGAN、WGAN、F-GAN、SeqGAN、LeakGAN 等。

1.3 序列学习

  • 1982 年提出 hopfield network,1997 年 Schmidhuber 提出 LSTM。Hinton 组在 13 年把 RNN 用在语音识别上取得巨大突破,RNN 立马爆火。
  • 03 年提出 LM(语言模型),13 年提出 w2v,佩服 Bengio,这也是我为啥千里迢迢跑去找 Benign 合影的原因之一。w2v 带来的影响不言而喻,目前 NLP 领域基本上所有 Paper 都会用到词向量,包括也影响了后面出现的 Glove、FastText、ELMo( 18 年 2 月)、Transformer( 18 年 6 月)、Bert ( 18 年 10 月提出,Jacob 一战封神,我感觉至少是 18 年 NLP 领域最大的发展,甚至可以说是近几年最大的发展)等。Bert 的出现,很可能改变所有主流 NLP 任务的打法和 Baseline
  • 还有一个分支,14 年出现 Seq2Seq,这个重要性也无需赘述了,NLP 领域的都知道。然后 15 年出现Charater  CNN ,17 年出现 self-attention。

1.4 深度强化学习

  • 提到强化学习就不得不提这 Deep Mind 、AlphaGo 以及其变种、Silve r。13 年提出 Deep Q-learning 15 年提出 Double DQN,16 年提出 Dueling Net。 15 年的 DDPG 和 16 年的 A3C 都是 NN+Policy Gradient,也应用在不少领域。16 年的 AlphaGo(除了 AI 领域,很多不懂AI的人都知道,甚至可以说是 AI 爆火的最大助力),17 年出现更疯狂的 Alpha Zero。

2. 深度学习模型

深度学习模型
深度学习模型

2.1 Feed forward neural networks (FF or FFNN) and perceptrons (P)

前馈神经网络和感知机,信息从前(输入)往后(输出)流动,一般用反向传播(BP)来训练。算是一种监督学习。

前馈神经网络和感知机
前馈神经网络和感知机

对应的代码:

https://github.com/danijar/layered

https://github.com/civisanalytics/muffnn

2.2 Radial basis function (RBF)

径向基函数网络,是一种径向基函数作为激活函数的 FFNNs(前馈神经网络)。

径向基函数网络
径向基函数网络

对应的代码:

https://github.com/eugeniashurko/rbfnnpy

2.3 Hopfield network (HN)

Hopfield 网络,是一种每个神经元都跟其它神经元相连接的神经网络。

Hopfield 网络
Hopfield 网络

对应的代码:

https://github.com/yosukekatada/Hopfield_network

2.4 Markov chains (MC or discrete time Markov Chain, DTMC)

马尔可夫链 或离散时间马尔可夫链,算是 BMs 和 HNs 的雏形。

马尔可夫链
马尔可夫链

对应的代码:

Markov chains:https://github.com/jsvine/markovify

DTMC:https://github.com/AndrewWalker/dtmc

2.5 Boltzmann machines (BM)

玻尔兹曼机,和 Hopfield 网络很类似,但是:一些神经元作为输入神经元,剩余的是隐藏层。

玻尔兹曼机
玻尔兹曼机

对应的代码:

https://github.com/yell/boltzmann-machines

2.6 Restricted Boltzmann machines (RBM)

受限玻尔兹曼机,和玻尔兹曼机 以及  Hopfield 网络 都比较类似

受限玻尔兹曼机
受限玻尔兹曼机

对应的代码:

https://github.com/echen/restricted-boltzmann-machines

2.7 Autoencoders (AE)

自动编码,和 FFNN 有些类似,它更像是 FFNN 的另一种用法,而不是本质上完全不同的另一种架构。

自动编码
自动编码

对应的代码:

https://github.com/caglar/autoencoders/blob/master/ae.py

2.8 Sparse autoencoders (SAE)

稀疏自动编码,跟自动编码在某种程度比较相反

稀疏自动编码
稀疏自动编码

对应的代码:

https://github.com/caglar/autoencoders/blob/master/sa.py

2.9 Variational autoencoders (VAE)

变分自动编码,和 AE 架构相似,不同的是:输入样本的一个近似概率分布。这使得它跟 BM、RBM 更相近。

变分自动编码
变分自动编码

对应的代码:

https://github.com/mattjj/svae

2.10 Denoising autoencoders (DAE)

去噪自动编码,也是一种自编码机,它不仅需要训练数据,还需要带噪音的训练数据。

去噪自动编码
去噪自动编码

对应对应的代码:

https://github.com/caglar/autoencoders/blob/master/da.py

2.11 Deep belief networks (DBN)

深度信念网络,由多个受限玻尔兹曼机或变分自动编码堆砌而成。

深度信念网络
深度信念网络

对应的代码:

https://github.com/albertbup/deep-belief-network

2.12 Convolutional neural networks (CNN or deep convolutional neural networks, DCNN)

卷积神经网络,这个不解释也都知道。

卷积神经网络
卷积神经网络

对应的代码:

CNN:https://github.com/bamtercelboo/cnn-lstm-bilstm-deepcnn-clstm-in-pytorch/blob/master/models/model_CNN.py

DCNN:https://github.com/bamtercelboo/cnn-lstm-bilstm-deepcnn-clstm-in-pytorch/blob/master/models/model_DeepCNN.py

2.13 Deconvolutional networks (DN)

去卷积网络,又叫逆图形网络,是一种逆向的卷积神经网络。

去卷积网络
去卷积网络

对应的代码:

https://github.com/ifp-uiuc/anna

2.14 Deep convolutional inverse graphics networks (DCIGN)

深度卷积逆向图网络,实际上是 VAE,且分别用 CNN、DNN 来作编码和解码。

深度卷积逆向图网络
深度卷积逆向图网络

对应的代码:

https://github.com/yselivonchyk/TensorFlow_DCIGN

2.15 Generative adversarial networks (GAN)

生成对抗网络,Goodfellow 的封神之作,这个模型不用解释也都知道

生成对抗网络
生成对抗网络

对应的代码:

https://github.com/devnag/pytorch-generative-adversarial-networks

2.16 Recurrent neural networks (RNN)

循环神经网络,这个更不用解释,做语音、NLP 的没有人不知道,甚至非 AI 相关人员也知道。

循环神经网络
循环神经网络

对应的代码:

https://github.com/farizrahman4u/recurrentshop

2.17 Long / short term memory (LSTM)

长短期记忆网络, RNN 的变种,解决梯度消失/爆炸的问题,也不用解释,这几年刷爆各大顶会。

长短期记忆网络
长短期记忆网络

对应的代码:

https://github.com/bamtercelboo/cnn-lstm-bilstm-deepcnn-clstm-in-pytorch/blob/master/models/model_LSTM.py

2.18 Gated recurrent units (GRU)

门循环单元,类似 LSTM 的定位,算是 LSTM 的简化版。

门循环单元
门循环单元

对应的代码:

https://github.com/bamtercelboo/cnn-lstm-bilstm-deepcnn-clstm-in-pytorch/blob/master/models/model_GRU.py

2.19 Neural Turing machines (NTM)

神经图灵机,LSTM 的抽象,以窥探 LSTM 的内部细节。具有读取、写入、修改状态的能力

神经图灵机
神经图灵机

对应的代码:

https://github.com/MarkPKCollier/NeuralTuringMachine

2.20 Bidirectional recurrent neural networks, bidirectional long / short term memory networks and bidirectional gated recurrent units (BiRNN, BiLSTM and BiGRU respectively)

双向循环神经网络、双向长短期记忆网络和双向门控循环单元,把 RNN、双向的 LSTM、GRU 双向,不再只是从左到右,而是既有从左到右又有从右到左。

对应的代码:

BiRNN:https://github.com/cstghitpku/cnn-lstm-bilstm-deepcnn-clstm-in-pytorch/tree/master/models

BiLSTM:https://github.com/bamtercelboo/cnn-lstm-bilstm-deepcnn-clstm-in-pytorch/blob/master/models/model_BiLSTM.py

BiGRU:https://github.com/bamtercelboo/cnn-lstm-bilstm-deepcnn-clstm-in-pytorch/blob/master/models/model_BiGRU.py

2.21 Deep residual networks (DRN)

深度残差网络,是非常深的 FFNN,它可以把信息从某一层传至后面几层(通常2-5层)。

深度残差网络
深度残差网络

对应的代码:

https://github.com/KaimingHe/deep-residual-networks

2.22 Echo state networks (ESN)

回声状态网络,是另一种不同类型的(循环)网络。

回声状态网络
回声状态网络

对应的代码:

https://github.com/m-colombo/Tensorflow-EchoStateNetwork

2.23 Extreme learning machines (ELM)

极限学习机,本质上是随机连接的 FFNN。

极限学习机
极限学习机

对应的代码:

https://github.com/dclambert/Python-ELM

2.24 Liquid state machines (LSM)

液态机,跟 ESN 类似,区别是用阈值激活函数取代了 sigmoid 激活函数。

液态机
液态机

对应的代码:

https://github.com/kghose/Liquid

2.25 Support vector machines (SVM)

支持向量机,入门机器学习的人都知道,不解释。

支持向量机
支持向量机

对应的代码:

https://github.com/ajtulloch/svmpy

2.26 Kohonen networks (KN, also self organising (feature) map, SOM, SOFM)

Kohonen 网络,也称之为自组织(特征)映射。

Kohonen 网络
Kohonen 网络

对应的代码KN/SOM:

https://github.com/mljs/som