CVPR 2023年最佳论文Visual Programming: Compositional visual reasoning without training (视觉编程:无需训练的组合式视觉推理)

Paper: https://openaccess.thecvf.com/content/CVPR2023/html/Gupta_Visual_Programming_Compositional_Visual_Reasoning_Without_Training_CVPR_2023_paper.html

Code: https://github.com/allenai/visprog

VISPROG是一种神经符号方法,可利用自然语言指令解决复杂的组合式视觉任务。VISPROG避免了任何特定于任务的训练需求。相反,它利用大型语言模型的上下文学习能力生成类似Python的可组合程序,这些程序将被执行以获得解决方案和全面可解释的推理结果。生成的程序的每一行可以调用多个现成的计算机视觉模型、图像处理子程序或Python函数以生成中间输出,后续程序部分可以使用这些中间输出。在四项不同的任务中展示了VISPROG的灵活性:组合式视觉问答、基于图像对的零样本推理、实际知识对象标注和语言引导图像编辑。类似VISPROG这样的神经符号方法是扩展人工智能系统范围、为人们提供执行复杂任务的有效途径。

VISPROG是一种可组合和可解释的神经符号系统,用于进行组合式视觉推理。给定自然语言指令和高层次程序的几个示例,VISPROG利用GPT-3的上下文学习功能针对任何新指令生成程序,并在输入的图像上执行程序以获取预测结果。VISPROG还将中间输出总结为可以解释的视觉说明。

模块

VisProg目前支持20个模块,可实现图像理解、图像操作(包括生成)、知识检索和算术和逻辑操作等能力。在这里显示的红色模块是使用经过训练的最先进神经模型实现的,而蓝色模块是使用多种Python库(如PIL、OpenCV和AugLy)实现的非神经Python函数。

visprog_Visual

在VISPROG中,每个模块都被实现为一个Python类,见下述代码,其具有以下方法:

(i)解析行以提取输入参数的名称和值以及输出变量的名称;

(ii)执行必要的计算,可能涉及训练过的神经模型,并更新程序状态以获得输出变量的名称和值;

(iii)使用HTML方式以可视方式总结该步骤的计算(用于创建visual rationales)。要向VISPROG添加新模块,只需要实现并注册一个模块类,程序的执行使用该模块将由VISPROG解释器自动处理。

visprog_Python_02

VISPROG中的程序生成

VisProg通过向LLM GPT-3提供指令及其相关的示例指令和对应程序,来生成程序。与以前的方法如神经模块网络(Neural Module Network)不同,VisProg利用大规模语言模型的上下文学习能力来生成程序,而不是使用预先定义的模块。这使生成的程序更加灵活且能够处理更多的组合式视觉任务。

visprog_Visual_03

可解释性

VisProg不仅生成高度可解释的程序,还通过将每个步骤的输入和输出的摘要拼接在一起生成visual rationales,以帮助理解和调试程序执行期间的信息流。下面是两个visual rationales的示例。

使用自然语言进行图像编辑

visprog_人工智能_04

关于图像对的推理(自然语言视觉推理) 

visprog_Python_05

结果可视化

在组合式视觉问答、基于零样本的图像对推理(仅使用单张图像VQA模型)、实际知识对象标记和语言引导的图像编辑等复杂视觉任务上展示了VisProg。下图展示了VisProg在对象标记和图像编辑任务上的能力。

更多关于所有任务的定性结果以及相应的视觉说明,包括由于程序生成中的逻辑错误或模块预测错误而导致的失败案例,请根据下面链接下载查阅:https://openaccess.thecvf.com/content/CVPR2023/supplemental/Gupta_Visual_Programming_Compositional_CVPR_2023_supplemental.zip