要約
1. Chen, L., Goodrich, M. A., & Morris, R. A. (2019). Fully Convolutional Neural Network for Crop Type Classification Using Multispectral Satellite Imagery. Remote Sensing, 11(8), 977.この論文は、多光学的衛星画像を使用して作物タイプを分類するために完全な畳み込みニューラルネットワーク(FCN)を採用した方法を提供します。
この方法は、高い分類精度を達成し、土地利用の監視、農地管理に役立つことが示されています。
2. Zhang, Y., Shao, Z., Wu, Q., Wang, Y., & Yan, L. (2019). A novel remote sensing image classification method using convolutional neural network ensemble and pseudo labeling. Journal of Applied Remote Sensing, 13(3), 036502.この論文は、畳み込みニューラルネットワークアンサンブルと疑似ラベリングを使用した新しいリモートセンシング画像分類方法を提案しています。
この方法は、高い分類精度を達成し、データラベリングのコストを削減することが示されています。
詳細内容
1. Chenらの研究は、完全な畳み込みニューラルネットワーク(FCN)を使用して、多光学的衛星画像から作物タイプを分類する方法を提供しています。
FCNは、画像全体を入力として受け取り、特徴マップを出力します。
この方法では、畳み込み層とプーリング層のスタックを使用して、複雑な特徴を学習することができます。
研究では、PythonのKerasフレームワークを使用して、FCNを実装しました。
以下は、KerasでのFCNの実装例です。
“`
# Keras imports
from keras.models import Model
from keras.layers import Input, Dropout, Conv2D, MaxPooling2D, concatenate, UpSampling2D# Define the input shape
input_shape = (256, 256, 4)# Define the inputs
inputs = Input(input_shape)# Define the convolutional layers
c1 = Conv2D(8, (3, 3), activation=’relu’, padding=’same’) (inputs)
c1 = Conv2D(8, (3, 3), activation=’relu’, padding=’same’) (c1)
p1 = MaxPooling2D((2, 2)) (c1)# Repeat the pattern above with more layers
…# Define the skip connections
u6 = Conv2DTranspose(8, (2, 2), strides=(2, 2), padding=’same’) (c5)
u6 = concatenate([u6, c4])
c6 = Conv2D(8, (3, 3), activation=’relu’, padding=’same’) (u6)
c6 = Conv2D(8, (3, 3), activation=’relu’, padding=’same’) (c6)# Define the outputs
outputs = Conv2D(1, (1, 1), activation=’sigmoid’) (c6)# Define the model
model = Model(inputs=[inputs], outputs=[outputs])# Compile the model
model.compile(optimizer=’adam’, loss=’binary_crossentropy’, metrics=[‘accuracy’])# Print the model summary
model.summary()
“`2. Zhangらの研究は、畳み込みニューラルネットワークアンサンブルと疑似ラベリングを使用したリモートセンシング画像分類方法を提案しています。
アンサンブルは、複数のモデルの予測を結合することによって、より良い予測を導くことができます。
疑似ラベリングは、モデルの予測を使用して、未ラベルのデータにラベルを付けることができるテクニックです。
研究では、Pythonのscikit-learnライブラリを使用してアンサンブルを実装し、疑似ラベリングを実行しました。
以下は、scikit-learnを使用してアンサンブルを実装する例です。
“`
# scikit-learn imports
from sklearn.ensemble import VotingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC# Create the individual models
model1 = DecisionTreeClassifier()
model2 = KNeighborsClassifier(n_neighbors=7)
model3 = SVC(kernel=’rbf’, probability=True)# Create the ensemble model
ensemble_model = VotingClassifier(estimators=[(‘dt’, model1), (‘knn’, model2), (‘svm’, model3)], voting=’soft’, weights=[2,1,2])# Train the ensemble model
ensemble_model.fit(X_train, y_train)# Test the ensemble model
ensemble_model.score(X_test, y_test)
“`研究ではまた、疑似ラベリングを使用して未ラベルのデータにラベルを付けました。
以下は、疑似ラベリングを実行するためのPythonの関数の例です。
“`
def pseudo_labeling(X_train, y_train, test_data, model, threshold):
# Train the initial model using the labeled data
model.fit(X_train, y_train)
# Predict the labels of the unlabeled data
pseudo_labels = model.predict(test_data)
# Calculate the confidence scores
confidence_scores = np.max(model.predict_proba(test_data), axis=1)
# Filter the data with high confidence scores
high_confidence_indices = np.where(confidence_scores > threshold)[0]
X_high_confidence = test_data[high_confidence_indices]
y_high_confidence = pseudo_labels[high_confidence_indices]
# Add the pseudo labeled data to the training set
X_new_train = np.concatenate((X_train, X_high_confidence))
y_new_train = np.concatenate((y_train, y_high_confidence))
return X_new_train, y_new_train
“`
コメント