在scikit-learn中对稀疏编码后进行最大/平均池化用于分类

0 投票
1 回答
1278 浏览
提问于 2025-04-30 16:01

我在玩一个叫做稀疏编码的东西,使用的是 scikit-learn 这个库,我想用它来对图像进行分类。我有一些大小为 128 x 128 的图像。从这些图像中,我随机提取 7x7 的小块,然后把这些小块喂给 kmeans 算法,这个算法有 100 个中心点。这样一来,我就得到了一个包含 100 个原子的字典。

当我有一张需要分类的图像时,我首先会用 extract_patches_2d 从这张图像中提取小块。如果我没记错的话,这个过程也叫做 卷积采样。这意味着我可以从一张图像中提取到 (128-7+1)^2 个小块。然后,我可以用我的字典和正交匹配追踪的方法来编码每个小块,这样我就得到了 (128-7+1)^2*(128-7+1)^2 * 100 个(稀疏的)特征。

接下来,我该如何将这个 (14884,100) 的矩阵转换成一个特征向量呢?我看到的资料说可以通过平均池化或最大池化来实现,但我有点搞不清楚在这个矩阵上该怎么操作。

暂无标签

1 个回答

1

你的图片是自然图片,还是来自某种特定的设置或科学成像呢?如果你想对自然图片进行分类,我建议你可以看看用神经网络提取特征,或者使用一些手工制作的描述符,比如SIFT(你可以试试scikit-image里的DAISY)。

来回答你的问题:在进行最大池化或平均池化时,你需要决定是否想要保留图片中的局部信息。如果不需要,你可以直接对每张图片的行进行最大值或平均值计算。如果想要保留局部信息,你可以在图片上放一个3x3的网格,然后只对那些在特定网格单元内的区域进行平均或最大值计算。这样的话,每张图片就会得到例如3x3x100的特征。

撰写回答