Python 使用scikit学习进行分类,在稀疏编码后应用最大/平均池

Python 使用scikit学习进行分类,在稀疏编码后应用最大/平均池,python,image-processing,machine-learning,scikit-learn,Python,Image Processing,Machine Learning,Scikit Learn,我从scikit learn学习稀疏编码,我想尝试对图像进行分类。我有大小为128 x 128的图像。从中,我提取随机7x7补丁,以提供给具有100个质心的kmeans。这意味着我有一本100个原子的字典。 因此,给定一张要分类的图像,我首先用extract\u patches\u 2d从这张图像中提取面片,如果我没有弄错的话,这也被称为。这意味着我有(128-7+1)^2个图像补丁。我可以使用我的字典和正交匹配电路对每个补丁进行编码,留下(128-7+1)^2*(128-7+1)^2*100(

我从
scikit learn
学习稀疏编码,我想尝试对图像进行分类。我有大小为128 x 128的图像。从中,我提取随机
7x7
补丁,以提供给具有100个质心的kmeans。这意味着我有一本100个原子的字典。 因此,给定一张要分类的图像,我首先用
extract\u patches\u 2d
从这张图像中提取面片,如果我没有弄错的话,这也被称为。这意味着我有(128-7+1)^2个图像补丁。我可以使用我的字典和正交匹配电路对每个补丁进行编码,留下
(128-7+1)^2*(128-7+1)^2*100
(稀疏)功能


要将该
(14884100)
矩阵转换为特征向量,下一步是什么。从我阅读的内容来看,这是通过平均或最大池来实现的,但我不太清楚在这个矩阵下这是如何工作的。

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


回答您的问题:要执行最大池或平均池,您需要决定是否要在映像中保留局部性。如果没有,您可以对每个图像获得的行进行最大或平均。如果要保持局部性,可以在图像上放置一个3x3或类似的网格,并仅获取位于给定网格单元内的面片的平均值/最大值。例如,这将为您提供每幅图像3x3x100个功能。

快速跟进问题。如果我不想在图像中保留局部性,那么最终每个图像的特征向量为14884 x 1,这一想法正确吗?(因为我每个图像有14885个补丁)不,在合并后,您将只得到1x100个特征向量,因为您将对100个集群的所有位置进行最大/平均。这种方法称为单词表示的可视包,因为您只检测是否存在某个簇,而不检测图像中的位置。