CNN 的负训练图像示例

Posted

技术标签:

【中文标题】CNN 的负训练图像示例【英文标题】:Negative Training Image Examples for CNN 【发布时间】:2016-08-23 13:56:45 【问题描述】:

我正在使用 Caffe 框架进行 CNN 训练。我的目标是对一些基本的对象类别执行简单的对象识别。由于预训练网络不是我提议的使用的替代方案,因此我准备了一个自己的训练和测试集,其中为 2 个类(例如椅子和汽车)中的每一个包含大约 1000 张图像。

结果非常好。如果我展示一张尚未看到的椅子图像,它可能会被归类为此类,汽车图像也是如此。我的问题是,不显示任何这些类的杂项图像的结果通常显示一个随机类的非常高的置信度(=1)(这对于单方面的训练数据并不奇怪,但对我的应用程序来说是个问题)。我想过不同的解决方案:

1) 添加包含大约 1000 个负例的第三类,显示除椅子和汽车之外的任何对象。

2) 通常添加更多对象类别,只是为了让网络将其他对象分类为此类,而不是再分类为椅子或汽车(当然,这需要付出很多努力)。也许更广泛的预测结果会在负图像上显示出更均匀的分布,从而允许基于阈值评估目标对象的存在?

因为从互联网上抓取随机图像作为反面例子并不费时,我已经用大约 1200 个反面例子测试了我的第一个解决方案。它有所帮助,但问题仍然存在,也许是因为它太少了?我担心的是,如果我增加负样本的数量,每个类的样本数量的不平衡会导致对原始类的检测不太准确。 经过一番研究,我发现一个人有类似的问题,但没有解决方案: Convolutional Neural Networks with Caffe and NEGATIVE IMAGES

我的问题是:有没有人遇到过同样的问题并且知道如何处理?您会推荐哪种方式,添加更多负面示例或更多对象类别,或者您有其他建议吗?

【问题讨论】:

【参考方案1】:

这个问题并不是 Caffe 或 ConvNets 独有的。任何机器学习技术都有这种风险。最后,所有分类器都会在某个输入空间(通常是非常高维的)中获取一个向量,这意味着它们会对该输入空间进行分区。您已经给出了两个分区的示例,这有助于估计两者之间的边界,但仅限于那个边界。两个分区都有非常非常大的边界,正是因为输入空间是如此高维。

ConvNet 确实尝试通过具有相当小的卷积核来解决图像数据的高维问题。真实的负面数据有助于训练这些,而标签并不重要。在训练卷积核时,您甚至可以使用输入图像作为目标(即将其训练为自动编码器)。

您不想将所有反例都混为一谈的一个普遍原因是它们可能过于多样化。如果你有一个类 A 具有某个范围 [-1,+1] 的某个特征值,反例 B [-2,-1] 和 C [+1,+2],将 B 和 C 混为一谈会产生一个范围 [-2,+2] 用于与真实范围重叠的反例。给定足够的数据和足够强大的分类器,这并不是致命的,但例如 SVM 可能会在此问题上严重失败。

【讨论】:

以上是关于CNN 的负训练图像示例的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenCV 中训练级联分类器的负样本图像尺寸?

如何使用未标记的图像训练 CNN?

如何在训练 CNN 期间删除重复项?

CNN基础二:使用预训练网络提取图像特征

为啥我的 CNN 预训练图像分类器过拟合?

tensorflow训练自己的数据集实现CNN图像分类