Techo 2020丨腾讯优图分享最新研究成果和产业实践

12月19日-20日,由腾讯发起的2020 Techo Park开发者大会于北京顺利召开。其中人工智能专场以“人工智能算法与最佳实践”为主题,为开发者、业界及生态伙伴呈现了云计算时代下人工智能领域的最新前沿技术与最佳行业实践。

腾讯优图实验室的研究员梁晨、王亚彪、姚达、杨博分别围绕AI视觉传感器、视觉算法在图像编辑生成中的研究与应用、TNN跨平台推理优化、模量化训练部署及实践等发表了主题演讲,向业界展示了优图最新研究成果与产业实践。

在论坛上,梁晨给大家介绍了一个有趣的硬件——AI视觉传感器。什么是AI视觉传感器呢?它是由摄像头、NPU和算法组成的硬件模组,其基本运行原理是:在NPU上运行深度学习算法,能够直接对摄像头拍摄到的画面进行实时分析,并将分析的结果通过数字信号传输给主机。

据梁晨介绍,腾讯优图推出了一款自研的AI视觉传感器——VisionSeed,内置优图领先的视觉AI算法,还提供专业的配套工具和全平台的SDK作为支撑,让开发者可以方便的进行二次开发。

腾讯优图专家研究员 梁晨

算法是AI视觉传感器的灵魂,VisionSeed具有很强的扩展性,能适应多种算法。一是可以适配SSD、YOLO-V4等开源的目标检测算法。二是应用于自动驾驶小车竞赛领域的车道定位算法,将VisionSeed安装在AGV小车的前端,获取第一人称视角的车道画面后,通过算法输出小车在车道内的横向偏移。这个算法主要通过语义分割进行车道信息提取,再通过回归模型直接得到定位结果来完成任务,将这两个交通标识检测和车道定位模型都部署到AI视觉传感器中,它就能指挥AGV小车完成复杂的任务。三是OCR算法,VisionSeed适配了基于 PyTorch开源实现的CRNN算法。

VisionSeed将以上算法,在客户端工具中封装成可以一键下载的模块,不仅方便用户下载体验,还可以进行分类任务训练。VisionSeed还同时支持UART和USB两个硬件接口。此外,通过VisionSeed提供的全平台SDK,开发者仅用10行代码就可以获取到AI分析后的结构化结果。

什么是图像编辑生成?人脸融合、图像分割、动漫化、视频换脸、照片驱动……这些都是利用图像编辑生产技术完成的。演讲中,腾讯优图高级研究员王亚彪重点介绍了视频换脸、面部属性编辑、视线编辑、画质编辑这四项技术,他表示这些技术都会用到GAN生成对抗网络和Encoder-Decoder框架。

视频换脸领域早期有一个Deepfake算法,该算法只能对训练过的两个特定ID换脸,无法使用各种各样的人脸去做替换。针对此点不足,优图提出了SimSwap算法,不仅能满足不同人脸的替换,还可以做跨性别替换,在正脸和侧脸之间也可以进行替换。

腾讯优图高级研究员 王亚彪

在面部属性编辑技术研究中发现,模型不同层级的“风格”特征表示,在某些层级具有很好的可分性,因此优图提出了SSCGAN算法,该算法采用多级风格跳跃连接(SSC)和空间信息迁移(SIT)两个模块,实现整体结构和局部面部属性的精确编辑。

在视线编辑方面,王亚彪指出,疫情期间在线视频交流越来越重要,但受限于屏幕和摄像头之间的物理布局,导致交流过程中缺乏眼神接触,因此优图提出Ugaze 算法框架,矫正眼神视线方向。相较于以往基于3D变换的视图生成和基于生成模型的单目视线编辑, Ugaze 算法主要有两点创新:一是提出了基于运动流场结合判别器的方案;二是使用了大量人工合成数据,采用域迁移方法,进一步提升了模型矫正精度。

针对画质编辑,优图提出了图像超分RealSR算法。以往的超分算法往往只在特定数据集上有效,难以很好的对真实世界图像做超分。针对以往算法在高清和低清图像pair构造上的不足,我们提出了一种新的图像退化框架,该框架可以估计多样化的模糊核和真实噪声分布。RealSR算法获得了NTIRE 2020挑战赛冠军,并受到了众多社区开发者的关注。

腾讯优图高级研究员姚达在演讲中介绍到,优图的视觉AI技术如文字识别、图像识别、美容美化等核心技术,已在零售、工业、支付等多个领域进行应用。但在产业解决方案落地过程中,优图也遇到了一些难点,比如模型格式不同一、硬件架构众多、性能低功耗高等。

为解决以上三大难点,优图联合腾讯内部多个部门推出了统一推理框架TNN,以满足算法模型跨平台、高性能快速部署需求。TNN通过ONNX作为一个中间结构支持PyTorch、TensorFlow等多种模型格式,同时TNN在底层适配了各种各样的芯片能力。目前在腾讯内部,TNN已在手Q、微视等多个APP端以及微信支付一体机等终端落地,稳定性和可靠性得到广泛验证。

腾讯优图高级研究员 姚达

TNN推理框架是如何进行优化的呢?根据硬件架构基础和硬件的演进,TNN提出两个基本准则:一是减少计算量,减少内存读写,适配Cache让内存读写更快;二是扩展适配异构计算设备。

基于以上两个原则,TNN提出了图优化、算子公式优化、算子手动调优、异构调度优化等多种优化方案。在图优化中通过常数折叠和算子融合,避免运行时冗余计算以及减少内存读写次数;在算子公式优化中,利用子图变换、公式等效和近似计算,减小计算量和内存读写总量。在算子手动调优中,针对耗时占比在70%以上的卷积算子,根据硬件缓存特性设计精细的卷积实现。在异构调度优化中,TNN提出异构单元专职专用,充分利用所有计算设备,根据计算设备特性分配不同计算任务,同时计算设备间进行流水线优化,以此减少计算设备相互等待,提升计算重叠度,减少整体延时。

在硬件适配方面,针对端边云硬件架构各异,相互不具备通用性,适配工作量巨大这些难点,TNN和硬件厂商进行了联合优化,优化后可以达到两种效果:一是接口统一,用户只需要通过简单的参数设置,就可以在CPU、GPU、NPU上运行。二是模型统一,TNN内部通过IR中间件的方式适配各个硬件厂商的自研框架如OpenVINO\TensorRT等,用户仅需转换TNN模型即可在各硬件平台部署。

优图在推理框架TNN下与英特尔合作完成多尺度GEMM优化,使得模型性能提升24%;与英伟达完成低精度量化模型的训练和推理支持,相比FP32推理提升4倍以上。

目前,TNN已经开源,期待更多开发者加入进来,一起协同共建统一的推理框架👇

//github.com/Tencent/TNN

腾讯优图高级研究员杨博在演讲中讲述了模型量化的背景,他指出业界比较常用的模型量化解决方案是NVIDIA post-train方案,这个方案是在训练完之后对模型进行校正,使用少量的数据,部署很方便,但有一个缺点是会导致模型效果下降。此外,还有一种是以Tensorflow QAT为代表的解决方案,这种方法在训练过程中模拟Int8计算,采用Minmax计算量化区间,Finetune补偿精度损失,但训练周期长,而且工具链还不是很完善,一些常用的模型无法支持从训练到部署的转化。

可以看出,业界传统的解决算法都存在某些方面的不足,针对以上这些问题,优图和英伟达合作开发了一个完善的Int8训练到部署的方案,该方案升级了图优化匹配模板,支持更多模型QAT图转换,其次增加了混合精度量化训练方式等其他量化模型精度保持方式,最后推理框架(TensorRT、TNN)支持包含quant节点的模型转换。

腾讯优图高级研究员 杨博

Int8模型科学机训练采用的是什么工作方法呢?首先会做一个BN层的融合,然后是子图搜索和匹配,匹配到子图以后,会自动插入量化节点,最后通过建立黑白名单的混合精度策略、动态量化区间统计以及激活层增量量化等方法,来保持模型效果。

Int8模型前向部署主要分为两部分,一是导出模型到onnx,完成QAT训练后,对checkpoint进行后处理并导出包含量化op在内的onnx模型;二是采用TensorRT显示精度的模式完成fp32模型到int8模型的转换,对相关OP做一些融合,将onnx模型转换到tensorRT和TNN内。

杨博表示Int8标准模型,在打通Calibration和QAT部署相关工作之后的一些数据效果很好,但会增加耗时,优图会继续优化技术,提高研究效率。后续优图也将继续和英伟达展开更深度的合作,进一步完善优图QAT工具,增加对TensorRT后续版本的支持,提供更加易用高效的QAT模型训练和部署解决方案。

作为腾讯旗下顶级的人工智能实验室,优图一直聚焦计算机视觉,专注人脸识别、图像识别、OCR、机器学习、数据挖掘等领域开展技术研发和行业落地,未来将持续深耕于此,让人工智能更好地助力产业数字化发展。