©作者 | 张傲
单位 | 新加坡国立大学
研究方向 | 多模态学习
宣传一下我们在 ECCV 2022 Oral(2 accept, 1 weak accept)的论文“Fine-Grained Scene Graph Generation with Data Transfer”!本回答主要内容包括对于 Scene Graph 现有问题的介绍 ( 标题里的精神内耗 ),我们的方法。最后是关于 场景图生成(SGG)领域的一些感受 。
https://arxiv.org/abs/2203.11654
代码链接:
https://github.com/waxnkw/IETrans-SGG.pytorch
Scene Graph Generation介绍
Scene Graph Generation(SGG)旨在检测图像中的(主, 谓, 宾)三元组。如下图:
▲ 场景图生成任务介绍
问题
从效果来看,现有的 SGG 模型生成的场景图仅仅能在少数几个头部做出正确预测。以最常用的 50 类 谓语分类(Predicate Classification)任务为例子,一个正常训练的 Neural Motif 模型仅仅能在 21 类 上面做出正确预测。具体效果:
▲ 拉垮的SGG模型
然而,类似于 on,under 这样的关系过于简单,很难为下游任务提供有用的信息。随便找一个 caption 模型都能达到类似甚至更好的效果。
所以,为什么效果如此拉垮?在本文中中,我们主要讨论了两个原因。第一个是老生常谈的长尾分布问题。在此不多加赘述。第二个则是我们想重点强调的一个问题 “标注冲突” 。标注人员为了省力,在很多情况下会把 riding on 这样的细粒度关系标注为 on 这样的粗粒度关系。也就是说,一大批细粒度类别都被同时标注为了自己+粗 粒度版本。
假设某个关系 A,有 1/2 的数据被标注为了对应的粗粒度类别B。这就意味着,对于 A 这个类别在训练时,会有 一半的时间认为 A 是对的 ,另一半时间认为 B 是对的 。这种情况下,即便加了 reweighting,rebalancing 之类的方法, 也无法改变模型在冲突的标注上搞优化这一事实 。这也就是我们说的属于 SGG 模型的 “精神内耗” 。
方法
▲ 方法简介
既然所有问题都来源于数据,我们的方法就是 直接修改标注数据 。首先对于粗粒度和细粒度的标注冲突,我们会从粗粒度往对应的细粒度转移数据。此外,SGG 数据集还有一个特点,就是 partially labeled。很多无标注的物体对,并不是没有关系,而是漏标了。所以我们不光可以从粗粒度到细粒度转移数据,还可以从无标注到有标注转移数据来做尾部数据的数据增强。
3.1 内部转移
我们通过 在训练集 上 inference 一个训练好的模型发现:即便在训练集上,细粒度的关系也会非常容易被对应的粗粒度关系打败。比如在下图中,所有被标注为(man, riding, motorcycle)的数据预测得分最高的并不是 riding,而是 on。
▲ 训练集(man, motorcycle)之间常见关系得分的混淆矩阵
这恰好给我们提供了一个切入点。我们会在训练集上发现这些易混淆的谓语对,比如 riding 和 on。更严谨一点,给定一类关系三元组(比如,man riding motorcycle),我们会在训练集上收集所有该类型的数据,然后用训练过的 SGG 模型打分。如果某些预测关系比 Ground-Truth 的标注得分还要高,我们则认为这些关系对于我们的 Ground-Truth 关系来说是易混淆的关系。
▲ 内部转移方法示意图
但是,易混淆并不意味着就是粗粒度-细粒度关系。所以,我们通过定义了一个吸引指数来进一步判断他们是否构成一个合格的粗粒度-细粒度关系对。具体细节可以参照论文。最后,我们简单粗暴的从粗粒度关系向细粒度关系转移了
% 的数据。
3.2 外部转移
外部转移大致上 follow 了我们之前的 Visual Distant Supervision 的形式。基本的想法是对未标注 + bounding box 有重叠的 object pair 用模型重新打分,选取其中最可能有关系的前
% 数据转移为有标注数据。同时为了更专注于尾部数据,我们仅仅对前 15 类之外的类别做增强。
最后两部分增强的数据,我们会直接组合起来作为一个增强数据集。
新数据集
我们总共验证了两个 benchmark。一个是最常用的 50 类关系的 VG 数据集,为了方便,我们在论文中简称 VG-50(其他论文里也有叫 VG-150, VG-200 的)。此外,我们还为大规模的关系检测专门划分了一个新的benchmark VG-1800。
更可靠!
VG-1800 旨在为大规模关系检测的评测服务。我们
手动过滤掉
了不合理的关系,比如一些拼写错误,名词,形容词。此外,通过观察过之前基于 VG 的大规模 SGG 数据集(VG8K,VG8K-LT),我们发现很多关系只存在于训练集,
测试集一个也没有
,或者测试集仅仅有一个两个。考虑到这一点,我们确保了测试集上每一种关系
至少 5 个
sample,训练集上每种关系至少 1 个 sample。
更丰
富
!
VG1800 包含了更加丰富的关系类别:
更有挑战!
首先,在 VG1800 中,之前提及的长尾部分和标注问题带来的优化冲突变得更为严重。这也导致
现有的 resampling 和 reweighting 会比较难用
。如果有小伙伴仔细看了论文,可能会发现我们在 VG50 中应用了 reweighting 来做方法增强,但在 VG1800 上面却没有采用。这是由于 VG1800 过于悬殊的头尾类别数量导致常规的 reweighting factor 难以 work。一些常规的
或者
会直接导致模型过于关注于标注稀疏且高噪音的尾部类别,从而使得模型的识别能力大幅度下降,严重情况下甚至不收敛。但如果猛调 reweighting factor 的 temperature 可能又会造成低效。
实验
在 VG-50 上,我们验证了方法的通用性+有效性。
可以看出我们的方法可以比较有效的提升 mR 指标。
在 VG-1800 上面,我们进一步验证了我们方法的效果。
当别人只能做出 37 个正确预测的时候,我们可以做出 467 个正确预测。
具体到实际效果,我们的模型可以说出更多样的关系类型:
▲ 原始Motif和我们的IETrans增强版模型在VG1800 PREDCLS任务上的对比
展望未来
展望一下未来,简单讨论一下我自己觉得比较有意思的一些未来方向。
场景图生成这个任务作为一个检测任务,我觉得可以搞的地方无非就是两点:
定位+分类
。我下面会从方法层面和任务层面重点讨论一下
分类方面
。
6.1 方法层面
我觉得
数据为中心的方法创新
是一个非常有前景的方向。我们这里以
SGG 中存在的标注问题为例子
。首先,我们可以把这些标注问题划分为两类:一类是
partially label
,另一类是
noisy label
。
其中 partially label 指的是标签标注不全。
比如我们提到的标注冲突,其实就是指在 SGG 这个多标签分类任务中只标注了部分单标签。内部转移也就是为粗粒度标签标注部分扩展出漏标的细粒度标签,然后使用更重要的细粒度标签做监督。而我们的外部转移则是尝试利用 NA 数据中漏标的部分。
Noisy label 则主要指标注错误。
对于 VG 这样一个巨大的数据集,其中其实包含了大量的标注噪音。比如错误的关系标注; 很多物体被重复标注了多个 bounding box。
数据上的特点(充足+标注问题+长尾)+评价指标(重视 mR)选取其实也为我们做 research 带来了一点好处:
那就是 SGG 任务难以被预训练模型直接刷爆。
我相信很多做 VL 多模态的同学都会发现,当各种大模型(e.g. BEIT v3)横空出世之后,似乎 VL 相关的榜单(e.g. VQA)已经没有非预训练模型的位置了。但是对于视觉关系检测来说,预训练模型(我们试过 finetune VinVL)确实可以带来一定的增益,比如 PREDCLS 上 mR@100 从 17、18->20。但显然 20 这个 performance,还不如加一个 reweighting 来缓解长尾分布管用。
其次,数据层面的方法创新和之前方法
一定程度上是正交
的。数据层面的方法创新不光可以辅助不同模型,还可以进一步装备分布调整的方法,比如 reweighting。这极大程度的避免了,别人出了新模型,我就不是 SOTA 的尴尬状况。此外,这个方向刚刚还比较稚嫩,会比较容易做出改进。比如,我们的内部转移就是非常粗暴的对所有类别定了一个百分比来做转移,看起来毫无技术含量。。。
最后,
这些数据层面的方法创新是可以扩展到其他 VL 领域的。
就近来说,我们可以探索其他大规模检测任务中的 partially label+noisy label 问题,比如 LVIS 数据集的大规模 Instance Segmentation。往远了说,VQA 当中一样存在着严重的 partially label 问题。当我们问大海里有多少水。显然 a lot of,lots of,much 都是表达一样的意思,但我们往往只能标注出一小部分。
插一个现象,这种高度 partially labeled 数据,我们甚至难以过拟合(VG 训练终止时 train set 准确率<75%)。再远一点,我们考可以虑 VL 预训练。一个很好的例子就是 BLIP,BLIP 通过进一步清洁数据取得了很好的效果。
6.2 任务层面
我认为一个好的任务起码需要具备两个特点,一个是
有用
,一个是
能提供丰富的工作岗位。
首先从有用角度来讲,我觉得现有 SGG 在两点上有比较大的欠缺,
一个是精准,一个是细粒度。
精准指的是精准的定位+正确的分类。以精准的定位为例子,我觉得最近的 Panoptic Scene Graph Generation 就是一个很好的扩展。这里我们不多加赘述。
我们主要想分析一下
细粒度
。其实图像中显著物体粗粒度的物体+关系,用预训练模型已经可以做的相当好了。我们只要搞个模型生成一下 caption 很大程度上就足够 cover 了。
那为什么我们还要继续做 SGG 呢?我认为,SGG 必须要做到预训练模型做不到的东西,
而超级细粒度的分类就是一个选项
。我们要让 SGG 模型去说出预训练模型说不出的词汇。当预训练模型只能说“cloud in the sky”,“toy on the table”,我们可以说出(cloud, floating through, sky),(teddy bear, sitting on, dining table)。我还要
让 SGG 模型去检测被预训练模型忽视的关系(非显著区域)
。
比如,当我们面对下图提问问兔子手里拿的是什么时?预训练模型(OFA-base)会倾向于回答梳子,但如果我们可以检测到(兔子,拿着,篮子)这样的关系,就可以很大程度避免预训练模型犯错误。
所以我们本文当中非常认真的搞了一个大规模 SGG 的 VG-1800 benchmark。
其次,我认为大规模的细粒度的 SGG 可以提供很多工作岗位,
也就是有很多东西可以(平民化的)做
。最简单的,可以参考 6.1 中提及的数据问题,去搞一些数据为中心的方法创新。此外,按照我们 6.1 中分析的,大规模细粒度 SGG 难以被预训练模型直接替代,但这恰好提供给我们去做定制化 adaption 的机会。VG-1800 当中有大量的关系只有个位数级别的标注数据,无论数据如何増广都难以达到很好的效果。于是,借助预训练模型去做一些 prompt 之类的方法就成了一个比较有有意思的搞法。
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读 ,也可以是学术热点剖析 、科研心得 或竞赛经验讲解 等。我们的目的只有一个,让知识真正流动起来。
📝 稿件基本要求:
• 文章确系个人原创作品 ,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬 ,具体依据文章阅读量和文章质量阶梯制结算
📬 投稿通道:
• 投稿邮箱: hr@paperweekly.site
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02 )快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
🔍
现在,在「知乎」 也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」 订阅我们的专栏吧