Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

CVPR单目深度估计竞赛结果出炉,腾讯光影研究室优势夺冠,成果落地应用

MAI(Mobile AI Workshop)是由 CVPR 主办的 Workshop 竞赛。MAI 2021 挑战赛赛已于 2021 年 2 月至 4 月线上举行。近期,MAI 2021 公布了各项挑战赛的最终结果,腾讯光影研究室的 Tencent GYLab 团队在单目深度估计项目上以绝对优势获得冠军。

竞赛结果及相关论文可见:https://arxiv.org/pdf/2105.08630.pd

任务介绍

MAI 2021 单目深度估计挑战赛:基于 RGB 图的实时高性能单目深度估计,任务要求在移动端硬件上对输入的图像实时计算出其场景深度。

输入:输入文件为 RGB 图像,其分辨率为 480x640;

输出:对每一张输入文件,计算出其场景深度。输出深度的分辨率与输入图像分辨率相同;

评价指标:评价方式分为精度指标和速度指标两部分,参赛队伍提交模型(TFLite),由比赛主办方负责在标准平台上测试得出两部分指标。

其中,精度指标:si-RMSE,表征预测得到的深度和 Ground Truth 在 Log 域上的距离,即 Scale 的距离;速度指标:通过测试 TFLite 模型在树莓派(Raspberry Pi 4)上的运行耗时得到。最终排名以精度指标和速度指标相结合的方式呈现,其计算公式为:
团队成绩:来自腾讯光影研究室的 Tencent GYLab 团队以绝对优势获得冠军。

比赛难点有以下两点:

  • 相比于传统单目深度估计算法,MAI 更偏重在移动端上的速度,需要优化足够轻量级的小模型

  • 数据来源于主办方使用 Zed 双目摄像头采集的 RGBD 室外场景数据,数据量有限,存在过拟合(Overfit )风险


引言

单目深度估计任务与语义分割任务类似,都是针对输出的特征图(Feature Map)在像素层级上的监督。两者的区别在于传统的语义分割可以视为对每个像素点的分类任务,而深度估计可以看作对每个像素点的回归。

Tencent GYLab 团队参考常规语义分割模型的设计方式,使用编码器 - 解码器( Encoder - Decoder)的结构,并加以知识蒸馏的方法,实现了移动端高效且高精度的单目深度估计算法。

算法技术方案

模型结构设计

涉及到移动端上的模型优化,网络结构是绕不去的一环。单目深度估计模型采用类语义分割模型的编码器 - 解码器结构,在此基础上逐步进行模型的剪枝与小型化。

由于模型部署的硬件是树莓派(Raspberry Pi 4),且模型会在 FP32 精度下以常规 CPU 测试,因此首先需要明确此次模型小型化的优化目标:对 CPU 运算友好的结构,且不含各类框架、指令集的优化。


我们采用了以 Depthwise 卷积为基础的 MobileNetV3 作为模型的编码器,以逐层两倍上采样的方法构建 解码器,两者之间以残差连接(Skip Connection)相连。在上采样的过程中,我们使用 Resize + Depthwise 卷积的方案代替传统的 反卷积(Deconvolution),以求在保持精度的情况下获得高快的速度。

我们以此模型框架创建了不同宽度的单目深度模型,以求在速度和精度之间找到平衡点。根据我们在自己划分的 trainval 测试集上的实验结果,模型在树莓派上的推理速度大致与其计算量呈线性关系。我们选取了综合指标最高的 90MFLOPS 模型作为后续迭代优化的基础实验,它在树莓派上的运行速度已经高于 10FPS,单帧图像的推理耗时小于 100ms。

备注:以上精度指标 si-RMSE 在自己划分的 trainval 测试集上得到。

知识蒸馏体系

在模型规模变小的过程中,势必会伴随着精度损失。当前常规模型小型化的手段包括剪枝和蒸馏,此处我们采用蒸馏方案 (Knowledge Distillation)。

我们的 Teacher 模型采用开源的 Bts 算法,其模型权重是在此次比赛提供的数据上重新训练获得。由于单目深度估计任务可以看做对输出的特征图上每个点的回归,直接在输出层做软标签(Soft Label)的蒸馏会使模型的监督产生二义性,因此我们选择对模型解码器中每一个分辨率的特征图采取 Hint Feature 的蒸馏监督。

在蒸馏训练过程中,Teacher 和 Student 保持相同的输入分辨率 (128x160),由此在解码器处可以拿到分辨率相同但宽度不同的特征图。我们在 Student 解码器模型后为每一个分辨率增加一层随机初始化的 1x1 Conv,使得两者的形状能够完全相同而监督能够生效。这一层 1x1 Conv 只会在模型训练中发挥作用,在模型推理和部署时,这些冗余的卷积层会被剥离使得模型速度完全不受影响。

通过蒸馏,Baseline 90MFLOPS 模型的精度从 0.3304 提升到了 0.3141,并且模型的推理速度得以保持不变。

数据扩增方案

比赛官方给出了 7385 张训练集图片(带 GT)和 500 张验证集图片(不带 GT),这一数量对于训练一个深度学习模型是不足的,因此我们自然会产生数据增强的需求。

我们以在训练过程中在线数据增强的形式扩展数据集。数据增强分为颜色和形变两个维度。颜色空间上的数据增强包括常规的亮度、对比度、饱和度变化,也会以一定的概率进行颜色空间反转和椒盐噪声增强。

图像形变上的数据增强包括常规的镜像、仿射变换等。除此之外,我们实现了单目深度 RGBD 图像的随机 Crop,利用相似三角形的原理实现深度补偿,在按比例 Crop 出一块区域后将其中的深度值按比例放大。其背后的原理类似于使用相机拍摄时,把画面放大和拍摄者向前走能达到一样的效果。

模型转换链路

Mobile AI Depth 竞赛要求提交的模型以 Float32 TFLite 形式在树莓派(Raspberry Pi 4)上以 CPU 运行。这意味着传统针对卷积等基础算子在 CPU 上的计算优化是不可用的,模型的速度实打实的和模型计算量正相关。

我们当前的模型采用 PyTorch 框架进行训练,为了满足比赛提交要求,我们打通了从 PyTorch -> Onnx -> Keras -> TFLite 这条转换路径的完整链路,并且确保了转换前后模型推理的端到端误差小于 1e-6。

在转换的过程中,从 Onnx 向 Keras 转换的步骤是最困难的,其原因在于当前 Onnx 只支持 CHW 的排布,而 Keras(TF)在 CPU 模式下只支持 HWC 排布,当前没有开源工具能够处理好这一转换环节。在不正确的转换工具下,常规的 Conv2d Layer 会被转换成 Split、Permute、Concat、Conv、Split、Permute、Concat 的组合,其速度自然大幅降低。

为此,我们专门针对这一转换环节开发了常规 PyTorch Layer 向 TensorFlow 转换的工具,使得模型部署不会成为比赛的瓶颈。

在实际的比赛过程中,模型的输入分辨率是 128x160,而比赛的测试图像是 480x640。出于模型速度的考量,模型在获取输入图像后事先 Resize 到输入分辨率,经过模型输出后再 Resize 回图像分辨率。我们将这两个 Resize 环节同样在 TFLite 模型中实现。

结果与总结

采用上述方案,Tencent GYLab 团队在最终的测试集上达到了 129.41 的综合评分,大幅领先其他参赛团队获得冠军。

在保证模型精度的情况下,模型的性能在树莓派上达到 10FPS,证明了该方案在移动端上的有效性。在其他常见移动端芯片的 GPU 环境下,该方案同样保证了高效的性能。

成果落地应用

当前光影研究室的各项 AR 玩法中,或多或少都有单目深度估计技术的身影。通过模型压缩、剪枝、蒸馏获得的小模型可以实时运行在手机移动端,覆盖 iOS 和 Android 各类机型,达到 90% 以上的覆盖率。目前单目深度估计技术已作为基础能力在多个 AR 玩法中发挥作用。

在手机 QQ 的 AR 蛋糕等贴纸类玩法中,单目深度估计技术提供了贴纸目标在空间中的方向与位置,使得 AR 算法能够快速初始化。

在水淹房间特效中,单目深度估计模型可以提供视野中每个点距离相机的远近,结合相机内外参可以计算其在世界坐标系下的位置,从而实现 AR 特效。此外,单目深度也可以单独作为一种 AI 能力,形成雾气等特效效果。


理论CVPR腾讯计算机视觉
1
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

剪枝技术

剪枝顾名思义,就是删去一些不重要的节点,来减小计算或搜索的复杂度。剪枝在很多算法中都有很好的应用,如:决策树,神经网络,搜索算法,数据库的设计等。在决策树和神经网络中,剪枝可以有效缓解过拟合问题并减小计算复杂度;在搜索算法中,可以减小搜索范围,提高搜索效率。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

验证集技术

验证数据集是用于调整分类器超参数(即模型结构)的一组数据集,它有时也被称为开发集(dev set)。

过拟合技术

过拟合是指为了得到一致假设而使假设变得过度严格。避免过拟合是分类器设计中的一个核心任务。通常采用增大数据量和测试样本集的方法对分类器性能进行评价。

上采样技术

在数字信号处理中,上采样、扩展和内插是与多速率数字信号处理系统中的重采样过程相关的术语。 上采样可以与扩展同义,也可以描述整个扩展和过滤(插值)过程。

语义分割技术

语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类。图像语义分割是AI领域中一个重要的分支,是机器视觉技术中关于图像理解的重要一环。

知识蒸馏技术

Hinton 的工作引入了知识蒸馏压缩框架,即通过遵循“学生-教师”的范式减少深度网络的训练量,这种“学生-教师”的范式,即通过软化“教师”的输出而惩罚“学生”。为了完成这一点,学生学要训练以预测教师的输出,即真实的分类标签。这种方法十分简单,但它同样在各种图像分类任务中表现出较好的结果。

腾讯机构

腾讯,1998年11月诞生于中国深圳,是一家以互联网为基础的科技与文化公司。我们的使命是“通过互联网服务提升人类生活品质”。腾讯秉承着 “一切以用户价值为依归”的经营理念,为亿万网民提供优质的互联网综合服务。 腾讯的战略目标是“连接一切”,我们长期致力于社交平台与数字内容两大核心业务:一方面通过微信与QQ等社交平台,实现人与人、服务及设备的智慧连接;另一方面为数以亿计的用户提供优质的新闻、视频、游戏、音乐、文学、动漫、影业等数字内容产品及相关服务。我们还积极推动金融科技的发展,通过普及移动支付等技术能力,为智慧交通、智慧零售、智慧城市等领域提供有力支持。

http://www.tencent.com/
相关技术
模型优化技术

像卷积神经网络(CNN)这样的深度学习模型具有大量的参数;实际上,我们可以调用这些超参数,因为它们原本在模型中并没有被优化。你可以网格搜索这些超参数的最优值,但需要大量硬件计算和时间。改进模型的最佳方法之一是基于在你的领域进行过深入研究的专家的设计和体系结构,他们通常拥有强大的硬件可供使用。常见的简单模型优化技巧包括迁移学习、dropout、学习率调整等

仿射变换技术

仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。 一个对向量平移,与旋转放大缩小的仿射映射为 上式在齐次坐标上,等价于下面的式子 在分形的研究里,收缩平移仿射映射可以制造制具有自相似性的分形

单目深度估计技术

单目深度估计是指从单张RGB图像中估计深度。

推荐文章
暂无评论
暂无评论~