假设我想训练一个CNN来检测图像是否为汽车。
选择“非汽车”数据集有哪些最佳实践或方法?
因为这个数据集可能是无限的(基本上是任何不是汽车的东西) – 是否有关于数据集大小需要的指导方针?它们应该包含与汽车非常相似但不是汽车的物体(如飞机、船只等)吗?
回答:
就像所有监督式机器学习一样,训练集应该反映模型将要处理的真实分布。神经网络基本上是一个函数近似器。你的实际目标是近似现实世界的分布,但在实践中只能从中获取样本,而这个样本是神经网络唯一能看到的东西。对于训练流形之外的任何输入,输出只是一个猜测(另见AI.SE上的讨论)。
因此,在选择负数据集时,你首先应该回答的问题是:这个模型的可能用途是什么?例如,如果你在为智能手机构建一个应用,那么负样本可能应该包括街道视图、建筑和商店的图片、人、室内环境等。不太可能从智能手机相机中得到的图像是野生动物或抽象画,即在你的真实分布中这是不太可能的输入。
包含看起来像正类别的图像(卡车、飞机、船只等)是个好主意,因为低卷积层特征(边缘、角落)将非常相似,重要的是神经网络能够正确学习重要的高层次特征。
一般来说,我会使用5到10倍于正样本的负样本图像。CIFAR-10是一个很好的起点:在50000个训练图像中,5000个是汽车,5000个是飞机,等等。事实上,构建一个10类分类器并不是一个坏主意。在这种情况下,你可以通过设定阈值,将这个CNN转化为一个二元分类器,阈值是CNN对推断类别为汽车的确定性。任何CNN不确定的东西都将被解释为不是汽车。