美文网首页
如何实现图像聚类

如何实现图像聚类

作者: 郭彦超 | 来源:发表于2021-05-17 12:23 被阅读0次

大家经常见的是文章聚类、商品聚类,即根据文章中的关键词以及商品自身属性,然后从机器学习算法中选择一种常见的聚类算法去实现;那么关于如何进行图像聚类如何实现呢

背景

业务当中需要给图片风格进行标签化,关于图片格化处理,这里想的是根据图像分类的算法来做,因为分类属于有监督学习,需要整理相关的训练样本,如果上来就通过人工的方式去整理,成本太高,再加上前期大家认知的不同意,样本质量也难得到保障;所以需要先对已有商品进行聚类分析,在聚类的结果集上进行相关样本的整理。


实现流程

整个流程并不复杂,首先采用深度学习模型进行图片特征抽取,然后采用K-means对特征进行聚类。

特征抽取

  • CNN模型是图片特征提取常用网络,这里将使用经典图像分类模型Vgg16的卷积网络进行相关图像处理
from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
 
import numpy as np
import pylab
import io
from PIL import Image
from numpy import linalg as LA

base_model = VGG16(weights='imagenet', pooling='max',include_top=False)  #这里也可以使用自己的数据集进行训练
    
def get_image_feature(path):
    
    model = base_model
#     print(model.summary())
     
    img = Image.open(path)
    img = img.convert('RGB')
    img = img.resize((224,224), Image.NEAREST)
    x = image.img_to_array(img)
    x = np.expand_dims(x, axis=0)
    x = preprocess_input(x)
    features = model.predict(x)
    return features[0]
 
features = get_image_feature()

vec = features/LA.norm(features)
 
print(vec.shape, vec.tolist())

图片聚类

采用k-means对图片特征进行聚类分析,特征长度512

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
import pandas as pd
import numpy as np


features = [
    [],
    [] 
]
names = ['', '']

 
df = pd.DataFrame( features )
name_df = pd.DataFrame( names )
samples=df.values

#未进行标准化
kmeans=KMeans(n_clusters=3)
kmeans.fit(samples)#训练模型
labels=kmeans.predict(samples)#预测
name_df[labels==1]

完整代码

网上整理了凯旋门和埃菲尔铁塔的图片,简单测试下效果

from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
import os 
import numpy as np
import pylab
import io
from PIL import Image
from numpy import linalg as LA
from sklearn.cluster import KMeans

base_model = VGG16(weights='imagenet', pooling='max',include_top=False)  #这里也可以使用自己的数据集进行训练
    
def get_image_feature(path):
    
    model = base_model
#     print(model.summary())
     
    img = Image.open(path)
    img = img.convert('RGB')
    img = img.resize((224,224), Image.NEAREST)
    x = image.img_to_array(img)
    x = np.expand_dims(x, axis=0)
    x = preprocess_input(x)
    features = model.predict(x)
    return features[0]


feature_ls = []
names = []
for name in os.listdir("d:/tmp/天池/jd"):
    
    features = get_image_feature(os.path.join("d:/tmp/天池/jd", name))
    #特征标准化
    vec = features/LA.norm(features)

    #print(name,"==", vec.tolist())
    names.append(name)
    feature_ls.append(vec.tolist())
    

df = pd.DataFrame(feature_ls)
names_df = pd.DataFrame(names)
samples=df.values 
kmeans=KMeans(n_clusters=3)
kmeans.fit(samples)#训练模型
labels=kmeans.predict(samples)#预测
print(labels, names_df[labels==0] ) 

效果

  • 结果打印
 # 将标签值为0的数据进行输出
[1 1 1 1 1 0 0 0 0 0 0 0]             0
5    test.jpg
6     tt1.jpg
7     tt2.jpg
8     tt3.jpg
9     tt4.jpg
10    tt5.jpg
11  ttkxm.jpg

可以看出所有的铁塔被划分到一个类了

相关文章

  • 如何实现图像聚类

    大家经常见的是文章聚类、商品聚类,即根据文章中的关键词以及商品自身属性,然后从机器学习算法中选择一种常见的聚类算法...

  • K均值聚类(K-meansClustering)

    第1章 图像聚类 这一章节主要介绍了几种聚类方法,显示了如何将其用在聚类图像中从而找到相似图片的组。聚类可以用于识...

  • 用PyTorch实现图像聚类

    作者|Anders Ohrn编译|VK来源|Towards Data Science 利用深度卷积神经网络(DCN...

  • python与机器学习聚类:31省市居民家庭消费水平和学生月上网

    31省市居民家庭消费水平 聚成四类 聚成三类 学生月上网时间分布 kmeans实现图像分割

  • 图像聚类

    (1)利用主成分分析后选取主成分利用k-means算法进行聚类(2)提取图像的灰度直方图,利用直方图作为特征向量聚...

  • 简单KMEANS聚类实现

    简单KMEANS聚类实现 使用Kmeans进行聚类,分别聚成234类

  • 聚类实现

    1、kmeans k-means算法的思路很简单,一句话描述就是:随机选定K个中心点,将样本归入距离其最近的中心点...

  • 2018-12-19

    文本聚类算法之K-means算法的python实现 一、文本聚类定义 文本聚类主要是依据著名的聚类假设:同类...

  • 聚类分析_客户群聚类分析

    聚类是非监督学习的一种算法,我们使用k-means聚类算法,实现客户细分,以及营销战略如何在实际业务中应用。 1....

  • SLIC超像素分割

    SLIC(simple linear iterativeclustering) ,即简单线性迭代聚类。将彩色图像转...

网友评论

      本文标题:如何实现图像聚类

      本文链接:https://www.haomeiwen.com/subject/twfjjltx.html