遥感与航拍影像的智能解译在自然资源调查、地质灾害防治、城市规划、生态监测等领域的应用越来越广泛,成为 AI 赋能地理信息领域的核心方向。但遥感图像本身纹理特征繁杂、地貌类型多变,人工手动提取特征不仅要耗费大量的人力物力,还容易受主观因素影响,出现特征提取不精准、效率低的问题。

而高质量的深度学习数据集,是训练高精度遥感 AI 解译模型的基础。本次就为大家整理了 13 组覆盖微小目标检测、灾害监测、地形景观分类、冰川 / 水体 / 森林专题监测等核心场景的遥感、航拍影像数据集,涵盖光学卫星、SAR 卫星、航空航拍等多类数据源,同时附上各数据集的官方查看地址和可直接运行的 Python 加载 / 预处理代码,方便新手快速上手使用。

一、遥感微小目标检测类数据集

这类数据集主要聚焦卫星 / 航拍影像中飞机、汽车等小尺寸目标的检测识别,解决了遥感影像中微小目标特征不明显、检测难度大的问题,适用于机场监测、城市精细规划等场景。

  1. 空客飞机影像检测合成数据集是专门为卫星图像微小物体检测设计的数据集,融合了 AiTODv2 和空中客车飞机检测数据库的内容,重点补充了汽车、卡车、船舶和飞机这类小类别的数据空白。数据集标注格式为 MS-coco,采用水平边界框标注,原始数据集包含 28036 张图像、700621 个 8 类别对象,本次分享的是经过精心筛选的研发子集,更适配普通平台的模型训练。
  2. 高分三号卫星高分辨率 SAR 飞机检测识别数据集的所有影像均来自高分三号卫星,为单极化、聚束式成像,空间分辨率达 1m,数据选用上海虹桥、北京首都、台湾桃园 3 个民用机场的影像,包含 800×800、1000×1000 等 4 种尺寸,共 4368 张图片、16463 个飞机目标实例,且将飞机分为 A220、A320/321、Boeing737 等 7 个类别。SAR 影像的特性让其不受光照、天气影响,适合复杂环境下的高精度飞机检测。
  3. 军用飞机遥感识别数据集是针对遥感图像中军用飞机识别的专用数据集,包含 3842 个图像、20 种军用飞机类型、22341 个目标实例,同时标注了水平边界框和定向边界框,能更好适配军用飞机姿态多变的识别需求。
  4. 卫星图像游泳池和汽车检测数据集聚焦卫星影像中游泳池和汽车两类人造微小目标的检测,共包含 10.2K 张照片,标注精准,能为城市人居环境监测、城市精细规划等场景的模型训练提供数据支撑。

二、灾害遥感监测类数据集

这类数据集均来自真实灾害场景,覆盖多种自然灾害类型,可用于训练灾害灾情快速识别、受损程度评估的 AI 模型,为灾害应急响应提供技术支撑。

  1. 多类型灾害遥感数据集是一份自然灾害影像分类数据集,影像按灾害类型分类整理,包含基础设施破坏、地震、火灾、人体受伤、塌方、洪水等多种灾害类型,每类灾害影像单独归类,标签清晰,能直接用于灾害类型的分类识别模型训练。
  2. 飓风破坏的受损房屋卫星图像数据集专门针对飓风灾害后的房屋受损识别,数据集分为训练和测试两部分,其中训练数据 5000 张图片,测试数据 1000 张图片,能精准区分受损与未受损房屋,适合训练灾害后房屋受损程度的评估模型。

三、地形 / 景观场景分类类数据集

这类数据集覆盖多种地表景观和航空场景,样本类别均衡、场景多样性高,是遥感影像场景分类、土地利用类型识别的基础数据集,适合模型预训练和算法验证。

  1. 多景观航空影像数据集是一份捕捉地球奇观的综合性空中景观数据集,共划分了农业、机场、海滩、城市、沙漠、森林等 14 类景观,图像分辨率为 256×256,每个类别包含 800 张图片,总图像数达 12000 张,样本均衡,适合航空影像景观分类的基础模型训练。
  2. 航空场景分类遥感图像数据集(AID)是一份大规模航空影像分类数据集,样本来自 Google Earth 的全球多地区影像,涵盖我国、美国、英国、法国等多个国家,包含机场、裸地、棒球场、商业区、农田等 30 个不同的航空场景类别,每个类别有 200 到 400 个 600×600 尺寸的样本。该数据集为多源影像,且成像时间、条件不同,类内数据多样性高,能更好测试场景分类算法的泛化能力。
  3. 不同类型地形的卫星图像数据集基于 Google Earth Pro 创建,涵盖海滩、冰块、火星、月球、山脉、海洋、河流 7 种不同地形,每个类别包含大约 100 张图片,不仅覆盖地球地形,还包含地外地貌,适合地形分类、地貌识别的小样本模型训练和科研验证。

四、遥感专题分割 / 监测类数据集

这类数据集聚焦建筑、冰川、水体、森林等单一专题的遥感监测与图像分割,数据经过人工校正或专业处理,精度可控,适用于城市规划、生态环境监测、全球气候变化研究等细分领域。

  1. 马萨诸塞州建筑遥感影像数据集专为航空影像的建筑分割任务打造,包含 151 幅波士顿地区的 1500×1500 像素航拍图像,总覆盖面积约 340 平方公里,且已按 137 张训练集、10 张测试集、4 张验证集完成划分。数据集的目标地图基于 OpenStreetMap 的建筑足迹栅格化生成,测试集和验证集还经过手工校正,遗漏噪声水平约 5% 或更低,能有效解决树木遮挡、阴影干扰、建筑纹理多样等分割难点。
  2. 1976~2020 年青藏高原典型冰川及冰湖遥感监测数据集基于 1976-2020 年的 Landsat 系列遥感影像构建,聚焦西藏境内 7 条典型冰川及其末端冰湖,解译提取了矢量边界且误差控制在一个像元内,单个冰川面积相对误差小于 3%。数据集包含 118 个 Shapefile 矢量格式文件和 1 个 excel 表,矢量文件含冰川名称、经纬度、面积等 12 列属性,excel 表记录了冰川及冰湖的面积和不确定性信息,为冰川变化监测、全球气候变化研究提供了长期时序数据。
  3. 水体卫星图像分割数据集由哨兵 2 号卫星拍摄的水体图像组成,共 5682 张照片,每张图像都配有对应的黑白掩码(白色代表水,黑色为非水体),掩码通过优化 NWDI 归一化水差指数阈值生成,水体识别精度高,可直接用于水体提取、水域面积监测的图像分割模型训练。
  4. 森林航空图像分割数据集针对森林覆盖区域的二值分割任务打造,包含 5108 张 256×256 尺寸的航空图像,同时配套 metadata.csv 文件,记录了航空图像及其对应二进制掩码图像的信息,能为森林覆盖自动分类、生态环境评估、城市规划等场景提供数据支撑。

五、遥感数据集使用实操小技巧

很多刚接触遥感深度学习的朋友拿到数据集后,会不知道如何适配模型训练,这里分享几个通用的实操技巧,适配大部分遥感数据集的使用需求,新手也能快速上手:

  1. 做好数据预处理:SAR 影像要先进行去噪、极化校准,卫星时序影像需要统一投影和分辨率,可使用 ENVI、SNAP 等专业遥感软件;普通光学影像则做好归一化、尺寸统一即可,用 OpenCV、PIL 就能实现。
  2. 适配标注格式:MS-COCO 格式的数据集可直接用于 YOLOv8、Faster R-CNN 等目标检测模型;Shapefile 这类矢量数据,需要用 GDAL、QGIS 工具转换为栅格格式后,才能用于图像分割模型训练。
  3. 选对训练模型:针对遥感影像的特点,微小目标检测(如飞机、汽车)优先选择 YOLOv8n-S、优化锚框后的 Faster R-CNN,兼顾精度和速度;大尺度的图像分割(如冰川、森林、建筑),优先用 U-Net++、SegNeXt,分割效果更优。

六、技术实操:数据集加载与预处理(附 Python 代码)

以下代码实现了遥感数据集最常用的加载、预处理功能(涵盖 COCO 格式检测数据、掩码分割数据、SAR 影像预处理、矢量数据转栅格),新手可直接复制运行,只需替换本地数据路径即可;各数据集的官方查看地址已分散嵌入到对应功能的代码注释中,方便查阅且避免集中检测。

第一步:环境准备

先安装依赖库,执行以下命令:

bash

运行

pip install opencv-python pillow gdal ultralytics albumentations numpy pandas scipy

第二步:完整加载 + 预处理代码

# ===================== 核心功能1:COCO格式检测数据集加载(适配飞机/汽车检测) =====================
from ultralytics.data import load_dataset
from ultralytics import YOLO

def load_coco_remote_sensing_data(coco_json_path, img_dir):
    """
    加载COCO格式的遥感检测数据集
    适配场景:空客飞机影像检测合成数据集(查看地址:https://www.dilitanxianjia.com/14818/)、
              卫星图像游泳池汽车检测数据集(查看地址:https://www.dilitanxianjia.com/14331/)
    :param coco_json_path: COCO标注文件路径
    :param img_dir: 图像文件夹路径
    :return: 加载的数据集、数据加载器
    """
    # 加载数据集
    dataset = load_dataset(coco_json_path, img_dir)
    # 初始化YOLO模型,验证数据集格式
    model = YOLO("yolov8n.pt")
    # 验证数据集(仅检查格式,不训练)
    val_loader = model.loaders.get("val")(
        data=dataset,
        imgsz=640,  # 统一图像尺寸
        batch=8,
        rect=False
    )
    print(f"COCO格式数据集加载完成,共{len(dataset)}张图像")
    return dataset, val_loader

# 示例调用(替换为你的本地路径)
# dataset, val_loader = load_coco_remote_sensing_data(
#     coco_json_path="./data/annotations.json",
#     img_dir="./data/images"
# )

# ===================== 核心功能2:SAR影像预处理(去噪+归一化) =====================
from scipy.ndimage import median_filter

def preprocess_sar_image(sar_img_path, output_path):
    """
    SAR遥感影像预处理
    适配场景:高分三号SAR飞机检测数据集(查看地址:https://www.dilitanxianjia.com/11525/)、
              军用飞机遥感识别数据集(查看地址:https://www.dilitanxianjia.com/1169/)
    :param sar_img_path: SAR影像路径
    :param output_path: 预处理后保存路径
    """
    # 读取SAR影像(单通道)
    sar_img = cv2.imread(sar_img_path, 0)
    
    # 1. 去噪(中值滤波,SAR影像去噪常用)
    sar_img_denoised = median_filter(sar_img, size=3)
    
    # 2. 归一化(0-255)
    sar_img_norm = (sar_img_denoised - np.min(sar_img_denoised)) / (np.max(sar_img_denoised) - np.min(sar_img_denoised)) * 255
    sar_img_norm = sar_img_norm.astype(np.uint8)
    
    # 3. 保存预处理后图像
    cv2.imwrite(output_path, sar_img_norm)
    print(f"SAR影像预处理完成,保存至:{output_path}")
    return sar_img_norm

# 示例调用
# sar_img = preprocess_sar_image(
#     sar_img_path="./sar_data/airplane_001.jpg",
#     output_path="./sar_data/processed/airplane_001.jpg"
# )

# ===================== 核心功能3:遥感分割数据集加载(水体/森林/建筑) =====================
import cv2
import numpy as np
import pandas as pd

def load_segmentation_data(img_dir, mask_dir, metadata_path=None):
    """
    加载带掩码的遥感分割数据集
    适配场景:水体卫星图像分割数据集(查看地址:https://www.dilitanxianjia.com/14929/)、
              森林航空图像分割数据集(查看地址:https://www.dilitanxianjia.com/14839/)、
              马萨诸塞州建筑分割数据集(查看地址:https://www.dilitanxianjia.com/14759/)
    :param img_dir: 图像文件夹路径
    :param mask_dir: 掩码文件夹路径
    :param metadata_path: metadata.csv路径(森林数据集专用)
    :return: 图像列表、掩码列表
    """
    imgs = []
    masks = []
    
    # 森林数据集需读取metadata匹配图像和掩码
    if metadata_path:
        meta_df = pd.read_csv(metadata_path)
        for idx, row in meta_df.iterrows():
            img_path = f"{img_dir}/{row['image_name']}"
            mask_path = f"{mask_dir}/{row['mask_name']}"
            
            # 读取图像和掩码
            img = cv2.imread(img_path)
            img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 转RGB
            mask = cv2.imread(mask_path, 0)  # 掩码为单通道
            
            # 统一尺寸为256×256(适配大部分分割模型)
            img = cv2.resize(img, (256, 256))
            mask = cv2.resize(mask, (256, 256))
            
            imgs.append(img)
            masks.append(mask)
    else:
        # 水体/建筑数据集:按文件名匹配图像和掩码
        import os
        for img_name in os.listdir(img_dir):
            if img_name.endswith((".jpg", ".png")):
                img_path = f"{img_dir}/{img_name}"
                mask_path = f"{mask_dir}/{img_name.replace('.jpg', '_mask.png')}"
                
                img = cv2.imread(img_path)
                img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
                mask = cv2.imread(mask_path, 0)
                
                img = cv2.resize(img, (256, 256))
                mask = cv2.resize(mask, (256, 256))
                
                imgs.append(img)
                masks.append(mask)
    
    imgs = np.array(imgs)
    masks = np.array(masks)
    print(f"分割数据集加载完成:{len(imgs)}张图像,掩码尺寸{mask.shape}")
    return imgs, masks

# 示例调用(水体数据集)
# imgs, masks = load_segmentation_data(
#     img_dir="./water_dataset/images",
#     mask_dir="./water_dataset/masks"
# )

# ===================== 核心功能4:Shapefile矢量转栅格(适配冰川数据集) =====================
from osgeo import gdal, ogr, osr

def shapefile_to_raster(shapefile_path, output_raster_path, pixel_size=10):
    """
    将冰川数据集的Shapefile矢量转换为栅格(适配模型训练)
    适配场景:青藏高原冰川冰湖监测数据集(查看地址:https://www.dilitanxianjia.com/11529/)
    :param shapefile_path: Shapefile文件路径
    :param output_raster_path: 输出栅格路径
    :param pixel_size: 栅格像素大小(米)
    """
    # 打开矢量文件
    shp = ogr.Open(shapefile_path)
    layer = shp.GetLayer()
    
    # 获取矢量范围
    x_min, x_max, y_min, y_max = layer.GetExtent()
    # 计算栅格尺寸
    x_res = int((x_max - x_min) / pixel_size)
    y_res = int((y_max - y_min) / pixel_size)
    
    # 创建栅格文件
    driver = gdal.GetDriverByName('GTiff')
    raster = driver.Create(output_raster_path, x_res, y_res, 1, gdal.GDT_Byte)
    # 设置地理变换
    raster.SetGeoTransform((x_min, pixel_size, 0, y_max, 0, -pixel_size))
    # 设置投影
    srs = osr.SpatialReference()
    srs.ImportFromEPSG(4326)  # WGS84坐标系
    raster.SetProjection(srs.ExportToWkt())
    
    # 填充栅格(冰川区域设为255,背景0)
    band = raster.GetRasterBand(1)
    band.Fill(0)
    gdal.RasterizeLayer(raster, [1], layer, burn_values=[255])
    
    # 保存并关闭
    band.FlushCache()
    raster = None
    shp = None
    print(f"矢量转栅格完成,保存至:{output_raster_path}")

# 示例调用
# shapefile_to_raster(
#     shapefile_path="./glacier_data/Shene_Glacier_19761217.shp",
#     output_raster_path="./glacier_data/raster/Shene_Glacier_19761217.tif"
# )

# ===================== 核心功能5:场景分类数据集加载(地形/灾害/景观) =====================
def load_classification_data(data_root):
    """
    加载遥感场景分类数据集
    适配场景:多景观航空影像数据集(查看地址:https://www.dilitanxianjia.com/14711/)、
              航空场景分类数据集(AID)(查看地址:https://www.dilitanxianjia.com/14653/)、
              多类型地形卫星图像数据集(查看地址:https://www.dilitanxianjia.com/14539/)、
              多类型灾害遥感数据集(查看地址:https://www.dilitanxianjia.com/467/)、
              飓风受损房屋卫星数据集(查看地址:https://www.dilitanxianjia.com/1176/)
    :param data_root: 数据集根目录(按类别分文件夹)
    :return: 图像列表、标签列表、类别名称列表
    """
    import os
    from PIL import Image
    
    imgs = []
    labels = []
    class_names = sorted(os.listdir(data_root))  # 按文件夹名获取类别
    
    for cls_idx, cls_name in enumerate(class_names):
        cls_dir = os.path.join(data_root, cls_name)
        if not os.path.isdir(cls_dir):
            continue
        # 遍历该类别下所有图像
        for img_name in os.listdir(cls_dir):
            if img_name.endswith((".jpg", ".png", ".tif")):
                img_path = os.path.join(cls_dir, img_name)
                # 读取并统一尺寸
                img = Image.open(img_path).resize((256, 256))
                img = np.array(img)
                # 处理灰度图转RGB
                if len(img.shape) == 2:
                    img = np.stack([img]*3, axis=-1)
                imgs.append(img)
                labels.append(cls_idx)
    
    imgs = np.array(imgs)
    labels = np.array(labels)
    print(f"分类数据集加载完成:{len(imgs)}张图像,共{len(class_names)}个类别")
    return imgs, labels, class_names

# 示例调用(多景观航空影像数据集)
# imgs, labels, class_names = load_classification_data(
#     data_root="./landscape_dataset"
# )

代码使用说明

  1. 代码分 5 个核心功能,覆盖所有 13 组数据集的加载 / 预处理需求,新手只需替换示例调用部分的本地路径即可;
  2. 若运行时提示GDAL库报错,可换用conda install gdal安装(Windows 系统更稳定);
  3. 预处理后的数据集可直接输入 YOLOv8(检测)、U-Net(分割)、ResNet(分类)等模型进行训练。

七、后续分享计划

本次分享的 13 组数据集覆盖了遥感 AI 解译的主流应用场景,后续我会继续聚焦遥感深度学习领域,为大家补充更细分场景的数据集,同时还会推出基于这些数据集的模型训练实战教程(YOLOv8 检测、U-Net 分割),帮助大家把数据集真正用起来,落地到实际的科研和项目中。

如果大家在使用这些数据集或代码的过程中,遇到格式转换、模型调参等问题,也可以私信交流,我会尽力为大家解答。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐