有这样一个需求,我需要写一个有这些功能的简单平台:
将航拍的正射影像拼接为一张底图
在超大的一张地图上使用AI算法进行实例分割
我的最终实现中又多了这些功能:
金字塔瓦片切分
手动实例标注和修改
导出切片数据集
正射影像拼接
目前存在相当多的库可以做正射影像拼接。
我把他们大致分为三类:
无缝图拼接类:这类侧重于观赏性,不保证测绘准确性,适用于全景图拼接
平面快速简单拼接类:这类拼接速度非常快,不进行图像对齐,不做边缘融合,适合实时看效果。
三维点云重建:与三维重建类似,会经过图像对齐、点云生成等过程,但最终只输出高清俯视图。
试过简单拼接、试过结合无缝拼接,踩了很多坑后,最后决定使用最复杂、效率最低的三维点云重建方案。
这一类也有很多库,其中最著名的是 ODM(OpenDroneMap),AI跟我说用这个需要拉10个G的东西下来。
最终找到了 WebODM 这个工具,让 AI 解包了重建引擎,是 ODX ,所以最终采用了 ODX 进行正射拼接。
实例分割
接下来是接入 AI 能力。
像这种视觉任务,我第一个想到的当然是 YOLO 啦~
买了两个数据集,训练了 YOLO26n-seg 和 YOLO26s-seg,在数据集上的指标非常好(很大一部分原因是数据集是无人机连续拍摄的图片,有大量重复区域)
在其他地方买的两个业务需要的数据集训练模型后其实并不能很好泛化,最终手动标注了一部分数据,将应用先内测一段时间产生数据集。
实测对于本次切分田块的任务, 相比与 YOLO-seg 模型,SAM2 + YOLO26 目标检测能够更好地进行实例分割。
SAM2 是语义分割模型,不能进行实例分割。
YOLO26 只检测目标的锚框。
两者结合,先检测锚框,然后在锚框内进行语义分割。
大概是数据集的问题,模型最终效果其实并不太好:

后续会针对于模型做优化。
切片检测
将一张很大的图缩小之后给模型推理是效果很差的。所以需要将大图切片检测。
我的做法非常简单粗暴,切片之间保留一定的重叠率(参考值 50%),切片边缘丢弃一部分(参考值 10%),如果任意两个实例之间的重叠面积达到了较小实例的一定比例就合并为一个(参考值 60%)。
重叠率够大的情况下,能够弥补一部分模型的缺陷:

后续像 金字塔瓦片切分、数据集导出、编辑标注等功能在VibeCodeing时代就不多赘述啦。







