main.py
# Python 2/3 compatiblity from __future__ import print_function from __future__ import division # 是用于在 Python 2 中引入一些 Python 3 特性的特殊语法。
# Torch import torch import torch.utils.data as data from torchsummary import summary #导入了 PyTorch 中用于处理数据的模块。torch.utils.data 模块包含了一些有用的工具和类,用于构建和处理数据集,例如 Dataset 类等。 #导入了 torchsummary 库中的 summary 函数。torchsummary 是一个用于查看 PyTorch 模型结构摘要的库。summary 函数可以显示模型的层信息、输出形状和参数统计等,对于调试和优化模型结构很有帮助。
# Numpy, scipy, scikit-image, spectral import numpy as np import sklearn.svm import sklearn.model_selection from skimage import io #导入了 NumPy 库,并将其命名为 np。NumPy 是一个用于科学计算的强大库,提供了对多维数组和矩阵的支持,以及用于数学运算的函数。 #导入了 scikit-learn 库中的支持向量机(Support Vector Machine,SVM)模块。scikit-learn 是一个用于机器学习和数据挖掘的库,支持多种常用的机器学习算法。 #导入了 scikit-learn 库中的模型选择模块。该模块提供了用于模型评估和选择的工具,例如交叉验证。 #从 scikit-image 库中导入了图像输入输出(IO)模块。io 模块包含了用于读取和保存图像的函数。
# Visualization import seaborn as sns import visdom import random #导入了 Seaborn 库,它是建立在 Matplotlib 基础上的一个数据可视化库。Seaborn 提供了更高级的统计图形和美化选项,使得数据可视化更加简单和吸引人。 #导入了 Visdom 库,这是一个用于实时创建和更新数据可视化的库。Visdom 可以在浏览器中创建图表、散点图等可视化效果,对于深度学习中的实时监控和结果可视化非常有用。
import argparse #import argparse 是 Python 中用于解析命令行参数的标准库 argparse 的导入语句。argparse 模块提供了#一种方便的方式来处理命令行输入,使开发者能够轻松地编写脚本和应用程序,支持用户通过命令行传递参数。 #当您的脚本需要从命令行接受一些参数时,argparse 允许您定义这些参数及其属性,然后从命令行中读取和解 #析这些参数的值。这样,用户可以在运行脚本时灵活地传递不同的选项和参数。也可以利用default,不用命令行
if args.download is not None and len(args.download) > 0: for dataset in args.download: get_dataset(dataset, target_folder=FOLDER) quit() #用于下载指定的数据集
datasets.py
import os from tqdm import tqdm #import os: os 模块是 Python 的标准库之一,提供了与操作系统进行交互的功能。它包含了许多用于处理文 #件和目录、执行系统命令等任务的函数。 #from tqdm import tqdm: tqdm 是一个 Python 库,用于在终端中显示进度条。它通常用于循环迭代或其他 #需要显示进度的任务,以提供用户可视化的进度信息。tqdm 的功能不仅仅限于进度条,还可以用于其他情况下 #的信息展示。
try: # Python 3 from urllib.request import urlretrieve except ImportError: # Python 2 from urllib import urlretrieve from utils import open_file, padding_image #这段代码的作用是先尝试在 Python 3 中导入 urlretrieve 函数,如果导入失败,则假设代码在 Python 2 #中运行,然后尝试从 urllib 模块导入相同的函数。这样可以确保在不同的 Python 版本中都能正确导入 #urlretrieve 函数,以便在后续的代码中使用。
if dataset_name == 'Houston2013': # Load the image img1 = open_file(folder + 'HSI.mat')['HSI'].astype(np.float32) rgb_bands = (59, 40, 23) img2 = open_file(folder + 'LiDAR.mat')['LiDAR'].astype(np.float32) img2 = np.expand_dims(img2, axis=2) # (349, 1905) --> (349, 1905, 1) gt = open_file(folder + 'gt.mat')['gt'] # Here, the gt file is load for filtering NaN out and visualization. # normalization method 1: map to [0, 1] [m, n, l] = img1.shape for i in range(l): minimal = img1[:, :, i].min() maximal = img1[:, :, i].max() img1[:, :, i] = (img1[:, :, i] - minimal) / (maximal - minimal) minimal = img2.min() maximal = img2.max() img2 = (img2 - minimal) / (maximal - minimal) label_values = [ "Unclassified", "Healthy grass", "Stressed grass", "Synthetic grass", "Trees", "Soil", "Water", "Residential", "Commercial", "Road", "Highway", "Railway", "Parking Lot 1", "Parking Lot 2", "Tennis Court", "Running Track" ] ignored_labels = [0]
utils.py
import random import numpy as np from sklearn.metrics import confusion_matrix import sklearn.model_selection import seaborn as sns import itertools import spectral import visdom import matplotlib.pyplot as plt from scipy import io, misc import os import re import torch #从 scikit-learn 库中导入混淆矩阵(confusion matrix)的计算功能,用于评估分类模型的性能 #导入 scikit-learn 库中的模型选择模块,用于划分数据集和交叉验证等任务。 #导入 Python 的 itertools 模块,提供一些迭代工具,如生成排列和组合。 #导入 spectral 库,用于处理和分析光谱图像数据。 #从 SciPy 库中导入 io 和 misc 模块,用于处理科学计算中的各种任务,如读写数据、图像处理等。 # 导入 Python 的 re 模块,用于进行正则表达式匹配和操作。
部分解释如上,深度学习还没接触很多,以后补