关于图片的多标签分类(1)

最近还在处理人脸附件(眼镜,刘海,口罩,帽子)的multi-label分类。给自己普及一下常识性问题:

1)什么是multi-label分类?

multi-label分类,常见一张图片中可以存在多个目标,如猫,狗,人。这样这张图片就有三个标签;

2)multi-label分类和multi-class 分类?

multi-class 分类,就是将多种类别的图片进行类别分类,与multi-label 分类样本相比较,multi-class 分类使用的每一张图片中只有1个类别,若图片中出现了其他类别,就要使用multi-label进行分类了;

3)对multi-label分类的评价指标有哪些?

  • Mean average Precision(MAP):对每个类别取得的precision取平均,就是ap值PR曲线下的面积,多个类别的ap取均值;
  • 0-1 exact match :图片中所有标签都预测正确的图片才算作预测正确的图片:

关于图片的多标签分类(1)

N:代表所有的图片数量,1代表一个指示函数,若预测与ground truth结果相等,则指示函数返回为1,否则为0;

  • Macro-F1:所有类别的F1-score的平均值:

关于图片的多标签分类(1)

关于图片的多标签分类(1)

关于图片的多标签分类(1)

关于图片的多标签分类(1)

C:所有类别数;关于图片的多标签分类(1):第c类的precision;关于图片的多标签分类(1):第c类的recall;

  • Micro-F1:

关于图片的多标签分类(1)

注意:Micro-F1主要受样本量多的类别影响;而Macro-F1对样本量较小的类别影响敏感;

  • per-class precision:

关于图片的多标签分类(1)

C:所有类别数;关于图片的多标签分类(1)代表第c类预测正确的数量;关于图片的多标签分类(1)代表预测得到的第c类的数量;

  • per-class recall:

关于图片的多标签分类(1)

C:所有类别数;关于图片的多标签分类(1)代表第c类预测正确的数量;关于图片的多标签分类(1)代表第c类的所有样本数量;

  • overall precision:

关于图片的多标签分类(1)

C:所有类别数;关于图片的多标签分类(1)代表第c类预测正确的数量;关于图片的多标签分类(1)代表预测得到的第c类的数量;

  • overall recall:

关于图片的多标签分类(1)

C:所有类别数;关于图片的多标签分类(1)代表第c类预测正确的数量;关于图片的多标签分类(1)代表第c类的所有样本数量;

若对上面的内容有疑问,可以查看西瓜书P30页,上面的公式来源《Learning a Deep ConvNet for Multi-label Classification with Partial Labels》,下载可参考:https://blog.csdn.net/qq_22764813/article/details/89331791

4)学习算法?

3种策略

  • 一阶策略:忽略和其它标签的相关性,比如把多标签分解成多个独立的二分类问题(简单高效)。
  • 二阶策略:考虑标签之间的成对关联,比如为相关标签和不相关标签排序。
  • 高阶策略:考虑多个标签之间的关联,比如对每个标签考虑所有其它标签的影响(效果最优)。

一阶策略常用方法:VGG,ResNet101,这是标准的CNN模型,不考虑任何标签依赖性,属于一阶策略;

高阶策略常用方法:

  • label embedding:label embedding不是一整个网络,而是网络中用于处理标签之间联系的网络一部分。

关于图片的多标签分类(1)

关于图片的多标签分类(1)

  (a) one hot encoding  

   神经网络分析
    假设我们的词汇只有4个,girl, woman, boy, man,下面就思考用两种不同的表达方式会有什么区别。
    One hot representation
    尽管我们知道他们彼此的关系,但是计算机并不知道。在神经网络的输入层中,每个单词都会被看作一个节点。 而我们知道训练神经网络就是要学习每个连接线的权重。如果只看第一层的权重,下面的情况需要确定4×3个连接线的关系,因为每个维度都彼此独立,girl的数据不会对其他单词的训练产生任何帮助,训练所需要的数据量,基本就固定在那里了。

    我们这里手动的寻找这四个单词之间的关系 f 。可以用两个节点去表示四个单词。每个节点取不同值时的意义如下表。 那么girl就可以被编码成向量[0,1],man可以被编码成[1,1](第一个维度是gender,第二个维度是age)。  

关于图片的多标签分类(1)

那么这时再来看神经网络需要学习的连接线的权重就缩小到了2×3。同时,当送入girl为输入的训练数据时,因为它是由两个节点编码的。那么与girl共享相同连接的其他输入例子也可以被训练到(如可以帮助到与其共享female的woman,和child的boy的训练)。

    总得来说,label embedding也就是要达到第二个神经网络所表示的结果,降低训练所需要的数据量。
         label embedding就是要从数据中自动学习到输入空间到Distributed representation空间的 映射f 。

(b) CNN+RNN(CNN-LSTM)

网络框架主要分为cnn和rnn两个部分,cnn负责提取图片中的语义信息,rnn负责建立image/label关系和label dependency的模型。

关于图片的多标签分类(1)

在识别不同的object的时候,RNN会将attention转移到不同的地方,如下图:

 关于图片的多标签分类(1)

本文两个类别,“zebra” and “elephant”,在预测zebra时,我们发现网络将attention集中到zebra那块。这是一个考虑全局级别的标签依赖性,属于高阶策略。

(c)RLSD

RLSD 在CNN-RNN的基础上,加入了区域潜在语义依赖关系,考虑到图像的位置信息和标签之间的相关性,对算法进行进一步优化。

关于图片的多标签分类(1)

(d)HCP

 HCP的基本思想是,首先提取图像中的候选区域(基本上是上百个),然后对每个候选区域进行分类,最后使用 cross-hypothesis max-pooling 将图像中所有的候选区域分类结果进行融合,得到整个图像的多类别标签,其中也利用到了attention机制,如下图:

关于图片的多标签分类(1)

attention机制:像car,person,horse权重大,注意力比较高。这样做的好处是我们在训练图片时不需要加入位置信息,该算发会框出很多个框,自动调节相关标签的框权值更大,达到减弱噪音的目的。 

两种方法(基于如何将多标签分类与当前算法结合起来)

  • 改造数据适应算法:常用的比如将多标签问题转化为一个多类问题,即一张图有多个标签,将标签标注相同的图片作为一个类别,这样就将这个问题转化为单一的多类问题。缺点:当数据量类别量过多,数据就分布在[0,2^(n-1)]空间内,这样得到的某些类别的数据量会很稀疏,所以该方法不适用于类别太多的数据集。
  • 改造算法适应数据:常用比如正常输出q维数据,将其中softmax回归改为sigmoid函数,最终将f(.)大于阈值的结果输出出来。

5)multi-label分类的难点有哪些?

6)目前存在的问题?

目前多标签分类依然存在单标签分类,目标检测的问题,如遮挡,小物体识别。另外由于标签相对多存在的问题有要分类的可能性随类别呈指数性增长,rank,样本分布不均

从整体上来看,multi-label classification 由于涉及到多个标签,所以需要对图片和标签了解的信息量更多,意味着要分类的可能性呈指数型增长。

为了减少这种分类的可能性,需要考虑标签与标签,标签与图片之间的联系来降低信息量。

  • 第一 涉及到标签与标签之间的关系,也就是NLP里词语与词语之间的联系,这个是语义层次上的;
  • 第二 涉及到标签与图片之间的关系 ,就是标签与图片特征之间的联系,常用的是attention机制;

部分内容转载自:https://www.cnblogs.com/youyou0/p/10250326.html

当前自己遇到的问题:

1)人脸附件数据的不均衡,特别是刘海数据,同时在添加数据的时候,一个类别的变化会引起其他类别数量变化的连锁反应;