2

我正在使用Caffe框架进行CNN训练。我的目标是为几个基本对象类别执行简单的对象识别。由于预训练网络不是我提出的用法的替代方案,所以我准备了一个自己的训练和测试集,每个训练课程包括两个班级(椅子和汽车),大约有1000个图像。CNN负面训练图片示例

结果非常好。如果我呈现一张尚未看到的椅子图像,则可能将其归类为汽车图像。我的问题是,不显示任何这些类别的杂项图像的结果对于一个随机类别(这对于单独的训练数据而言并不令人惊讶,但对于我的应用程序而言是一个问题)显示出非常高的置信度(= 1)。我想过不同的解决方案:

1)添加第三个类也有大约1000个反例,显示除椅子和汽车以外的任何物体。

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

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

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

回答

2

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

ConvNets试图通过具有相当小的卷积内核来解决图像数据的高维问题。真实的负面数据有助于培训这些人,而且标签无关紧要。在训练卷积核时,甚至可以使用输入图像作为目标(即将其作为自编码器进行训练)。

你不想包括所有反例的一个一般原因是因为它们可能太多样了。如果您在某个尺度上有一个具有范围为[-1,+ 1]的某个特征值的类A,并带有反例B [-2,-1]和C [+ 1,+ 2],则将B和C集合在一起创建对于与实际实际范围重叠的反例的范围[-2,+ 2]。给定足够的数据和足够强大的分类器,这不是致命的,但是例如SVM可能会在这方面严重失败。

相关问题