CNN的负面训练图像示例

时间:2016-04-28 16:48:45

标签: image networking machine-learning classification convolution

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

结果非常好。如果我呈现一张看不见的椅子图像,它可能被归类为这样,对于汽车图像也是如此。我的问题是,没有显示任何这些类的杂项图像的结果通常对一个随机类显示非常高的置信度(= 1)(这对于单面训练数据而言并不令人惊讶,但对于我的应用程序来说是一个问题)。我想到了不同的解决方案:

1)添加第三个类,同时还有大约1000个负面示例,显示除了椅子和汽车之外的任何对象。

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

你不想把所有的反例都搞砸的一个一般原因是因为它们可能太多了。如果你的某个特征值在某个范围内的某个特征值为[-1,+ 1]的A类,反例B [-2,-1]和C [+ 1,+ 2],则将B和C混合在一起反射实例的范围[-2,+ 2]与实际实际范围重叠。如果有足够的数据和足够强大的分类器,这不是致命的,但是例如SVM可能会严重失败。