【问题标题】:Apply max/average pooling after sparse coding with scikit learn for classification在使用 scikit learn 进行稀疏编码后应用最大/平均池进行分类
【发布时间】:2014-12-26 19:06:09
【问题描述】:

我正在处理来自scikit-learn 的稀疏编码,我想尝试对图像进行分类。我有大小为128 x 128 的图像。从中我提取随机的7x7 补丁以提供给具有 100 个质心的 kmeans。这意味着我有一本包含 100 个原子的字典。 因此,给定一张要分类的图像,我首先使用extract_patches_2d 从该图像中提取补丁,如果我没记错的话,它也称为convolutional sampling。这意味着我有 (128-7+1)^2 个图像补丁。我可以通过使用我的字典和正交匹配来对每个补丁进行编码,从而留下(128-7+1)^2*(128-7+1)^2 * 100(稀疏)特征。

为了将这个(14884,100) 矩阵转换为特征向量,下一步是什么。从我正在阅读的内容来看,这是通过平均池化或最大池化完成的,但是在给定这个矩阵的情况下,我不太清楚它是如何工作的。

【问题讨论】:

    标签: python image-processing machine-learning scikit-learn


    【解决方案1】:

    您的图像是自然图像还是来自一些非常特定的设置或科学成像?如果您想对自然图像进行分类,我建议您使用神经网络进行特征提取,或使用 SIFT 等手工描述符(例如尝试来自 scikit-image 的 DAISY)。

    要回答您的问题:要进行最大池化或平均池化,您需要决定是否要在图像中保留局部性。如果没有,您可以对每个图像获得的行进行最大值或平均值。如果你想保持局部性,你可以在图像上放置一个 3x3 或类似的网格,并只取位于给定网格单元内的那些补丁的平均值/最大值。例如,这将为您提供每张图像 3x3x100 个特征。

    【讨论】:

    • 快速跟进问题。我是否正确地认为如果我不想在图像中保留局部性,我最终会得到每张图像 14884 x 1 的特征向量? (因为我每张图片有 14885 个补丁)
    • 不,在池化之后,你最终只会得到一个 1x100 的特征向量,因为你会对 100 个集群的所有位置进行最大/平均。这种方法称为单词表示的视觉袋,因为您只检测是否存在某个簇,而不是图像中的哪个位置。
    猜你喜欢
    • 2016-05-16
    • 2016-03-17
    • 2016-09-26
    • 1970-01-01
    • 2018-03-24
    • 2015-02-04
    • 2012-12-30
    • 2016-05-08
    • 1970-01-01
    相关资源
    最近更新 更多