
遥感无人机智慧能源发电厂遥感分割数据集煤炭石油天然气其他化石燃料核能等11种类型分割出具体发电厂区域 发电厂分割数据集 自动化监测、分析以及优化各种能源发电厂的运营情况。数据集文字描述遥感无人机智慧能源煤炭石油太阳能等发电厂遥感分割数据集4400余对遥感影像每对影像包含1m分辨率与30m分辨率19GB分割类别按照电厂燃料类别区分共区分为煤炭石油天然气其他化石燃料核能水利发电太阳能风能地热能废热生物质11种类型且分割出具体发电厂区域mask、yolo格式✅ 遥感智慧能源发电厂分割数据集项目详情数据集名称遥感智慧能源发电厂分割数据集数据总量4400余对影像共8800张影像数据量大小约19GB影像分辨率每对影像包括- 1米分辨率- 30米分辨率影像格式常见遥感影像格式如GeoTIFF等标注格式分割掩膜mask图像YOLO格式txt文件应用场景能源监测、环境管理、智能电网规划等数据集组织结构图像与对应标签一一配对存储 发电厂类型分类表类别编号英文名称中文解释备注0coal煤炭主要化石燃料之一1oil石油另一主要化石燃料2natural_gas天然气清洁化石燃料3other_fossil_fuels其他化石燃料包括但不限于油页岩、油砂等4nuclear核能核反应堆发电5hydroelectric水利发电利用水力发电6solar太阳能太阳能光伏发电或热发电7wind风能风力涡轮机发电8geothermal地热能地热资源利用发电9waste_heat废热工业废热回收发电10biomass生物质生物质能发电️ 博主建议 数据集目录结构建议remote_sensing_power_plants/ ├── images/ # 原始遥感影像 │ ├── high_res/ # 1米分辨率影像 │ │ ├── image_0001.tif │ │ └── ... │ └── low_res/ # 30米分辨率影像 │ ├── image_0001.tif │ └── ... ├── masks/ # 对应的分割掩膜mask图像 │ ├── mask_0001.png # 二值化掩膜图像素值代表类别ID │ └── ... ├── labels_yolo/ # YOLO格式标注txt文件 │ ├── label_0001.txt # 每行表示一个bounding box及类别ID │ └── ... └── data.yaml # 数据集配置文件用于模型训练 数据用途与价值应用方向说明能源监控与管理实时监测各类能源发电厂的状态优化能源调度环境保护与规划分析不同能源发电厂对环境的影响制定可持续发展规划智能电网建设支持智能电网中的能源分布可视化提升电网运行效率学术研究与教育提供丰富的遥感影像数据支持相关领域的科研与教学活动灾害预警与应急响应快速识别受损发电设施辅助灾后恢复决策️ 数据增强与处理建议多尺度分析结合1米和30米分辨率影像进行多尺度特征提取。数据增强使用旋转、翻转、色彩抖动等方法增加样本多样性提高模型鲁棒性。跨域迁移学习在其他领域预训练的模型基础上进行微调加速训练过程并提升性能。此数据集为能源行业提供了一个强大的工具可用于自动化监测、分析以及优化各种能源发电厂的运营情况。✅ 一、环境依赖pipinstalltorch torchvision numpy opencv-python pillow scikit-image albumentations matplotlib✅ 二、数据集结构remote_sensing_power_plants/ ├── images/ # 1米分辨率遥感图像GeoTIFF 或 PNG │ ├── img_0001.png │ └── ... ├── masks/ # 对应的分割掩膜单通道 PNG像素值 0-10 表示类别 │ ├── mask_0001.png │ └── ... └── data.yaml # 类别配置文件可选说明图像尺寸可变如 512×512 或 1024×1024建议统一裁剪或缩放。掩膜为单通道图像像素值 ∈ [0, 10]分别对应 11 类发电厂类型。若使用 GeoTIFF可用rasterio或tifffile读取。✅ 三、数据集类定义含数据增强importosfromPILimportImageimportnumpyasnpimporttorchfromtorch.utils.dataimportDataset,DataLoaderimportalbumentationsasAfromalbumentations.pytorchimportToTensorV2classEnergyPlantDataset(Dataset):def__init__(self,image_dir,mask_dir,transformNone):self.image_dirimage_dir self.mask_dirmask_dir self.transformtransform self.imagessorted(os.listdir(image_dir))def__len__(self):returnlen(self.images)def__getitem__(self,idx):img_nameself.images[idx]img_pathos.path.join(self.image_dir,img_name)mask_pathos.path.join(self.mask_dir,img_name.replace(.tif,.png))# 假设掩膜是PNG# 读取图像遥感影像通常为多波段这里简化为RGBimagenp.array(Image.open(img_path).convert(RGB))masknp.array(Image.open(mask_path).convert(L),dtypenp.int64)# 单通道类别IDifself.transform:augmentedself.transform(imageimage,maskmask)imageaugmented[image]maskaugmented[mask]returnimage,mask# 数据增强与预处理train_transformA.Compose([A.Resize(512,512),# 统一分辨率A.Rotate(limit30,p0.5),A.HorizontalFlip(p0.5),A.VerticalFlip(p0.2),A.ColorJitter(brightness0.2,contrast0.2,saturation0.2,hue0.1,p0.5),A.Normalize(mean[0.485,0.456,0.406],std[0.229,0.224,0.225]),ToTensorV2(),])val_transformA.Compose([A.Resize(512,512),A.Normalize(mean[0.485,0.456,0.406],std[0.229,0.224,0.225]),ToTensorV2(),])✅ 四、U-Net 模型定义简化版importtorch.nnasnnimporttorchclassUNet(nn.Module):def__init__(self,in_channels3,num_classes11):super(UNet,self).__init__()# 编码器self.enc1self.conv_block(in_channels,64)self.pool1nn.MaxPool2d(2)self.enc2self.conv_block(64,128)self.pool2nn.MaxPool2d(2)self.enc3self.conv_block(128,256)self.pool3nn.MaxPool2d(2)self.enc4self.conv_block(256,512)self.pool4nn.MaxPool2d(2)# 瓶颈层self.bottleneckself.conv_block(512,1024)# 解码器self.up4self.up_conv(1024,512)self.dec4self.conv_block(1024,512)self.up3self.up_conv(512,256)self.dec3self.conv_block(512,256)self.up2self.up_conv(256,128)self.dec2self.conv_block(256,128)self.up1self.up_conv(128,64)self.dec1self.conv_block(128,64)# 输出层self.finalnn.Conv2d(64,num_classes,kernel_size1)defconv_block(self,in_channels,out_channels):returnnn.Sequential(nn.Conv2d(in_channels,out_channels,3,padding1),nn.ReLU(inplaceTrue),nn.BatchNorm2d(out_channels),nn.Conv2d(out_channels,out_channels,3,padding1),nn.ReLU(inplaceTrue),nn.BatchNorm2d(out_channels))defup_conv(self,in_channels,out_channels):returnnn.ConvTranspose2d(in_channels,out_channels,kernel_size2,stride2)defforward(self,x):# 编码e1self.enc1(x)e2self.enc2(self.pool1(e1))e3self.enc3(self.pool2(e2))e4self.enc4(self.pool3(e3))# 瓶颈bself.bottleneck(self.pool4(e4))# 解码 跳跃连接d4self.up4(b)d4torch.cat((e4,d4),dim1)d4self.dec4(d4)d3self.up3(d4)d3torch.cat((e3,d3),dim1)d3self.dec3(d3)d2self.up2(d3)d2torch.cat((e2,d2),dim1)d2self.dec2(d2)d1self.up1(d2)d1torch.cat((e1,d1),dim1)d1self.dec1(d1)outself.final(d1)returnout✅ 五、训练主函数deftrain_model(model,dataloaders,criterion,optimizer,num_epochs50):devicetorch.device(cudaiftorch.cuda.is_available()elsecpu)model.to(device)forepochinrange(num_epochs):print(fEpoch{epoch1}/{num_epochs})print(-*30)forphasein[train,val]:ifphasetrain:model.train()else:model.eval()running_loss0.0running_iou0.0forinputs,masksindataloaders[phase]:inputsinputs.to(device)masksmasks.to(device).long()optimizer.zero_grad()withtorch.set_grad_enabled(phasetrain):outputsmodel(inputs)losscriterion(outputs,masks)ifphasetrain:loss.backward()optimizer.step()running_lossloss.item()*inputs.size(0)# 计算 mIoU简化版predstorch.argmax(outputs,dim1)ioucompute_iou(preds,masks,num_classes11)running_iouiou*inputs.size(0)epoch_lossrunning_loss/len(dataloaders[phase].dataset)epoch_iourunning_iou/len(dataloaders[phase].dataset)print(f{phase}Loss:{epoch_loss:.4f}, mIoU:{epoch_iou:.4f})returnmodel# IoU 计算函数defcompute_iou(pred,target,num_classes):iou0forclsinrange(num_classes):pred_cls(predcls)target_cls(targetcls)intersectiontorch.logical_and(pred_cls,target_cls).sum().float()uniontorch.logical_or(pred_cls,target_cls).sum().float()ifunion0:continueiou(intersection/union)returniou/num_classes# 数据加载train_datasetEnergyPlantDataset(image_dirremote_sensing_power_plants/images,mask_dirremote_sensing_power_plants/masks,transformtrain_transform)val_datasetEnergyPlantDataset(image_dirremote_sensing_power_plants/images,# 实际应为验证集路径mask_dirremote_sensing_power_plants/masks,transformval_transform)# 划分训练/验证集示例train_sizeint(0.8*len(train_dataset))val_sizelen(train_dataset)-train_size train_dataset,val_datasettorch.utils.data.random_split(train_dataset,[train_size,val_size])dataloaders{train:DataLoader(train_dataset,batch_size4,shuffleTrue),val:DataLoader(val_dataset,batch_size4,shuffleFalse)}# 初始化模型、损失函数和优化器modelUNet(in_channels3,num_classes11)criterionnn.CrossEntropyLoss()optimizertorch.optim.Adam(model.parameters(),lr1e-4)# 开始训练trained_modeltrain_model(model,dataloaders,criterion,optimizer,num_epochs50)# 保存模型torch.save(trained_model.state_dict(),unet_energy_plant_segmentation.pth)print(✅ 模型训练完成已保存为 unet_energy_plant_segmentation.pth)✅ 六、输出说明文件/指标说明unet_energy_plant_segmentation.pth训练好的模型权重Loss交叉熵损失反映模型拟合程度mIoU平均交并比衡量分割精度train/val训练集和验证集性能对比