关于开源代码Multimodal-Remote-Sensing-Toolkit的代码复现

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 模块,用于进行正则表达式匹配和操作。

部分解释如上,深度学习还没接触很多,以后补