近期,由DataFun主办的AI基础软件架构峰会圆满落幕,格物钛作为AI基础设施领域的创业明星代表与谷歌、字节跳动、第四范式等顶尖科技公司一同亮相MLOps分论坛,格物钛算法负责人薛林继为线上观众带来了一场《建立公开数据集标准,赋能AI工程化落地》主题演讲。
以下是演讲全文:
建立公开数据集标准,赋能AI工程化落地
大家好,我是来自格物钛的薛林继,现在负责算法这一块。今天给大家分享的标题叫做《建立公开数据集标准,赋能AI工程化落地》。格物钛一直在致力于创建下一代的数据平台,以及基于这个数据平台的开源数据社区。 在做开源社区的时候,我们有很多自己的思考和想法,今天在这里分享给大家。
1 公开数据集现状
首先我必须强调一下数据的重要性。在机器学习和深度学习的领域一直存在Data-Centric和Model Centric的争论,即讨论数据和模型到底哪一个更加重要。很多人认为数据更加重要。如果把数据比作食材,把模型比作厨师的厨艺,有一句话可以非常好地去描述数据的重要性,那就是优质的食材往往只需要最朴素的烹饪方式。
无论在学术界还是工业界,数据的获取都是非常高难度的。对于模型而言,我可以把自己关在房间里面,从零开始去搭建一个神经网络。但是对于数据而言就做不到,因为你必须要去相对应的场景做数据采集,整个数据获取的链路包括非常多不同的部分,比如说数据采集、数据标注、数据清洗等等。其中只要有任何一个步骤出现问题,就很有可能影响到数据的质量,从而影响到模型产出的质量。
有很多企业和机构,会在网上公开自己采集的数据。这些公开数据集极大地推动了机器学习算法的发展,工业界也会使用这些公开数据集去做算法启动、算法验证等等工作。此外,公开数据集本身也在创建新的任务类型,以自己的方式去推动算法模型的发展。
比如说早期的公开数据集VOC有大概20个分类,而李飞飞教授的公开数据集ImageNet出现以后,将分类扩充到了1000多类,它的发表推动了计算机视觉的飞速发展。所以说公开数据集在整个AI研究领域是非常重要的,首先它提供了难以获取的数据,同时它也以自己的形式推动了不同算法的发展。
现在的公开数据集的托管方式其实非常凌乱,主要有三种不同的类型。第一种是一些机构企业,用自己的力量去构建一个公开数据集的网站,我们大部分比较有名的公开数据集都是以这种方式进行分发的,比如说 COCO、KITTI等等。第二种是托管在GitHub上。还有一些是托管在Kaggle、Tianchi 等竞赛平台,在这些平台上也能找到很多不同种类的数据集。
这样的托管方式问题在于,很多数据集都托管在不同的地方,导致我们很难根据任务去精确检索到自己想要的数据集,这样的话其实对数据集的交换和分享是非常不利的。
除此之外,由于每个数据集的文件结构和标注格式都不一样,就导致我们在数据交换的时候,必须要花很多时间去理解新的数据格式,去做数据转换和数据清洗等工作。比如说我们有一些非常基础的需求,像数据可视化,数据标签的分布统计,这些功能都会因为它的格式变化,从而需要编写更多中间的胶水代码,或者是编写更多新的逻辑去适配不同格式。这样其实非常不利于数据的交换和为数据提供统一功能。
2 公开数据集标准制定
遭遇这样子的问题,怎么解决呢?我们的想法是,如果可以使用一种统一的数据集标准格式去表达不同数据的标注信息的话,我们是不是就可以基于这种统一格式去提供统一的数据功能,以降低数据理解的成本,提升数据交换的效率。基于这样的思考,我们尝试建立了公开数据集的格式标准。
首先,我们需要对数据集进行分类,再针对不同类型去制定不一样的标准。我们调研了1200+的数据集,从数据格式、标注类型、任务类型、应用场景这四个方面进行了分类。在调研过程中,我们发现公开数据集有划分数据片段的需求,可以分为以下三种情况:
· 区分 test,train,evaluation 数据 (COCO,VOC)
· 连续数据集区分连续片段 (KITTI-tracking)
· 多传感器数据集同一个片段共享相同的传感器标定参数 (nuScenes,Argoverse)
基于划分数据片段的需求,我们提出了一个概念叫segment,通过segment代替传统的文件夹去划分数据片段。首先segment不支持嵌套,因为一旦发生嵌套的话,使用者就无法预知你的嵌套的层数。其次同一个 segment 中的数据需要保持一致性,这样用户在使用的时候就不需要去做多余判断和数据清洗。同时segment 支持添加 Meta 信息,例如传感器参数。
对于标注格式的不同,我们最终选择了JSON作为标注格式的表示语言。因为JSON比较容易阅读和理解,同时也便于使用在HTTP请求当中。同时我们使用统一的API形式请求标签,API的好处在于灵活多变,可以支持批量请求,也可以支持单条数据的请求。
制定好数据集划分的规范以及标注格式的基础表示方法之后,我们就开始根据不同的标注类型制定相应的标注格式标准。
Category就是我们常说的分类信息,它是用枚举去描述一个对象。比如说我们在做一个猫狗分类的任务的话,那么猫跟狗就是我们预先定义好的枚举。Attribute就是我们使用一个键值对,或者说是字典去描述对象。
像BDD100K这样的数据集里面,对人、车、交通灯进行了分类,那么人、车、交通灯就是Category,但是这些人车交通灯还有额外的属性,例如遮挡或截断。这些额外属性,我们就归入Attribute的基本概念中。
对于跟踪的数据集,我们需要知道前一帧图片和后一帧图片上的目标是不是同一个实例,比如上一帧的车和下一帧的车是同一个车,才可以将它连起来做一个跟踪的任务,所以第三个基本概念Instance,用于表示帧与帧之间是不是同一个目标。有了这些基本概念以后,我们只要将基本概念与被标注的几何类型进行一个组合,就可以构建出我们的标注表示方法。
在使用数据集的过程中,我们需要快速得知一个数据集整体的标注信息是什么样子,由此来得知这个数据集是否能够满足自己的任务场景和任务需求。所以我们这边新增了一个概念——Catalog,使用一个结构化的语言去描述数据集整体的标注信息,包含了标注类型、标注特性、标注字段等。
在介绍完整个标准制定的基础逻辑后,我们可以看到这是一个整体结构。如果我们将所有数据都以这种形式去表示,就可以很大程度上节省理解数据结构,或进行数据交换和数据清洗等冗余工作的时间。
3 格物钛数据平台和社区
我们在处理数据的过程中需要很多基础功能,例如可视化、标注统计、版本管理等等。基于我们刚才讨论的数据的标准格式,我们有能力基于这种标准格式去提供统一的数据功能。因为我们的格式已经按照一套标准进行了固定和转换,所有其他服务都可以基于这个格式去进行编写。
格物钛数据平台就提供了基于数据的各种功能,希望能够解决企业在数据管理层面的痛点。 下面的图片展示了一个比较复杂的多传感器融合的数据集,里面有点云数据和图片数据。通过可视化功能,我们能够很容易看到点云里面的标注和图片之间标注的关系,同时我们也提供了数据标签的统计。因为我们在训练模型的时候非常关注标签的分布是否是均衡,如果说数据集本身不均衡,我们就考虑通过一些手段将其变得均衡,从而去提升整个模型的性能。
同时我们也提供非常完善的开发者工具,例如OpenAPI、SDK 与 CLI。使用这些工具,可以让模型训练者通过统一方式去获取我们的数据,也可以使用相似代码去和知名的深度学习训练框架进行对接。
基于我们的数据平台,我们建立了格物钛公开数据集社区。公开数据集社区主要是为了解决我们最开始提到的公开数据集分发托管方式杂乱的问题。目前我们收集了1200多个数据集放在公开数据集社区平台上面分享,并且对每一个公开数据集都添加了统一的分类标签,方便使用者检索。也基于我们的数据平台提供了统一的格式化标签统计等功能,使用者就可以快速了解到整个数据集的标签分布、标签类型、标注质量等内容。
同时我们也标准化和结构化了每一个数据集的基础信息,比如说它的数据集官网、数据集提供方、标注方等等一些重要内容,以及它的LICENSE信息、是否支持重新分发、是否支持商用等等。
公开数据集的设计与标准制定,我觉得是一个相辅相成的关系。我们的公开数据集社区提供了一个非常良好的迭代数据集标准的实验场合环境,每当有一个新的数据集登录到我们公开数据集社区的时候,其实都是对我们当前的数据标准做了一次检验:
· 我们当前制定的数据集标准能否不失真地表达新登录数据集的所有重要信息?
· 我们当前提供的可视化标注统计的服务能否在新的数据集上面正常工作?
· 它是否应该归类到我们之前某一个固定标注类别中,还是我们需要新增或者调整之前的分类标签?
· 我们的整个标准是否可以更简单更通用?
这都是每一个数据登录时我们需要思考的内容。通过这种方式不断迭代我们当前的标准,使得我们的标准能够对当前以及未来可能出现的数据进行尽可能完备的支持。也正在我们当前的1200多个数据集的迭代过程中,我们得到了现在的一个数据集标准,能够尽可能不失真地表达所有的数据集重要信息,尽可能适配更多的场景与任务,能够更加完美地与数据集的服务代码去做一个对接。
4 问题与展望
在数据集标准和数据集社区的发展过程中,其实我们也在不断反思。首先数据集的种类实在是太多了,不同的任务类型和新的数据也在不断出现,如果只是依靠我们的力量去制定标准,很难跟上新任务类型和新数据出现的步伐。这方面我们是希望有社区的力量来加入,能够帮助去建立更完善、更加能够让大家接受的标准。
从以上角度出发,我们发现,当前制定标准的流程过于复杂,我们会花很多时间调研和总结,在上线实施的过程中去进行迭代和优化。但这样子的复杂流程其实并不适合对社区进行开放,所以我希望对整个标准制定流程进行一个针对社区的精简和优化。
其次,我们目前制定的标准相对固定,在某些企业端场景中,他们其实并不需要去适配公开数据集的标准,可以自定标准满足自己的任务场景的需求。所以说我们也需要能够支持让使用者去自定义标准格式,以适配多变的数据需求。
点击访问格物钛官网,预约演示,即刻体验格物钛数据平台,直击你的AI开发数据需求。