news 2026/6/2 20:17:07

基于UNet的灾后高分辨率无人机图像语义分割:水体、建筑损毁与复杂场景精准识别实战 洪水、飓风等灾后救援无人机图像语义分割数据集

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于UNet的灾后高分辨率无人机图像语义分割:水体、建筑损毁与复杂场景精准识别实战 洪水、飓风等灾后救援无人机图像语义分割数据集

基于UNet的灾后高分辨率无人机图像语义分割:水体、建筑损毁与复杂场景精准识别实战 洪水、飓风等灾后救援无人机图像语义分割数据集

基于UNet的灾后高分辨率无人机图像语义分割:水体、建筑损毁与复杂场景精准识别实战 洪水、飓风等灾后救援无人机图像语义分割数据集 无人机洪水等灾害数据集的训练及应用

文章目录

      • 🎨 语义分割类别表
      • 1. 环境搭建
      • 2. 数据预处理
      • 3. UNet模型构建
      • 4. 训练模型
      • 5. 结果展示与评估

以下文字及代码仅供参考学习

灾害类数据集的训练及应用 洪水、飓风等灾后救援高分辨率无人机图像语义分割数据集

1.高分辨率图像:22GB数据量,数据集中的图像具有高清晰度(4000*3000分辨率),能够捕捉更多细节,有利于识别小尺度目标。
2.丰富的语义标注:包含多种灾害场景下的像素级标注,涵盖水、建筑物、车辆、道路、树木和池塘等10个类别。
3.多样的灾害场景:数据集包含多种灾害类型(如飓风、洪水等)的场景,覆盖不同的光照和天气条件。
4.损坏程度分类:除了语义分割标注外,还提供了建筑物和道路的损坏程度分类(如轻微损坏、中度损坏、严重损坏等)。
5.图像数量:共4494张图像。
6.语义分割类别:包括水、无损坏建筑、轻微损坏建筑、严重损坏建筑、完全损毁建筑、车辆、畅通道路、阻塞道路、树木和池塘。

语义分割类别的英文表格,

🎨 语义分割类别表

序号中文名称英文名称颜色编码
0背景Background
1Water
2无损坏建筑Building-No-Damage
3轻微损坏建筑Building-Medium-Damage
4严重损坏建筑Building-Major-Damage
5完全损毁建筑Building-Total-Destruction
6车辆Vehicle
7畅通道路Road-Clear
8阻塞道路Road-Blocked
9树木Tree
10池塘Pool

使用UNet进行语义分割是一个经典的选择,尤其适合处理高分辨率图像。基于你提供的关于灾后救援高分辨率无人机图像的数据集信息,

下面将指导你如何准备数据、训练UNet模型,并对结果进行评估和展示。仅供参考学习。

1. 环境搭建

首先,确保你的环境中安装了必要的库:

pipinstalltorch torchvision numpy matplotlib opencv-python

如果你想要更高效的训练(特别是在GPU上),请确认PyTorch已经正确配置为使用CUDA。

2. 数据预处理

假设你的数据集结构如下:

dataset/ ├── images/ # 原始图像 └── masks/ # 标注图像(每个像素值代表类别ID)

创建一个自定义的Dataset类来加载图像和对应的标签:

importosfromtorch.utils.dataimportDataset,DataLoaderfromPILimportImageimportnumpyasnpimporttorchfromtorchvisionimporttransformsclassDisasterRecoveryDataset(Dataset):def__init__(self,image_dir,mask_dir,transform=None):self.image_dir=image_dir self.mask_dir=mask_dir self.transform=transform self.images=os.listdir(image_dir)def__len__(self):returnlen(self.images)def__getitem__(self,idx):img_path=os.path.join(self.image_dir,self.images[idx])mask_path=os.path.join(self.mask_dir,self.images[idx].replace(".jpg","_mask.png"))image=np.array(Image.open(img_path).convert("RGB"))mask=np.array(Image.open(mask_path).convert("L"),dtype=np.float32)# 转换为灰度图ifself.transformisnotNone:augmentations=self.transform(image=image,mask=mask)image=augmentations["image"]mask=augmentations["mask"]# Normalize and convert to tensorimage=transforms.ToTensor()(image)mask=torch.tensor(mask,dtype=torch.long)returnimage,mask

定义一些基本的图像增强操作:

importalbumentationsasAfromalbumentations.pytorchimportToTensorV2 transform=A.Compose([A.Resize(height=4000,width=3000),# 根据需要调整大小A.Normalize(mean=[0.0,0.0,0.0],std=[1.0,1.0,1.0],max_pixel_value=255.0,),ToTensorV2(),],)

3. UNet模型构建

这里提供了一个简单的UNet实现:

importtorch.nnasnnimporttorchclassUNet(nn.Module):def__init__(self,in_channels=3,out_channels=10):# 根据类别数量调整out_channelssuper(UNet,self).__init__()# 定义UNet的各层...# 这里省略了具体的网络结构定义,请根据实际需求或参考官方UNet实现添加代码。passdefforward(self,x):# 前向传播逻辑...pass# 实例化模型model=UNet(in_channels=3,out_channels=10).cuda()# 如果有GPU的话

请注意,上述代码中的UNet架构部分被简化了。你需要根据实际情况或者参考UNet的原始论文来完成整个网络的设计。

4. 训练模型

定义损失函数、优化器,并开始训练:

criterion=nn.CrossEntropyLoss()optimizer=torch.optim.Adam(model.parameters(),lr=1e-4)deftrain_model(model,dataloaders,criterion,optimizer,num_epochs=25):forepochinrange(num_epochs):print('Epoch {}/{}'.format(epoch,num_epochs-1))print('-'*10)forphasein['train','val']:ifphase=='train':model.train()else:model.eval()running_loss=0.0forinputs,labelsindataloaders[phase]:inputs=inputs.cuda()labels=labels.cuda()optimizer.zero_grad()withtorch.set_grad_enabled(phase=='train'):outputs=model(inputs)loss=criterion(outputs,labels)ifphase=='train':loss.backward()optimizer.step()running_loss+=loss.item()*inputs.size(0)epoch_loss=running_loss/len(dataloaders[phase].dataset)print('{} Loss: {:.4f}'.format(phase,epoch_loss))returnmodel# 加载数据集dataset_train=DisasterRecoveryDataset(image_dir="path/to/train_images/",mask_dir="path/to/train_masks/",transform=transform)dataset_val=DisasterRecoveryDataset(image_dir="path/to/val_images/",mask_dir="path/to/val_masks/",transform=transform)dataloader_train=DataLoader(dataset_train,batch_size=2,shuffle=True)dataloader_val=DataLoader(dataset_val,batch_size=2,shuffle=False)dataloaders_dict={"train":dataloader_train,"val":dataloader_val}# 开始训练trained_model=train_model(model,dataloaders_dict,criterion,optimizer,num_epochs=25)

5. 结果展示与评估

在验证集或测试集上进行预测并可视化结果:

importmatplotlib.pyplotaspltdefvisualize_predictions(model,dataloader):model.eval()withtorch.no_grad():fori,(inputs,labels)inenumerate(dataloader):inputs=inputs.cuda()outputs=model(inputs)_,preds=torch.max(outputs,1)fig,axarr=plt.subplots(1,3)axarr[0].imshow(inputs.cpu().numpy()[0].transpose(1,2,0))axarr[1].imshow(labels.cpu().numpy()[0],cmap='gray')axarr[2].imshow(preds.cpu().numpy()[0],cmap='gray')plt.show()break# 只显示一张图片作为示例visualize_predictions(trained_model,dataloader_val)

基础框架,具体细节如UNet的具体实现、超参数调整等可能需要根据实际情况进一步优化。仅供参考学习使用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 20:13:14

专业的AI论文平台排名(2026 优选)

基于功能全面性、学术匹配度、用户反馈质量及操作便捷性,以下是当前主流AI论文写作工具的权威测评排名,按综合推荐指数由高至低排列,并附上核心功能亮点与适用人群说明。🏆 第一梯队:全流程学术解决方案(★…

作者头像 李华
网站建设 2026/6/2 20:13:13

2026年AI论文工具深度评测:6款工具全流程得分排名

论文写到深夜,查重率还是高得离谱;AI生成的段落被系统判定为高AIGC内容,直接被导师质疑学术诚信;参考文献格式改了又改,始终不符合学校要求的最新标准……2026年,高校对论文的学术规范性、原创性和AI检测指…

作者头像 李华
网站建设 2026/6/2 20:09:10

ESP32入门实战:从零搭建Arduino环境实现LED闪烁

1. 项目概述:从点亮第一盏灯开始你的嵌入式之旅如果你对物联网、智能硬件或者自动化控制感兴趣,那么“让一块电路板上的小灯按照你的指令闪烁”几乎就是踏入这个世界的“Hello World”。这听起来简单,背后却串联起了从软件环境搭建、硬件驱动…

作者头像 李华
网站建设 2026/6/2 20:04:40

Highcharts v13 全新时间轴标签边界格式|让时间维度表达更智能

Highcharts v13 重磅升级:时间轴终于可以“知道自己在哪里” 在数据可视化领域,时间序列图表是最常见、也是最重要的图表类型之一。从股票行情、工业监控,到物联网设备和业务运营分析,大量数据都围绕时间展开。 长期以来&#x…

作者头像 李华
网站建设 2026/6/2 20:04:05

DIY冰箱磁铁死投:离线匿名数据交换的硬件实现与安全实践

1. 项目概述:当USB遇上磁铁,一场离线匿名的数据游戏几年前,我在一个创意市集上看到有人把U盘嵌在水泥块里,然后“种”在了公园的长椅下,旁边只留了一个不起眼的标记。这个被称为“死投”的玩意儿,瞬间击中了…

作者头像 李华
网站建设 2026/6/2 20:03:01

如何快速导出微信聊天记录:WeChatMsg完全免费开源工具终极指南

如何快速导出微信聊天记录:WeChatMsg完全免费开源工具终极指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…

作者头像 李华