当前位置: 首页 > 科技观察

Facebook最新力作Pythia:模块化、即插即用,大大简化模型进度

时间:2023-03-18 16:47:20 科技观察

Facebook人工智能研究部近日推出模块化即插即用框架Pythia。目标是让数据科学家能够快速构建、复制和基准化AI模型,将VQAv2.0数据集模型的性能从65.67%提高到70.22%,已在Github上开源。Facebook最近推出了一系列针对开发者社区的工具。继1月开源图像处理库Spectrum、去年底自然语言处理建模框架PyText、11月开源人工智能增强学习平台Horizo??n之后,Facebook人工智能研究部门又推出了模块化插件Pythia-and-play使用框架。Pythia的目标是让数据科学家能够快速构建、复制和基准测试人工智能模型,它已经在Github上开源。Pythia(中文一般译为Pythia)这个名字的由来也很有意思。在古希腊神话中,皮提亚是阿波罗神的女祭司,服务于帕纳索斯山上的德尔斐神庙。她以传达阿波罗神的神谕而闻名,并被认为能够预测未来。即插即用Python:让数据科学家快速构建、复制和基准化AI模型什么是Python?Pythia是一个深度学习框架,支持视觉和语言领域的多任务处理。基于PyTorch框架,模块化的即插即用设计使研究人员能够快速构建、复制和基准测试AI模型。Pythia专为视觉和语言任务而设计,例如回答与视觉数据相关的问题和自动生成图像注释。Python能做什么?Pythia结合了最近AI竞赛(VQAChallenge2018和VizwizChallenge2018)的获奖作品的元素。功能包括参考实施,以展示以前最先进的模型如何获得相关的基准测试结果,并快速衡量新模型的性能。除了多任务处理,Pythia还支持分布式训练和各种数据集,以及自定义损失、指标、调度和优化器。PythiaModelZoo的特点:最先进的视觉和语言模型的参考实现,包括LoRRA(SoTAonVQA和TextVQA)、Pythia模型(VQA2018挑战赛冠军)和Ban。多任务处理:支持多任务处理,允许在多个数据集上进行训练。数据集:包括对各种内置数据集的支持,包括VQA、VizWiz、TextVQA和VisualDialog。Modules:为视觉和语言领域的许多公共层提供实现Distributed:支持基于数据并行和分布式数据并行的分布式训练。Unopinionated:数据集和基于它的模型的实现是Unopinionated。自定义:自定义损失、指标、调度、优化器、Tensorboard;适合用户的所有定制需求。用户可以使用Pythia来指导他们的下一个视觉和语言多模态研究项目。Pythia还可以作为围绕视觉和语言数据集的挑战的起始代码库(请参阅TextVQA挑战和VQA挑战)。Pythia最好的地方是什么?Pythia简化了进入视觉和语言开发子领域的过程,使研究人员能够专注于更快的原型设计和实验。Facebook旨在通过提高这些模型和结果的可重复性来加速进步。这将使社区更容易为成功的系统建立基础和基准。开发人员还希望通过Pythia消除障碍将使研究人员能够更快地开发出人与智能机器通信的新方式。这项工作还应该帮助研究人员开发自适应人工智能,将多种理解综合为更基于上下文的多模态理解。除了这个开源版本,Facebook还计划继续添加工具、任务、数据集和参考模型。在上面提到的VQA2018比赛中,Pythiav0.1的出发点是对自下而上和自上而下模型的模块化重新实现,最终赢得了比赛。Pythiav0.1表明,通过对模型架构和学习率计划进行微小但重要的更改、微调图像特征并添加数据增强,可以显着提高自上而下模型在VQAv2.0数据集上的性能从65.67%增加到70.22%。此外,通过使用在不同特征和不同数据集上训练的不同模型集合,Pythiav0.1能够将“标准”集合方法(即具有不同随机种子的相同模型)显着提高1.31%。总体而言,Pythiav0.1在VQAv2.0数据集的测试标准拆分上达到72.27%。术语和概念Pythia经过精心设计,从头开始就是一个多任务处理框架。这意味着使用Pythia,可以同时训练多个任务和数据集。然而,Pythia在其模块中抽象了许多概念,要在Pythia之上进行开发,有必要了解Pythia代码库中使用的概念和术语。一旦开发人员理解了这些简单的概念,就很容易在Pythia之上进行开发。主要概念和术语如下:任务和数据集在Python中,数据集被划分为一组任务。因此,一个任务对应于属于它的数据集的集合。例如,VQA2.0、VizWiz和TextVQA都是VQA任务。每个任务和数据集都分配了一个相应的键,以供在命令行参数中引用。下表显示了任务及其数据集:下表显示了上表的逆向,数据集及其任务和关键:模型高级模型的参考实现已作为研究论文复制和新研究起点的基础.Pythia已在以下论文中使用:TowardsaReadableVQAModel(LoRRAModel)VQA2018ChallengeWinnerVizWiz2018ChallengeWinner与任务和数据集类似,每个模型都注册了相应的密钥,以便可以在配置和命令中使用在行参数中轻松引用。下表显示了可以运行的每个模型的密钥名称和数据集。Registry受Reduxglobalstore的启发,将Pythia生态系统所需的有用信息注册在registry中。将注册表视为框架多个部分所需信息的公共存储,并在需要该信息的任何地方充当信息源。注册表还根据上述键注册模型、任务、数据集等。注册函数可以作为需要注册的类(如模型等)的装饰器。配置根据研究需要,Pythia中的大部分参数/设置都是可配置的。Pythia特定的默认值(training_parameters)存在于:pythia/common/defaults/configs/base.yml,其中详细的注释描述了每个参数的用法。为了方便使用和模块化,每个数据集的配置分别存放在:pythia/common/defaults/configs/tasks/[task]/[dataset].yml可以从Tasks中的表中获取数据集的[task]值和数据集部分。模型配置也是独立的,是用户在创建自己的模型时需要定义的部分。由于每个数据集的单独配置,这个概念可以扩展到执行多任务处理,并在此处包括多个数据集配置。ProcessorsProcessors的主要目的是使数据处理管道尽可能类似于不同的数据集,并允许代码重用。处理器接受带有与所需数据相对应的键的字典,并返回带有已处理数据的字典。这有助于通过修复所需的签名使处理器独立于其余逻辑。处理器用于所有数据集以切换数据处理需求。在处理器文档中了解有关处理器的更多信息。SampleListSampleList的灵感来自maskrcnn-benchmark中的BBoxList,但更通用。所有与Pythia集成的数据集都需要返回一个Sample,该Sample将被组织到一个SampleList中。SampleList现在带有许多方便的功能,可以轻松地批处理和访问事物。例如,样本是带有一些键的字典。在SampleList中,这些键的值将根据是张量还是列表整齐地分组,并分配回字典。因此,最终用户可以将这些键组合在一起并在他们的模型中使用它们。与Python集成的模型接收一个SampleList作为参数,这再次使训练器不再对模型和数据集产生任何影响。在其文档中了解有关Sample和SampleList的更多信息。预训练模型在Pythia中使用预训练模型进行推理很容易。从下表中选择一个预训练模型,然后按照步骤推断或生成预测,供EvalAI进行评估。(注意这部分内容需要先安装教程中介绍的数据,教程链接在文末)现在,假设你去预训练模型modelislink(选择从table>右键>复制链接地址),对应的配置应该位于configs/[task]/[dataset]/[model].yml。例如,vqa2train_and_val的配置文件应该是configs/vqa/vqa2/pythia_train_and_val.yml。现在要运行EvalAI的推理,请运行以下命令:如果您想对val进行训练或评估,请相应地将run_type更改为train或val。您还可以通过将--run_type设置为train+val+inference来使用多种运行类型,例如train、inferenceonval和inference。如果删除--evalai_inference参数,Pythia将执行推理并直接在数据集上提供结果。请注意,对于测试集,这不能使用,因为我们没有它们的答案/目标。因此,这对于在本地对val集执行推理很有用。如果删除--evalai_inference参数,Pythia将执行推理并直接在数据集上提供结果。请注意,对于测试集,这不能使用,因为我们没有它们的答案/目标。因此,这对于在本地对val集执行推理很有用。下表展示了各种预训练模型的评估指标:Demo演示相关资源:Github:https://github.com/facebookresearch/pythiaDemo:https://colab.research.google.com/drive/1Z9fsh10rFtgWe4uy8nvU4mQmqdokdIRR教程:https://learnpythia.readthedocs.io