我想训练一个分类器来区分“持有武器的人”和“未持有武器的人”。武器可以包括任何类型的武器,如左轮手枪或突击步枪。
我有一些带有武器边界框的图像。这些图像的大小各不相同。
我想做什么?
我想使用武器的边界框坐标获得的原始图像块来训练SVM分类器。对于“未持有武器的人”,我想将整个原始图像作为特征向量输入到SVM中。
限制条件:
每个边界框的大小不同,这意味着武器的大小也不同。我不能对这些边界框使用PCA,因为我认为这可能会导致信息丢失,因为图像中有三种不同尺寸的武器。有些边界框几乎覆盖了整个图像。所以首先我必须缩小图像和边界框的尺寸,否则如果我对整个图像进行PCA,我的内存会耗尽。
问题:
我如何使用不同大小的特征向量来训练SVM?换句话说,如何使所有特征向量大小相同而又不丢失信息?
回答:
由于您有不同大小的图像块,有几种方法可以使用SVM处理这些图像块的分类。这些方法各有优缺点,您需要决定哪种方法最适合您。假设您已经决定选择M x N
大小的图像块提交到SVM进行分类,您可以尝试以下两种方法之一:
调整输入图像块的大小
在测试时,对每个图像进行调整,使它们都符合M x N
的大小,然后通过SVM分类流程来确定该图像属于哪个类别。这样做的优点是,您只会因为图像子采样而损失一些信息。然而,缺点是如果图像小于目标块大小M x N
,在上采样以匹配目标块大小时会引入虚假信息。这类情况在深度学习中尤其常见。具体来说,任等人提出的区域建议网络首先查看大图像中的哪些块是包含对象或值得查看的候选块,然后调整这些块的大小以匹配其神经网络(顺便说一下,是卷积的)的输入层,然后进行分类。
在多个尺度上搜索图像块
另一种方法是保持图像大小不变,但使用M x N
大小的图像块,采用滑动窗口方案,提取重叠的M x N
大小的图像块,将这些块提交到SVM,然后对于每个重叠块的中心,确定该块的类别。您将在多个尺度上进行此操作,然后进行投票程序,确定整个图像中最常出现的类别就是感兴趣的类别。类似方法在Semenet等人用于Overfeat分类引擎中见过——也使用了卷积神经网络。这样做的优点是您不会丢失任何信息,因为您在分类对象时使用了所有(如果不是大部分)图像信息。缺点是所需的计算时间——具体来说,尺度的数量、窗口之间的重叠量以及图像块本身的大小都是您需要确定的超参数,以获得最佳性能。这种方法还假设在扫描时图像块的大小小于所讨论的图像。您必须注意并选择比您训练数据集中最大的图像还小的图像块大小。
如果我可以推荐…
因为您在进行图像分类,分类性能最佳且测试时速度最快的算法将是卷积神经网络。我建议考虑使用这些而不是SVM来提高性能。作为起点,可以查看Krizhevsky等人提出的AlexNet流程。这是卷积神经网络在计算机视觉任务(如分类、检测等)中崭露头角的开创性工作。