CNN 的负面训练图像示例

Negative Training Image Examples for CNN

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

效果还不错。如果我展示一张尚未见过的椅子图像,它很可能 class 被如此化,汽车图像也是如此。我的问题是,不显示任何这些 classes 的杂项图像的结果通常对一个随机 class 显示非常高的置信度 (=1)(这对于单边训练数据并不奇怪但对我的应用程序来说是个问题)。我考虑过不同的解决方案:

1) 添加第三个 class 以及大约 1000 个负面示例,显示除了椅子和汽车之外的任何物体。

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

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

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

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

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

您不想将所有反例混为一谈的一个普遍原因是它们可能过于多样化。如果你有一个 class A,其特征值在某个尺度上 [-1,+1] 范围内,反例 B [-2,-1] 和 C [+1,+2],将 B 集中和 C 一起为与真实范围重叠的反例创建范围 [-2,+2]。给定足够的数据和足够强大的 classifier,这不是致命的,但例如 SVM 可能会严重失败。