第12组 Alpha(2/3)

一、完成的任务

深度学习

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
​
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
​
import os
from google.colab import drive
drive.mount('/content/drive')
​
from scipy.io import loadmat
indian_pines = loadmat('/content/drive/MyDrive/Hyperspectral/HSI-Analysis-main/dataset/Indian_pines_corrected.mat')
​
# 由关键字可知,读取'indian_pines_corrected'字段
indian_pines = indian_pines['indian_pines_corrected']
​
indian_pines_gt = loadmat('/content/drive/MyDrive/Hyperspectral/HSI-Analysis-main/dataset/Indian_pines_gt.mat')
​
df_indian_pines_gt = pd.DataFrame(indian_pines_gt)
df_indian_pines_gt.to_csv("df_indian_pines_gt.csv", index = False)
​
读取数据
X = indian_pines
y = indian_pines_gt
​
import seaborn as sns
sns.axes_style('whitegrid')
fig = plt.figure(figsize=(12, 6))
​
for i in range(1, 1+6):
    fig.add_subplot(2, 3, i)
    q = np.random.randint(X.shape[2])
    plt.imshow(X[:, :, q], cmap='jet')
    plt.axis('off')
    plt.title(f'band - {q}')

第12组 Alpha(2/3)_第1张图片


查看图像的真实标注
!pip install plotly
import plotly.express as px
​
cls = px.imshow(y, color_continuous_scale='jet')
​
cls.update_layout(title='Ground Truth', coloraxis_showscale=True)
cls.update_xaxes(showticklabels=False)
cls.update_yaxes(showticklabels=False)
cls.show()

第12组 Alpha(2/3)_第2张图片

将图像转换为CSV存储
def extract_pixels(X, y, save_name='indian_pines_all'):
    q = X.reshape(-1, X.shape[2])
    df = pd.DataFrame(q)
    df = pd.concat([df, pd.DataFrame(y.ravel())], axis=1)
    df.columns= [f'band{i}' for i in range(1, 1+X.shape[2])]+['class']
    df.to_csv(f'/content/drive/MyDrive/Hyperspectral/HSI-Analysis-main/{save_name}.csv', index=False)
    #/content/drive/MyDrive/Hyperspectral/HSI-Analysis-main/indian_pines_all.csv
    return df
​
df = extract_pixels(X, y, save_name='indian_pines_all')
​
PCA
由于HSI数据集具有较高的维度,因此难以处理庞大的数据。 因此,使用主成分分析(PCA)将数据的维数缩减为3D,这是一种流行且广泛使用的降维技术。 以下代码用于将数据集的尺寸减少为三个。
from sklearn.decomposition import PCA
​
pca_components = 85
​
pca = PCA(n_components = pca_components)
data = df.iloc[:, :-1].values
dt = pca.fit_transform(data)
​
ev=pca.explained_variance_ratio_
​
plt.figure(figsize=(12, 6))
plt.plot(np.cumsum(ev))
plt.xlabel('Number of components')
plt.ylabel('Cumulative explained variance')
​
plt.show()

第12组 Alpha(2/3)_第3张图片

pca_components = 40
​
pca = PCA(n_components = pca_components)
dt = pca.fit_transform(df.iloc[:, :-1].values)
q = pd.concat([pd.DataFrame(data = dt), pd.DataFrame(data = y.ravel())], axis = 1)
q.columns = [f'PC-{i}' for i in range(1, pca_components+1)]+['class']
q.head()
​
​
fig = plt.figure(figsize = (20, 10))
​
for i in range(1, 1+8):
    fig.add_subplot(2,4, i)
    plt.imshow(q.loc[:, f'PC-{i}'].values.reshape(145, 145), cmap='nipy_spectral')
    plt.axis('off')
    plt.title(f'Band - {i}')
​
plt.savefig('IP_PCA_Bands.png')

第12组 Alpha(2/3)_第4张图片

# saving to .csv
q.to_csv('IP_40_PCA.csv', index=False)
​
SVM
x = q[q['class'] != 0]
X = x.iloc[:, :-1].values
y = x.loc[:, 'class'].values 
​
names = ['Alfalfa', 'Corn-notill', 'Corn-mintill', 'Corn', 'Grass-pasture', 'Grass-trees',
         'Grass-pasture-mowed', 'Hay-windrowed', 'Oats', 'Soybean-notill', 'Soybean-mintill',
         'Soybean-clean', 'Wheat', 'Woods', 'Buildings Grass Trees Drives', 'Stone Steel Towers']
​
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=11, stratify=y)
​
svm = SVC(C=100, kernel='rbf', cache_size=10*1024)
svm.fit(X_train, y_train)
ypred = svm.predict(X_test)
​
data = confusion_matrix(y_test, ypred)
df_cm = pd.DataFrame(data, columns=np.unique(names), index = np.unique(names))
df_cm.index.name = 'Actual'
df_cm.columns.name = 'Predicted'
​
plt.figure(figsize = (10,8))
sns.set(font_scale=1.4)#for label size
sns.heatmap(df_cm, cmap="Reds", annot=True,annot_kws={"size": 16}, fmt='d')
​
plt.savefig('cmap.png', dpi=300)

第12组 Alpha(2/3)_第5张图片

# Classification Map
l=[]
for i in range(q.shape[0]):
    if q.iloc[i, -1] == 0:
        l.append(0)
    else:
        l.append(svm.predict(q.iloc[i, :-1].values.reshape(1, -1)))
​
clmap = np.array(l).reshape(145, 145).astype('float')
plt.figure(figsize=(10, 8))
plt.imshow(clmap, cmap='nipy_spectral')
plt.colorbar()
plt.axis('off')
plt.savefig('IP_cmap.png')
plt.show()

第12组 Alpha(2/3)_第6张图片

# 真实数据
y = indian_pines_gt
​
plt.figure(figsize=(10, 8))
plt.imshow(y, cmap='nipy_spectral')
plt.colorbar()
plt.axis('off')
plt.savefig('IP_cmap.png')
plt.show()

第12组 Alpha(2/3)_第7张图片

 网页设计

第12组 Alpha(2/3)_第8张图片

第12组 Alpha(2/3)_第9张图片

 后端环境配置

        在租好的服务器上配置docker容器和搭建django环境,这里我们直接使用别人已经配置好相关环境的docker镜像,配置好后可以查看django版本:

         通过django命令生成一个应用,并运行

第12组 Alpha(2/3)_第10张图片

         之后就可以通过公网ip来访问自己的网站,如打开自带的管理员界面。

第12组 Alpha(2/3)_第11张图片

 

第12组 Alpha(2/3)_第12张图片

        到此django环境配置成功,可以开始后续的后端编写。

二、具体项目分工

1.来轩羽、李发文:学习使用Django搭建框架

2.舒康恒、孙铭君:前端页面的设计与实现

3.崔轩铭、曹聪语:学习python,进一步完成深度学习模块

三、燃尽图

第12组 Alpha(2/3)_第13张图片

四、例会照片

第12组 Alpha(2/3)_第14张图片

五、问题

1.尚未实现后端代码的编写

1.暂未实现各个部分的对接

2.对部分代码不太理解

六、下一步计划

1.完成两个数据集的训练

2.对代码和训练的网络进一步优化

3.完成对接工作 

你可能感兴趣的:(python,开发语言,django)