什么是图像分类,如何实现图像分类?代码举例讲解

图像分类是一种机器学习技术,其目的是将图像分类到指定的类别中。它属于计算机视觉的一个重要方向,在很多领域有着广泛的应用,如物体识别、场景识别等。

图像分类的主要步骤是:

  1. 数据获取:获取图像数据集及其标签(类别)信息。常用的数据集有CIFAR、ImageNet等。
  2. 数据预处理:包括图像裁剪、缩放、标准化等。
  3. 特征提取:使用手工特征或CNN提取图像特征, representations。手工特征如HOG、LBP等。CNN可以自动学习特征。
  4. 选择分类模型:常用的模型有KNN、SVM、Softmax回归、CNN等。
    • KNN、SVM、Softmax:使用手工提取的特征进行分类。
    • CNN:使用卷积层自动提取特征,追加全连接层进行分类。
  5. 模型训练:使用训练集训练选择的分类模型。
  6. 模型评估:使用测试集评估模型性能,计算准确率、召回率、F1值等指标。
  7. 预测新图像:对新图像进行同样的预处理和特征提取后,使用训练好的模型进行分类预测。

代码示例:

python
# 数据预处理
from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale=1./255) 
train_generator = train_datagen.flow_from_directory(
        train_dir,  
        target_size=(150, 150),  
        batch_size=20,  
        class_mode='binary')

# CNN模型       
from keras.models import Sequential
from keras.layers import Conv2D, MaxPool2D, Dense, Flatten

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(150, 150, 3)))
model.add(MaxPool2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3)))
model.add(MaxPool2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['acc'])
model.fit_generator(train_generator, steps_per_epoch=50, epochs=10)  

# 预测新图像
test_datagen = ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.flow_from_directory(
        test_dir,
        target_size=(150, 150),
        batch_size=20,
        class_mode='binary')
pred = model.predict_generator(test_generator, steps=50)