赞
踩
我们将深入探讨如何使用深度学习,特别是卷积神经网络 (CNN),对卫星图像进行分类。我们将使用 Python语言Keras库 和UC Merced Land Use Dataset 下载地址:https://pan.quark.cn/s/3f145c603232)中的数据集,其中包含 21 种类型的土地利用图像。
首先,我们将导入所有必需的库。我们需要 keras 来构建深度学习模型,需要 sklearn 来分割数据,需要 PIL 和 cv2 来处理图像。
import os import cv2 from PIL import Image import numpy as np from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D from keras.layers import Activation, Dropout, Flatten, Dense from sklearn.model_selection import train_test_split
接下来,我们加载数据集并将图像转换为 numpy 数组,这些数组可以用作神经网络的输入。我们还需要标准化像素值并将类标签转换为 one-hot 向量。
data = [] labels = [] classes = 21 cur_path = os.getcwd() for i in range(classes): path = os.path.join(cur_path,'dataset/',str(i)) images = os.listdir(path) for a in images: try: image = Image.open(path + '\\'+ a) image = image.resize((64,64)) image = np.array(image) data.append(image) labels.append(i) except Exception as e: print(e) data = np.array(data) labels = np.array(labels) # 标准化像素值 data = data.astype('float32')/255.0 # 标签的 One-hot 编码 from keras.utils import np_utils labels = np_utils.to_categorical(labels)
现在,让我们将数据集分为训练集和测试集。
X_train, X_test, y_train, y_test = train_test_split(data, labels, test_size=0.2, random_state=42)
我们现在将定义我们的 CNN 模型。该模型将有两个卷积层,后面是最大池层,最后是两个密集层。
model = Sequential() model.add(Conv2D(32, (2, 2), input_shape=(64, 64, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(32, (2, 2))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Flatten()) model.add(Dense(64)) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(21)) model.add(Activation('softmax'))
现在,我们编译并训练模型。我们使用分类交叉熵作为损失函数和 Adam 优化器。
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # Train the model # 训练模型 model.fit(X_train, y_train, epochs=50, validation_data=(X_test, y_test), batch_size=64)
我们使用 Python 和 Keras 创建了卫星图像分类的深度学习模型。训练后,您可以使用模型来预测新图像的类别。您还可以保存模型并稍后加载以供重复使用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。