GeoAI auto 模块实战:AutoGeoModel 驱动的地理空间零样本推理与 GeoTIFF 自动分割指南

发布时间:2026/10/4 16:30:27
GeoAI auto 模块实战:AutoGeoModel 驱动的地理空间零样本推理与 GeoTIFF 自动分割指南 人工智能计算机视觉GIS图像处理微调【免费下载链接】geoaiGeoAI: Artificial Intelligence for Geospatial Data项目地址https://gitcode.com/gh_mirrors/ge/geoai点击查看免费下载geoai.auto是 GeoAI 中基于 Hugging Face 基础模型transformers构建的自动推理模块它通过AutoGeoModel与AutoGeoImageProcessor两个核心类把「模型自动加载 GeoTIFF 地理元数据读写」封装成一套统一 API让语义分割、目标检测、图像分类、深度估计与掩码生成等任务无需人工标注或训练即可直接作用于遥感影像。读完本文你将掌握如何用几行代码完成零样本目标检测如 Grounding DINO、语义分割如 SegFormer、图像分类如 ViT与深度估计并把栅格结果原地矢量化导出为 GeoJSON 等地理矢量格式。一、auto 模块的定位与设计目标按照官方文档 docs/auto.md 的说明auto模块提供基于 Hugging Face 基础模型的自动分割auto-segmentation能力它利用预训练模型对地理空间影像执行自动图像分割无需手工提示词manual prompts或训练数据面向零样本zero-shot与小样本few-shot分割任务开箱即用。模块级 docstring见 geoai/auto.py 开头进一步明确了实现思路AutoGeoModel与AutoGeoImageProcessor分别扩展 transformers 的AutoModel与AutoImageProcessor为其增加处理 GeoTIFF 等栅格数据的能力保留 CRS、仿射变换、边界等地理信息将推理结果写回GeoTIFF 栅格或矢量数据GeoJSON、GPKG、Shapefile 等的能力。该模块常与示例笔记本 docs/examples/AutoModel.ipynb 搭配使用后者给出了从下载样例影像到完成三类任务、再到结果落盘的完整可运行流程。二、支持的模型任务与 TASK_MODEL_MAPPINGAutoGeoModel内部通过TASK_MODEL_MAPPINGgeoai/auto.py 中TASK_MODEL_MAPPING把任务名映射到对应的 transformers Auto 类任务名task 参数对应 transformers 类典型模型segmentation/semantic-segmentationAutoModelForSemanticSegmentationSegFormer、Mask2Formerimage-segmentationAutoModelForImageSegmentation通用图像分割模型universal-segmentationAutoModelForUniversalSegmentationMask2Former 等统一分割模型depth-estimationAutoModelForDepthEstimationDepth Anything、DPTmask-generationAutoModelForMaskGenerationSAMSegment Anythingobject-detectionAutoModelForObjectDetectionDETR、YOLOSzero-shot-object-detectionAutoModelForZeroShotObjectDetectionGrounding DINO、OWL-ViTclassification/image-classificationAutoModelForImageClassificationViT、ResNet如果你在from_pretrained中不指定task模块会尝试从 Hugging Face 模型配置AutoConfig的architectures字段自动推断包含Segmentation字样走语义分割包含Detection走目标检测包含Classification走图像分类否则回退到AutoModel。这一推断逻辑位于_load_model_from_pretrainedgeoai/auto.py 中_load_model_from_pretrained并通过tests/test_auto.py的test_task_model_mapping用例验证了各任务键的完整性。三、AutoGeoImageProcessor带地理元数据的图像处理器AutoGeoImageProcessor包装 Hugging Face 的AutoImageProcessor或需要文本输入时的AutoProcessor负责「读取栅格 → 预处理 → 交给模型 → 写回 GeoTIFF」全链路的像素与元数据管理。它遵循 transformers 惯例通过from_pretrained实例化from geoai.auto import AutoGeoImageProcessor processor AutoGeoImageProcessor.from_pretrained( nvidia/segformer-b0-finetuned-ade-512-512, devicecuda, # 不传则自动探测见 geoai.utils.get_device )关键设计要点处理器自动选择from_pretrained的use_full_processorTrue会强制使用AutoProcessor同时接收文本与图像当模型名包含grounding-dino、owl、clip、blip等关键字时也会自动启用因为这类模型需要文本输入。若AutoImageProcessor加载失败会静默回退到AutoProcessor。load_geotiff接收 GeoTIFF 路径或已打开的rasterio.DatasetReader可传windowrasterioWindow只读子窗口、bands1 起始的波段索引列表选择波段返回(CHW 数组, 元数据字典)元数据含profile、crs、transform、bounds、width、height、count。load_image统一入口自动区分 GeoTIFF按 CRS 或.tif/.tiff后缀判定与普通图片PIL 加载并转 RGB也接受numpy.ndarrayHWC 或 2D 自动规整为 CHW与 PILImage不支持的输入类型会抛出TypeError。prepare_for_model预处理阶段会把 CHW 转回 HWC单波段重复三次、超过 3 波段截断默认开启normalizeTrue且采用百分位裁剪对每个波段取 2% 与 98% 分位数做 min-max 拉伸到 [0, 255]对遥感影像常见的低对比度、饱和波段非常友好对于 p2 p98 的常量波段会安全置零tests/test_auto.py的test_prepare_percentile_clip_uniform_band专门覆盖此边界。save_geotiff把推理结果连同原始metadata[profile]写回 GeoTIFF支持dtype、compress默认lzw、nodata参数并自动创建输出目录。2D 数组作为单波段写入3D CHW 数组按多波段写入。tests/test_auto.py对上述能力均有对应测试test_load_geotiff_from_path、test_load_geotiff_with_bands、test_load_geotiff_with_window、test_load_image_from_png、test_prepare_for_model_4band_truncates、test_save_geotiff_3d等。四、AutoGeoModel核心推理类与 predict 全参数AutoGeoModel是模块的主入口from_pretrained加载模型后即自动移到设备并置为eval()模式from geoai.auto import AutoGeoModel model AutoGeoModel.from_pretrained( IDEA-Research/grounding-dino-base, taskzero-shot-object-detection, devicecuda, # 可选 tile_size1024, # 大图分块尺寸默认 1024 overlap128, # 分块重叠像素默认 128 ) result model.predict(aerial.tif, texta building. a car., box_threshold0.3)predict 方法参数一览参数默认值说明source—输入文件路径含 http/https URL、numpy 数组或 PIL Imageoutput_pathNone输出 GeoTIFF 路径需输入带地理元数据才会写栅格output_vector_pathNone输出矢量路径GeoJSON、GPKG 等自动把掩码/检测框转矢量window/bandsNonerasterio 子窗口与波段选择threshold0.5分割掩码二值化阈值textNone零样本检测文本提示如a building. a tree.小写且以句号结尾labelsNone标签列表传入后自动转换为 text 格式box_threshold0.3检测框置信度阈值text_threshold0.25零样本检测文本相似度阈值min_object_area100矢量化时保留的最小对象面积像素simplify_tolerance1.0多边形简化容差像元单位乘以像元尺寸batch_size1分块推理批大小return_probabilitiesFalse是否在结果中附带概率图内部处理路径分为三类见 geoai/auto.py 中predict与_predict_detection零样本 / 常规目标检测走_predict_detection使用processor.post_process_grounded_object_detectionGrounding DINO 类模型或post_process_object_detectionDETR 类模型解码得到boxes、scores、labels若模型不支持 grounded 后处理代码会自动降级为基于pred_boxes logits sigmoid 的兜底方案。检测框可通过output_vector_path导出为 GeoDataFrame坐标在无地理元数据时为像素空间。分块推理当影像尺寸超过tile_size默认 1024且任务不是分类时自动启用_predict_tiled分块处理每个块的有效尺寸为tile_size - 2 * overlap块与块之间重叠overlap像素重叠区通过「累加再求平均」平滑融合避免边缘伪影seam artifacts配合 tqdm 进度条逐块推进块失败仅告警不中断。单图推理尺寸未超限的影像走_predict_single在torch.no_grad()下前向一次得到结果。_process_outputs负责把不同模型的原始输出归一化为统一字典4Dlogits→argmax得到语义分割掩码mask2Dlogits→ 分类class与probabilitiespred_masks→ 掩码predicted_depth→depthSAM 风格的masks→ 二值掩码与all_masks。tests/test_auto.py的test_process_outputs_segmentation_logits、test_process_outputs_classification_logits、test_process_outputs_depth分别验证了这三条分支。掩码矢量化mask_to_vectormask_to_vectorgeoai/auto.py 中mask_to_vector是「栅格结果转矢量」的关键它基于rasterio.features.shapes提取连通域多边形按min_object_area/max_object_area像素面积过滤碎小对象与超大连通域再按simplify_tolerance乘以像元尺寸、preserve_topologyTrue简化边界最终返回带 CRS 的 GeoDataFrame。若缺少 CRS 或 transform、掩码为空会分别返回None并给出日志警告对应tests/test_auto.py中test_mask_to_vector_no_crs、test_mask_to_vector_empty_mask等用例。save_vector则按扩展名自动选择驱动.geojson/.json→ GeoJSON.gpkg→ GPKG.shp→ ESRI Shapefile.parquet→ Parquet.fgb→ FlatGeobuf缺省回退 GeoJSON。五、四个便捷函数一行代码完成典型任务除了底层类模块还导出了四个函数式入口签名与默认值均以 geoai/auto.py 为准1. semantic_segmentation —— 语义分割from geoai.auto import semantic_segmentation result semantic_segmentation( aerial.tif, output_pathsegmentation_output.tif, model_namenvidia/segformer-b0-finetuned-ade-512-512, # 默认模型 output_vector_pathsegmentation.geojson, # 可选同步矢量化 threshold0.5, tile_size1024, overlap128, min_object_area100, simplify_tolerance1.0, deviceNone, # 自动探测 cuda/cpu ) mask result[mask] # (H, W) uint8 掩码2. depth_estimation —— 深度估计from geoai.auto import depth_estimation result depth_estimation( aerial.tif, output_pathdepth_output.tif, model_namedepth-anything/Depth-Anything-V2-Small-hf, # 默认模型 ) depth result[depth] # 相对深度图3. image_classification —— 图像分类from geoai.auto import image_classification result image_classification( aerial.tif, model_namegoogle/vit-base-patch16-224, # 默认模型 ) cls_index result[class] # 预测类别索引 probs result[probabilities] # 各类别概率向量注意分类任务不会触发分块推理predict中对 classification 任务做了显式排除因此适合整幅影像语义判读类场景。4. object_detection ——零样本目标检测from geoai.auto import object_detection result object_detection( aerial.tif, labels[building, tree, car, road], # 自动转为 a building. a tree. ... model_nameIDEA-Research/grounding-dino-base, # 默认模型 output_vector_pathdetections.geojson, # 可选 box_threshold0.3, text_threshold0.25, ) boxes, scores, labels result[boxes], result[scores], result[labels]object_detection内部会根据模型名自动选择任务模型名含grounding-dino或owl时走zero-shot-object-detection否则走object-detection。labels列表会被自动拼接为以小写、句号结尾的提示语格式。六、完整实战流程继承自 AutoModel 示例以下流程对应官方示例 docs/examples/AutoModel.ipynb可完整落地运行# 1. 下载样例航空影像并查看 from geoai import download_file image_url https://huggingface.co/datasets/giswqs/geospatial/resolve/main/aerial.tif image_path download_file(image_url, aerial.tif) # 2. 零样本目标检测 矢量导出 result object_detection( image_path, labels[building, tree, car, road], box_threshold0.25, text_threshold0.25, output_vector_pathdetections.geojson, ) print(fDetected {len(result.get(boxes, []))} objects) # 3. 语义分割 栅格/矢量双输出 seg_result semantic_segmentation( image_path, output_pathsegmentation_output.tif, output_vector_pathsegmentation.geojson, model_namenvidia/segformer-b0-finetuned-ade-512-512, min_object_area50, simplify_tolerance1.0, ) print(fMask shape: {seg_result[mask].shape}, fpolygons: {len(seg_result[geodataframe])}) # 4. 图像分类 Top-5 解释 import numpy as np from transformers import AutoConfig cls_result image_classification(image_path, model_namegoogle/vit-base-patch16-224) config AutoConfig.from_pretrained(google/vit-base-patch16-224) probs cls_result[probabilities] top5 np.argsort(probs)[-5:][::-1] for idx in top5: print(f{config.id2label.get(idx, fClass {idx})}: {probs[idx]:.4f})七、结果可视化辅助函数auto模块附带四组基于 matplotlib 的展示函数便于快速目检结果实现见 geoai/auto.py 可视化部分show_image(source, figsize(10, 10), titleNone, axis_offTrue)显示 GeoTIFF 或普通图片GeoTIFF 会自动做百分位拉伸转 uint8show_detections(source, detections, ...)在原图上叠加检测框与标签/分数支持box_color单色或列表配色、show_scores开关show_segmentation(source, mask, ...)原图与掩码叠加并排显示show_originalTrue时左右分栏掩码尺寸不一致时自动用最近邻插值对齐show_depth(source, depth, ...)深度图用plasma色带渲染并附色条。from geoai.auto import show_detections, show_segmentation show_detections(image_path, result, titleZero-Shot Object Detection) show_segmentation(image_path, seg_result[mask], titleSemantic Segmentation, alpha0.6)八、辅助工具函数get_hf_tasks()从transformers.pipelines.SUPPORTED_TASKS列出当前 transformers 支持的全部任务名含未在本模块映射表中的任务供参考与扩展get_hf_model_config(model_id)基于AutoConfig.from_pretrained返回模型的完整配置字典可用于查看model_type、num_labels、hidden_sizes等元信息例如from geoai.auto import get_hf_model_config config get_hf_model_config(nvidia/segformer-b0-finetuned-ade-512-512) print(config.get(model_type), config.get(num_labels))九、源码、测试与生态印证实现主体geoai/auto.py约 2000 行模块顶部通过hf_logging.set_verbosity_error()压低 transformers 加载日志默认关闭 HF 加载报告测试覆盖tests/test_auto.py 覆盖处理器 I/O、预处理边界、输出解析、掩码矢量化、检测转 GeoDataFrame、便捷函数签名与模块导出__all__等约 40 个用例可作为理解各方法契约的权威参考生态关联mask-generation任务可搭配 geoai/segment.py 中的 GroundedSAM 使用文本提示做实例级分割而 geoai/onnx.py 中的ONNXGeoModel明确以AutoGeoModel的 API 为镜像两者共用predict语义方便把同一套工作流切换到 ONNX 推理入口方式geoai.auto既可通过from geoai.auto import AutoGeoModel直接导入也可作为geoai顶层延迟加载符号体系的一部分使用见 geoai/init.py 的_LAZY_SYMBOL_MAP与_LAZY_SUBMODULES机制import geoai不会立即拉起 torch/transformers 等重型依赖。十、使用前提与注意事项依赖使用auto模块需要torch、transformers、rasterio、geopandas、numpy、PIL等依赖已安装模型权重首次加载时从 Hugging Face Hub 下载请确保网络可达设备不显式传device时由geoai.utils.get_device自动探测有 CUDA 用 cuda否则 CPU零样本检测提示语Grounding DINO 类模型对提示语敏感建议使用小写、以句号结尾的短语如a building. a car.并依据影像分辨率调整box_threshold与text_threshold示例中常用 0.25大图分块超过tile_size的影像会自动分块分块推理的内存峰值取决于单块尺寸可适当调小tile_size或增大overlap换取更平滑的拼接结果矢量化前提mask_to_vector需要输入具备 CRS 与仿射变换即 GeoTIFF 输入普通图片由于缺少地理元数据只能停留在像素坐标。综上geoai.auto把「模型选择、影像预处理、分块推理、地理化输出、结果可视化」整合为一条完整链路是 GeoAI 中对 Hugging Face 生态做地理空间适配的核心模块之一适合快速原型验证、零样本地物提取与自动化遥感批处理任务。赞分享人工智能计算机视觉GIS图像处理微调【免费下载链接】geoaiGeoAI: Artificial Intelligence for Geospatial Data项目地址https://gitcode.com/gh_mirrors/ge/geoai点击查看免费下载相关推荐GeoAI MCP Server 实战指南用 Claude Desktop 等 AI Agent 驱动 GeoAI 地理空间 AI 能力GeoAI MCP Server 实战指南用 Claude Desktop 等 AI Agent 驱动 GeoAI 地理空间 AI 能力 GeoAI MCP人工智能计算机视觉GIS图像处理微调GeoAI ONNX 模块实战指南PyTorch 模型导出与 GeoTIFF 加速推理GeoAI ONNX 模块实战指南PyTorch 模型导出与 GeoTIFF 加速推理 GeoAI 的 ONNX 模块 docs/onnx.md https人工智能计算机视觉GIS图像处理微调cli-anything-geoai 使用指南用命令行与 AI Agent 驱动 GeoAI 地理空间分析cli anything geoai 使用指南用命令行与 AI Agent 驱动 GeoAI 地理空间分析 cli anything geoai 是 GeoA人工智能计算机视觉GIS图像处理微调上一篇Salt git_pillar 远程仓库 URL 格式完全指南scp 风格 SSH 地址、冒号陷阱与启动错误排查下一篇FoundationDB 内部开发工具指南Code Probes 代码探针与 TestHarness 测试框架深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考