目录
一、过去完成的任务
在第一周中,我们小组举行了线下的站立会议,集体讨论凝聚团队智慧,并在课下时间积极工作,在以下几个方面上取得进展。
1.制定了小组成员分工
(1)来轩羽、李发文:web后端的学习与程序编写,将主要功能实现迁移到web中。
(2)舒康恒、孙铭君:web前端的学习与程序编写,构建一个美观、功能齐全的web网站。
(3)崔轩铭、曹聪语:负责学习python,将高光谱图像分类用python初步实现。
2.进行了相关知识的初步学习
其中两人主要学习web前端,两人负责学习web后端,两人负责python与高光谱图像分类的学习。
3.对高光谱图像分类进行学习
(1)简介
高光谱图像分类(HSI)被广泛应用于遥感图像分析,而CNN是视觉数据处理中应用最广泛的深度学习方法。近期也有大量科学实验进展将CNN应用于高光谱图像分类(HSI),但这些方法大多都是基于2D CNN网络,而高光谱分类的结果主要依赖于空间信息和光谱信息。目前很少有人使用3D CNN网络,主要是因为它大大增加了计算复杂度。基于此,这篇文章作者提出一个全新的思路,就是将2D CNN和3D CNN进行结合,生成一个新的网络HybridSN,并用它来进行高光谱分类。该网络利用3D卷积提取空间特征和光谱特征,然后利用2D卷积学习抽象的空间特征。同时,HybridSN网络相比于3D CNN网络,也降低了模型的复杂度。
(2)定义HybridySN
class_num = 16
class HybridSN(nn.Module):
def __init__(self):
super(HybridSN, self).__init__()
self.conv3d_1 = nn.Sequential(
nn.Conv3d(1, 8, kernel_size=(7, 3, 3), stride=1, padding=0),
nn.BatchNorm3d(8),
nn.ReLU(inplace = True),
)
self.conv3d_2 = nn.Sequential(
nn.Conv3d(8, 16, kernel_size=(5, 3, 3), stride=1, padding=0),
nn.BatchNorm3d(16),
nn.ReLU(inplace = True),
)
self.conv3d_3 = nn.Sequential(
nn.Conv3d(16, 32, kernel_size=(3, 3, 3), stride=1, padding=0),
nn.BatchNorm3d(32),
nn.ReLU(inplace = True)
)
self.conv2d_4 = nn.Sequential(
nn.Conv2d(576, 64, kernel_size=(3, 3), stride=1, padding=0),
nn.BatchNorm2d(64),
nn.ReLU(inplace = True),
)
self.fc1 = nn.Linear(18496,256)
self.fc2 = nn.Linear(256,128)
self.fc3 = nn.Linear(128,16)
self.dropout = nn.Dropout(p = 0.4)
def forward(self,x):
out = self.conv3d_1(x)
out = self.conv3d_2(out)
out = self.conv3d_3(out)
out = self.conv2d_4(out.reshape(out.shape[0],-1,19,19))
out = out.reshape(out.shape[0],-1)
out = F.relu(self.dropout(self.fc1(out)))
out = F.relu(self.dropout(self.fc2(out)))
out = self.fc3(out)
return out
(3)创建数据集
# 对高光谱数据 X 应用 PCA 变换
def applyPCA(X, numComponents):
newX = np.reshape(X, (-1, X.shape[2]))
pca = PCA(n_components=numComponents, whiten=True)
newX = pca.fit_transform(newX)
newX = np.reshape(newX, (X.shape[0], X.shape[1], numComponents))
return newX
# 对单个像素周围提取 patch 时,边缘像素就无法取了,因此,