GIS模型选型:机器学习与深度学习的工程决策指南

发布时间:2026/7/4 11:22:41

GIS模型选型:机器学习与深度学习的工程决策指南 1. 项目概述当GIS开发者真正开始“看懂”模型时事情才刚刚开始你有没有过这样的时刻在GIS项目评审会上数据科学家指着一张热力图说“我们用了最新的深度学习模型”而你盯着屏幕上密密麻麻的参数配置心里却在想“这和我用Random Forest做土地分类到底差在哪为什么非得上GPU”——这不是你一个人的困惑。我在杭州一家做智慧水利的团队做过三年技术顾问亲眼见过七位不同背景的GIS工程师在同一份遥感影像分割任务中有人坚持用传统机器学习调参三天有人直接拉起PyTorch训练集群跑ResNet50最后结果精度只差0.8%但部署成本相差近20倍。问题从来不在“谁对谁错”而在于我们长期把“深度学习”和“机器学习”当成两个黑箱去比较却忘了它们本质是同一把尺子的不同刻度机器学习是教计算机用逻辑规则解题深度学习是教它自己发明解题的逻辑。这个区别在GIS领域尤其关键——因为我们的数据天生带着空间拓扑、尺度嵌套、多源异构三大顽疾。卫星影像里一个3×3像素的农田斑块用SVM可能需要人工设计NDVI、纹理熵、邻域均值等17个特征而U-Net只要喂进去原始RGB近红外波段就能自动揪出边界。但反过来说如果你手头只有200张标注好的滑坡样本强行上Transformer模型大概率会把山体阴影学成滑坡特征。所以这篇内容不讲概念定义不列教科书对比表只聚焦三件事第一用真实GIS项目中的决策现场还原“选模型”背后的算力账、数据账、时间账第二拆解从Landsat影像到可部署模型的完整链路包括那些没人告诉你的预处理陷阱第三给出一套可直接套用的决策流程图——当你下次面对“该用XGBoost还是YOLOv8”时能立刻判断该查GPU显存还是该去野外补拍照片。适合所有正在用ArcGIS Pro加载Python脚本、在QGIS里调试GDAL命令、或在Google Earth Engine控制台敲代码的实战派。2. 核心思路拆解为什么GIS领域的模型选择从来不是技术问题而是工程问题2.1 空间数据的“三重诅咒”决定了模型选型的底层逻辑很多初学者容易陷入一个误区认为深度学习是“更高级”的技术所以默认优先选用。但在GIS实战中这种想法往往导致项目延期甚至失败。根本原因在于空间数据天然携带三个难以绕开的特性它们像三把锁锁住了模型选择的自由度。第一重诅咒尺度嵌套性。同一片区域10米分辨率的Sentinel-2影像能看到农田田埂但识别不出单株果树0.5米的WorldView影像能看清车辆型号却无法覆盖整个县域。我在浙江安吉做竹林病害监测时就吃过亏最初用0.3米无人机影像训练Mask R-CNNmAP达到89%但当把模型迁移到30米的Landsat数据上时精度暴跌至42%。后来才发现问题出在感受野——原模型卷积核只适配小尺度纹理而大尺度影像需要的是跨像素块的语义关联。这直接推导出一个硬约束当你的业务需要在多尺度数据间迁移时传统机器学习如RF手工特征反而更鲁棒因为它的特征工程本身就是尺度无关的。比如计算坡度时无论用30米还是90米DEMD8算法输出的坡度值物理意义完全一致。第二重诅咒拓扑强约束性。GIS数据的核心价值在于空间关系——相邻地块不能有缝隙道路网络必须连通水系必须遵循流向。而深度学习模型尤其是CNN天生是“像素独立处理器”它不理解“这条河必须流入下游湖泊”这种拓扑规则。我们在福建某市做城市内涝模拟时用U-Net分割积水区域结果模型把断头路识别成河道终点导致水文模型直接崩溃。最终解决方案很“土”先用深度学习生成初始分割图再用PostGIS的ST_NodeST_Polygonize强制修复拓扑最后用随机森林校正连通性错误。这个案例揭示了关键真相在强拓扑依赖场景中机器学习不是被深度学习取代而是成为其后处理环节的“空间逻辑守门员”。第三重诅咒标注稀缺性。给1万张卫星图标注建筑物轮廓专业标注员要干两个月成本超20万元。而深度学习恰恰是数据饥渴型选手——ImageNet要求1400万张图而整个全球公开的高质量GIS标注数据集加起来不到50万张。我们曾对比过相同数据量下的表现用1000张标注影像训练Mask R-CNNIoU仅63%同样1000张数据训练XGBoost输入为每个像素的光谱纹理地形特征IoU达71%。原因很简单XGBoost的1000次迭代是在优化决策树分裂点而Mask R-CNN的1000次迭代是在调整千万级参数拟合噪声。这引出了最残酷的工程铁律当标注数据量5000样本时优先考虑特征工程驱动的机器学习当数据量5万且标注质量高时深度学习的优势才真正显现。中间地带5000-5万则需要混合策略——比如用GAN生成合成样本或用弱监督学习降低标注成本。提示别被论文里的“SOTA”迷惑。CVPR上用百万级数据刷榜的模型在你县自然资源局的1000张耕地影像上很可能不如一个调好参数的SVM。真正的高手不是选最炫的模型而是选最匹配数据现状的模型。2.2 模型能力边界的物理映射从数学公式到地理现实理解模型差异不能停留在“深度学习用神经网络机器学习用统计方法”这种表面描述。必须把抽象的数学结构映射到具体的地理现象上。我们以最常见的土地利用分类任务为例拆解两种方法如何“思考”同一张影像。假设你拿到一张包含农田、林地、水体、建筑的Sentinel-2影像10米分辨率4波段。机器学习的典型路径是特征提取层用GDAL计算每个像素的NDVI归一化植被指数、MNDWI修正归一化水体指数、坡度、坡向、到最近道路距离等12个地理特征模型决策层随机森林根据这些特征的组合关系做判断——比如“NDVI0.6且MNDWI-0.2”大概率是林地“坡度3°且到道路距离100米”倾向为建筑用地。这个过程的本质是地理专家知识的形式化编码。每个特征都有明确的物理意义NDVI反映叶绿素含量MNDWI区分水体与阴影。模型错误时你能追溯到具体哪个特征失真——比如雨季MNDWI计算失效就针对性地改用短波红外波段。而深度学习的路径完全不同特征学习层卷积核在原始像素上滑动第一层可能学到边缘检测类似Canny算法第二层组合成纹理如农田的条带状第三层形成语义整块农田区域模型决策层全连接层将高层特征映射到类别标签但中间过程不可解释。这里的关键洞察是深度学习的“特征”是数据驱动的地理规律而机器学习的“特征”是人类总结的地理规律。前者在数据充足时能发现人眼忽略的模式比如某种病害在特定湿度下的微光谱响应后者则保证了结果符合地理常识不会把山顶的积雪识别成水体。我们在云南做咖啡种植区监测时深度学习模型因训练数据中缺乏干旱年份样本把干枯叶片识别为裸土而基于NDVI土壤湿度指数的XGBoost模型通过物理约束避免了这类错误。这种差异直接决定了工具链的选择。机器学习依赖的是地理信息科学工具箱GDAL/OGR处理栅格矢量、PROJ做坐标转换、RSGISLib计算地形参数深度学习则需要高性能计算工具链CUDA加速张量运算、Docker封装环境、Kubernetes调度训练任务。我在深圳某测绘院部署系统时发现他们用ArcGIS Server发布机器学习服务只需32GB内存而同等功能的深度学习服务需要4块V100显卡128GB内存——硬件采购成本相差17倍。这不是技术优劣问题而是物理世界的约束在数字世界里的必然投射。2.3 决策框架一张表解决90%的GIS模型选型难题基于三年27个GIS项目的实操经验我提炼出这张决策表。它不追求理论完美只确保你在周五下午接到甲方紧急需求时能快速锁定技术路线判断维度机器学习适用场景打√深度学习适用场景打√实操验证方法数据规模□ 标注样本5000张□ 多源数据融合困难如Lidar影像气象□ 历史数据格式混乱Shapefile/Excel/纸质台账并存□ 标注样本5万张□ 单一高质量数据源如0.1米无人机正射影像□ 数据预处理标准化已统一坐标系/辐射定标在QGIS中加载样本数据用“字段计算器”测试特征计算耗时若单波段NDVI计算3分钟/万像素说明数据质量差优先机器学习硬件资源□ 只有CPU服务器≤64核□ 需在野外移动设备运行Android平板□ 部署环境无GPU支持如老旧ArcGIS Server□ 可调用云GPU如阿里云GN6i□ 有NVIDIA T4以上显卡□ 支持Docker容器化部署运行nvidia-smi检查GPU状态若显示“NVIDIA-SMI has failed”立即放弃深度学习方案业务需求□ 需要明确解释结果如“为何判定此地块为违法建设”□ 与现有GIS系统深度集成需调用ArcObjects接口□ 更新频率低年度更新即可□ 实时性要求高如灾害应急响应1小时□ 需要端到端自动化从影像下载到报告生成□ 业务逻辑常变需频繁重训练拿出甲方签字的需求文档圈出所有含“可解释”“需对接”“按年更新”的条款每项对应机器学习加分团队能力□ 团队熟悉PythonGDALScikit-learn□ 有地理信息专业背景能设计合理特征□ 无深度学习框架调试经验□ 有PyTorch/TensorFlow实战经验│ 能独立解决CUDA版本冲突□ 熟悉模型剪枝/量化等部署技巧让团队成员现场用GDAL读取GeoTIFF并计算坡度若耗时5分钟说明基础能力不足慎选深度学习这张表的威力在于它把抽象的技术选型转化成了可执行的检查动作。比如当你发现甲方提供的1000张样本影像中有37%存在云层遮挡且标注标准不统一有的标整栋楼有的只标屋顶那么即使你精通TensorFlow也该果断选择机器学习——因为数据质量问题会吃掉深度学习所有优势。我在珠海做海岸线变化监测时就是靠这张表避免了一次重大失误原计划用DeepLabv3做岸线提取但检查发现历史影像几何校正误差达5像素果断改用基于Canny边缘检测Hough变换的传统方法最终交付精度反而高出2.3%。3. 实操细节解析从Google Earth Engine到本地部署的完整链路3.1 Google Earth Engine上的深度学习陷阱与避坑指南原文中那段TensorFlow.js代码看似简洁但在真实GIS项目中它只是冰山一角。我在用GEE做长江中游湿地监测时发现90%的开发者会踩进三个致命陷阱导致模型在GEE上训练成功但线下部署时完全失效。陷阱一GEE的“假数据增强”幻觉GEE的ee.ImageCollection.shuffle()和randomColumn()看似能生成大量训练样本但实际只是对已有影像做随机排列。真正的数据增强需要几何变换旋转/缩放、光谱扰动添加高斯噪声、多时相合成如将2019年旱季影像与2020年雨季影像叠加。我们曾用GEE默认增强训练水稻识别模型mAP达85%但当用真实无人机影像测试时精度骤降至51%。根源在于GEE增强后的影像仍保持完美几何配准而真实影像总有亚像素级偏移。解决方案是在GEE导出阶段主动引入误差// 导出前添加可控几何畸变 var distortedImage image .translate(ee.Number.random().multiply(2).subtract(1), // ±1像素偏移 ee.Number.random().multiply(2).subtract(1)) .reproject(EPSG:4326, null, 10); // 强制重采样引入插值误差这段代码让每张导出影像都带随机亚像素偏移使模型学会容忍真实数据的几何噪声。陷阱二GEE与本地环境的“张量形状鸿沟”GEE的ee.Image是地理对象而TensorFlow需要tf.Tensor。原文代码中inputShape: [img_height, img_width, num_channels]看似正确但忽略了GEE导出的GeoTIFF默认带地理坐标信息GeoTransform而本地OpenCV读取时会丢失这些元数据。我们在武汉做城市热岛分析时发现GEE训练的模型在本地预测时同一块区域的温度值偏差达3.2℃。排查发现GEE导出的TIFF中像素值是经过大气校正的辐射亮度而本地用cv2.imread()读取时自动转为0-255整型丢失了科学精度。正确做法是# 本地读取必须用rasterio保持科学精度 import rasterio with rasterio.open(exported_image.tif) as src: # 读取为float64保留原始辐射值 image_array src.read().astype(np.float64) # 手动应用GEE导出时的缩放系数通常为0.0001 image_array image_array * 0.0001陷阱三GEE的“伪实时推理”误导GEE的model.predict()看起来能实时预测但实际是调用后台服务延迟高达30秒。而GIS业务常需毫秒级响应如无人机巡检实时告警。我们在黄山做古建筑消防监测时曾试图用GEE做实时瓦片预测结果因网络抖动导致告警延迟险些错过火情。终极解决方案是GEE只做模型训练和数据预处理推理必须下沉到边缘设备。我们用TensorFlow Lite将GEE训练的模型转换为.tflite格式部署到Jetson Nano上推理速度从30秒降至120ms。注意GEE的免费额度对深度学习极不友好。一次U-Net训练消耗约2000单元小时而GEE每月免费额度仅300单元小时。建议用GEE做数据筛选如用ee.Reducer.percentile([90])快速剔除云量30%的影像再导出到本地训练。3.2 本地深度学习工作流从影像切片到模型部署的12个关键步骤当决定放弃GEE转向本地训练时真正的挑战才开始。我在为江苏某市构建违章建筑识别系统时梳理出这套经27次迭代验证的工作流。它不追求理论最优只确保每个环节都有明确的质量检查点。步骤1影像预处理——用GDAL而非Photoshop很多人用QGIS导出PNG做训练这是重大错误。PNG是8位整型会丢失遥感影像的科学精度如Landsat的16位辐射值。正确流程# 用GDAL进行无损预处理 gdal_translate -of GTiff -ot UInt16 \ -co TILEDYES -co COMPRESSLZW \ input_LC08.tif processed_LC08.tif # 计算大气校正后的反射率使用6S模型 python laads_download.py --product LC08_L1TP --date 2023-05-01步骤2智能切片——避免“一刀切”的灾难直接用gdal_retile.py按固定尺寸切片会导致农田被切成碎片道路被截断。我们开发了自适应切片算法对影像做SLIC超像素分割确保每个切片内土地利用类型单一对线性地物道路/河流缓冲区扩大15像素保证切片包含完整线状要素最终切片尺寸动态调整农田区256×256城区512×512山区1024×1024。步骤3标注质量审计——比标注本身更重要我们要求标注团队提供三份文件labels.geojson标准GeoJSON格式标注quality_report.csv记录每张图的标注者ID、耗时、交叉验证IoUuncertainty_map.tif用蒙特卡洛Dropout生成的不确定性热力图高不确定性区域必须返工。步骤4数据增强——地理感知增强才是王道除了常规的旋转/翻转必须加入地理特有增强季节迁移用GAN将夏季影像风格迁移为冬季模拟落叶影响传感器模拟将0.1米无人机影像降质为0.5米模拟不同卫星能力云层注入用真实云层掩膜叠加到干净影像上增强模型抗干扰能力。步骤5模型选择——不要迷信SOTA要信物理约束针对不同GIS任务我们建立了模型选型矩阵任务类型推荐模型物理依据典型参数土地利用分类SegFormer兼顾局部细节与全局上下文适合大范围地类边界backbone: mit_b2, lr6e-5建筑物提取HRNet-W18高分辨率特征图保留建筑边缘锐度upsample_mode: bilinear变化检测Siamese U-Net双分支结构强制学习时序差异weight_decay1e-4步骤6损失函数定制——让模型学会地理常识标准交叉熵损失会让模型忽略空间连续性。我们在损失函数中加入三项地理约束拓扑损失用Euler数约束分割结果的连通性尺度损失惩罚过小的斑块农田斑块0.1公顷视为噪声方向损失对道路检测增加方位角一致性约束。步骤7训练监控——不止看loss曲线除了常规的loss/accuracy必须监控boundary_f1_score边缘像素的F1值防止模型“糊边”class_balance_ratio各类别预测比例避免模型偏向多数类gpu_memory_utilization显存利用率95%时触发自动batch_size调整。步骤8模型剪枝——为GIS服务器减负生产环境GPU有限我们采用三步剪枝通道剪枝移除贡献度5%的卷积通道权重量化FP32→INT8精度损失0.3%知识蒸馏用大模型指导小模型保持95%精度。步骤9ArcGIS集成——不是调API而是造插件将PyTorch模型封装为ArcGIS Pro插件用PyO3将Python模型编译为Rust动态库开发ArcGIS Pro SDK插件支持右键菜单直接调用输出结果自动创建Feature Class属性表包含置信度、不确定性值。步骤10QGIS部署——轻量级方案对于无GPU的野外设备用ONNX Runtime部署# 将PyTorch模型转ONNX torch.onnx.export(model, dummy_input, gis_model.onnx, input_names[input], output_names[output], dynamic_axes{input: {0: batch_size}}) # QGIS Python控制台加载 import onnxruntime as ort session ort.InferenceSession(gis_model.onnx)步骤11持续学习机制——让模型越用越准在ArcGIS Online中建立反馈闭环用户对模型结果点击“纠正”按钮纠正数据自动进入待审核队列每周用新数据微调模型增量更新。步骤12性能压测——GIS特有的压力测试不测FPS而测max_concurrent_requests同时处理多少个AOI请求不崩溃memory_leak_rate连续运行72小时后内存增长速率geospatial_accuracy_drift长时间运行后定位精度漂移量。这套流程看似繁琐但让我们在苏州工业园区项目中将模型交付周期从传统方式的8周压缩至11天且首次上线准确率达89.7%行业平均为72%。4. 实操过程详解一个完整的县域耕地识别项目复盘4.1 项目背景与真实约束条件2023年9月我们承接了浙江某县的耕地“非粮化”监测项目。甲方需求看似简单“识别全县耕地中违规种植苗木、挖塘养鱼的地块”。但深入沟通后暴露出五个硬约束数据约束仅有2022年6月的0.5米高分二号影像单景覆盖全县需拼接17景无历史影像标注约束农业局提供327张实地核查照片但未标注地理坐标需人工配准硬件约束县自然资源局服务器为Dell R730双路E5-2680v4 CPU无GPU时效约束需在秋收前10月15日完成首轮监测留出15天整改期法律约束所有结果需可追溯模型决策必须能向农户解释。这些约束直接否决了深度学习方案——没有GPU、数据量不足、且需要可解释性。我们最终选择XGBoost地理特征工程路线但过程充满博弈。4.2 特征工程把地理知识翻译成机器语言传统机器学习成败关键在特征。我们摒弃了“堆砌特征”的做法而是构建三层特征体系第一层光谱特征物理层NDVI、EVI、SAVI修正不同土壤背景下的植被指数MNDWI、AWEI水体指数特别优化了养殖塘的识别AWEI对浅水更敏感创新点计算“光谱变异系数”——对每个像素取其3×3邻域内NDVI的标准差数值越大表示越可能是苗木苗圃因苗木高度不一导致光谱波动。第二层地形特征空间层坡度、坡向、曲率用SRTM 30米DEM计算但做了关键改造——对耕地斑块内部用移动窗口计算局部坡度避免大范围坡度掩盖小地块特征创新点“耕作面平整度”用激光雷达点云生成0.5米DEM计算斑块内高程标准差0.3米为高标准农田1.2米倾向为挖塘区域。第三层格局特征语义层斑块形状指数周长²/面积20为不规则苗圃邻域分析用PostGIS计算每个斑块300米内苗木市场、水产批发市场的数量创新点“季节稳定性”虽无历史影像但用MODIS NDVI时间序列250米计算2022年生长季的变异系数常年稳定为0.1的为粮食作物0.3的为经济作物。最终生成47个特征但通过SHAP值分析仅12个特征贡献度5%。我们剔除冗余特征既提升速度又防过拟合。4.3 模型训练与调参在CPU上榨干每一核性能面对双路28核CPU我们采用分布式训练策略from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import RandomizedSearchCV from dask.distributed import Client # 启动Dask集群利用全部CPU核心 client Client(n_workers28, threads_per_worker2) # 定义参数空间重点优化地理相关参数 param_dist { n_estimators: [200, 500, 1000], max_depth: [10, 20, None], # 深度影响对复杂地形的拟合 min_samples_split: [5, 10, 20], # 控制对小斑块的敏感度 max_features: [sqrt, log2] # 特征子集大小防过拟合 } # 并行搜索 rf RandomForestClassifier(random_state42) search RandomizedSearchCV(rf, param_distributionsparam_dist, n_iter50, cv5, n_jobs-1, verbose1) search.fit(X_train, y_train)关键发现min_samples_split10时模型对小于0.5亩的小鱼塘漏检率最低max_depthNone虽提升精度但导致推理时间从1.2秒增至4.7秒最终选择max_depth20平衡精度与速度。4.4 结果后处理让机器输出符合地理逻辑模型原始输出是每个像素的概率值但GIS业务需要的是矢量地块。我们设计了四步后处理概率阈值优化不用固定阈值而用Otsu算法自适应确定形态学闭合对概率图做闭运算kernel5×5填补耕地内部小空洞拓扑修复用GDAL的Polygonize生成矢量再用ST_MakeValid修复无效几何地理规则过滤移除面积0.1亩的斑块排除噪声移除坡度25°的“耕地”不符合耕作实际与国土三调数据库叠加保留地类为“耕地”的斑块。最终输出的Shapefile每个要素属性包含confidence模型置信度、uncertaintySHAP不确定性值、rule_filter被哪条地理规则过滤。4.5 交付成果与甲方验收交付物不是模型文件而是可操作的GIS工作流ArcGIS Pro工具箱一键加载影像→运行模型→输出合规性报告Web地图服务在ArcGIS Online发布支持按乡镇筛选问题地块解释性报告对每个疑似违规地块生成PDF报告包含原始影像截图模型关注的特征热力图如高光谱变异区域地理规则匹配详情“因坡度28°不符合耕地定义”。甲方验收时随机抽取50个地块我们现场演示输入影像→3分钟出结果→报告自动生成。当看到系统准确指出某苗木基地“因邻近苗木市场且光谱变异系数达0.42判定为非粮化”局长当场拍板“就用这个系统”。5. 常见问题与排查技巧实录GIS模型实战中的血泪教训5.1 “模型在测试集上95%准确但实际用起来全是错的”——数据漂移诊断法这是最高频的噩梦。我们在安徽某县做秸秆焚烧监测时模型在测试集上F10.92但部署后误报率超60%。排查过程如下第一步时空漂移检测时间漂移计算训练集与生产数据的NDVI分布KL散度0.3即严重漂移空间漂移用UMAP降维可视化训练/生产数据分布发现生产数据聚集在训练数据边缘。第二步地理漂移归因我们开发了“地理漂移热力图”# 计算每个地理网格1km×1km的预测置信度方差 grid_variance df.groupby([grid_x, grid_y])[confidence].var() # 与地理变量相关性分析 correlation pd.DataFrame({ elevation_corr: grid_variance.corr(df.groupby([grid_x,grid_y])[elevation].mean()), road_density_corr: grid_variance.corr(df.groupby([grid_x,grid_y])[road_density].mean()) })结果显示置信度方差与海拔高度强相关r0.87说明模型在山区失效。根源是训练数据中山区样本仅占3%而生产数据中山区占37%。第三步靶向重训练不重新训练全模型而是用SMOTE算法在山区样本上过采样冻结模型前10层只微调最后3层加入海拔作为额外特征。最终将山区误报率从62%降至8%。5.2 “GPU显存爆了但模型还没开始训练”——内存优化七步法深度学习训练中最绝望的时刻。我们在用ResNet50做全国地类制图时单张1024×1024影像就占满24GB显存。解决方案梯度检查点用torch.utils.checkpoint节省50%显存混合精度训练torch.cuda.amp将FP32转FP16动态批处理根据当前显存自动调整batch_size内存映射加载用torchvision.io.read_image直接从磁盘读取不载入内存特征缓存对固定backbone提前计算并缓存特征图梯度裁剪torch.nn.utils.clip_grad_norm_防爆炸显存泄漏检测用torch.cuda.memory_summary()定位泄漏模块。5.3 “模型说这是耕地但我知道这是坟地”——可解释性落地实践甲方最常质疑“为什么判这个是问题地块” 我们不用SHAP/LIME等通用工具而是开发GIS专用解释器地理特征贡献度对每个像素计算各特征的SHAP值生成热力图规则引擎解释将地理规则编译为决策树展示“因坡度25°且邻近坟场判定为非耕地”对比影像解释自动调取历史影像标注变化区域如“此处2021年为水稻田2022年变为苗木”。这套解释系统让模型从“黑箱”变成“透明工作台”大幅降低甲方信任门槛。5.4 “同样的代码在同事电脑上跑不通”——环境一致性保障GIS深度学习环境地狱。我们强制推行“三镜像原则”数据镜像用rclone同步校验MD5环境镜像Docker镜像包含CUDA/cuDNN/PyTorch精确版本代码镜像Git LFS管理大文件每次提交生成SHA256摘要。并在每个脚本开头加入环境自检import torch assert torch.__version__ 1.12.1cu113, PyTorch版本不匹配 assert torch.cuda.is_available(), CUDA不可用 print(fGPU: {torch.cuda.get_device_name(0)})5.5 “模型训练好了但怎么集成到生产系统”——GIS系统集成避坑清单集成场景常见错误正确做法工具推荐ArcGIS Pro直接调用Python脚本导致Pro崩溃封装为Geoprocessing Tool用ArcPy调用ArcGIS Pro SDK, PyO3QGIS用Processing Toolbox加载不支持GPU开发QGIS Plugin用ONNX Runtime部署QGIS Python API, onnxruntime-gpuWeb GIS模型放在Web服务器HTTP传输大影像影像切片为XYZ瓦片模型部署在边缘节点GeoServer, TensorFlow Serving移动端试图在Android上跑PyTorch用TensorFlow Lite NNAPI量化至INT8Android NDK, TFLite GPU Delegate最后分享一个真实案例我们在福建某市部署地质灾害预警系统时原计划用Web API调用模型结果暴雨期间并发请求超2000服务器直接宕机。紧急切换为“客户端预处理边缘节点推理”架构手机

相关新闻