使用CNN进行二元图像分类 – 选择“负”数据集的最佳实践?

假设我想训练一个CNN来检测图像是否为汽车。

选择“非汽车”数据集有哪些最佳实践或方法?

因为这个数据集可能是无限的(基本上是任何不是汽车的东西) – 是否有关于数据集大小需要的指导方针?它们应该包含与汽车非常相似但不是汽车的物体(如飞机、船只等)吗?


回答:

就像所有监督式机器学习一样,训练集应该反映模型将要处理的真实分布。神经网络基本上是一个函数近似器。你的实际目标是近似现实世界的分布,但在实践中只能从中获取样本,而这个样本是神经网络唯一能看到的东西。对于训练流形之外的任何输入,输出只是一个猜测(另见AI.SE上的讨论)。

因此,在选择负数据集时,你首先应该回答的问题是:这个模型的可能用途是什么?例如,如果你在为智能手机构建一个应用,那么负样本可能应该包括街道视图、建筑和商店的图片、人、室内环境等。不太可能从智能手机相机中得到的图像是野生动物或抽象画,即在你的真实分布中这是不太可能的输入。

包含看起来像正类别的图像(卡车、飞机、船只等)是个好主意,因为低卷积层特征(边缘、角落)将非常相似,重要的是神经网络能够正确学习重要的高层次特征。

一般来说,我会使用5到10倍于正样本的负样本图像。CIFAR-10是一个很好的起点:在50000个训练图像中,5000个是汽车,5000个是飞机,等等。事实上,构建一个10类分类器并不是一个坏主意。在这种情况下,你可以通过设定阈值,将这个CNN转化为一个二元分类器,阈值是CNN对推断类别为汽车的确定性。任何CNN不确定的东西都将被解释为不是汽车。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注