滑坡智能识别|遥感卫星无人机多源影像数据集|深度学习语义分割开源基准

滑坡智能识别|遥感卫星无人机多源影像数据集|深度学习语义分割开源基准

地质灾害应急监测正从人工目视解译迈向AI自动化解译,滑坡识别作为地质灾害防控核心环节,面临样本稀缺、场景单一、尺度不均、标注粗糙 四大痛点,严重制约模型泛化与工程落地。本项目发布多区域、多分辨率、高精度标注滑坡遥感数据集,配套完整深度学习训练推理代码,为科研与工程提供开箱即用的基准方案,助力滑坡智能识别技术快速迭代。

数据集信息

  • 数据规模:20,865张 高分辨率遥感影像,总容量8.55GB
  • 覆盖区域:9大典型滑坡灾区,含国内外地震诱发滑坡场景
  • 影像来源:PlanetScope、SuperView-1、GF-1卫星+无人机航拍
  • 分辨率:0.2m/0.5m/0.6m/1.0m多尺度覆盖
  • 标准格式:512×512像素TIFF格式,RGB三波段
  • 标注体系:分类标签+像素级掩码,适配语义分割/目标检测
  • 应用方向:滑坡识别、灾害清单制图、语义分割模型训练

区域与数据明细

序号 英文标识 核心说明
1 Hokkaido Iburi-Tobu 2018日本北海道地震滑坡,PlanetScope卫星
2 Jiuzhai Valley(UAV-0.2m) 2017九寨沟地震,0.2m无人机+掩膜标注
3 Jiuzhai Valley(UAV-0.5m) 九寨沟区域,0.5m无人机影像
4 Lombok 2018印尼龙目岛地震滑坡,遥感提取
5 Longxi River(SAT) 四川陇西河,0.8m卫星滑坡提取
6 Longxi River(UAV) 陇西河区域,0.2m无人机+滑坡掩膜
7 Mengdong Township 云南勐董乡,0.5m影像+掩膜
8 Moxi Town(UAV) 四川莫溪镇,0.2m/1m多尺度变化检测
9 Palu 2018印尼帕卢地震滑坡+液化
10 Tiburon Peninsula 2021海地地震,多源卫星融合

目录结构

复制代码
landslide-remote-sensing-dataset/
├── README.md               # 说明文档
├── images/                 # 原始影像(TIFF)
├── masks/                  # 像素级掩码
├── labels/                 # 分类标签
├── splits/                 # 训练/验证/测试划分
├── code/
│   ├── dataset.py          # 数据加载
│   ├── model.py            # 网络定义
│   ├── train.py            # 训练脚本
│   ├── infer.py            # 推理脚本
│   └── utils.py            # 工具函数
└── docs/                   # 技术文档

深度学习核心代码

python 复制代码
# -*- coding: utf-8 -*-
"""
@主题  遥感滑坡语义分割标准训练流程
@场景  适配卫星+无人机多源数据,解决小目标/边缘模糊/样本不均衡
@框架  PyTorch + segmentation_models_pytorch
@数据  本项目512×512 TIFF,像素级掩码标注
"""
import os
import torch
import torch.nn as nn
import albumentations as A
from albumentations.pytorch import ToTensorV2
from torch.utils.data import Dataset, DataLoader
import segmentation_models_pytorch as smp
from tqdm import tqdm
import cv2
import numpy as np

# ====================== 1. 全局配置(滑坡场景优化)======================
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
IMG_SIZE = 512
IN_CHANNELS = 3
NUM_CLASSES = 1
LEARNING_RATE = 1e-4
BATCH_SIZE = 8
EPOCHS = 50
DATA_ROOT = "./"
IMG_DIR = os.path.join(DATA_ROOT, "images")
MASK_DIR = os.path.join(DATA_ROOT, "masks")

# ====================== 2. 数据增强(遥感滑坡专用)======================
# 保留地物纹理/坡度信息,避免畸变导致边界误判
train_transform = A.Compose([
    A.Resize(IMG_SIZE, IMG_SIZE),
    A.HorizontalFlip(p=0.5),
    A.VerticalFlip(p=0.5),
    A.RandomRotate90(p=0.5),
    A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),
    ToTensorV2()
])

val_transform = A.Compose([
    A.Resize(IMG_SIZE, IMG_SIZE),
    A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),
    ToTensorV2()
])

# ====================== 3. 数据集加载(适配TIFF与掩码)======================
class LandslideDataset(Dataset):
    def __init__(self, img_dir, mask_dir, transform=None):
        self.img_paths = sorted([os.path.join(img_dir, f) for f in os.listdir(img_dir) if f.endswith(".tif")])
        self.mask_paths = sorted([os.path.join(mask_dir, f) for f in os.listdir(mask_dir) if f.endswith(".tif")])
        self.transform = transform

    def __len__(self):
        return len(self.img_paths)

    def __getitem__(self, idx):
        img = cv2.imread(self.img_paths[idx])
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        mask = cv2.imread(self.mask_paths[idx], cv2.IMREAD_GRAYSCALE)
        mask = (mask > 0).astype(np.float32)  # 二值化:滑坡=1,背景=0

        if self.transform:
            augmented = self.transform(image=img, mask=mask)
            img = augmented["image"]
            mask = augmented["mask"].unsqueeze(0)
        return img, mask

# ====================== 4. 模型构建(U-Net+ResNet34,兼顾精度速度)======================
model = smp.Unet(
    encoder_name="resnet34",
    encoder_weights="imagenet",
    in_channels=IN_CHANNELS,
    classes=NUM_CLASSES,
    activation="sigmoid"
).to(DEVICE)

# ====================== 5. 损失函数(解决滑坡样本不均衡)======================
# 混合Dice+BCE,降低背景主导、提升滑坡边界召回率
loss_fn = smp.losses.DiceLoss(smp.losses.BINARY_MODE) + smp.losses.BCELoss()

# ====================== 6. 优化器与指标======================
optimizer = torch.optim.AdamW(model.parameters(), lr=LEARNING_RATE)
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=EPOCHS)
metrics = [smp.metrics.IoU(threshold=0.5)]

# ====================== 7. 训练&验证核心逻辑======================
def train_one_epoch(model, loader, loss_fn, optimizer, device):
    model.train()
    total_loss = 0
    for img, mask in tqdm(loader):
        img, mask = img.to(device), mask.to(device)
        pred = model(img)
        loss = loss_fn(pred, mask)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        total_loss += loss.item()
    return total_loss / len(loader)

def val_one_epoch(model, loader, loss_fn, metrics, device):
    model.eval()
    total_loss = 0
    total_metrics = {m.__name__: 0 for m in metrics}
    with torch.no_grad():
        for img, mask in tqdm(loader):
            img, mask = img.to(device), mask.to(device)
            pred = model(img)
            loss = loss_fn(pred, mask)
            total_loss += loss.item()
            for m in metrics:
                total_metrics[m.__name__] += m(pred, mask).item()
    return total_loss / len(loader), {k: v / len(loader) for k, v in total_metrics.items()}

# ====================== 8. 启动训练======================
if __name__ == "__main__":
    train_ds = LandslideDataset(IMG_DIR, MASK_DIR, train_transform)
    train_loader = DataLoader(train_ds, batch_size=BATCH_SIZE, shuffle=True)
    val_loader = DataLoader(train_ds, batch_size=BATCH_SIZE, shuffle=False)
    for epoch in range(EPOCHS):
        train_loss = train_one_epoch(model, train_loader, loss_fn, optimizer, DEVICE)
        val_loss, val_metrics = val_one_epoch(model, val_loader, loss_fn, metrics, DEVICE)
        scheduler.step()
        print(f"Epoch {epoch+1:2d} | TrainLoss: {train_loss:.4f} | ValLoss: {val_loss:.4f} | IoU: {val_metrics['iou_score']:.4f}")
    torch.save(model.state_dict(), "landslide_segmentation_best.pth")

技术优势

  1. 多源融合:卫星+无人机互补,覆盖广域与精细场景
  2. 尺度齐全:0.2m--1m分辨率,适配大/中/小尺度滑坡
  3. 标注精准:像素级掩码,直接训练主流分割模型
  4. 工程友好:标准格式、目录清晰、开箱即用
  5. 泛化性强:多区域多地貌,提升模型跨区域迁移能力

典型应用方向

  • 地震/降雨诱发滑坡快速识别与提取
  • 地质灾害风险区划与监测预警
  • 遥感AI语义分割模型训练与 benchmark
  • 应急测绘、灾害评估、灾后重建规划

使用说明

  1. 下载数据集,按标准目录放置
  2. 配置环境:pip install torch segmentation-models-pytorch albumentations opencv-python tqdm
  3. 调整路径与超参数,运行train.py启动训练
  4. infer.py对新影像批量推理输出滑坡掩码

标签

#遥感影像 #滑坡识别 #语义分割 #深度学习 #无人机航拍 #地质灾害 #数据集 #PyTorch #U-Net #智能解译

相关推荐
马士兵教育3 分钟前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
没事别瞎琢磨4 分钟前
十四、Git Worktree 隔离执行
人工智能·node.js
安全指北针11 分钟前
大模型时代,谁在领跑中国AI安全赛道?中国AI安全产品市场分析
人工智能
KaMeidebaby36 分钟前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
Cloud_Shy61837 分钟前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 30 - 32)
开发语言·人工智能·笔记·python·学习方法
YueTann39 分钟前
OpenRLHF设计
人工智能
云烟成雨TD41 分钟前
Spring AI 1.x 系列【52】可观测集成 SkyWalking
人工智能·spring·skywalking
云烟成雨TD41 分钟前
Spring AI 1.x 系列【57】动态工具发现:Tool Search Tool
java·人工智能·spring
AndrewHZ42 分钟前
【LLM技术全景】规模定律与模型演进:为什么模型越大越强?
人工智能·gpt·深度学习·语言模型·llm·openai·规模定律
galaxylove42 分钟前
Gartner发布创新洞察:AI SOC智能体加速通信运营商安全运营转型
大数据·人工智能·安全