图像分类中,类别个数不均匀,相差很大,该怎么处理?

我有1000个类别,但是每个类别搜集的样本个数不一,有的类别几万个,有的才十几个。
问题:
1. 这些类别个数不一致,差别很大的时候,会对分类结果造成影响么?影响多大?为什么会影响?
2. 对于这种类别个数不一致的问题,该如何去解决呢?数据增强?还是说调节一些参数?Softmax么?怎么调?
已邀请:

星空下的巫师 - https://github.com/shicai/Caffe_Manual

赞同来自: caffe 李扬 zeakey prime coolwyj

@zeakey, 楼上给的代码是我写的,我稍微解释下。
这份代码主要面向的是两分类问题的样本不均衡问题。
在我们的实际项目中,经常会遇到这样的问题,比如检测的后处理去误检,需要区分人脸和非人脸,或者车辆和非车辆,然后把负样本过滤掉。
 
考虑到以下两个方面:
(1)获得正样本的代价很大:正样本通常是需要标定的,数量也是有限的,负样本则可以从无关图像中不断crop,想要多少就有多少;
(2)正样本如果被分错,代价也很大:比如人脸检测后,你做去误检,少过滤掉一点误检影响可能不大,但是你把真正的人脸分错了,当成了负样本过滤掉,那影响就很大;
由于正负样本获得的代价完全不一样,正负样本分错类的代价完全不一样,所以,对于正样本和负样本分错的loss,也要分开处理。
于是,我们会给正负样本加不同的权重,如果正样本分错受到的惩罚,会比负样本分错的惩罚加重很多,使它的loss就会变得相对更大,这样尽量减少分错正样本,详细大家可以看代码。
 
回到问题本身,多分类问题的样本不均衡,今年ImageNet Places2的场景分类任务就是这种情况。
林宙辰老师获得了第一名,他们的论文给出了一个class-aware sampling策略,可以提升分类正确率。
详细可以看论文:http://arxiv.org/abs/1512.05830
 

辛淼 - CaffeCN社区创始人

赞同来自: prime zeakey

可以参考一下这篇文章,从几个方面讲了解决样本不均匀的问题:
《Training Cost-Sensitive Neural Networks with Methods Addressing the Class Imbalance Problem》
比如,可以对类别做惩罚,比如cost-sensitive loss
星空下的巫师 这位朋友编写了Weighted_Softmax_Loss,你可以尝试一下
地址是:https://github.com/shicai/Weighted_Softmax_Loss
与cost-sensitive loss的原理类似
 
还有很多其他的办法

zeakey - please visit my homepage: zhaok.xyz

赞同来自: anan1205

楼上几位讲了在样本上做 augmentation 来解决这类问题的方法,我讲一个在 loss 上去修正这种 bias 的方法.
 
如果你的训练样本在类间存在很大的不均等(bias),可以通过给不同类别的样本产生的 loss 加权的方式去 balance 这种 bias.
 
以二分类为例,如果你的样本中0 label 特别多,而1 label 很少,这样会导致模型最后将所有样本预测为0,以保证整体 loss 最小.
 
为了 解决这个问题,在 loss 上加权,
loss  = count1 / (count1 + count0) * loss0 + count0/ (count1 + count0) * loss1
 
上式中 loss1表示 label1 的样本产生的 loss,loss0 同理.
 
这样最终的 loss 会 balance 掉样本不均带来的 bias.
 
这个方法在我们做边缘检测的试验中使用过,因为边缘点和非边缘点存在很大的 bias, 实验证明这种 biased loss对结果影响很大.
 
___________
我昏,楼上辛同学所讲的就是我要说的,而且给的代码也是我们实现过的,不过我看了下它的 weighted_softmax_loss 是初始化一个固定的 weight, 当时我的实现是根据样本类别数目根据上面的式子自动的计算 weight.

薛云峰 - 工程问题找我

赞同来自:

一.可以采用数据少的数据集里面数据增广的方式:
1.图像crop
2.图像旋转
3.图像平移
二.可以采用修改损失函数的方式,在数据量小的样本上增大权重
样本数量差别很大,会导致少样本的类别基本不被预测到,就像传统机器学习一样。
参数调节个人感觉主要在损失函数的计算上。
 
 

要回复问题请先登录注册