第2章:环境搭建与工具链

说实话,每次带新人入门遥感深度学习,我最怕的就是环境搭建这一步。不是技术难,而是坑太多。我自己当年配环境就折腾了整整两天,最后发现是CUDA版本和PyTorch没对齐。嗯,这节课咱们就把这些坑一个个填平。

2.1 Anaconda环境配置

我个人习惯用Anaconda来管理Python环境。为什么?因为遥感项目依赖太乱了——有的库要Python 3.8,有的要3.10,用conda环境隔离最省心。

安装步骤其实很简单:

  1. 去官网下载Anaconda(选Python 3.9+版本)
  2. 一路默认安装,但记得勾选「Add Anaconda to my PATH」
  3. 打开终端验证:conda --version

装完后第一件事,我建议你换国内镜像源。不然下载PyTorch那几百兆能等到你怀疑人生。

# 添加清华镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes

# 创建专属环境
conda create -n rs_deep python=3.9
conda activate rs_deep
小技巧:环境名别起太随意。我见过有人起名叫「test1」「test2」,三个月后自己都分不清哪个是干嘛的。建议用「项目名_框架_版本」的格式,比如「landcover_pytorch_39」。

2.2 PyTorch安装与验证

PyTorch安装其实就一行命令,但版本选择有讲究。你想想看,遥感影像动不动就是几千乘几千像素,显存消耗巨大。所以我建议直接上CUDA 11.x + PyTorch 1.12以上版本,对超大影像的支持更好。

# CUDA 11.8版本(推荐)
conda install pytorch torchvision torchaudio cudatoolkit=11.8 -c pytorch -c nvidia

# 或者用pip(我个人更习惯)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

装完一定要验证。我在项目中遇到过好几次「装完了但跑不起来」的情况,都是因为没验证就直接开干。

import torch
print("PyTorch版本:", torch.__version__)
print("CUDA是否可用:", torch.cuda.is_available())
print("GPU数量:", torch.cuda.device_count())
print("当前GPU:", torch.cuda.get_device_name(0) if torch.cuda.is_available() else "无")
注意:如果输出显示CUDA不可用,别慌。先检查驱动版本——在终端输入 nvidia-smi,看右上角的CUDA Version。我曾经遇到过驱动是11.4,但装了12.0的PyTorch,结果死活认不到GPU。

2.3 GDAL安装——遥感人的痛

GDAL这玩意儿,说白了就是遥感界的「万能钥匙」。读取GeoTIFF、处理投影、坐标转换,都离不开它。但安装GDAL是我见过最折腾的事之一。

为什么难装?因为GDAL底层是C++写的,编译依赖特别多。直接用pip装经常报错。我踩过这个坑,后来学乖了——用conda装最稳。

# 推荐方式:用conda
conda install gdal

# 如果conda不行,试试这个
pip install gdal==3.4.3

# 验证
from osgeo import gdal
print("GDAL版本:", gdal.__version__)

# 读取遥感影像
dataset = gdal.Open("your_image.tif")
print("影像大小:", dataset.RasterXSize, "x", dataset.RasterYSize)
print("波段数:", dataset.RasterCount)
核心要点:GDAL版本要和你的Python版本匹配。Python 3.9对应GDAL 3.4.x,Python 3.10对应GDAL 3.5.x。版本不对,导入就报错。

2.4 CUDA与cuDNN配置

CUDA是NVIDIA的并行计算平台,cuDNN是深度学习的加速库。说白了,没有它们,你的GPU就是个摆设。

配置步骤:

  1. 检查驱动:nvidia-smi 看驱动版本和最高支持的CUDA版本
  2. 安装CUDA Toolkit:去NVIDIA官网下载对应版本
  3. 安装cuDNN:需要注册NVIDIA开发者账号,下载后解压到CUDA目录

这里有个坑——很多人以为装了CUDA Toolkit就完事了。其实cuDNN也要手动配置。我曾经漏了这一步,训练速度慢得像蜗牛,排查了半天才发现是cuDNN没装。

# 验证CUDA
nvcc --version

# 验证cuDNN(Linux/Mac)
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

# Windows下
type "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\include\cudnn_version.h" | findstr CUDNN_MAJOR
避坑指南:PyTorch、CUDA、cuDNN三者版本必须匹配。我整理了一个对照表:
PyTorch版本 CUDA版本 cuDNN版本
1.12.x 11.6 / 11.7 8.4.x
1.13.x 11.7 / 11.8 8.5.x
2.0.x 11.8 / 12.1 8.9.x

2.5 遥感数据读取与可视化基础

环境搭好了,咱们来试试真家伙。遥感影像和普通图片不一样——它通常有多个波段,而且每个像素值代表的是地物反射率,不是RGB颜色。

读取影像我一般用GDAL + numpy的组合:

import numpy as np
from osgeo import gdal
import matplotlib.pyplot as plt

# 读取影像
dataset = gdal.Open("sentinel2_image.tif")
band1 = dataset.GetRasterBand(1).ReadAsArray()  # 蓝光波段
band2 = dataset.GetRasterBand(2).ReadAsArray()  # 绿光波段
band3 = dataset.GetRasterBand(3).ReadAsArray()  # 红光波段
band4 = dataset.GetRasterBand(4).ReadAsArray()  # 近红外波段

# 合成真彩色影像(RGB)
rgb = np.stack([band3, band2, band1], axis=2)

# 归一化显示
rgb_normalized = (rgb - rgb.min()) / (rgb.max() - rgb.min())

plt.figure(figsize=(10, 10))
plt.imshow(rgb_normalized)
plt.title("Sentinel-2 真彩色影像")
plt.axis('off')
plt.show()
注意:遥感影像的波段顺序和常规RGB不一样。比如Landsat 8的波段顺序是:Band1(海岸)、Band2(蓝)、Band3(绿)、Band4(红)、Band5(近红外)... 合成真彩色时要用Band4(红)、Band3(绿)、Band2(蓝)。

可视化的时候还有个常见问题——影像值范围太大。原始DN值可能是0-10000,直接显示就是一片白。所以一定要做归一化或者拉伸。我个人习惯用2%线性拉伸:

def linear_stretch(array, percent=2):
    """2%线性拉伸"""
    p_low = np.percentile(array, percent)
    p_high = np.percentile(array, 100 - percent)
    stretched = np.clip((array - p_low) / (p_high - p_low), 0, 1)
    return stretched

# 对每个波段做拉伸
rgb_stretched = np.stack([
    linear_stretch(band3),  # R
    linear_stretch(band2),  # G
    linear_stretch(band1)   # B
], axis=2)

plt.imshow(rgb_stretched)
plt.title("2%线性拉伸后的影像")
plt.show()

嗯,到这里环境就全部搭好了。你可能会问:「为什么不用TensorFlow?」我个人觉得PyTorch在遥感领域更灵活,尤其是处理超大影像时的自定义数据加载器,写起来比TF顺手得多。当然这只是个人偏好,你用顺手哪个都行。

遥感深度学习环境搭建知识体系 Anaconda Python环境管理 PyTorch 深度学习框架 CUDA + cuDNN GPU加速计算 GPU NVIDIA GDAL Matplotlib + NumPy 数据流:遥感影像 → GDAL读取 → NumPy数组 → PyTorch张量 → GPU训练 关键:所有组件版本必须匹配,否则训练时会出现各种诡异错误

环境搭建这块,说白了就是「版本对齐」四个字。PyTorch版本、CUDA版本、cuDNN版本、GDAL版本,任何一个对不上,后面都得返工。我建议你把版本号记下来,或者像我一样写个环境配置文件,下次直接一键重建。

专注资料整理