当前位置: 首页 > news >正文

地震滑坡应急响应、全球灾害制图、遥感 AI 模型泛化性研究无人机(UAV)航拍影像、PlanetScope、Gaofen-6(高分六号)卫星影像 以及 天地图(Map World)数据集

全球分布式大规模滑坡数据集

数据集整合了来自 鲁定(Luding)、尼普斯(Nippes)、北海道(Hokkaido)、九寨沟(Jiuzhaigou)和米林(Mainling) 五个地震滑坡高发区域的多源遥感影像,涵盖了 无人机(UAV)航拍影像、PlanetScope、Gaofen-6(高分六号)卫星影像 以及 天地图(Map World) 数据。数据通过多源高分辨率遥感图像实现全球分布式滑坡样本的构建,旨在支持地震诱发滑坡检测、分割及灾后评估等任务。整个数据集采用 TIFF 格式 存储,包含 训练集(train) 与 验证集(validation) 两部分,按照约 3:1(0.75:0.25)比例 随机划分,且每幅影像均不含重叠区域。

数据集大小:15621张,共26.7G
图像大小:1024×1024
图像分辨率:0.5m-3m
传感器:UAV, Map World,PlanetScope, Gaofen-6
波段:RGB
图片格式:tiff
滑坡地区:Luding, Nippes, Hokkaido,Jiuzhaigou and Mainling


全球分布式大规模滑坡数据集(15,621 张 1024×1024 RGB GeoTIFF 图像,含滑坡掩膜标签)的完整训练代码,基于语义分割任务,使用PyTorch + torchvision + Albumentations + segmentation_models_pytorch,支持多源遥感影像输入,适用于滑坡检测与灾后评估。


✅ 一、任务说明

  • 任务类型:二类语义分割(滑坡 vs 非滑坡)
  • 输入:1024×1024 RGB GeoTIFF(*.tif
  • 标签:对应二值掩膜(0=背景,1=滑坡),同样为*.tif
  • 模型建议:U-Net、DeepLabV3+、FPN(推荐使用预训练编码器)

✅ 二、目录结构(要求)

LandslideDataset/ ├── train/ │ ├── images/ # *.tif │ └── masks/ # *.tif (same name as image) └── val/ ├── images/ └── masks/

示例:

  • train/images/Luding_001.tif
  • train/masks/Luding_001.tif

✅ 三、环境安装

pipinstalltorch torchvision torchaudio pipinstallalbumentations opencv-python pillow pipinstallsegmentation-models-pytorch geopandas rasterio scikit-image pipinstalltqdm tensorboard matplotlib
  • segmentation-models-pytorch:提供 SOTA 分割架构
  • rasterio:高效读取 GeoTIFF
  • albumentations:遥感图像增强

✅ 四、完整训练代码:train_landslide.py

# train_landslide.pyimportosimporttorchimporttorch.nnasnnfromtorch.utils.dataimportDataLoaderfromtorch.optimimportAdamWfromtorch.optim.lr_schedulerimportCosineAnnealingLRimportalbumentationsasAfromalbumentations.pytorchimportToTensorV2importsegmentation_models_pytorchassmpfromtqdmimporttqdmimportnumpyasnpimportrasteriofrompathlibimportPathimportargparsefromdatetimeimportdatetime# ----------------------------# Dataset Class# ----------------------------classLandslideDataset(torch.utils.data.Dataset):def__init__(self,image_dir,mask_dir,transform=None):self.image_paths=sorted(Path(image_dir).glob("*.tif"))self.mask_paths=sorted(Path(mask_dir).glob("*.tif"))assertlen(self.image_paths)==len(self.mask_paths),"Image and mask counts mismatch!"self.transform=transformdef__len__(self):returnlen(self.image_paths)def__getitem__(self,idx):img_path=self.image_paths[idx]mask_path=self.mask_paths[idx]# 读取 GeoTIFF(仅取前3波段)withrasterio.open(img_path)assrc:image=src.read([1,2,3])# RGBimage=np.transpose(image,(1,2,0))# HWCwithrasterio.open(mask_path)assrc:mask=src.read(1)# 单通道# 确保 mask 是 0/1(有些可能是 255 表示滑坡)ifmask.max()>1:mask=(mask>0).astype(np.uint8)# 数据增强ifself.transform:augmented=self.transform(image=image,mask=mask)image=augmented['image']mask=augmented['mask']returnimage,mask.long()# mask 转为 LongTensor# ----------------------------# 训练函数# ----------------------------deftrain_one_epoch(model,dataloader,optimizer,criterion,device,epoch):model.train()total_loss=0.0pbar=tqdm(dataloader,desc=f"Epoch{epoch}")forimages,masksinpbar:images=images.to(device)masks=masks.to(device)optimizer.zero_grad()outputs=model(images)loss=criterion(outputs,masks)loss.backward()optimizer.step()total_loss+=loss.item()pbar.set_postfix(loss=loss.item())returntotal_loss/len(dataloader)# ----------------------------# 验证函数# ----------------------------defvalidate(model,dataloader,criterion,device):model.eval()total_loss=0.0total_iou=0.0count=0withtorch.no_grad():forimages,masksintqdm(dataloader,desc="Validation"):images=images.to(device)masks=masks.to(device)outputs=model(images)loss=criterion(outputs,masks)total_loss+=loss.item()# 计算 IoUpreds=torch.argmax(outputs,dim=1)intersection=((preds==1)&(masks==1)).sum((1,2))union=((preds==1)|(masks==1)).sum((1,2))iou=(intersection+1e-6)/(union+1e-6)total_iou+=iou.mean().item()count+=1avg_loss=total_loss/len(dataloader)avg_iou=total_iou/countprint(f"✅ Val Loss:{avg_loss:.4f}, mIoU:{avg_iou:.4f}")returnavg_loss,avg_iou# ----------------------------# 主函数# ----------------------------defmain(args):device=torch.device("cuda"iftorch.cuda.is_available()else"cpu")print(f"Using device:{device}")# 数据增强(遥感专用)train_transform=A.Compose([A.RandomRotate90(p=0.5),A.HorizontalFlip(p=0.5),A.VerticalFlip(p=0.5),A.OneOf([A.MotionBlur(p=0.2),A.MedianBlur(blur_limit=3,p=0.1),A.Blur(blur_limit=3,p=0.1),],p=0.2),A.CLAHE(p=0.2),# 增强对比度(适合遥感)A.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225]),# ImageNetToTensorV2(),])val_transform=A.Compose([A.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225]),ToTensorV2(),])# 数据集train_dataset=LandslideDataset(image_dir=os.path.join(args.data_root,"train/images"),mask_dir=os.path.join(args.data_root,"train/masks"),transform=train_transform)val_dataset=LandslideDataset(image_dir=os.path.join(args.data_root,"val/images"),mask_dir=os.path.join(args.data_root,"val/masks"),transform=val_transform)train_loader=DataLoader(train_dataset,batch_size=args.batch_size,shuffle=True,num_workers=4)val_loader=DataLoader(val_dataset,batch_size=args.batch_size,shuffle=False,num_workers=4)# 模型(U-Net with ResNet34 encoder)model=smp.Unet(encoder_name="resnet34",encoder_weights="imagenet",in_channels=3,classes=2# 二分类:background + landslide).to(device)# 损失函数(结合 Dice + CrossEntropy)dice_loss=smp.losses.DiceLoss(mode="multiclass")ce_loss=nn.CrossEntropyLoss()defcriterion(y_pred,y_true):returndice_loss(y_pred,y_true)+ce_loss(y_pred,y_true)optimizer=AdamW(model.parameters(),lr=args.lr,weight_decay=1e-4)scheduler=CosineAnnealingLR(optimizer,T_max=args.epochs)best_iou=0.0save_dir=f"runs/landslide_{datetime.now().strftime('%Y%m%d_%H%M')}"os.makedirs(save_dir,exist_ok=True)# 训练循环forepochinrange(1,args.epochs+1):train_loss=train_one_epoch(model,train_loader,optimizer,criterion,device,epoch)val_loss,val_iou=validate(model,val_loader,criterion,device)scheduler.step()# 保存最佳模型ifval_iou>best_iou:best_iou=val_iou torch.save(model.state_dict(),os.path.join(save_dir,"best_model.pth"))print(f"🎉 New best mIoU:{best_iou:.4f}, saved!")# 日志withopen(os.path.join(save_dir,"log.txt"),"a")asf:f.write(f"Epoch{epoch}: Train Loss={train_loss:.4f}, Val Loss={val_loss:.4f}, mIoU={val_iou:.4f}\n")print(f"✅ Training finished! Best mIoU:{best_iou:.4f}")print(f"📁 Model saved to:{save_dir}")if__name__=="__main__":parser=argparse.ArgumentParser()parser.add_argument("--data_root",type=str,default="./LandslideDataset",help="Dataset root directory")parser.add_argument("--batch_size",type=int,default=8,help="Batch size (adjust based on GPU memory)")parser.add_argument("--epochs",type=int,default=50,help="Number of training epochs")parser.add_argument("--lr",type=float,default=1e-3,help="Learning rate")args=parser.parse_args()main(args)

✅ 五、运行命令示例

python train_landslide.py\--data_root./LandslideDataset\--batch_size8\--epochs50\--lr0.001

💡显存提示:1024×1024 图像较大,若 GPU 显存 < 16GB,建议:

  • 使用batch_size=42
  • 或在train_transform中加入A.Resize(512, 512)进行下采样训练(推理时再上采样)

✅ 六、模型选择建议

模型优点适用场景
U-Net (ResNet34)平衡精度与速度推荐默认选择
DeepLabV3+ (ResNet50)边界更精细高精度需求
FPN (EfficientNet-b3)多尺度融合强小滑坡检测

修改方式(在main()中):

model=smp.DeepLabV3Plus(encoder_name="resnet50",encoder_weights="imagenet",classes=2).to(device)

http://www.jsqmd.com/news/198229/

相关文章:

  • 如何用Windows清理工具轻松释放C盘空间,告别系统卡顿烦恼
  • 2026年家装板材品牌公司推荐:TOP5排名揭晓,基于环保标准与市场口碑深度对比 - 品牌推荐
  • WindowsCleaner终极指南:彻底告别C盘爆红的智能清理神器
  • 如何选择上海全屋定制品牌?2026年最新市场评测与5家实力品牌推荐! - 品牌推荐
  • 大学生竞赛管理系统|基于java + vue大学生竞赛管理系统(源码+数据库+文档)
  • 2025年集装袋源头厂家推荐榜:天津市滨海新区塘沽福利塑料制品厂,抗老化/防水/船级社/防静电/拉筋集装袋全系供应 - 品牌推荐官
  • 市区通勤首选!20万内双擎混动紧凑型SUV推荐,平顺起步省油实用
  • Spring-boot读书笔记一RestTemplate.exchange()
  • 基于YOLOv10的足球运动员检测系统(YOLOv10深度学习+YOLO数据集+UI界面+Python项目源码+模型)
  • 家用后排空间舒适性优选:20万以内双擎混动紧凑型SUV推荐
  • GitHub镜像站点加速下载IndexTTS 2.0源码和依赖包技巧
  • C#调用IndexTTS 2.0 API接口?跨语言集成可行性探讨
  • Windows系统清理终极指南:5步快速解决C盘空间不足问题
  • Hanime1Plugin:突破性Android观影解决方案的革命性升级
  • FreeMove磁盘空间优化神器:彻底解决C盘爆满难题
  • 老年痴呆照护:记忆唤醒老歌老电影片段语音
  • 揭秘空间数据聚类模式:如何用R语言精准计算Moran指数并解读结果
  • 微信网页版终极解决方案:wechat-need-web插件完整指南
  • 2026年护眼灯品牌推荐:聚焦儿童近视防控认证的十强品牌深度评测与盘点。 - 十大品牌推荐
  • 告别词库迁移困境:深蓝词库转换让输入习惯无缝流转
  • Gradio集成IndexTTS打造在线试用语音合成平台
  • 对比主流TTS模型:IndexTTS 2.0在可控性与灵活性上的优势分析
  • 揭秘R语言中随机森林特征重要性排序:如何精准提取关键预测因子
  • Windows Cleaner完整操作手册:10分钟彻底解决C盘爆满问题
  • 基于YOLOv10的轴承缺陷检测系统(YOLOv10深度学习+YOLO数据集+UI界面+Python项目源码+模型)
  • R语言GPT数据分析思路全解析(AI赋能数据科学大揭秘)
  • Degrees of Lewdity中文汉化5分钟快速入门完整攻略
  • 跨平台词库转换神器:深蓝词库转换工具完全指南
  • 服务之间咋说话?OpenFeign远程调用
  • 草原气象站