完全指南:面向遥感影像的目标检测、实例分割与语义分割训练管线)
人工智能计算机视觉GIS图像处理微调【免费下载链接】geoaiGeoAI: Artificial Intelligence for Geospatial Data项目地址https://gitcode.com/gh_mirrors/ge/geoai点击查看免费下载导读本文围绕 GeoAI 开源项目中负责模型训练的核心模块geoai.train源码位于 geoai/train.py展开系统讲解其在**遥感/地理空间影像GeoTIFF**上训练目标检测Faster R-CNN、RetinaNet、FCOS、实例分割Mask R-CNN与语义分割U-Net 系列模型的完整管线涵盖数据准备、数据增强、训练循环、评估与模型导出。读完本文你将能够掌握该模块支持的四种输入格式directory / COCO / COCO-Detection / YOLO、核心训练函数的关键参数调优方法以及训练完成后如何对大尺寸 GeoTIFF 进行滑窗推理与结果评估可直接套用到建筑提取、车辆检测、水体分割等真实项目。该文档对应的官方文档页为 docs/train.md属于 mkdocstrings 风格的 API 参考入口本文在其定义的模块能力边界内结合完整源码做深度展开。一、模块定位与能力全景geoai.train模块面向地理空间影像提供一站式模型训练能力文档中的原始描述明确给出了它的职责范围Provides comprehensive model training pipelines for object detection, instance segmentation, and semantic segmentation on geospatial imagery. This module handles dataset preparation, augmentation, training loops, evaluation, and model export, supporting architectures such as Mask R-CNN, Faster R-CNN, and U-Net variants with geospatial-aware data loading.翻译过来即模块覆盖目标检测、实例分割、语义分割三大任务串联了数据集准备 → 数据增强 → 训练循环 → 评估 → 模型导出全流程并对 Mask R-CNN、Faster R-CNN 以及 U-Net 变体等架构提供了地理空间感知geospatial-aware的数据加载支持——这里的地理空间感知具体体现为直接使用rasterio 读取 GeoTIFF支持多波段如 RGBN 四波段输入而非局限于普通 RGB 图片从标签栅格的像元值中提取实例连通域分析或类别支持instance_labels、multiclass两种标签解读模式提供面向大尺寸 GeoTIFF 的滑窗推理函数推理产物仍是带地理参考CRS/Transform的栅格。模块顶层定义的函数与类超过 40 个全部集中于 geoai/train.py约 6400 行下文按数据层 → 模型层 → 训练层 → 推理层逐层展开。二、数据准备四种输入格式与两条解析链路2.1 支持的输入格式train_MaskRCNN_model与train_segmentation_model等训练入口统一通过input_format参数声明数据组织方式共有四种格式说明目录/文件约定directory默认影像与标签栅格分目录存放最通用images_dir放影像labels_dir放同名标签栅格cocoCOCO JSON 注解 预渲染标签 TIFFlabels_dir指向instances.json标签 TIFF 放在其上一级labels/目录coco_detection直接解析 COCO JSON 注解支持多类别检测labels_dir为 COCO 注解 JSON 文件类别数可从注解自动推断yoloYOLO 风格目录结构images_dir为根目录内含images/与labels/子目录对应input_format路径校验逻辑由_validate_training_paths统一完成训练启动前会检查目录/文件是否存在、类型是否正确、是否可读在 Windows 平台上遇到临时文件锁如杀毒软件、索引服务占用时还会自动重试_check_readable。2.2 COCO 与 YOLO 注解解析parse_coco_annotations读取 COCO JSON 中的images列表为每张影像在labels_dir中寻找同名标签文件标签与影像同名仅保留两边都存在的样本。parse_yolo_annotations按data_dir/images/与data_dir/labels/的约定扫描支持的影像扩展名为.tif/.tiff/.png/.jpg/.jpeg标签掩膜与影像同名。2.3 训练数据集类ObjectDetectionDatasetgeoai/train.py#L528-L729是核心数据集类__getitem__的标签解析逻辑值得重点关注它决定栅格像元值 → 实例掩膜 边界框 类别的转换策略默认二分类label_mask 0作为前景用skimage.measure.label做 8-连通域标记每个连通域作为一个实例类别统一记为1背景为0。instance_labelsTrue直接使用标签栅格中预分配的实例 ID每个唯一正整数像一个实例适用于 Fields of The WorldFTW这类已编码实例编号的数据集。multiclassTrue按类别值分别做连通域分析相邻但类别不同的区域不会被合并成一个实例类别 ID 从像元值读取1..N0为背景配合num_classes 2使用。注意multiclass与instance_labels互斥同时开启会抛出ValueError。实例提取后会做噪声过滤面积小于 10 像素的实例被剔除、边界框裁剪与 1 像素外扩最终产出 torchvision 标准的 target 字典boxes/labels/masks/image_id/area/iscrowd当影像中没有有效实例时返回空 target保证训练循环不中断。COCODetectionDatasetgeoai/train.py#L732-L1044)支持多类别检测自动将 COCOcategory_id映射为连续类别号1 起始支持多边形polygon与 RLE 两种segmentation编码的解码RLE 解码优先使用pycocotools缺失时提供手动兜底compute_masksFalse时跳过掩膜解码可显著加快纯检测仅 bbox模型的加载速度。从源码结构看两条数据集链路均通过rasterio.open(...).read()读栅格并按num_channels做裁剪/补零、归一化到[0,1]这正是地理空间感知数据加载的实现基础。三、数据增强面向 imagetarget 的变换管线训练数据增强由get_transform统一构建它返回一个自定义Compose同时变换影像与 target而非仅变换图像ToTensor类型占位变换保持 image/target 不变RandomHorizontalFlip默认概率 0.5水平翻转影像、掩膜并同步换算boxes的 x 坐标RandomVerticalFlip默认概率 0.5垂直翻转影像、掩膜并同步换算boxes的 y 坐标。Compose与各变换类实现于 geoai/train.py#L1047-L1145配合collate_fngeoai/train.py#L1168-L1180将一批(image, target)拆成两个元组交给 DataLoader。训练时启用翻转增强验证时仅保留ToTensor。四、模型构建五种检测/分割架构与多波段适配4.1 目标检测与实例分割模型库模块内部定义了DETECTION_MODELS常量集合geoai/train.py#L267-L273并封装了两个模型工厂get_detection_model创建检测模型替换分类头以匹配num_classesget_instance_segmentation_model创建 Mask R-CNN同时替换 box 头与 mask 头。支持的五种 torchvision 架构如下model_name任务类型说明fasterrcnn_resnet50_fpn_v2默认目标检测Faster R-CNN ResNet-50 FPN v2fasterrcnn_mobilenet_v3_large_fpn目标检测轻量骨干适合资源受限场景retinanet_resnet50_fpn_v2目标检测单阶段 RetinaNetfcos_resnet50_fpn目标检测无锚框 FCOSmaskrcnn_resnet50_fpn实例分割Mask R-CNNget_detection_model检测到该名称时会自动委托给get_instance_segmentation_model所有架构在pretrainedTrue时加载 torchvision 官方 ImageNet 预训练权重RetinaNet/FCOS 的分类头重建时会保留空间核大小与锚点数量num_anchors * num_classes。4.2 多波段输入适配核心亮点遥感影像常见 RGBN 四波段而预训练骨干首层卷积只接受 3 通道。模块通过_adjust_backbone_channels处理num_channels3直接返回num_channels3抛错按架构定位首层卷积MobileNet 取backbone.body[0][0]ResNet 系取backbone.body.conv1重建 Conv2d前 3 通道拷贝原权重额外通道用前 3 通道的均值权重初始化保留 bias同步扩展 transform 的归一化统计量image_mean [0.485, 0.456, 0.406] [均值]*num_channels-3std 同理。这意味着训练时可自由指定num_channels4RGBN等非 RGB 输入预训练权重仍得到充分利用。五、目标检测与实例分割训练train_MaskRCNN_model全参数解析5.1 函数签名与参数表train_MaskRCNN_modelgeoai/train.py#L1454-L1931是检测/实例分割训练的总入口同时服务 Mask R-CNN实例分割与 Faster R-CNN/RetinaNet/FCOS检测通过model_name切换。完整参数如下参数默认值说明images_dir必填影像目录yolo格式时为含images/、labels/的根目录labels_dir必填标签目录COCO 系格式时指向注解 JSONoutput_dir必填模型输出目录input_formatdirectorydirectory/coco/coco_detection/yolonum_channels3输入波段数None时自动探测num_classes2含背景的总类别数coco_detection下默认值且注解类别多于 2 时自动推断modelNone外部传入的预定义模型为None时自动创建pretrainedTrue是否加载预训练骨干提供pretrained_model_path时忽略pretrained_model_pathNone.pth检查点路径可续训batch_size4批大小num_epochs10训练轮数learning_rate0.005初始学习率seed42随机种子含 cudnn deterministicval_split0.2验证集比例train_test_split划分visualizeFalse是否对验证集生成预测可视化resume_trainingFalse配合pretrained_model_path恢复优化器/调度器状态print_freq10打印进度的批次间隔deviceNone训练设备None时自动选择 CUDAnum_workersNone数据加载进程数默认0——源码注释明确指出 rasterio/GDAL 在 DataLoader fork 时可能挂起需显式传正值才启用多进程verboseTrue是否输出详细日志model_namemaskrcnn_resnet50_fpn架构名见 4.1 节表格instance_labelsFalse标签栅格已编码实例 IDFTW 数据集multiclassFalse从标签像元值读取类别配合num_classes2early_stopping_patienceNone验证 IoU 连续多少轮不提升则提前停止early_stopping_min_delta0.0判定提升的最小 IoU 增量注意一个隐藏的防呆设计当input_formatdirectory、num_classes2但multiclassFalse且instance_labelsFalse时模块会输出警告提示所有目标会静默坍缩为类别 1geoai/train.py#L1708-L1724——多类别训练务必显式开启multiclassTrue。5.2 训练循环内部机制训练循环的关键实现在于三个函数train_one_epoch前向计算多任务损失loss_dict求和→ 对非有限NaN/Inf损失批次直接跳过防止梯度污染 → 反向传播 →梯度裁剪clip_grad_norm_max_norm1.0→ 优化器步进。优化器固定为SGDmomentum0.9, weight_decay0.0005调度器为StepLRstep_size5, gamma0.8geoai/train.py#L1783-L1790。evaluate验证时计算损失与 IoUMask R-CNN 走掩膜 IoU预测掩膜阈值 0.5 后逐像素求交并比纯检测模型走 bbox IoUtorchvision.ops.box_iou取每个 GT 框的最佳 IoU 均值。实现中还会临时冻结 BatchNorm/Dropout 以便在验证集上计算 Mask R-CNN 的损失。5.3 断点续训与产物文件续训pretrained_model_path指向含model_state_dict的完整检查点时resume_trainingTrue可同时恢复epoch、best_iou、优化器与调度器状态geoai/train.py#L1805-L1840。早停验证 IoU 超过best_iou early_stopping_min_delta才视为改进连续early_stopping_patience轮无改进即终止。训练结束后output_dir下会生成文件内容best_model.pth验证 IoU 最优的模型权重final_model.pth最后一轮或早停时的模型权重training_history.pth训练历史train_loss / val_loss / val_iou / epochs / lrtraining_summary.txt训练元信息时间、轮数、最优/最终 IoU、续训来源visualizations/visualizeTrue时生成 RGB/预测/真值三联图5.4 便捷封装train_instance_segmentation_model对于纯实例分割场景模块还提供轻量封装train_instance_segmentation_model参数为train_MaskRCNN_model的常用子集不含pretrained_model_path、resume_training等内部直接调用train_MaskRCNN_model(model_namemaskrcnn_resnet50_fpn)适合快速上手。六、语义分割训练train_segmentation_model与 U-Net 家族6.1 模型工厂get_smp_model语义分割基于segmentation_models_pytorchsmp可选依赖缺失时模块内相关功能不可用模型工厂为get_smp_modelget_smp_model( architectureunet, # 如 unet、unet、manet、linknet、fpn、pspnet、deeplabv3 等 smp 架构 encoder_nameresnet34, # 编码器骨干如 resnet50、efficientnet-b0、mobilenet_v2 等 encoder_weightsimagenet, in_channels3, # 输入波段数 classes2, # 输出类别数 activationNone, # 如 sigmoid/softmax2d )6.2 主训练函数参数train_segmentation_model是语义分割训练主入口关键参数参数默认值说明images_dir/labels_dir/output_dir必填影像/标签目录与输出目录input_formatdirectory支持directory与coco两种architectureunetsmp 架构名encoder_nameresnet34编码器名encoder_weightsimagenet编码器预训练权重num_channels3输入波段数num_classes2类别数含背景batch_size/num_epochs8/50批大小与轮数learning_rate0.001初始学习率weight_decay1e-4权重衰减seed42随机种子val_split0.2验证比例target_sizeNone统一缩放尺寸resize_moderesize时等比例缩放另有 pad 模式resize_moderesizeresize或padnum_workersNone同检测模块默认 0 规避 rasterio 多进程挂起early_stopping_patienceNone验证指标早停train_transforms/val_transformsNone自定义增强loss_fnNone自定义损失class_weightsNone类别权重可缓解类别不平衡ignore_index-100损失忽略的标签值freeze_encoderFalse冻结编码器迁移学习/微调模块内置f1_score、iou_coefficient、precision_score、recall_score等语义指标geoai/train.py#L3654-L3750训练时逐轮调用train_semantic_one_epoch与evaluate_semantic计算损失与 IoU/F1。6.3 其他语义分割入口semantic_segmentation给定model_path对单幅影像推理滑窗。semantic_segmentation_batch批量推理整个目录。semantic_inference_on_geotiff面向大 GeoTIFF 的滑窗推理支持输出类别概率栅格probability_path与按阈值二值化probability_threshold。七、训练后推理面向大尺寸 GeoTIFF 的滑窗推理遥感影像往往远超模型输入尺寸模块提供多套滑窗推理函数统一采用窗口读取 → 批处理 → 加权融合模式窗口默认 512×512、重叠 2567.1 二进制掩膜推理inference_on_geotiffinference_on_geotiff输出单波段 uint8 二值掩膜按window_size - overlap为步长滑动边缘用_pad_window补零到目标尺寸中心加权融合为每个窗口构建中心权重高、边缘权重低的权重矩阵权重与到四条边的距离成正比上限为overlap/2预测掩膜乘以权重后累加到pred_accumulator同时累加权重到count_accumulator最后做加权平均并以 0.5 阈值二值化——这能有效消除相邻窗口拼接处的接缝伪影输出栅格继承输入 GeoTIFF 的地理参考拷贝 meta 并改为count1, dtypeuint8返回(output_path, inference_time)。7.2 实例分割推理instance_segmentation_inference_on_geotiffinstance_segmentation_inference_on_geotiff面向 Mask R-CNN先收集全图所有候选实例再做类别感知 NMStorchvision.ops.batched_nms默认nms_threshold0.3抑制跨窗口重复检测。最终生成三幅栅格产物路径dtype实例 ID 栅格output_pathuint32类别标签栅格output_path加_class后缀uint16置信度栅格output_path加_score后缀float32函数还返回检测列表含窗口尺寸掩膜、全局坐标 bbox、score、label便于后续矢量化。7.3 多类别检测推理multiclass_detection_inference_on_geotiffmulticlass_detection_inference_on_geotiff在掩膜基础上同时保留类别与实例信息输出双波段栅格类别 实例并支持传入class_names列表。此外模块还提供面向多类别检测的一体化训练/推理入口geoai/object_detect.py中的train_multiclass_detector与multiclass_detection以及批量推理封装object_detection、object_detection_batch。八、评估指标从 IoU 到 COCO AP除逐轮验证的 IoU 之外模块提供evaluate_coco_metrics计算标准 COCO 检测指标基于_compute_iou_matrix逐对 bbox IoU 矩阵与_compute_apPrecision-Recall 曲线下面积实现支持多组iou_thresholds返回 mAP 等指标字典配合验证集 DataLoader 与class_names即可输出类别级评估结果。语义分割侧则可用calc_iou、calc_f1_score、calc_segmentation_metrics见 geoai/utils/metrics.py对真值/预测栅格做离线指标计算。九、自监督预训练与模型共享9.1 Lightly 自监督训练模块集成了基于lightly的自监督训练入口lightly_train_model支持methoddinov2_distillation等方法、modeltorchvision/resnet50等架构输出训练好的骨干模型load_lightly_pretrained_model加载自监督预训练模型lightly_embed_images用预训练模型批量提取影像嵌入为下游分类/检索提供特征。这为先在大规模无标签遥感影像上自监督预训练、再小样本微调提供了现成路径。9.2 官方关联示例官方文档页 docs/train.md 关联了三个可直接运行的 Jupyter Notebook 示例仓库内路径Train Object Detection Model——Faster R-CNN/RetinaNet 等检测模型训练实战Train Segmentation Model——U-Net 语义分割训练实战Train Instance Segmentation Model——Mask R-CNN 实例分割训练实战。配套的测试用例如 tests/test_training_validation.py、tests/test_train_ignore_index.py、tests/test_train_metrics.py覆盖了训练参数校验、ignore_index 语义与指标计算等关键行为可作为函数用法的补充参考。十、实践建议与注意事项多波段输入RGBN 数据请设置num_channels4模块会自动扩展骨干首层并初始化权重无需手动改网络。多类别训练目录格式下类别数大于 2 时务必设置multiclassTrue并保证标签像元值为 1..N 的类别 ID否则所有实例都会坍缩为类别 1。多进程数据加载默认num_workers0是刻意为之——rasterio/GDAL 的 GeoTIFF 读取在 DataLoader fork 下可能挂起在确认稳定的环境里再显式传入正数加速。实例标签复用若标签栅格已编码实例 ID如 FTW 数据集使用instance_labelsTrue可跳过连通域分析直接按 ID 提实例。检查点续训传pretrained_model_path与resume_trainingTrue即可无缝续训恢复 epoch 与优化器状态。大图推理512 窗口 256 重叠是默认配置重叠不足时相邻窗口融合边缘会出现伪影可按需增大overlapinstance_segmentation_inference_on_geotiff已内置跨窗口 NMS抑制重复检测。语义分割U-Net 家族来自 smp使用前需确保安装segmentation-models-pytorchfreeze_encoderTrue适合标注样本有限时的迁移学习。综上geoai.train是一个数据-模型-训练-推理闭环的遥感训练工具箱数据层兼容 directory/COCO/YOLO 四种格式并原生读写多波段 GeoTIFF模型层覆盖检测与分割主流架构并自动适配通道数训练层内置断点续训、早停、梯度裁剪与完整产物落盘推理层提供带地理参考的滑窗融合推理能够直接支撑建筑物提取、车辆/舰船/太阳能板检测、土地覆盖分类等地理空间 AI 实战任务。赞分享人工智能计算机视觉GIS图像处理微调【免费下载链接】geoaiGeoAI: Artificial Intelligence for Geospatial Data项目地址https://gitcode.com/gh_mirrors/ge/geoai点击查看免费下载相关推荐PaddleSeg 遥感图像语义分割 Benchmark 实战指南基线模型、自监督预训练与 C2FNet 小目标分割PaddleSeg 遥感图像语义分割 Benchmark 实战指南基线模型、自监督预训练与 C2FNet 小目标分割 RSSegBenchmark 是 Pad人工智能计算机视觉预训练GeoAI 遥感影像识别模块实战用 geoai.recognize 训练图像分类模型GeoAI 遥感影像识别模块实战用 geoai.recognize 训练图像分类模型 geoai.recognize 是 GeoAI 项目中面向遥感影像图像识人工智能计算机视觉GIS图像处理微调GeoAI timm_train 模块详解用 timm 与 PyTorch Lightning 训练遥感影像分类模型GeoAI timm_train 模块详解用 timm 与 PyTorch Lightning 训练遥感影像分类模型 GeoAI 的 timm_train 模人工智能计算机视觉GIS图像处理微调上一篇Open Source Point of Sale 项目教程下一篇如何以6500美元预算打造专业级7自由度开源机械臂OpenArm完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考