GeoAI object_detect 模块实战:基于 Mask R-CNN 的多类别遥感目标检测(NWPU-VHR-10 全流程)

📅 发布时间:2026/10/4 10:47:21
GeoAI object_detect 模块实战:基于 Mask R-CNN 的多类别遥感目标检测(NWPU-VHR-10 全流程)
人工智能计算机视觉GIS图像处理微调【免费下载链接】geoaiGeoAI: Artificial Intelligence for Geospatial Data项目地址https://gitcode.com/gh_mirrors/ge/geoai点击查看免费下载本文是 GeoAIGitHub 加速计划 / ge / geoai中geoai.object_detect模块的技术指南。该模块为多类别目标检测提供了开箱即用的高层封装覆盖 COCO 格式数据集的训练、评估、滑动窗口推理、结果矢量化与可视化并内置对 NWPU-VHR-10 遥感基准数据集及其预训练 Mask R-CNN 模型的支持。读完本文你将掌握从数据集下载、训练拆分、模型训练、COCO 指标评估到 GeoTIFF 推理与矢量结果导出的完整实战链路。模块定位与整体架构geoai.object_detect是 GeoAI 面向多类别目标检测的高层 API 模块其完整实现位于 geoai/object_detect.py。模块文档字符串开宗明义它提供基于 Mask R-CNN 系列模型、面向 COCO 格式数据集bounding box 与实例分割 mask 两种标注的训练、评估与推理便捷函数并特别支持 NWPU-VHR-10 遥感基准。从 geoai/init.py 的懒加载导出表可以看到该模块的 14 个公共符号全部以(object_detect, None)形式注册因此既可以直接import geoai.object_detect也可以直接通过geoai.xxx顶层命名空间调用例如geoai.train_multiclass_detector、geoai.multiclass_detection。模块的底层计算逻辑复用 geoai/train.py 中的通用训练/推理基础设施train_MaskRCNN_modeltrain.py统一训练入口支持coco_detection等输入格式get_detection_modeltrain.py按模型名构建检测网络multiclass_detection_inference_on_geotifftrain.pyGeoTIFF 滑动窗口推理evaluate_coco_metricstrain.pyCOCO 风格 mAP 评估COCODetectionDataset、collate_fn、get_transform等数据管线组件。NWPU-VHR-10 数据集类别、下载与训练集准备NWPU-VHR-10 是模块默认绑定的遥感目标检测基准包含 800 张超高分辨率VHR遥感影像涵盖 10 个目标类别共 3,775 个 COCO 格式标注实例包围框 实例分割掩膜。类别定义见 object_detect.pyNWPU_VHR10_CLASSES [ background, airplane, ship, storage_tank, baseball_diamond, tennis_court, basketball_court, ground_track_field, harbor, bridge, vehicle, ]注意索引 0 是background实际目标类别是 10 类加上背景后num_classes 11。下载数据集import geoai data_dir geoai.download_nwpu_vhr10(output_dirNWPU-VHR-10, overwriteFalse)该函数object_detect.py从https://data.source.coop/opengeos/geoai/NWPU-VHR-10.zip下载数据参数含义如下参数默认值说明output_dirNWPU-VHR-10下载的 ZIP 文件与解压后数据目录的路径overwriteFalse是否覆盖已存在的文件标注格式转换与训练/验证拆分NWPU-VHR-10 原始标注是逐行文本格式(x1,y1),(x2,y2),class_id左上/右下角点 类别 ID。模块内置两个私有工具完成转换_parse_nwpu_gt_fileobject_detect.py解析单行标注并转换为 COCO 的(x, y, w, h)格式_convert_nwpu_to_cocoobject_detect.py遍历图像目录与真值目录生成包含images、annotations、categories三段的 COCO JSON并把包围框同时写成多边形 segmentation。公开入口是prepare_nwpu_vhr10splits geoai.prepare_nwpu_vhr10(data_dir, output_dirNone, val_split0.2, seed42)output_dir整理后数据输出目录默认与data_dir相同val_split验证集比例默认0.2seed随机种子使用sklearn.model_selection.train_test_split保证可复现。函数内部会自适应多种目录结构如NWPU-VHR-10/NWPU-VHR-10/嵌套目录、positive image set/ground truth等命名变体返回一个字典关键键如下键含义images_dir图像目录路径annotations_path完整标注 COCO JSONtrain_annotations/val_annotations训练/验证拆分后的 COCO JSON 路径train_image_ids/val_image_ids训练/验证图像 ID 列表class_names/num_classes类别名列表含背景与类别总数值得注意的实现细节仅包含至少一个标注的图像会进入拆分。NWPU-VHR-10 中 150 张负样本无目标对象图像会被排除在训练/验证集之外见 object_detect.py 的 docstring。训练多类别检测模型支持的模型架构train_multiclass_detectorobject_detect.py支持 5 种 torchvision 检测架构定义在 train.py 的DETECTION_MODELS集合中model_name架构特点fasterrcnn_resnet50_fpn_v2默认Faster R-CNN ResNet-50 FPN v2精度/速度均衡fasterrcnn_mobilenet_v3_large_fpnFaster R-CNN MobileNet V3 FPN轻量适合资源受限场景retinanet_resnet50_fpn_v2RetinaNet ResNet-50 FPN v2单阶段anchor 密度 9fcos_resnet50_fpnFCOS ResNet-50 FPN无 anchoranchor 密度 1maskrcnn_resnet50_fpnMask R-CNN ResNet-50 FPN输出实例 mask可同时做分割在get_detection_modeltrain.py中各架构的分类头都会被替换为匹配num_classes的预测器Faster R-CNN 系替换roi_heads.box_predictorRetinaNet/FCOS 系按num_anchors * num_classes重建cls_logits卷积层Mask R-CNN 则委托给get_instance_segmentation_model。非 RGB 输入如num_channels4的 RGBN还会通过_adjust_backbone_channels调整骨干网络首层通道数。训练函数参数详解model_path geoai.train_multiclass_detector( images_dirsplits[images_dir], # 训练图像目录 annotations_pathsplits[train_annotations], # COCO JSON output_dirnwpu_output, # 模型输出目录 model_namefasterrcnn_resnet50_fpn_v2, # 架构见上表 class_namessplits[class_names], # 含 background 的类别名 num_channels3, # 输入通道数3RGB batch_size4, num_epochs50, learning_rate0.005, val_split0.2, seed42, pretrainedTrue, # 是否使用预训练骨干 pretrained_model_pathNone, # 自定义预训练权重 deviceNone, # 自动检测 CUDA/MPS/CPU num_workersNone, verboseTrue, )各参数要点num_classes自动推导函数读取 COCO JSON 的categoriesnum_classes len(categories) 11 为背景。若class_names未提供会自动按类别 ID 排序生成[background, ...]。输出产物训练结束后在output_dir下生成best_model.pth最优权重、class_info.json记录class_names、num_classes、model_name供推理时侧车读取以及training_history.pth训练历史。返回值为best_model.pth的路径。底层调用该函数最终调用train_MaskRCNN_model(..., input_formatcoco_detection, ...)train.py 起即所有架构统一走这一训练管线。查看训练历史训练完成后可用plot_detection_training_historyobject_detect.py绘制training_history.pth中的曲线最多三幅子图训练/验证 Loss、验证 IoU、学习率调度缺失的键对应的子图会自动跳过geoai.plot_detection_training_history( history_pathnwpu_output/training_history.pth, figsize(15, 4), output_pathtraining_metrics.png, # 不传则交互显示 )评估COCO 风格 mAPevaluate_multiclass_detectorobject_detect.py加载训练好的权重在指定数据集上计算 COCO 风格指标metrics geoai.evaluate_multiclass_detector( model_pathmodel_path, # 训练产出的 .pth images_dirsplits[images_dir], annotations_pathsplits[val_annotations], num_classessplits[num_classes], # 11 class_namessplits[class_names][1:], # 不含 background batch_size4, )其评估核心是 train.py 的evaluate_coco_metrics默认在 IoU 阈值[0.5, 0.55, ..., 0.95]共 10 档上计算各类别 AP返回字典包含mAP0.5、mAP0.75、mAP[0.5:0.95]以及逐类AP0.5/class_name条目。评估数据管线使用COCODetectionDatasetcompute_masksmodel_has_masks(model_name)仅 Mask R-CNN 计算掩膜Windows/macOS 下默认num_workers0Linux 默认 4。模块自带的 NWPU-VHR-10 预训练 Mask R-CNNResNet-50 FPN在其验证集上的公开指标记录于 object_detect.py docstring为mAP0.5 ≈ 0.709、mAP0.75 ≈ 0.518、mAP[0.5:0.95] ≈ 0.459。推理GeoTIFF 滑动窗口检测单影像推理multiclass_detectionobject_detect.py是核心推理入口result_path, inference_time, detections geoai.multiclass_detection( input_pathimage.tif, # GeoTIFF / JPEG / PNG 均可 output_pathoutput.tif, model_pathNone, # None 则自动下载预训练 NWPU-VHR-10 模型 model_nameNone, # 自动探测架构 num_classes11, class_namesNone, # 自动使用 NWPU-VHR-10 类别 window_size512, # 滑动窗口尺寸 overlap256, # 相邻窗口重叠像素 confidence_threshold0.5, # 置信度阈值 nms_threshold0.3, # NMS IoU 阈值 batch_size4, num_channels3, deviceNone, # 自动选择设备 )关键行为预训练模型自动下载当model_pathNone时自动从 Hugging Face Hubgiswqs/nwpu-vhr10-maskrcnn文件名best_model.pth见 object_detect.py下载权重并将num_classes设为 11、class_names设为 NWPU-VHR-10 类别、架构回退为maskrcnn_resnet50_fpn。非 GeoTIFF 输入自动转 TIFFJPEG/PNG 等输入会先转成临时 RGB GeoTIFF 再进入推理完成后自动清理临时文件。侧车配置与权重自描述优先读取权重同目录的class_info.json恢复类别与架构若model_name仍为 None则通过检查 checkpoint 键自动判别——存在roi_heads.mask_predictor.conv5_mask.weight判定为 Mask R-CNN存在roi_heads.box_predictor.cls_score.weight判定为 Faster R-CNN存在head.classification_head.cls_logits.weight时再依据有无anchor_generator.*键区分 RetinaNet有 anchor与 FCOS无 anchor。num_classes也会从权重形状反推RetinaNet 的通道数需除以 anchor 数 9。输出格式输出为双波段栅格——波段 1 为类别标签波段 2 为实例 ID见 train.py 的说明区别于输出二值 mask 的inference_on_geotiff和只输出实例 ID 的实例分割推理。返回值(output_path, inference_time, detections_list)其中每个 detection 为包含mask、score、box、label的字典。底层实现multiclass_detection_inference_on_geotifftrain.py 起以stride window_size - overlap计算步长对整幅影像按窗口切块、以batch_size批量前向推理并过滤低于confidence_threshold的检测对无 mask 输出的 bbox-only 模型会生成包围框形状的伪 mask从而统一下游处理。批量推理batch_multiclass_detectionobject_detect.py接收图像路径列表逐个调用multiclass_detection输出目录中每个影像生成basename_detection.tif并可选择将各图检测结果绘制成网格图results geoai.batch_multiclass_detection( image_paths[a.tif, b.tif], output_dirdetections, visualizeTrue, # 绘制结果网格 cols2, figsize(16, 16), cleanupTrue, # 可视化后清理中间栅格 output_pathgrid.png, # 保存网格图 )每个结果是(result_path, inference_time, detections_list)元组。该函数已由 tests/test_object_detection_batch.py 覆盖测试geoai.train.object_detection_batch的文件解析与命名生成逻辑。检测结果矢量化像素坐标 → 地理坐标detections_to_geodataframeobject_detect.py把像素空间的检测结果转换为带 CRS 的geopandas.GeoDataFrame是栅格检测结果进入 GIS 工作流的关键一步gdf geoai.detections_to_geodataframe( detectionsdetections, # multiclass_detection 的返回值 geotiff_pathinput.tif, # 源 GeoTIFF提供 CRS 与 transform class_namessplits[class_names], use_mask_geometryFalse, # True 时用实例 mask 多边形否则用包围框矩形 simplify_tolerance0.0, # mask 多边形简化容差地理单位0 表示不简化 )输出列geometry、class_id、class_name、score、instance_id、area_pixels。use_mask_geometryTrue时通过rasterio.features.shapes将实例 mask 栅格化为多边形支持紧凑 maskmask_offset裁剪与unary_union合并并用simplify_tolerance做拓扑保持的简化失败时回退到包围框矩形。空检测列表会返回仅含上述列的空 GeoDataFrame保证下游代码健壮性。该函数同样被 tests/test_instance_segmentation.py 引用使用。可视化工具集检测结果叠加可视化visualize_multiclass_detectionsobject_detect.py在影像上绘制带类别标签与置信度的彩色包围框并按得分降序最多绘制max_detections200个geoai.visualize_multiclass_detections( image_pathimage.tif, detectionsdetections, class_namessplits[class_names], confidence_threshold0.5, # 低于此分的检测不显示 figsize(15, 10), output_pathdetections.png, # 不传则交互显示 )COCO 标注预览visualize_coco_annotationsobject_detect.py在训练前检查标注质量非常实用——加载 COCO JSON以网格形式展示样本影像与包围框标注geoai.visualize_coco_annotations( annotations_pathsplits[annotations_path], images_dirsplits[images_dir], num_samples4, randomFalse, seedNone, figsize(14, 14), cols2, output_pathannotations.png, )Hugging Face Hub 集成模型发布与远端推理模块打通了与 Hugging Face Hub 的双向通道便于模型共享与复现发布模型push_detector_to_hubobject_detect.py将best_model.pth与config.json含model_type、model_name、num_classes、num_channels、class_names上传到指定仓库仓库不存在时自动创建url geoai.push_detector_to_hub( model_pathnwpu_output/best_model.pth, repo_idyour_name/nwpu-detector, model_namefasterrcnn_resnet50_fpn_v2, num_classes11, num_channels3, class_namessplits[class_names], privateFalse, tokenNone, # token 默认使用 huggingface-cli login 的凭据 )从 Hub 推理predict_detector_from_hubobject_detect.py下载model.pth与config.json依据 config 自动恢复num_classes、num_channels、class_names与model_name后委托multiclass_detection执行推理私有仓库可通过token访问。下载预训练权重download_nwpu_vhr10_modelobject_detect.py可直接拉取giswqs/nwpu-vhr10-maskrcnn的best_model.pth到本地缓存。端到端示例脚本仓库提供了完整可运行的端到端示例 scripts/object_detection_nwpu.py约 243 行按 8 步串联上述全部 API直接python scripts/object_detection_nwpu.py即可执行下载数据集geoai.download_nwpu_vhr10()并打印 11 个类别准备拆分geoai.prepare_nwpu_vhr10(data_dir, val_split0.2, seed42)标注可视化手工绘制前 4 张样本的包围框保存nwpu_sample_annotations.png训练geoai.train_multiclass_detector(..., batch_size4, num_epochs20, learning_rate0.005, val_split0.15)输出到nwpu_output训练曲线读取training_history.pth绘制 Loss / Val IoU / LR 三联图评估geoai.evaluate_multiclass_detector(...)输出 COCO mAP推理对验证集首张影像执行geoai.multiclass_detection(window_size512, overlap256, confidence_threshold0.5)打印推理耗时与检测数结果可视化geoai.visualize_multiclass_detections(...)保存nwpu_detections.png并清理中间栅格。小结geoai.object_detect将遥感多类别目标检测的完整链路收敛为少量高层函数prepare_nwpu_vhr10解决数据集整理train_multiclass_detector统一训练 5 种 torchvision 检测架构evaluate_multiclass_detector输出 COCO mAPmulticlass_detection以滑动窗口处理任意尺寸 GeoTIFFdetections_to_geodataframe完成结果矢量化配合batch_multiclass_detection与 Hugging Face Hub 的推送/拉取能力可快速搭建从数据到 GIS 产品的目标检测生产线。相关源码、测试与示例分别位于 geoai/object_detect.py、geoai/train.py、tests/test_object_detection_batch.py 与 scripts/object_detection_nwpu.py可自行查阅深入研究。赞分享人工智能计算机视觉GIS图像处理微调【免费下载链接】geoaiGeoAI: Artificial Intelligence for Geospatial Data项目地址https://gitcode.com/gh_mirrors/ge/geoai点击查看免费下载相关推荐GeoAI extract 模块实战指南基于 Mask R-CNN 的地理空间目标检测与矢量提取GeoAI extract 模块实战指南基于 Mask R CNN 的地理空间目标检测与矢量提取 GeoAI 项目的 geoai.extract 模块源码位人工智能计算机视觉GIS图像处理微调PyTorch Vision目标检测终极指南Faster R-CNN与Mask R-CNN实战教程PyTorch Vision目标检测终极指南Faster R CNN与Mask R CNN实战教程 PyTorch Vision是一个基于PyTorch的计算计算机视觉深度学习图像处理数据集R-CNN 系列目标检测模型解析从 Region-based CNN 到 Mask R-CNNR CNN 系列目标检测模型解析从 Region based CNN 到 Mask R CNN 本指南以开源互动式深度学习书籍《动手学深度学习》d2l en文档教程人工智能深度学习NLP计算机视觉强化学习上一篇用 loop-worktree 与 loop-context 构建安全的 PR Babysitter 重试循环一次一个修复重试永不冲突下一篇ctxsync 压缩算法全解8 种压缩算法背后的原理与实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考