AI 训练数据不够用?支付宝 3D 合成方案揭秘

简介: 模型未动,数据先行,有标注的大量数据是 AI 落地一直以来的重中之重。如何快速高效率的获取训练数据成了 AI 实战中面临的巨大困难。采用 3D 图形技术合成训练数据是近年来计算机视觉新兴的一个方向。通过对实物建立 3D 模型,然后使用照片级渲染技术渲染合成海量训练图像,这样拿到的图像具有完美的标签,而且数据生成的边际成本很低,因此获得了工业界的重点关注。本文就来讲讲来自支付宝多媒体技术部的同学们是如何将这一技术应用到视觉零售这一领域的。

--------点击屏幕右侧或者屏幕底部“+订阅”,关注我,随时分享机器智能最新行业动态及技术干货----------

3.png

前言

支付宝视觉售货柜项目是蚂蚁 IOT 的重要产品,用户通过人脸识别打开货柜门,挑选出想要购买的商品后关门,视觉识别算法通过对比开门前后的商品变化判断出用户购买了哪些商品,自动完成结算。“开门即取,关门即走”的体验给用户带来了极大方便。

1.gif

图1 3D 合成的百岁山矿泉水

image.png

图 2 支付宝视觉售货柜

在本场景中,由于货品的高密度摆放,视觉货柜所拍摄的图像中商品之间遮挡非常严重,算法需要根据非常有限的图像片段判断是哪个商品。同时算法需要不断迭代以支撑源源不断的上新需求。这就需要我们不仅要采集足够多的数据以解决各种情况,而且要能在很短的时间内及时输出新品的训练数据,否则算法模型的泛化能力将大打折扣。3D 合成数据技术为该项目提升了 3 倍以上的上新速度,降低了 70% 以上的成本,大大缩短了商品上新周期。同时避免了人工打标带来的质量不稳定,保障了训练数据的高质量,将因人工标注数据不可靠造成的风险降低了 90% 以上。图 3 是这个方案的流程图。Part1 对商品建模,并赋予精确的纹理和材质,Part2 对场景进行参数化建模仿真模拟各种各样可能出现的情况,Part3 对场景的每个情况进行渲染获取最终训练数据。

image.png

图3 3D数据合成流程

Part 1 全材质 3D 重建

3D 重建是利用技术手段对某个物体进行自动几何重建,以及纹理与材质的建模。这个过程有别于 3D 建模师手 K 的过程,可快速准确的恢复某个物体的真实几何和外观信息。3D 重建需要重建的信息包括几何和外观两个部分。当前 3D 重建难以解决的物体是一些反光、透明等材质,尤其是各种材质杂糅在一起的物体。这个难题横旦在项目的初期,是无论后面走哪条技术路线都需要攻克的难题。

项目组经过艰苦技术攻关自研了一套全材质 3D 建模方案,该方案结合了结构光扫描技术与基于图像特征匹配的多目几何重建技术,通过扫描和 3D 特征匹配的方法实现了全材质物体的 3D 重建,攻克了业界难题。使用全材质 3D 重建技术方案可在 5-10 分钟左右的时间精确重建一个商品的完整几何信息以及初步的外观信息。下面是若干个 3D 重建示例。

image.png

图4 重建的 3D 模型

在获得 3D 几何信息和初步外观信息之后,可根据实际商品的外观对 3D 模型不同部位赋予准确材质模型,这个过程称之为材质重建。一般来讲特定应用场景的商品材质种类是相对有限的,可根据不同业务场景建立一个特定材质库,根据 3D 模型的初步外观信息赋予相应的材质。实际上商品的外观与材质之间的专家经验是可以通过网络学习到的,一些研究工作如:开放环境材质估计、 形状与 SV-BRDF 估计 表明即便是在商品 3D 模型未知、采集环境开放的时候,我们仍然可以学习到材质模型与图像特征的对应关系。

Part2 参数化场景

我们通过全材质 3D 重建技术对场景进行建模,之后需要针对场景分布的各种可能性进行基于物理的模拟。在参数化场景部分,我们也需要对场景进行 3D 建模。场景的建模是对所渲染 3D 模型所处的环境进行 3D 建模,包括了场景 3D 重建和光源建模两个部分。场景 3D 重建的过程可以是自动化的使用如扫描仪,或者根据多目几何原理使用 Structure-from-Motion 进行三维重建。而光源重建则是对环境的光源进行建模,使得渲染出来的图像与实际拍摄的图像在外观上融合度较好。

光照估计

在渲染流程中,光照对渲染结果的影响至关重要,因此场景参数化需要对光照进行精确的描述。通常来讲,一个场景中的光源往往构成复杂,需要对直接光源的数量、色温、光源形状、乃至频谱范围等进行准确建模,如果场景中有类似液晶显示屏等光源,还需要针对光源的偏振态和频率进行建模,工作量很大且很难自动化。

image.png

图5 HDR 合成与渲染结果

这里我们采用了 HDRI 技术对光源进行重建,该方案是一个简单有效的光源重建和渲染技术,被广泛采用于电影制作中实现与真实场景融合度很高的渲染图像。该技术是一种基于图像的渲染技术,即采集并合成一张高动态范围图像作为光源进行渲染。可以看到这样的光源渲染出来的结果在高光表现方面较好。

场景建模和物理碰撞检测引擎

在视觉货柜项目中,我们所面料的场景是一个采用视觉识别技术完成商品交易的无人货柜。货柜需要频繁上新品,且商品之间遮挡严重。商家为了更有效的利用货柜会密集摆放很多商品,很多商品漏出来的画面非常有限,而视觉识别需要检测并识别出所有目标。这就要求视觉算法同学除了想法设法提高模型泛化能力之外,也需要准备充分多样性的数据,尽可能全的覆盖到各种遮挡关系,同时需要覆盖到每个可能出现的商品。

在参数化场景的过程中,我们使用重力模型、随机力模型等对场景施加变化,并对场景中的各个物体进行碰撞检测和模拟,使得场景中的物体分布接近真实状态。下面这个视频示意如何对倒瓶等异常情况进行仿真模拟。

2.gif

图6 物理碰撞模拟

Part3照片级渲染

3D 合成数据方案的核心问题是怎样使得渲染出来的图像看起来像照片,而不是人眼看上去很真实就够了。我们需要渲染域与实拍域尽量接近才能真正起到训练数据的作用。一般意义上的渲染场景存在所谓 too perfect 的问题,也就是说渲染出来的图像看上去可能已经非常真实,与人眼实际看到的样子很接近,但却与摄像头实际拍摄的图片不同。作为喂给机器学习模型的训练数据,我们要求最终输出的图片需要复现这些瑕疵,实现所谓的照片级渲染(Photo-realistic rendering)。

我们尝试了两种思路实现照片级渲染。一种思路是数据驱动的方法,先采集大量实拍图,之后通过 GAN、域迁移、域自适应等方法将渲染域的图像迁移至实拍域。另一种思路是成像模拟的方法,在渲染流程前中后期分别模拟各种摄像头成像的影响,比如渲染过程中根据场景深度不同模拟散焦模糊,对渲染图像卷积同一模糊算子实现因低分辨率引起的镜头模糊等。

image.png

图7 渲染图、域迁移图与实拍图

图7 为采用第一种思路实现的效果。将渲染图、迁移图和实拍图的对比,我们看到迁移图可以较好的实现与镜头相关的图像特征迁移效果,同时也会存在一些 artifacts。此外,作为数据驱动的技术,域迁移的过程可控性较弱,获得好结果的前提是需要有与真实场景分布接近的实拍数据,导致数据采集成本较高。

不同于上面的数据驱动算法,成像模拟采用纯模拟的方式合成训练数据,可控性强,且效果无天花板,但实现的技术较为复杂。我们采用电影级渲染引擎,并自研了光学摄像头模拟器,实现了一系列因镜头、光电传感器、以及 ISP 图像处理单元的模拟,消除了许多引起渲染域与实拍域差距的因素。下图为成像模拟实现的效果。

image.png

图8 成像模拟结果

写在最后

在实践中,我们发现 3D 合成数据可以很好的解决许多计算机视觉任务,尤其是在一些无法很好获取 ground truth 的任务中具有非常好的落地前景。毕竟人工智能的目的是代替重复低效的人工,而如果用于训练的数据收集和标注仍然大量依赖人工的话,有时就不免落入到所谓“有多少人工就有多少智能“的尴尬境地。

同时我们也必须看到目前的 3D 合成数据方案有诸多挑战。首先,不能完全依赖合成数据,总会有一些模拟不到的场景。其次,合成数据方案比较适合标注成本高的任务,对于一些标注成本不高的任务反而会增加成本,比如人脸检测、物体识别分类等任务。再次,一些技术难点,如低成本实现动态场景模拟等尚需进一步攻克。

image.png

原文链接:https://mp.weixin.qq.com/s/j46iNSqD_7MQ_hhNMNQCkg

目录
相关文章
|
12天前
|
JSON 人工智能 数据格式
AI计算机视觉笔记二十六:YOLOV8自训练关键点检测
本文档详细记录了使用YOLOv8训练关键点检测模型的过程。首先通过清华源安装YOLOv8,并验证安装。接着通过示例权重文件与测试图片`bus.jpg`演示预测流程。为准备训练数据,文档介绍了如何使用`labelme`标注工具进行关键点标注,并提供了一个Python脚本`labelme2yolo.py`将标注结果从JSON格式转换为YOLO所需的TXT格式。随后,通过Jupyter Notebook可视化标注结果确保准确性。最后,文档展示了如何组织数据集目录结构,并提供了训练与测试代码示例,包括配置文件`smoke.yaml`及训练脚本`train.py`,帮助读者完成自定义模型的训练与评估。
|
13天前
|
人工智能 安全 API
AI数据荒雪上加霜!MIT:网页数据的公开共享正走向衰落
【9月更文挑战第7天】麻省理工学院的一项新研究表明,尽管人工智能(AI)领域迅速发展,但网页数据的公开共享正在减少,加剧了AI数据短缺的问题。AI模型训练依赖大量数据,而网页数据是关键来源之一,其共享减少将影响AI进步,并引发数据隐私和安全方面的担忧。然而,这也推动了对数据隐私保护的关注及新型数据获取方式的探索。研究详情参见:[论文链接](https://www.dataprovenance.org/consent-in-crisis-paper)。
45 9
|
12天前
|
人工智能 开发工具 计算机视觉
AI计算机视觉笔记三十:yolov8_obb旋转框训练
本文介绍了如何使用AUTODL环境搭建YOLOv8-obb的训练流程。首先创建虚拟环境并激活,然后通过指定清华源安装ultralytics库。接着下载YOLOv8源码,并使用指定命令开始训练,过程中可能会下载yolov8n.pt文件。训练完成后,可使用相应命令进行预测测试。
|
12天前
|
人工智能 PyTorch 算法框架/工具
AI计算机视觉笔记二十二:基于 LeNet5 的手写数字识别及训练
本文介绍了使用PyTorch复现LeNet5模型并检测手写数字的过程。通过搭建PyTorch环境、安装相关库和下载MNIST数据集,实现了模型训练与测试。训练过程涉及创建虚拟环境、安装PyTorch及依赖库、准备数据集,并编写训练代码。最终模型在测试集上的准确率达到0.986,满足预期要求。此项目为后续在RK3568平台上部署模型奠定了基础。
|
12天前
|
人工智能 测试技术 PyTorch
AI计算机视觉笔记二十四:YOLOP 训练+测试+模型评估
本文介绍了通过正点原子的ATK-3568了解并实现YOLOP(You Only Look Once for Panoptic Driving Perception)的过程,包括训练、测试、转换为ONNX格式及在ONNX Runtime上的部署。YOLOP由华中科技大学团队于2021年发布,可在Jetson TX2上达到23FPS,实现了目标检测、可行驶区域分割和车道线检测的多任务学习。文章详细记录了环境搭建、训练数据准备、模型转换和测试等步骤,并解决了ONNX转换过程中的问题。
|
12天前
|
存储 人工智能 数据可视化
AI计算机视觉笔记二十一:PaddleOCR训练自定义数据集
在完成PaddleOCR环境搭建与测试后,本文档详细介绍如何训练自定义的车牌检测模型。首先,在`PaddleOCR`目录下创建`train_data`文件夹存放数据集,并下载并解压缩车牌数据集。接着,复制并修改配置文件`ch_det_mv3_db_v2.0.yml`以适应训练需求,包括设置模型存储目录、训练可视化选项及数据集路径。随后,下载预训练权重文件并放置于`pretrain_models`目录下,以便进行预测与训练。最后,通过指定命令行参数执行训练、断点续训、测试及导出推理模型等操作。
|
12天前
|
机器学习/深度学习 人工智能 测试技术
AI计算机视觉笔记二十五:ResNet50训练部署教程
该项目旨在训练ResNet50模型并将其部署到RK3568开发板上。首先介绍了ResNet50网络,该网络由何恺明等人于2015年提出,解决了传统卷积神经网络中的退化问题。项目使用车辆分类数据集进行训练,并提供了数据集下载链接。环境搭建部分详细描述了虚拟环境的创建和所需库的安装。训练过程中,通过`train.py`脚本进行了15轮训练,并可视化了训练和测试结果。最后,项目提供了将模型转换为ONNX和PT格式的方法,以便在RK3568上部署。
|
12天前
|
人工智能 计算机视觉 Python
AI计算机视觉笔记十九:Swin Transformer训练
本文介绍了使用自定义数据集训练和测试目标检测模型的步骤。首先,通过安装并使用标注工具labelme准备数据集;接着修改配置文件以适应自定义类别,并调整预训练模型;然后解决训练过程中遇到的依赖冲突问题并完成模型训练;最后利用测试命令验证模型效果。文中提供了具体命令及文件修改指导。
|
15天前
|
SQL 人工智能 运维
在阿里云日志服务轻松落地您的AI模型服务——让您的数据更容易产生洞见和实现价值
您有大量的数据,数据的存储和管理消耗您大量的成本,您知道这些数据隐藏着巨大的价值,但是您总觉得还没有把数据的价值变现出来,对吗?来吧,我们用一系列的案例帮您轻松落地AI模型服务,实现数据价值的变现......
77 3
|
18天前
|
人工智能 PyTorch 算法框架/工具
AI计算机视觉笔记十二:基于 LeNet5 的手写数字识别及训练
本文档介绍了如何使用PyTorch框架复现经典的LeNet5模型,并通过MNIST数据集进行训练与测试。首先,创建虚拟环境并安装所需库,接着下载MNIST数据集。训练部分涉及四个主要文件:`LeNet5.py`、`myDatast.py`、`readMnist.py` 和 `train.py`。通过这些文件搭建模型并完成训练过程。最后,通过测试脚本验证模型准确性,结果显示准确率达到0.986,满足预期需求。文档还提供了详细的环境配置和代码实现细节。