计算机视觉,如何识别未在训练集中没有出现过的类别?

        这是知乎上的一个问题,感觉挺好的,拿过了走一些参考。


        我理解题主想问的是在开放环境下,分类模型对于unseen data的识别问题,也就是如何让分类模型对unseen data说“不知道,不认识”的问题。刚好最近也在这方面看了一些资料,尝试回答一下。

        在分类模型中,我们最常用的是softmax + Cross Entropy,神经网络的最后一层神经元数量等于训练集的总类别数,然后使用softmax将最后一层的输出归一化为一个概率分布,表示输入样本属于每个类别的置信度概率。当我们给模型输入一个不在训练集中的类别unseen data时,由于网络的最后一层使用了softmax,所以模型的最后一层依然会对这个unseen data计算得到一个概率分布,我们期望模型能给出“不知道,不认识”的结果,所以我们希望这个概率分布能接近均衡(即属于每个类别的概率比较平均)。如果训练集只包括背包和轮椅,此时输入一个行李箱进行测试,我们希望模型预测行李箱是背包或者轮椅的概率都在0.5附近。这只是理想情况下,由于softmax中使用了指数函数,在这种情况下就要求神经网络的输出层的数值要均衡,一旦出现数值的不均衡,就会导致softmax计算得到的某个类别的概率置信度很高,造成False Positive的误识别问题。

        关于如何降低分类模型对于unseen data的误识别False Positive,我暂时能想到的有以下几点:

        1、给分类模型添加一个其他类别,还是以训练集只包括背包和轮椅为例,将行李箱等类别放到其他类别中,这样训练模型时网络的输出就变成了3类。这么做的难点就是,如果模型放在开放环境中使用,大千世界,无所不有,输入到模型的可能是千奇百怪的东西,其他类别很难覆盖完全,即使覆盖完全了,其他类别和另外两个类别也会存在严重的数据均衡问题。如果是在有限的开放环境下,能大概确定其他类别的范围,这种方法最简单,也最有效。

        2、使用BCE(Binary Cross Entropy)损失函数。我们都知道分类模型又分为多分类和多标签分类,多分类就是每个样本只属于一个类别,各个类别是互斥的,多标签分类是每个样本可能同时属于多个类别,类别之间存在包含关系,比如猫又是动物。对于单标签的多分类模型,通常使用softmax + Cross Entropy,对于多标签的多分类模型,通常使用sigmoid + binary Cross Entropy。关于sigmoid + binary Cross Entropy,就是在网络的最后一层输出使用sigmoid计算样本属于每个类别的概率,还是以训练集只包括背包和轮椅为例,网络最后一层有两个神经元的输出,第一个神经元代表背包,第二个神经元的输出代表轮椅。在第一个神经元上执行sigmoid,意思就是问“你是不是背包,得到的结果就是属于背包的概率置信度”。在第二个神经元上执行sigmoid,意思就是问“你是不是轮椅,得到的结果就是属于轮椅的概率置信度”。对于输入的unseen data行李箱,执行两次sigmoid分别问“你是不是背包”和“你是不是轮椅”,模型的输出只需要回答是还是不是就行,对于unseen data,我们希望模型回答两次不是,也就代表了模型回答“不知道,不认识”。

        3、使用表征学习(度量学习)方法通过特征匹配进行分类识别。对于unseen data的样本,我们的期望很简单,就是希望模型能给出“不知道,不认识”的结论。度量学习方法将每个样本转换成一个高维特征向量(如256维或者512维),并且通过特定的损失函数进行训练,经过训练的模型,对于属于同一类的样本对positive pair,得到的高维特征向量之间具有更高的相似性(如余弦相似度)或者更小的空间距离(如欧氏距离),属于不同类别的样本对negative pair,得到的高维特征向量之间具有更低的相似性(如余弦相似度)或者更大的空间距离(如欧氏距离)。模型训练好之后,需要将每个类别采样部分样本转换成特征向量入库,当输入一个新样本进行预测时,使用模型将样本转换为特征向量,然后在特征向量库中对这个特征向量进行相似度匹配,匹配成功,则识别成功,否则,识别不成功。度量学习方法通过学习样本之间的相似性来实现对于unseen data说不的能力。

 关于度量学习的内容可以参考:

从零搭建音乐识别系统(四)embedding特征提取模型_胖胖大海的博客-CSDN博客_embedding 特征提取

度量学习DML之Circle Loss_胖胖大海的博客-CSDN博客_circleloss github

基于pytorch-metric-learning实现的度量学习模板代码:pytorch-metric-learning-template 

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值