图像分类是一种机器学习技术,其目的是将图像分类到指定的类别中。它属于计算机视觉的一个重要方向,在很多领域有着广泛的应用,如物体识别、场景识别等。
图像分类的主要步骤是:
- 数据获取:获取图像数据集及其标签(类别)信息。常用的数据集有CIFAR、ImageNet等。
- 数据预处理:包括图像裁剪、缩放、标准化等。
- 特征提取:使用手工特征或CNN提取图像特征, representations。手工特征如HOG、LBP等。CNN可以自动学习特征。
- 选择分类模型:常用的模型有KNN、SVM、Softmax回归、CNN等。
- KNN、SVM、Softmax:使用手工提取的特征进行分类。
- CNN:使用卷积层自动提取特征,追加全连接层进行分类。
- 模型训练:使用训练集训练选择的分类模型。
- 模型评估:使用测试集评估模型性能,计算准确率、召回率、F1值等指标。
- 预测新图像:对新图像进行同样的预处理和特征提取后,使用训练好的模型进行分类预测。
代码示例:
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)