[译] 解密 Mapbox 卫星影像处理神器 Robosat
英文原文地址:https://www.openstreetmap.org...
英文原文作者:daniel
前言
最近,Mapbox 開源了端到端的衛星影像特征提取工具 RoboSat。下面我將以來自 OpenAerialMap 的 Tanzania 區域的無人機影像 演示如何在自定義圖像數據集上運行完整的RoboSat流程。
目標
我們的目標是通過手把手的教學,在Dar es Salaam 和 Zanzibar 附近提取建筑物輪廓。我建議手工你過一遍 Zanzibar Mapping Initiative 和 OpenAerialMap 來建立對數據集的直觀先驗了解。
整體步驟
從無人機影像提取建筑輪廓包含下面幾個步驟:
首先,帶你創建一個基于 OpenAerialMap 的無人機影像并且帶有 OpenStreetMap 建筑物輪廓蒙版的數據集。
接著,我將演示如何訓練 RoboSat 分割模型在新的無人機影像如何提取建筑。
最后,我將介紹略好將預測結果轉化為簡單的多邊形并映射到 OpenStreetMap 上。
數據準備
Zanzibar Mapping Initiative 通過OpenAerialMap提供他們的無人機影像。
這是一個你可以手動瀏覽地圖。
訓練RoboSat 的分割模型需要同時提供對應的 Slippy Map tiles 格式的無人機影像和對應的建筑物輪廓數據集。你可以認為這些由二進制組成的蒙版是用來標記建筑物對應區域是否存在建筑。
讓我們開始提取 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" }現在我們有兩個選項
這兩種方法都是為了實現一個目的: 生成一個包含 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。
如果你手工檢查預測結果你需要注意,本來不存在建筑物但是模型缺圈出來的建筑物是被稱為假陽性錯誤。假陽性錯誤是因為我們的數據集導致的,我們在數據集中反復采樣帶有建筑的例子,即使這些瓦片的背景像素不包含足夠的背景(被稱為負采樣)也一樣被用來學習勾勒建筑物輪廓。如果我們不反復輸入一張圖片,那么模型是很難區分出哪些是背景的。
解決這個問題有兩種方法:
在確認真正的背景圖片后,不止要在OSM上標注,而且還要找出對應的全背景的負樣本到數據集中。接著,走一遍訓練流程:
通常,在干凈的小數據集上做很多遍硬負挖掘和訓練才能使得模型收斂。
恭喜!你現在有一個魯棒的模型用于預測了!
在花費數小時的硬負樣挖掘,我們能產出分割概率了。
有趣的看到的是該模型并不完全確定建筑工地。這是因為在我們用硬樣挖掘方法選擇數據集時決定是否使用建筑工地決定的。
最后,后處理流程是有必要的,它將分割蒙版轉化為矢量化的 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...
總結
以上是生活随笔為你收集整理的[译] 解密 Mapbox 卫星影像处理神器 Robosat的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在 CentOS 7 上生成 SSL
- 下一篇: ssh 免密登录