新闻详情

新闻详情

首页 / 资讯中心 / 详情

水体区域分割数据集 海陆分割数据集 水与陆地分割检测 遥感水体分割数据集 原图(3841张)和对应的分割mask(3841张) 陆地上的水体区域进行图像分割

发布时间:2026/9/1 13:14:35来源:尧图网络
水体区域分割数据集 海陆分割数据集 水与陆地分割检测 遥感水体分割数据集 原图(3841张)和对应的分割mask(3841张) 陆地上的水体区域进行图像分割
水体区域分割数据集 海陆分割数据集 水与陆地分割检测 遥感水体分割数据集 原图3841张和对应的分割mask3841张 陆地上的水体区域进行图像分割解决卫星遥感水体图像分割任务:unettransunet实现包含遥感水体分割数据集Satellite_Images_of_Water_Bodies用于对陆地上的水体区域进行图像分割。包含原图3841张和对应的分割mask3841张附深度学习网络或改进网络实现分割。解决遥感图像的水体区域分割任务卫星遥感水体图像分割任务如何准备数据、训练模型、评估模型和可视化结果。使用UNet和TransUNet两种模型进行水体区域分割任务并提供完整的代码示例。1. 环境准备首先确保你已经安装了必要的库和工具。你可以使用以下命令安装所需的库pipinstalltorch torchvision pipinstallnumpy pipinstallpandas pipinstallmatplotlib pipinstallscikit-image pipinstallalbumentations pipinstalltqdm pipinstalleinops pipinstalltransformers2. 数据准备假设你的数据集目录结构如下Satellite_Images_of_Water_Bodies/ ├── images/ │ ├── 0001.jpg │ ├── 0002.jpg │ └── ... ├── masks/ │ ├── 0001.png │ ├── 0002.png │ └── ...每个图像文件和对应的标签文件都以相同的文件名命名例如0001.jpg和0001.png。3. 创建数据加载器创建一个数据加载器来读取图像和标签。我们使用PyTorch的Dataset和DataLoader类。importosimporttorchfromtorch.utils.dataimportDataset,DataLoaderfromPILimportImageimportnumpyasnpimportalbumentationsasAfromalbumentations.pytorchimportToTensorV2classWaterBodyDataset(Dataset):def__init__(self,image_dir,mask_dir,transformNone):self.image_dirimage_dir self.mask_dirmask_dir self.transformtransform self.imagesos.listdir(image_dir)def__len__(self):returnlen(self.images)def__getitem__(self,index):img_pathos.path.join(self.image_dir,self.images[index])mask_pathos.path.join(self.mask_dir,self.images[index].replace(.jpg,.png))imagenp.array(Image.open(img_path).convert(RGB))masknp.array(Image.open(mask_dir).convert(L),dtypenp.float32)mask[mask255.0]1.0ifself.transformisnotNone:augmentationsself.transform(imageimage,maskmask)imageaugmentations[image]maskaugmentations[mask]returnimage,mask# 数据增强transformA.Compose([A.Resize(height256,width256),A.Rotate(limit35,p1.0),A.HorizontalFlip(p0.5),A.VerticalFlip(p0.1),A.Normalize(mean[0.485,0.456,0.406],std[0.229,0.224,0.225],max_pixel_value255.0,),ToTensorV2(),])# 创建数据加载器train_datasetWaterBodyDataset(image_dirSatellite_Images_of_Water_Bodies/images,mask_dirSatellite_Images_of_Water_Bodies/masks,transformtransform,)train_loaderDataLoader(train_dataset,batch_size16,shuffleTrue,num_workers2)4. 定义UNet模型UNet是一种改进的UNet模型通过引入更多的跳跃连接来提高性能。importtorchimporttorch.nnasnnimporttorch.nn.functionalasFclassDoubleConv(nn.Module):def__init__(self,in_channels,out_channels):super(DoubleConv,self).__init__()self.convnn.Sequential(nn.Conv2d(in_channels,out_channels,3,1,1,biasFalse),nn.BatchNorm2d(out_channels),nn.ReLU(inplaceTrue),nn.Conv2d(out_channels,out_channels,3,1,1,biasFalse),nn.BatchNorm2d(out_channels),nn.ReLU(inplaceTrue),)defforward(self,x):returnself.conv(x)classUNetPlusPlus(nn.Module):def__init__(self,in_channels3,out_channels1,features[32,64,128,256]):super(UNetPlusPlus,self).__init__()self.featuresfeatures self.encoder1DoubleConv(in_channels,features[0])self.encoder2DoubleConv(features[0],features[1])self.encoder3DoubleConv(features[1],features[2])self.encoder4DoubleConv(features[2],features[3])self.upconv3nn.ConvTranspose2d(features[3],features[2],kernel_size2,stride2)self.upconv2nn.ConvTranspose2d(features[2],features[1],kernel_size2,stride2)self.upconv1nn.ConvTranspose2d(features[1],features[0],kernel_size2,stride2)self.decoder3DoubleConv(features[3]features[2],features[2])self.decoder2DoubleConv(features[2]features[1],features[1])self.decoder1DoubleConv(features[1]features[0],features[0])self.final_convnn.Conv2d(features[0],out_channels,kernel_size1)defforward(self,x):enc1self.encoder1(x)enc2self.encoder2(F.max_pool2d(enc1,2))enc3self.encoder3(F.max_pool2d(enc2,2))enc4self.encoder4(F.max_pool2d(enc3,2))dec3self.upconv3(enc4)dec3torch.cat((dec3,enc3),dim1)dec3self.decoder3(dec3)dec2self.upconv2(dec3)dec2torch.cat((dec2,enc2),dim1)dec2self.decoder2(dec2)dec1self.upconv1(dec2)dec1torch.cat((dec1,enc1),dim1)dec1self.decoder1(dec1)returnself.final_conv(dec1)5. 定义TransUNet模型TransUNet结合了Transformer和UNet的优点适用于高分辨率图像的分割任务。importtorchimporttorch.nnasnnfromtransformersimportViTModelfromeinopsimportrearrangeclassTransUNet(nn.Module):def__init__(self,in_channels3,out_channels1,vit_namegoogle/vit-base-patch16-224-in21k):super(TransUNet,self).__init__()self.vitViTModel.from_pretrained(vit_name)self.upconv1nn.ConvTranspose2d(768,256,kernel_size2,stride2)self.upconv2nn.ConvTranspose2d(256,128,kernel_size2,stride2)self.upconv3nn.ConvTranspose2d(128,64,kernel_size2,stride2)self.decoder1DoubleConv(768256,256)self.decoder2DoubleConv(256128,128)self.decoder3DoubleConv(12864,64)self.final_convnn.Conv2d(64,out_channels,kernel_size1)defforward(self,x):xself.vit(pixel_valuesx)[last_hidden_state]xrearrange(x,b (h w) c - b c h w,h14,w14)dec1self.upconv1(x)dec1self.decoder1(dec1)dec2self.upconv2(dec1)dec2self.decoder2(dec2)dec3self.upconv3(dec2)dec3self.decoder3(dec3)returnself.final_conv(dec3)6. 训练模型定义训练和验证函数。importtorch.optimasoptimfromtqdmimporttqdm devicetorch.device(cudaiftorch.cuda.is_available()elsecpu)deftrain_fn(loader,model,optimizer,loss_fn,scaler):looptqdm(loader)forbatch_idx,(data,targets)inenumerate(loop):datadata.to(device)targetstargets.unsqueeze(1).to(device)# Forwardwithtorch.cuda.amp.autocast():predictionsmodel(data)lossloss_fn(predictions,targets)# Backwardoptimizer.zero_grad()scaler.scale(loss).backward()scaler.step(optimizer)scaler.update()# Update tqdm looploop.set_postfix(lossloss.item())defcheck_accuracy(loader,model,devicecuda):num_correct0num_pixels0dice_score0model.eval()withtorch.no_grad():forx,yinloader:xx.to(device)yy.to(device).unsqueeze(1)predstorch.sigmoid(model(x))preds(preds0.5).float()num_correct(predsy).sum()num_pixelstorch.numel(preds)dice_score(2*(preds*y).sum())/((predsy).sum()1e-8)print(fGot{num_correct}/{num_pixels}with acc{num_correct/num_pixels*100:.2f})print(fDice score:{dice_score/len(loader)})model.train()defmain():modelUNetPlusPlus(in_channels3,out_channels1).to(device)# 或者使用 TransUNet# model TransUNet(in_channels3, out_channels1).to(device)loss_fnnn.BCEWithLogitsLoss()optimizeroptim.Adam(model.parameters(),lr1e-4)scalertorch.cuda.amp.GradScaler()forepochinrange(100):# Number of epochstrain_fn(train_loader,model,optimizer,loss_fn,scaler)check_accuracy(train_loader,model,devicedevice)# Save modelcheckpoint{state_dict:model.state_dict(),optimizer:optimizer.state_dict(),}torch.save(checkpoint,fwater_body_segmentation_checkpoint.pth.tar)if__name____main__:main()
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

从AI修图到工程化:构建稳定批量图片处理流水线的完整指南 2026/9/1 16:24:38

从AI修图到工程化:构建稳定批量图片处理流水线的完整指南

昨晚,我盯着屏幕,看着那个“正在处理”的进度条从1%缓慢地爬到99%,然后……卡住了。这已经不是第一次了。从一张简单的产品图抠图,到批量处理几百张活动照片,从调整色调到智能填充背景,我几乎把所有能找到的…

阅读更多 →
ch-皖星:将视频加载等待转化为品牌互动的前端解决方案 2026/9/1 16:24:38

ch-皖星:将视频加载等待转化为品牌互动的前端解决方案

最近在开发视频类应用时,你是否遇到过这样的困境:用户点击播放后,面对一个干巴巴的“加载中”转圈动画,耐心迅速流失,最终导致播放失败或用户直接离开?传统的加载状态设计,往往只关注技术层面的…

阅读更多 →
OpenClaw 卸载完全指南:从清理到彻底移除 2026/9/1 16:24:38

OpenClaw 卸载完全指南:从清理到彻底移除

1. 引言OpenClaw 是一款功能强大的开源 AI 助手框架,但当你需要更换工具链、释放磁盘空间或解决环境冲突时,彻底卸载就显得尤为重要。本文将从二进制文件、配置目录、依赖包、系统服务等多个层面,详细介绍如何在 Linux、macOS 和 Windows 上完…

阅读更多 →
告别造假数据,直接连数据库查真实时序数据喂给TimechoAI大模型 2026/9/1 16:24:38

告别造假数据,直接连数据库查真实时序数据喂给TimechoAI大模型

告别造假数据,直接连数据库查真实时序数据喂给TimechoAI大模型前面三篇文章,我们其实都在做一件事情。那就是在本地用代码造假数据。我们造了CPU的数据,造了内存的数据,然后把这些假数据拼成一个长长的字符串,扔给Time…

阅读更多 →
基于ROS与Python的点焊机器人仿真与控制课程设计全解析 2026/9/1 16:24:38

基于ROS与Python的点焊机器人仿真与控制课程设计全解析

简介:本资源是一套面向高校自动化、机器人工程及相关专业本科生的ROS课程设计实践项目,聚焦机械臂在ROS环境下的运动仿真与点焊工艺控制,解决课程设计中缺乏完整可运行案例的问题。压缩包共57个文件,涵盖12个launch启动脚本&#…

阅读更多 →
BMS放电MOS管开关速度优化:平衡损耗、电压尖峰与EMI的工程实践 2026/9/1 16:21:36

BMS放电MOS管开关速度优化:平衡损耗、电压尖峰与EMI的工程实践

在BMS(电池管理系统)硬件开发中,MOS管作为核心的功率开关器件,其开关速度的控制绝非小事。很多工程师在调试放电回路时,常常会遇到一个两难境地:MOS管关断太慢,可能导致热损耗激增甚至器件损坏&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞