ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

用YOLOv11做城市级卫星影像变化检测的完整实践

用YOLOv11做城市级卫星影像变化检测的完整实践 简介面向遥感图像处理与深度学习目标检测学习者这份PDF系统讲解YOLOv11在卫星影像建筑物提取与变化检测中的完整实现涵盖遥感图像特点、YOLO系列发展脉络与网络结构、辐射与几何校正等预处理流程、基于YOLOv11的建筑物提取流程以及像素级、特征级和深度学习方法的变化检测对比并配有城市规划、灾害评估等应用案例。包体为1个PDF文档共41页大小约2.12MB支持目录跳转与阅读器大纲定位排版完整便于快速查阅。文档已有123人学习下载适合正在入门或进阶遥感AI、需要一份可通读技术参考的学习者除原理讲解外还包含数据集准备、模型配置、评估指标与结果可视化等实操性内容从数据标注到后处理覆盖完整可作为实验设计或论文写作的参考资料。 从去年年底开始我们团队接了一个城市级违建监测的项目核心任务是对同一区域不同年份的卫星影像做建筑物提取再通过两期结果比对找出“新增”和“拆除”的建筑。一开始我本能地想到用分割模型毕竟建筑物提取最直接的产出是轮廓。但真跑到变化检测这一步我发现分割结果做差分简直是一场灾难。后来换成YOLOv11做目标检测用检测框做空间叠加差分问题一下子清晰了很多。这篇博文就是把这条完整链路记录下来为什么最终选了YOLOv11、卫星影像数据怎么准备、训练环境怎么搭、小目标怎么优化、两期差分怎么做以及推理结果怎么保存和评估。如果你是做遥感、GIS、城市规划或动态监测的从业者或者想把YOLO系列从小目标比较少的自然场景迁移到遥感场景这篇文章应该能给你省下不少试错时间。1. 卫星影像建筑物检测问题定义与YOLOv11选型理由1.1 遥感建筑物检测到底难在哪先说清楚问题本身。卫星影像里的建筑物检测和自然场景里的行人检测完全不同。首先目标尺度差异极大。0.5米分辨率的影像里一栋普通民房只有三四十个像素放在512×512的切片里就是个点而0.1米分辨率的航拍里一栋工业厂房又能占掉半张图。这个跨度意味着没有一个固定的anchor尺度能同时照顾好两类目标。其次是背景干扰。卫星是从上往下拍屋顶的形状五花八门彩钢棚、混凝土平顶、瓦片坡顶、玻璃幕墙有的屋顶颜色和水泥路几乎一样有的被树冠挡住一半。再加上城中村那种密集排列边界框之间严重重叠检测器很容易把两栋紧挨着的房子并成一个框。第三是时相差异。同一个区域不同月份拍的影像太阳高度角不同阴影长度和方向都不同夏天植被遮挡严重冬天叶子落了建筑轮廓反而清晰。如果模型训练时没有覆盖这些变化实际推理时精度掉得非常快。1.2 为什么不用分割模型反而选了YOLOv11做建筑物提取第一反应都是分割网络UNet、DeepLabV3我都跑过。分割确实能给出像素级的轮廓但在“变化检测”这个最终目标下它有两个硬伤一是分割结果的边缘对配准误差极其敏感两期影像只要偏移一两个像素差分出来的边界就是一圈噪声二是分割结果是一个个连通域没有“唯一ID”的概念前后期匹配需要再做连通域分析和重叠度计算流程很长。YOLO系列输出的检测框天然带有“实体实例”的语义框和框之间可以直接做IoU匹配前后期比对非常方便。YOLOv11相比v8主要是主干网络换成了C3k2结构并且引入了C2PSA注意力模块在COCO上的精度和推理速度都有小幅提升。更重要的是它保留了Anchor-Free的检测头设计对遥感场景里形状多变的小目标少了anchor匹配的约束训练和调参都更省心。我自己的测试结果同一套遥感数据集上YOLOv11的mAP50大约是0.78YOLOv8是0.74提升谈不上质变但就是这几个点的差距落到两期差分上误报数量能差出20%以上。1.3 项目整体链路整个项目的技术链路是影像获取与预处理地理配准、辐射校正→ 滑动窗口切图 → 标注与数据增强 → YOLOv11训练 → 小目标专项优化 → 推理并保存结果 → 两期检测框差分 → 变化区域筛选与矢量输出。这条链路里每一环都有讲究接下来按顺序展开。2. 数据准备历史影像获取、切图标注与小目标样本平衡2.1 历史影像从哪找拿到手先做什么训练一个能用的模型第一步是凑齐两个时相的影像。除了自己采购高分二号、WorldView这类商业影像很多平台支持按时间筛选历史影像比如USGS Earth Explorer以及国内一些遥感数据服务平台都能直接查看并下载历史卫星影像。建议优先选择云量少、时相接近生长季同一阶段的影像这样两期之间的季节性差异对检测的影响会小很多。影像拿到手以后第一件事不是急着切图而是统一坐标系。不同来源的影像最好都重投影到同一个投影坐标系比如UTM国内项目常用CGCS2000然后做一次直方图匹配把两个时相的亮度、对比度拉到接近的水平。这一步不做后面变化检测的时候会出现大量因为色差导致的误检。2.2 切图策略直接决定小目标召回率卫星影像动不动上万像素不可能整图塞进网络切图是必须的。但切图不是简单平均切。我强烈建议用滑动窗口加部分重叠的方式以0.5米分辨率影像为例窗口大小设1024×1024步长设512这样每个目标至少完整出现在一张切片里。如果显卡显存不够退到640×640也能跑但要做好小目标进一步变小的心理准备后面需要投入更多优化。切完图之后一定要做数据清洗把超过80%面积是空地或者云层的切片丢掉。我第一次跑的时候没做这步训练集里大量负样本模型收敛慢不说还老是学会把阴影当建筑。2.3 小目标样本怎么平衡遥感影像里小目标占比很高YOLOv11内置的Mosaic增强虽然有用但只靠它不够。我实际用了三种手段第一种是上采样后再切图把原图先放大2到3倍再切相当于变相提高小目标的分辨率。第二种是复制粘贴增强把小目标建筑从一张图里裁出来随机贴到另一张图的空地位置贴的时候注意别盖住其它建筑。第三种是loss层面的类别重加权在小目标对应的特征层上把损失权重调高。这三种手段可以组合用实测下来对小目标recall的提升在3到5个点。不过要注意复制粘贴增强不要用太多否则模型会对粘贴边缘产生依赖真实场景里反而会误检。3. 环境配置与训练搭环境、调参数、读懂loss曲线3.1 环境配置最容易翻车的三个坑YOLOv11的环境配置本身不复杂但有几个坑值得提前说。CUDA、PyTorch和Ultralytics三者的版本必须匹配。PyTorch的安装包分成cu118、cu121等不同版本如果本机GPU驱动老装了新版会直接报gpu不可用。我的建议是用conda新建一个环境Python 3.10然后先查询显卡驱动支持的CUDA版本再倒推选对应的torch wheel。第二个坑是Ultralytics的版本锁死。这个库更新非常快API说变就变。建议用requirements.txt固定版本不要图省事直接pip install ultralytics装最新版否则过几个月你的训练脚本可能就跑不起来了。第三个坑是显存不够的时候不要同时降batch和降分辨率。正确的顺序是先降batch确认能跑起来再考虑降分辨率。两个参数一起降模型会同时面对梯度不稳定和特征丢失loss曲线会变得乱七八糟。3.2 数据集目录与YOLO格式配置用Ultralytics训练自定义数据集目录结构必须固定datasets/ ├── buildings/ │ ├── images/ │ │ ├── train/ │ │ └── val/ │ └── labels/ │ ├── train/ │ └── val/每个txt文件和图片同名每一行表示一个目标class_id x_center y_center width height坐标都是归一化的。这里最容易出错的坑是标注格式转换。如果你用的是Rolabelimg这类OBB旋转框标注工具导出的格式是角度框参数用LabelImg导出的是四点坐标。转成YOLO格式时需要先算外接矩形再归一化。不管用什么脚本转转完一定要检查坐标值是不是都在0到1之间一旦出现负数或大于1基本就是图片和标签对不上号了。3.3 训练参数怎么定配置好yaml文件之后先用默认参数跑一轮baseline。我给的参考配置是这样的参数推荐值说明imgsz1024小目标场景建议不低于1024batch8-16由显存决定3090以下建议8epochs300配合早停不要手动设太少patience50连续50轮验证指标不涨就停optimizerAdamW小数据集上比SGD更稳lr00.001AdamW配这个初始学习率比较安全3.4 训练中怎么判断状态训练时打开loss曲线面板重点看box_loss和cls_loss。正常情况下前50轮loss快速下降之后缓慢收敛如果box_loss震荡剧烈大概率是学习率太高或者batch太小如果train_loss一直降但val_loss不降反升就是过拟合了这时候要么增强数据要么提前停止。有一点容易被忽略遥感数据集一般就几千到几万张300轮在3090上大概跑两三个小时。别急着停一定要看到val曲线真正平稳下来再做推理否则后面的变化检测全都是无用功。4. 小目标优化与变化检测四个改进方向与两期影像差分4.1 小目标优化的四个方向先说结论小目标的优化要从结构、训练策略、数据、后处理四个方向同时发力单靠改一个地方效果有限。结构层面最常用的是给YOLOv11加一个P2小目标检测头也就是把特征融合从P3-P5扩展到P2层。P2层的feature map更大小目标的细节信息保留更多。代价是计算量和显存都会涨推理速度大约慢10%到15%。对速度不敏感的项目可以试试。训练策略层面最简单的招是提高imgsz到1280同时打开多尺度训练scale设为0.5到1.5让目标在不同尺度下都被看到。我实测过imgsz从640提到1024小目标AP50提升约6个点再提到1280又提升2到3个点但训练时间翻了将近一倍得自己权衡。数据层面的上采样和复制粘贴增强前面已经说了。后处理层面打开TTA测试时增强做水平翻转、垂直翻转、尺度变换的推理融合mAP能再提1到2个点同时把NMS的iou阈值从默认的0.7调到0.5密集建筑场景下的漏检会明显减少。优化项小目标AP50提升推理耗时变化P2检测头3%~4%10%~15%imgsz提到10246%150%复制粘贴增强3%~5%变化不大TTA1%~2%4倍NMS阈值调低漏检减少变化不大4.2 变化检测为什么选择“检测结果差分”变化检测有两条路。一条是训一个双时相输入的分割网络直接输出变化区域代表模型有ChangeFormer、BIT效果确实好但需要成对的训练数据而且这种数据非常难找。另一条就是我这个项目用的思路两个时相分别跑YOLOv11得到各自的检测框集合再做空间叠加差分找出“原来有、现在没了”的区域和“原来没有、现在有了”的区域。第二条路最大的好处是不需要额外的成对标注只要两期单时相检测精度够高变化检测的准确率就跟着有保障。而且检测框天然可以做GIS矢量输出直接对接业务系统。4.3 两期差分的实现细节两期检测结果分别用GeoJSON或Shapefile保存之后差分的核心逻辑就是空间关系判断。我用的策略是以第一期的每个框为基础去和第二期的所有框算IoU。最大IoU小于0.3的判定为“拆除”反过来二期里的框在一期找不到匹配判定为“新建”。这里面的细节很多。首先坐标系统一必须用地理配准后的投影坐标不能用像素坐标硬比。其次对于密集建筑区要用IoU而不是中心点距离去匹配否则相邻的两栋楼会被错配。第三大建筑被检测成多个碎片的情况很常见需要先做一次同源框合并否则同一栋楼一会儿被拆一会儿又新建变化结果完全不可用。变化判定规则可以用这个表概括一期检测二期检测判定有有IoU0.5未变化有无IoU0.3拆除无有新建有有IoU 0.3-0.5疑似变化人工复核这个规则看起来简单实际跑下来最大的坑不在规则本身而在配准误差。两期影像哪怕偏移几个像素检测框也会跟着偏移本来没变化的房子IoU就掉到0.5以下了。所以推理之前必须先做影像级配准矫正必要的时候把IoU阈值放宽到0.4再叠加形态学膨胀腐蚀做后处理把孤立噪点滤掉。5. 推理结果保存、精度评估与工程落地避坑5.1 保存推理结果的几种方式训练好的模型跑推理结果保存有讲究。在Ultralytics里model.predict()加上saveTrue会把带框的图片保存下来save_txtTrue会保存YOLO格式的标签save_confTrue会把置信度写进标签文件里。这只是第一步。如果要对接GIS系统我的做法是写一个脚本把检测框的像素坐标读出来加上切片左上角在全图中的像素偏移再利用影像地理配准时的仿射变换参数映射到投影坐标最后写出GeoJSON。这个仿射变换关系在影像预处理阶段就固化成一个配置文件推理时直接读取不用每次重新算。5.2 精度评估别只盯着mAPYOLOv11训练完会自动输出mAP50和mAP50-95但遥感场景里我更推荐多看几个维度的指标。mAP50对检测框的紧致度不敏感可能出现框大了一圈但分数依旧很高的情况mAP50-95更严格但对业务来说不好解释。实际项目里我习惯同时关注PR曲线在低置信度区间的走势以及recallconf0.5这类指标。如果漏检主要集中在小目标上单独统计面积小于32×32像素的小目标AP值比看总体mAP更有意义。这个统计我做成了脚本每次训练完自动打印一份分尺度的性能报告对比优化前后的效果非常直观。5.3 工程落地的几个坑这里说几个我实际踩过的坑。第一个大影像分块推理时一定要留overlap。我一开始用256的步长切1024的块推理拼接边界上的建筑物被切掉了一半。后来把步长改成512边界漏检直线下降。这个惨痛教训让我后来做任何分块推理时都先把overlap算清楚。第二个推理时的batch不要设太大。遥感切片全是1024级别的大图batch设16很容易爆显存而且不划算。我最终用的是batch4配合AMP混合精度速度和显存开销都稳定很多。第三个置信度阈值不要拍脑袋定。YOLO输出的置信度和自然场景不太一样遥感影像里的建筑物置信度普遍偏低。我建议用小批量验证集扫一遍0.1到0.5之间的阈值画出精确率和召回率的变化曲线再选业务可接受的点。一般落在0.25到0.35之间太低会有大量误报太高则小目标全漏。我在这个项目里最大的体会是YOLOv11这个模型本身已经很成熟真正拉开差距的地方全在数据组织和细节处理上。小目标问题表面上是个模型问题骨子里是数据问题变化检测表面上是个算法问题骨子里是配准和逻辑问题。把切图策略定好把坐标系统一把IoU匹配逻辑写清楚后面所有精度提升都是顺水推舟的事。最后再分享一个小技巧训练之前把数据集的类别分布、目标尺寸分布、坐标位置分布各打一份统计图。跑之前心里有数跑完之后所有奇怪的loss趋势和指标异常基本都能从这三张图里找到原因。这个习惯我后来一直保留节省的排查时间远超做统计本身。本文还有配套的精品资源点击获取
返回列表