【问题标题】:Binary Image Classification with CNN - best practices for choosing "negative" dataset? [closed]使用 CNN 进行二值图像分类 - 选择“负面”数据集的最佳实践? [关闭]
【发布时间】:2018-06-22 09:44:14
【问题描述】:
比如说,我想训练一个 CNN 来检测图像是否是汽车。
选择“非汽车”数据集有哪些最佳做法或方法?
因为这个数据集可能是无限的(基本上任何不是汽车的东西) - 是否有关于数据集需要多大的指南?它们是否应该包含与汽车非常相似但又不是汽车的物体(飞机、船只等)?
【问题讨论】:
标签:
machine-learning
neural-network
computer-vision
deep-learning
conv-neural-network
【解决方案1】:
与所有监督机器学习一样,训练集应反映模型将使用的真实分布。神经网络基本上是一个函数逼近器。您的实际目标是近似真实世界的分布,但实际上只能从中获取样本,而这个样本是神经网络唯一会看到的东西。对于训练流形之外的任何输入方式,输出将只是一个猜测(另请参阅this discussion on AI.SE)。
因此,在选择否定数据集时,您应该回答的第一个问题是:此模型的可能用例是什么? 例如,如果您正在为智能手机构建应用程序,那么负样本应该可能包括街景、建筑物和商店的图片、人物、室内环境等。智能手机摄像头拍摄的图像不太可能是野生动物或抽象画,也就是说,它在你的真实世界中是不可能的输入分布。
包含看起来像正类的图像(卡车、飞机、船等)是个好主意,因为低卷积层的特征(边缘、角落)非常相似,神经网络学习很重要正确的重要高级功能。
一般来说,我会使用 5-10 倍于正面图片的负面图片。 CIFAR-10 是一个很好的起点:在 50000 张训练图像中,5000 张是汽车,5000 张是飞机,等等。事实上,构建一个 10 类分类器并不是一个坏主意。在这种情况下,您将通过阈值确定推断的类是汽车的确定性,将此 CNN 转换为二元分类器。 CNN 不确定的任何内容都将被解释为不是汽车。
【解决方案2】:
我认为应该根据您的模型适用的场合来选择负样本。如果你的模型在街道上作为汽车检测器工作,那么合理的负样本应该是街道道路背景、树木、行人以及街道上常见的其他车辆。所以我认为没有通用的负样本选择规则,只取决于你的需要。