阿里天池之江杯零样本图像目标识别Top1%方案分享

比赛结束了一周多了,历时近三个月,也是我第一次做零样本识别。名次是32/3224,虽然不太满意,但学到了很多东西。在这篇博文做一次总结,并将公开我们的代码。

零样本识别概念

零样本识别不同于传统的分类识别,传统的分类识别所有的label以及每个label对应的图像都可以用来训练,而且训练一个较好的分类器通常需要大量的训练图像。零样本识别的训练集并不包含测试集的label,因此需要识别一个从来没有见过label。但是,仅仅使用不包含测试集label的训练集去训练网络并不能对未知类别进行分类,因此需要其他的先验知识:Arrtibute 和 word embedding。虽然训练集不包含任何关于测试集的信息,但是Attribute 和 Word embedding包含有测试集的信息。 Attribute描述的是测试集每类的特征,例如,Attribute包含:是否是动物、是否是家具、蓝色、紫色…当这个测试集的label属于这个属性,则这个属性置1。而word embedding根据测试集的单词,用统计的方法或者语言模型的方法来生成,属于NLP的内容。因此,做零样本的一种常规步骤是:

  1. 训练CNN网络用来提取特征。
  2. 训练zero-shot部分完成CNN特征与word embedding类别的映射。

比赛采用的方法

比赛采用CVPR2018论文的方法:
Learning to Compare: Relation Network for Few-Shot Learning
这篇论文最大的特点是: CNN特征与Attribute特征concatenate后使用全连接来建立两者之间的关系。
之前最早使用的DEM:
Learning a Deep Embedding Model for Zero-Shot Learning。 这篇论文中,对CNN特征和Attribute特征做差值求平均,寻找最小的差值来实现对类别的判断。这种方法相当于将Attribute域映射到CNN特征域,进而寻找最接近的CNN特征域的特征。这种方法的缺陷在于Attribute与CNN的关系通过求差值而得到,而不是学习来的。可以参考的代码地址:https://github.com/wpwei/ZJL_zero_shot_learning_competition
但是Relation Network将CNN特征和Attribute特征concatenate到一起,使用全连接实现对未知类别的分类。CNN特征和Attribute特征连接在一起再用FC学习两者之间的关系,可以更好地实现关系的匹配。而不是限制在用差值来寻找最接近的类别。参考代码地址:https://github.com/lzrobots/LearningToCompare_ZSL
因此,本次比赛采用Relation Network的方法实现。
基本操作相似,没有非常大的变化。其中,修改了CNN特征在ZSL中的操作。之前是使用CNN提取到2048维向量,再与Attribute网络用FC得到的2048维向量做concatenate,但是我们发现,在CNN提取到的2048维向量之后再加一个全连接FC,再输出一个2048维向量,会有更好的效果。我们对此的解释是:原本是Attribute提取到的特征映射到CNN特征域,但是这样就太过于受限。CNN特征域后加入一个FC,可以实现将CNN特征域映射到另一个域下,同时Attribute也一起映射到该域下。这种做法不会受限于CNN提取到特征的影响,因此有更好的效果。

阿里天池之江杯零样本图像目标识别Top1%方案分享_第1张图片
最后,比赛的代码如下:
https://github.com/KaiJin1995/ZSL2018_Zero_Short_Learning

你可能感兴趣的:(zero,short,learning)