邓亚峰:如何打造一流的视觉AI技术
导读:本次分享主要分以下几个部分 :首先简要介绍一下计算机视觉技术的邓亚打造相关背景,然后结合格灵深瞳的峰何实践,从算法研发、视觉训练平台、技术智能数据处理 、邓亚打造异构计算等几个方面着重介绍如何打造一流的峰何视觉AI技术,最后介绍格灵深瞳在相关技术落地方面的视觉情况。
01
计算机视觉及其相关技术
1.计算机视觉概述
计算机视觉作为人工智能领域最重要的技术技术方向之一,其基础是邓亚打造机器学习算法 ,而深度学习算法无疑是峰何当前最受欢迎的机器学习算法。随着计算机算力的视觉不断增强 ,海量数据的技术增长,深度学习算法的邓亚打造提出使得用更大量数据训练更深的网络成为可能 ,在限定的峰何场景下,一些图像识别算法的视觉准确率已经超越了人类。从应用角度 ,我们正处于计算机视觉应用爆炸性增长的智能时代,包括移动互联网、自动驾驶 、智慧城市、智慧医疗、机器人 、增强现实 、智慧工业等在内的多个方向,都取得了非常多的进步 。从另外一个视角看,计算机视觉是对物理世界的数字化 ,是智慧物联网时代最大入口 ,和大数据技术结合拥有非常广阔的应用场景。
2. 计算机视觉技术愿景
计算机视觉技术从广义上讲是让计算机看懂世界 ,狭义上讲就是通过丰富的视觉传感器,理解物理世界中每个物体的位置、属性 、身份以及行为等信息 。
计算机视觉技术从算法方面期待:
- 功能更加丰富:感知方面从位置检测、属性识别、身份识别,逐步向行为识别和关系识别(不同物体间的关系)发展;
- 目标类别更全 :分析目标从人脸、人体 、车辆 ,拓展到商品,再拓展到其它物体;
- 理解粒度更细 :从理解图像中包含什么物体的分类任务,到理解物体在图中的具体位置和数目的检测任务 ,进一步到理解物体的部件以及关键点位置的关键点定位技术,更进一步到理解每个像素所属类别的语义分割任务 。
计算机视觉技术从产品性能角度则期待 :
精度更高、速度更快、成本更低 、支持规模更大 、功能更丰富 。
--
02
如何打造一流的视觉AI技术
1. 构建计算机视觉系统的基本流程
对于一个视觉应用系统而言 ,需要先将应用系统划分为不同的子模块,比如人脸识别系统,就包括人脸检测、特征点定位 、人脸识别等不同子模块。对于每一个子模块 ,都由输入输出定义、数据收集、数据标注 ,训练框架选择,算法实现,模型训练,模型选择,模型上线等不同步骤组成。
2. 构建视觉计算系统的关键因素
构建计算机视觉计算系统主要包含下面几个关键因素 :
- 核心算法研发 :即如何开发出更准确 、更快、更多功能的算法;
- 自动化大规模训练框架:即如何支持更大规模集群 ,更加自动化地训练算法;
- 智能数据挖掘和标注:即如何做到高效的数据挖掘和低成本的标注;
- 基于硬件平台的计算优化 :即如何选择硬件平台,以及在硬件平台上做性能优化。
(1)核心算法研发
算法研发是一个不断迭代、精心打磨的过程,工业界和学术界最大的区别是学术界希望创造更多的算法,追求更多的是新颖性和创造性,而工业界追求的是系统的功能、性能、稳定性指标 ,并不要求发明最新颖的算法,而是要依据业务需求和资源限制做出最好用的系统。在工业界进行算法改进,包括很多维度,如数据如何处理、数据规模和来源 ,参数设置 、模型结构 ,还包括损失函数设计 ,模型加速算法等,每一个因素都可能对最终结果影响很大 。还有非常重要的一点是,需要从系统角度去解决问题,比如设计新的系统处理流程 ,比如把问题定义为检测问题还是识别问题。
- 人脸识别损失函数演进
以人脸识别算法为例 ,由于我们无法训练一个能分类世界上所有人的分类模型 ,所以人脸识别最终是希望训练一个将人脸图像转换为表示能力非常强的特征模型,这里面非常核心的是损失函数的设计 。最早的人脸识别算法是采用了softmax损失函数 ,但softmax损失函数的缺陷是当类别数非常大时参数规模非常大 ,并且 ,要求每个人的样本数比较均衡,且不能太少,很多时候无法满足 。后来出现了pair-wise形式的损失函数,这个损失函数将分类转换为两类问题,即同一个人以及不同人两类 ,希望同一个人两张图片之间的距离尽可能小 ,而不同人两张图片之间的距离尽可能大,从而不会有类别太多的参数规模问题 ,且不对样本数目有太多要求。后来还出现了Triplet 损失函数形式,要求同一个人图片之间的距离小于不同人图片之间的距离。但是pair-wise和triplet损失函数的缺陷是容易受数据噪声影响 ,比较难训练,收敛也比较慢 。后来大家又发现,将softmax形式做改进可以取得很好的效果 ,包括对特征的归一化、权重矩阵的归一化以及加margin等。所以,我们看到仅仅是人脸识别损失函数这样一个技术点,就包含了非常多的选择和迭代 。在工业界,想真正做好一个算法模型,就都需要跟踪很多工作,同时由于论文里的很多结论在大规模实际数据情况下,和论文中的结果可能会不同 ,所以需要结合实际数据和场景进行一一验证 。这要求我们在工业界真正想做一流的算法 ,不仅仅要求我们可以正确理解论文中的算法思路,还要求能够在工业界的数据规模下正确实现,并设置正确的参数和训练技巧 ,同时还需要结合实际情况去改进。
对于人脸识别系统而言 ,损失函数是影响人脸模型表示的一个因素。除此之外还包括训练数据的数据量、纯度和数据分布 ,数据增强的方式,比如收集的数据往往数据质量比较高,为了使得模型在低分辨率数据上有好的效果,需要在训练过程加入相应的扰动 。除此之外 ,人脸识别的前序模块 ,比如人脸检测和特征点定位的精度也会影响识别效果 。还有包括如何利用模型蒸馏等方法进行速度提升,如何利用人脸的多个部件融合进行效果提升,在视频中,如何通过人脸质量属性选择最优的人脸进行识别 ,如何融合多帧图像进行处理等 。对于一个人脸识别系统而言,上述的每一个因素都会影响最终的系统效率和用户体验,每一点都需要精细打磨。
每一个智能系统都是由多个智能算法模型组成的 ,以我们针对智慧城市、智慧商业领域研发的智能视频理解系统而言 ,包括几百个模型 。这个系统里面 ,从大的方面讲,包括物体检测 、人脸识别 、人体智能分析、车辆智能分析等几个大模块,具体到比如智能车辆分析这个子方向而言,则包括车牌识别 、车型车款识别 、车辆以图搜图(ReID)、车身颜色识别 、标志物识别、未系安全带、开车打电话等很多子模型 。
对于如此多的算法模型,如果每个模型都需要不断迭代,同时要支持不同硬件平台的不同版本 ,在研发人员和训练硬件资源受限条件下,如何持续打磨核心算法是一个很大的挑战 。传统的算法开发模式,算法工程师往往提起数据标注任务 ,由数据标注员标注完成数据标注,但算法工程师需要关心如何开发标注工具 、如何培训标注人员、如何转换数据格式、如何提纯标注完的数据 ,最后再手工方式在一台物理机上将模型训练出来 。这种模式下 ,算法工程师有60%的时间都在处理和数据相关的工作,比如搜集数据、指导开发标注工具、清洗标注数据或者发起二次标注;还有20%的时间是在调参数,看训练日志 ,包括处理磁盘空间不足、GPU被别人占用等意外;其实只有大约15%左右的时间在实现算法,仅有5%的时间在思考算法 。同时,这个模式的缺点是数据标注成本很高,算法工程师的时间利用率很低,同时由于没有统一协调,GPU或者空闲或者被大家抢占 ,GPU的利用率也很低。
更好的一种模式是为算法研发团队配备一个数据平台开发团队,专门负责算法团队所需要的数据以及训练平台。也就是说 ,算法团队仅仅需要提出数据的需求和要求,其它都由数据平台团队去完成 。数据平台团队负责数据的收集、标注前处理、标注工具开发、标注后处理、训练和测试数据管理等工作,其目标是为算法团队用最高效低成本的方式提供高质量的训练数据 。同时,为了提升训练效率 ,数据平台团队还需要负责打造统一的训练平台。这种模式下,算法工程师的工作20%花在沟通确定数据处理流程 ,同时由于有统一的训练平台 ,算法工程师只需要花费大约10%的时间在训练调参上 。那么自然就会花费更多的时间在实现算法和思考算法上。这种模式下 ,不仅仅算法工程师的效率得到提升,而且数据标注成本在降低,数据增长速度在提升,GPU利用率也在提高 。还有一点非常重要的是 ,智能数据处理平台在正常运行下,只需要标注人员进行标注,数据量就会不断增长,不依赖算法以及开发人员的投入 ,这是未来任何一个智能学习系统需要具备的特性。
(2) 自动化大规模训练框架