英文原文地址:https://www.openstreetmap.org...
英文原文做者:danielgit
最近,Mapbox 开源了端到端的卫星影像特征提取工具 RoboSat。下面我将以来自 OpenAerialMap 的 Tanzania 区域的无人机影像 演示如何在自定义图像数据集上运行完整的RoboSat流程。github
咱们的目标是经过手把手的教学,在Dar es Salaam 和 Zanzibar 附近提取建筑物轮廓。我建议手工你过一遍 Zanzibar Mapping Initiative 和 OpenAerialMap 来创建对数据集的直观先验了解。json
从无人机影像提取建筑轮廓包含下面几个步骤:segmentfault
首先,带你建立一个基于 OpenAerialMap 的无人机影像而且带有 OpenStreetMap 建筑物轮廓蒙版的数据集。api
接着,我将演示如何训练 RoboSat 分割模型在新的无人机影像如何提取建筑。数组
最后,我将介绍略好将预测结果转化为简单的多边形并映射到 OpenStreetMap 上。服务器
Zanzibar Mapping Initiative 经过OpenAerialMap提供他们的无人机影像。微信
这是一个你能够手动浏览地图。网络
训练RoboSat 的分割模型须要同时提供对应的 Slippy Map tiles 格式的无人机影像和对应的建筑物轮廓数据集。你能够认为这些由二进制组成的蒙版是用来标记建筑物对应区域是否存在建筑。app
让咱们开始提取 Dar es Salaam 和 Zanzibar 边界框吧。
从对应的无人机图像范围中提取OSM建筑物几何图形提取做为训练数据集,所以须要在 OSM 上截取对应的区域。
我有个在 GeoFabrik 工做的朋友提供了方便又先进的 提取工具 osmium-tool
,它能够帮助实现上述任务。
wget --limit-rate=1M http://download.geofabrik.de/africa/tanzania-latest.osm.pbf
osmium extract --bbox '38.9410400390625,-7.0545565715284955,39.70458984374999,-5.711646879515092' tanzania-latest.osm.pbf --output map.osm.pbf
完美! Dar es Salaam and Zanzibar 的建筑物几何图形存储在 map.osm.pbf 中。
RoboSot 利用 rs extract 来从 OSM 的底图提取几何图形。
rs extract --type building map.osm.pbf buildings.geojson
如今咱们从建筑物几何图形的 buildings.geojson 文件提取对应的 Slippy Map tiles 文件,一般设置 zoom level 在19 或者 20 是比较合理的。
rs cover --zoom 20 buildings.geojson buildings.tiles
基于 buildings.tiles 文件咱们能够从 OAM 下载无人机影像而且将它栅格化成对应的OSM蒙版瓦片,下面是一个训练数据的预览效果:
若是你本身看会发现这些蒙版其实不是完美匹配的,由于咱们训练的模型基于千万个图像和蒙版,有一些噪音数据仍是能够接受的。
建立无人机图像瓦片最简单的方式是经过 OAM 的 API。 咱们能够用 /meta 接口请求全部开放的给定区域的无人机影像。
http 'https://api.openaerialmap.org/meta?bbox=38.9410400390625,-7.0545565715284955,39.70458984374999,-5.711646879515092'
JSON 数组是请求的响应,她包含了全部边界框中的无人机影像元信息。咱们能够用 jq 来过滤这些网络请求响应,结合好比 经过用户名或者日期这样的过滤条件。
jq '.results[] | select(.user.name == "ZANZIBAR MAPPING INITIATIVE") | {user: .user.name, date: .acquisition_start, uuid: .uuid}'
它将返回一个包含对应GeoTIFF图像的 JSON 对象
{ "user": "ZANZIBAR MAPPING INITIATIVE", "date": "2017-06-07T00:00:00.000Z", "uuid": "https://oin-hotosm.s3.amazonaws.com/5ac7745591b5310010e0d49a/0/5ac7745591b5310010e0d49b.tif" }
如今咱们有两个选项
rasterio
和 rio-tiler
小工具来切割 GeoTIFF生成对应的瓦片。rs download https://tiles.openaerialmap.org/5ac626e091b5310010e0d480/0/5ac626e091b5310010e0d481/{z}/{x}/{y}.png building.tiles
注意: OAM 提供多个 Slippy Map 接口
这两种方法都是为了实现一个目的: 生成一个包含 256x256大小的无人机影像的 Slippy Map。
咱们能够用提取过的建筑几何边界和瓦片文件建立对应蒙版。
rs rasterize --dataset dataset-building.toml --zoom 20 --size 256 buildings.geojson buildings.tiles masks
在栅格化以前咱们须要建立dataset-building.toml
数据集;
RoboSat 分割模型是一个全链接神经网络,为了保证模型效果,咱们进行了数据集切割:
咱们按照上述比例对 building.tiles 文件随机洗牌到不一样的 Slippy Map 文件夹下。
rs subset images validation.tiles dataset/validation/images rs subset masks validation.tiles dataset/validation/labels
rs subset images training.tiles dataset/training/images rs subset masks training.tiles dataset/training/labels
rs subset images evaluation.tiles dataset/evaluation/images rs subset masks evaluation.tiles dataset/evaluation/labels
由于前景和背景在数据集中分布不均,模型训练以前须要先计算一下每一个类的分布。
rs weights --dataset dataset-building.toml
将权重以配置文件的形式保存起来,以后训练会用到。
一切都准备好了,能够开始训练了:
rs train --model model-unet.toml --dataset dataset-building.toml
在训练过程当中对于每一个 epoch
,都会将历史的训练和验证的损失以及指标保存到 checkpoint 中。咱们能够在训练过程当中选择在 validation 中表现最好的model存在 checkpoint 中。
用保存下来的checkpoint可以预测图像中每一个像素用以区分前景和背景的所属类别几率,随后这些所属类别几率可转为离散的分割蒙版。
rs predict --tile_size 256 --model model-unet.toml --dataset dataset-building.toml --checkpoint checkpoint-00038-of-00050.pth images segmentation-probabilities
rs masks segmentation-masks segmentation-probabilities
这些 Slippy Map 文件夹也能够经过 HTTP 服务器的方式直接对外提供栅格瓦片服务。咱们经过 rs serve
也提供按需瓦片服务,它既能有效进行后处理(瓦片边界、去噪音、矢量化,边缘简化)也能够方便地debug。
若是你手工检查预测结果你须要注意,原本不存在建筑物可是模型缺圈出来的建筑物是被称为假阳性错误。假阳性错误是由于咱们的数据集致使的,咱们在数据集中反复采样带有建筑的例子,即便这些瓦片的背景像素不包含足够的背景(被称为负采样)也同样被用来学习勾勒建筑物轮廓。若是咱们不反复输入一张图片,那么模型是很难区分出哪些是背景的。
解决这个问题有两种方法:
rs compare
工具建立无建筑的图像,接着进行预测。rs compare visualizations images segmentation-masks
在确认真正的背景图片后,不止要在OSM上标注,并且还要找出对应的全背景的负样本到数据集中。接着,走一遍训练流程:
rs weights
一般,在干净的小数据集上作不少遍硬负挖掘和训练才能使得模型收敛。
恭喜!你如今有一个鲁棒的模型用于预测了!
在花费数小时的硬负样挖掘,咱们能产出分割几率了。
有趣的看到的是该模型并不彻底肯定建筑工地。这是由于在咱们用硬样挖掘方法选择数据集时决定是否使用建筑工地决定的。
最后,后处理流程是有必要的,它将分割蒙版转化为矢量化的 GeoJSON 以后用于瓦片文件生成。
本文不对后处理的细节展开,由于基于小样本的训练方式比较粗糙的,RoboSat
后处理模块还在打磨中。
本教程手把手过了一遍 RoboSat 全流程,从数据集准备、训练分割模型到预测航拍图片中的建筑物。本教程全部工具和数据都开源了。
尝试一下吧! https://github.com/mapbox/rob...
做为分享主义者(sharism),本人全部互联网发布的图文均听从CC版权,转载请保留做者信息并注明做者 Harry Zhu 的 FinanceR专栏: https://segmentfault.com/blog...,若是涉及源代码请注明GitHub地址: https://github.com/harryprince。微信号: harryzhustudio
商业使用请联系做者。
https://www.openstreetmap.org...
https://github.com/mapbox/rob...