
使用深度学习模型训练河流遥感图像分割数据集_进行像素级别分类以识别图像中的河流区域文章目录使用深度学习模型训练河流遥感图像分割数据集_进行像素级别分类以识别图像中的河流区域数据准备模型选择与训练安装依赖库训练脚本模型评估与预测河流遥感图像分割数据集8975张400*400数据集训练集5385验证测试1795对于河流遥感图像分割任务使用深度学习模型进行像素级别的分类以识别图像中的河流区域。如何准备和处理这些数据选择合适的模型以及如何训练和评估这个模型?以下文字及代码仅供参考。数据准备假设你的数据集结构如下river_remote_sensing/ ├── images/ │ ├── train/ │ │ ├── img1.png │ │ ├── img2.png │ │ └── ... │ ├── val/ │ │ ├── img1.png │ │ ├── img2.png │ │ └── ... │ └── test/ │ ├── img1.png │ ├── img2.png │ └── ... └── masks/ ├── train/ │ ├── mask1.png │ ├── mask2.png │ └── ... ├── val/ │ ├── mask1.png │ ├── mask2.png │ └── ... └── test/ ├── mask1.png ├── mask2.png └── ...每个mask文件应与对应的image文件名相同但内容为标签信息指示每个像素属于河流还是背景。创建一个配置文件data_river.yaml来描述数据集路径和类别信息train:./river_remote_sensing/images/train/val:./river_remote_sensing/images/val/test:./river_remote_sensing/images/test/nc:2# 类别数量河流和其他names:[background,river]seg:mode:customimages_dir:./river_remote_sensing/images/masks_dir:./river_remote_sensing/masks/模型选择与训练考虑到语义分割任务U-Net、DeepLab系列或Segmentation Models库中提供的其他先进模型都是不错的选择。这里我们以Segmentation Models库为例说明。安装依赖库确保安装了必要的库pipinstallsegmentation-models-pytorch albumentations opencv-python-headless torch torchvision训练脚本编写训练脚本importsegmentation_models_pytorchassmpfromtorch.utils.dataimportDataLoaderimporttorchfromtorchimportnnfromdatasetimportRiverDataset# 假设你已实现了一个自定义的数据集类# 自定义数据集类示例classRiverDataset:def__init__(self,images_dir,masks_dir):self.images_fps[os.path.join(images_dir,image_id)forimage_idinos.listdir(images_dir)]self.masks_fps[os.path.join(masks_dir,mask_id)formask_idinos.listdir(masks_dir)]def__getitem__(self,i):# 读取图片和掩码imagecv2.imread(self.images_fps[i])maskcv2.imread(self.masks_fps[i],0)returnimage,maskdef__len__(self):returnlen(self.images_fps)ENCODERresnet34ENCODER_WEIGHTSimagenetCLASSES[river]ACTIVATIONsigmoid# 可能根据需要调整modelsmp.Unet(encoder_nameENCODER,encoder_weightsENCODER_WEIGHTS,classeslen(CLASSES),activationACTIVATION,)preprocessing_fnsmp.encoders.get_preprocessing_fn(ENCODER,ENCODER_WEIGHTS)train_datasetRiverDataset(./river_remote_sensing/images/train/,./river_remote_sensing/masks/train/)valid_datasetRiverDataset(./river_remote_sensing/images/val/,./river_remote_sensing/masks/val/)train_loaderDataLoader(train_dataset,batch_size16,shuffleTrue,num_workers4)valid_loaderDataLoader(valid_dataset,batch_size4,shuffleFalse,num_workers4)losssmp.utils.losses.DiceLoss()metrics[smp.utils.metrics.IoU(threshold0.5),]optimizertorch.optim.Adam([dict(paramsmodel.parameters(),lr0.0001),])train_epochsmp.utils.train.TrainEpoch(model,lossloss,metricsmetrics,optimizeroptimizer,devicecuda,verboseTrue,)valid_epochsmp.utils.train.ValidEpoch(model,lossloss,metricsmetrics,devicecuda,verboseTrue,)max_score0foriinrange(0,40):# 训练周期数print(\nEpoch: {}.format(i))train_logstrain_epoch.run(train_loader)valid_logsvalid_epoch.run(valid_loader)ifmax_scorevalid_logs[iou_score]:max_scorevalid_logs[iou_score]torch.save(model,./best_model.pth)print(Model saved!)ifi25:optimizer.param_groups[0][lr]/10print(Decrease decoder learning rate to 1e-5!)模型评估与预测训练完成后可以加载最佳模型对新图像进行预测并评估模型性能best_modeltorch.load(./best_model.pth)test_datasetRiverDataset(./river_remote_sensing/images/test/,./river_remote_sensing/masks/test/)test_dataloaderDataLoader(test_dataset)# 预测逻辑