CVPR 2021 | 让机器想象未见的世界!反事实的零次和开集识别

点击下方卡片,关注“CVer”公众号

AI/CV重磅干货,第一时间送达

作者:斑头雁 |  本文已授权(源:知乎)

https://zhuanlan.zhihu.com/p/365089242

本文主要介绍我们组被CVPR 2021接受的论文Counterfactual Zero-Shot and Open-Set Visual Recognition。在这里感谢一下 @王谭的通力合作。

论文:https://arxiv.org/abs/2103.00887

代码:https://github.com/yue-zhongqi/gcm-cf

现有的零次学习和开集识别中,见过和未见过类别间识别率的严重失衡,我们发现这种失衡是因为对未见过类别样本失真的想象。我们提出了一种反事实框架,通过基于样本特征的反事实生成保真,在各个评估数据集下取得了稳定的提升。主要优势:

  1. 我们提出的GCM-CF是一个见过/未见过类别的二元分类器,二元分类后可以适用任何监督学习(在见过类别上)和零次学习算法(在未见过类别上);

  2. 所提出的反事实生成框架适用于各种生成模型,例如基于VAE、GAN或是Flow的;

  3. 提供了一种易于实现的两组概念间解耦的算法

接下来我会具体的来介绍我们针对的任务,提出的框架,和对应的算法。文章导视:

  • 第一节:零次学习和开集识别

  • 第二节:反事实生成框架

  • 第三节:提出的GCM-CF算法

  • 第四节:实验

第一节:零次学习和开集识别

很多人都认识羚羊和貘这两种动物(如上图所示),那么一个鼻子像貘的羚羊长得什么样呢?可能大家能想象出来一个类似于图右的动物(它叫高鼻羚羊)。在上面的过程中,我们就是在做零次学习(Zero-Shot Learning, ZSL):虽然我们没见过高鼻羚羊,但是通过现有的关于羚羊和貘的知识,我们就能想象出来这个未见类别的样子,相当于认识了这个动物。事实上,这种将已有知识泛化到未见事物上的能力,正是人能够快速学习的一个重要原因。

我们再来看一个路牌的例子,我们很容易就认出左边的两个路牌是熟悉的、见过的,而右边的则是一个很奇怪的没见过的路牌。人类很容易就能完成这样的开集识别(Open-Set Recognition, OSR),因为我们不仅对于见过样本的熟悉,也有对未知世界的认知能力,使得我们知道见过和未见之间的边界。

在机器学习当中,这两个任务的定义如上图所示。零次学习训练集提供类别集合  上面的图片,除了每张图片的类别标签,每个类别还额外有一个属性特征(attribute)来描述这个类的特点(比如有翅膀,圆脸等等),测试的时候有两种设定:在Conventional ZSL下全部是未见类别  中的图片(  ),并且测试的时候也会给定  类别的dense label,而在Generalized ZSL中测试集会有  和  中的图片。开集识别的训练集则和普通的监督学习没有差别,只是在测试的时候会有训练未见过类别的样本,分类器除了正确识别见过的类,还要将未见过的类标成“未知”。

现有的ZSL和OSR的主要方法是基于生成的,比如ZSL中用未见类别的属性特征生成图片,然后在image space进行比较。然而生成模型会自然的偏向见过的训练集,使得对于未见类别的想象失真了(这其实是因为属性特征的entanglement,这里我不详细展开,大家可以参考一下论文)。比如训练的时候见过大象的长鼻子,而去想象没见过的貘的长鼻子的时候,就会想象成大象的鼻子。下边的图展现了这种失真:红色是训练集里面的样本,蓝色是ground-truth的未见过类别的样本,绿色是现有方法对未见过类别的想象,这些想象已经脱离了样本空间,既不像见过的类,也不像没见过的类(绿色的点偏离了蓝色和红色的点)。这就解释了为什么见过和未见过类别的识别率会失衡了:用绿色和红色样本学习的分类器(黑色虚线)牺牲了未见过类的recall来提高见过类的recall。

第二节 反事实生成框架

那么如何在想像的时候保真?我们来思考一下人是怎么想像的:在想像一个古代生物的样子时候,我们会基于它的化石骨架(图左);在想象动画世界的一个场景的时候,我们会参考现实世界(图右)。这些想象其实本质是一种反事实推理(counterfactual inference),给定这样的化石(fact),如果它还活着(counterfact),会是什么样子呢?给定现实世界的某个场景,如果这个场景到了动画世界,它是什么样子呢?我们的想象,通过建立在fact的基石上,就变得合情合理而非天马行空。

那么可否在ZSL和OSR当中利用反事实产生合理的想象呢?我们首先为这两个任务构建了一个基于因果的生成模型Generative Causal Model (GCM),我们假设观测到的图片  是由样本特征  (和类别无关,比如物体的pose等)和类别特征  (比如有羽毛,圆脸等)生成的。现有的基于生成的方法其实在学习  ,然后把  的值设为某个类的特征(比如ZSL中的dense label),把  设成高斯噪声,就可以生成很多这个类的样本了。

反事实生成和现有生成模型的最大区别就是基于了特定的样本特征  (fact)来进行生成,而非高斯噪声。具体过程如上图所示,对于一个图片  ,我们通过encoder  拿到这个图片的样本特征  (比如front-view,walking等),基于这个样本特征 (fact)和不同的类别特征  (counterfact),我们可以生成不同类别的反事实图片  (front-view,walking的猫,羊和鸡等等)。直觉上我们知道,因为反事实生成的猫、羊和鸡的图片和  不像, 那么  肯定不属于这三个类别。这种直觉其实是有理论支持的---叫做反事实一致性(Counterfactual Consistency Rule),通俗的解释就是counterfact和fact重合时,得到的结果就是factual的结果,比如fact是昨天吃冰淇凌拉肚子,那么反事实问题“如果我昨天吃冰淇凌会怎么样呢?”的答案就是拉肚子。如何通过consistency rule解决ZSL和OSR呢?

第三节 GCM-CF算法

我们的GCM-CF算法流程由上图概括,它本质上是一个基于consistency rule的二元分类器,去判断某个样本是属于见过还是没见过的类。

训练的时候我们学习一个GCM(训练过程等下会具体讲)。测试的时候,对于每个样本  ,我们用上一节介绍的步骤进行反事实生成:用这个样本自己的  ,拼上不同的类别特征  ,然后用  生成  。这样生成的样本可以证明是“保真”(Counterfactual Faithful)的,也就是在样本空间里面,那么我们就能够用样本空间当中的量度去比较  和生成的  ,从而用consistency rule判断  是属于见过的还是没见过的类。

具体到任务中,在ZSL里面,我们用未见过类别的attribute(图中  )生成反事实样本,然后用训练集的样本(见过的类)和生成的样本(未见过的类)训练一个线性分类器,对输入样本  进行分类后,我们取见过类和未见过类概率的top-K的平均值。如果未见过类上的平均值较小,我们就认为样本  不像未见过的类(not consistent),把这个样本标注成属于见过的类,并使用在见过类的样本上面监督学习的分类器来分类(这其实是基于consistency rule的换质位推理,具体见论文);反之如果consistent,就标注为为见过的类,然后用任何Conventional ZSL的算法对其分类。在OSR里面,因为没有未见类别的信息,我们用见过类的one-hot label(图中  )作为  生成反事实样本,如果  和生成的样本在欧式距离下都很远(not consistent),就认为  属于未见过的类,并标为“未知”,反之则用监督学习的分类器即可。

可以看到算法的核心要求是生成保真的样本,这样才能用consistency rule做推理。这个性质可以由Counterfactual Faithfulness Theorem来保证,简单来说就是:保真生成的充要条件是样本特征和类别特征之间解耦(disentangle)。我们通过三个loss实现:

1.  -VAE loss:这个loss要求encode得到的  ,和样本自己的  ,可以重构样本  ,并且encode出来的  要非常符合isotropic Gaussian分布。这样通过使  的分布和  无关实现解耦;

2. Contrastive loss:反事实生成的样本中,  只和自己类别特征生成的样本像,和其他类别特征生成的样本都远。这个避免了生成模型只用  里面的信息进行生成而忽略了  ,从而进一步的把  的信息从  里解耦;

3. GAN loss:这个loss直接要求反事实生成的样本被discriminator认为是真实的,通过充要条件,用保真来进一步解耦。

第四节 实验

在介绍实验前,值得注意的是ZSL常用的Proposed Split官方给的数据集之前有一个数据泄露的bug,这使得一些方法在见过类别(S)的表现特别高。去年的时候官方网站上放出了Proposed Split V2,解决了这个bug。我们下面的实验都是在改过的数据集上跑的。

减轻见过和未见过类别识别率的失衡:下面的tsne显示了反事实生成的结果,可以看到通过condition样本特征(蓝星是未见类的样本,红星是见过的),生成的未见类别的样本确实保真了(在蓝点中间),得到的decision boundary(黑线)也balanced了。这在ZSL的4个常用数据集上也体现了出来,我们的方法大幅提高了未见类别(U)的准确率,从而使得整体的准确率H(harmonic mean)提高了,达到了SOTA的表现。现有的方法其实也有一个简单的解决失衡的办法,就是直接调整见过类别的logits,通过改变调整的幅度,我们可以得到一个见过类别和未见过类别的曲线,可以看到我们的方法(红线)在各个调整幅度下都更高,说明它能从根本上减轻失衡,这是简单的调整所不能完成的。

强大的见过/未见过类别的二元分类器:我们的方法能够适用任何的Conventional ZSL算法,我们测试了inference-based的RelationNet,和三个基于不同生成网络的generation-based的方法,发现加上我们的方法都获得了提高,并且超过了用现在SOTA的TF-VAEGAN作为见过/未见过的分类器的表现。

强大的开集分类器:我们在常用的几个数据集上做了开集识别的实验(用的F1指标),并取得了SOTA的表现。因为开集识别中未见过类别的数量是未知的,所以好的分类器必须在数量少和多的情况下都好,在右图中我们画了F1分数和未见过类别的数量(从少到多)的曲线,我们的方法(蓝色)在每个情况下都是最好,并且在未见类别很多的时候(蓝色曲线末尾)F1基本没有下降,体现了较强的鲁棒性。

结语

这篇工作是我们对于解耦表示(disentangled representation)的一点点探究和摸索,把难以实现的所有factor full disentangle,放宽成为两组概念(样本特征和类别特征)之间的group disentangle,并借着disentangle带来的faithfulness性质,使我们提出的反事实生成框架变为可能。这也从一个侧面反映了解耦是因果推理的一个重要的前提,当不同的概念被区分开(比如解耦的表示)时,我们就可以基于它们之间的因果关系进行推理,得到鲁棒、稳定、可泛化的结论。

我也看到一些对于解耦的悲观或是质疑,确实,目前就连解耦的定义都没有统一的定论,更不要说方法、evaluation等等了。但这些困难也是可预见的:解耦在帮助机器跨越一个层级,从学习观测中的规律,到探究生成这些观测的原因---就像人知道太阳每天会升起的规律是容易的,但明白为什么太阳会升起却花了几千年。这里也鼓励大家多多关注、探索解耦这个领域,说不定带来下一个突破的就是你啊 。

最后附上我们论文的引用:

@inproceedings{yue2021counterfactual,
 title={Counterfactual Zero-Shot and Open-Set Visual Recognition},
 author={Yue, Zhongqi and Wang, Tan and Zhang, Hanwang and Sun, Qianru and Hua, Xian-Sheng},
 booktitle= {CVPR},
 year={2021}
}

后台回复:CVPR2021,即可下载CVPR 2021论文和代码开源的论文合集

后台回复:Transformer综述,即可下载最新的两篇Transformer综述PDF

重磅!Transformer交流群成立

扫码添加CVer助手,可申请加入CVer-Transformer 微信交流群,方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch和TensorFlow等群。

一定要备注:研究方向+地点+学校/公司+昵称(如Transformer+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群

▲长按加小助手微信,进交流群

▲点击上方卡片,关注CVer公众号

整理不易,请给CVer点赞和在看

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值