[译] 解密 Mapbox 卫星影像处理神器 Robosat
英文原文地址:https://www.openstreetmap.org...
英文原文作者:daniel
前言
最近,Mapbox 開源了端到端的衛(wèi)星影像特征提取工具 RoboSat。下面我將以來自 OpenAerialMap 的 Tanzania 區(qū)域的無人機(jī)影像 演示如何在自定義圖像數(shù)據(jù)集上運(yùn)行完整的RoboSat流程。
目標(biāo)
我們的目標(biāo)是通過手把手的教學(xué),在Dar es Salaam 和 Zanzibar 附近提取建筑物輪廓。我建議手工你過一遍 Zanzibar Mapping Initiative 和 OpenAerialMap 來建立對(duì)數(shù)據(jù)集的直觀先驗(yàn)了解。
整體步驟
從無人機(jī)影像提取建筑輪廓包含下面幾個(gè)步驟:
首先,帶你創(chuàng)建一個(gè)基于 OpenAerialMap 的無人機(jī)影像并且?guī)в?OpenStreetMap 建筑物輪廓蒙版的數(shù)據(jù)集。
接著,我將演示如何訓(xùn)練 RoboSat 分割模型在新的無人機(jī)影像如何提取建筑。
最后,我將介紹略好將預(yù)測(cè)結(jié)果轉(zhuǎn)化為簡(jiǎn)單的多邊形并映射到 OpenStreetMap 上。
數(shù)據(jù)準(zhǔn)備
Zanzibar Mapping Initiative 通過OpenAerialMap提供他們的無人機(jī)影像。
這是一個(gè)你可以手動(dòng)瀏覽地圖。
訓(xùn)練RoboSat 的分割模型需要同時(shí)提供對(duì)應(yīng)的 Slippy Map tiles 格式的無人機(jī)影像和對(duì)應(yīng)的建筑物輪廓數(shù)據(jù)集。你可以認(rèn)為這些由二進(jìn)制組成的蒙版是用來標(biāo)記建筑物對(duì)應(yīng)區(qū)域是否存在建筑。
讓我們開始提取 Dar es Salaam 和 Zanzibar 邊界框吧。
從對(duì)應(yīng)的無人機(jī)圖像范圍中提取OSM建筑物幾何圖形提取作為訓(xùn)練數(shù)據(jù)集,因此需要在 OSM 上截取對(duì)應(yīng)的區(qū)域。
我有個(gè)在 GeoFabrik 工作的朋友提供了方便又先進(jìn)的 提取工具 osmium-tool ,它可以幫助實(shí)現(xiàn)上述任務(wù)。
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 的建筑物幾何圖形存儲(chǔ)在 map.osm.pbf 中。
RoboSot 利用 rs extract 來從 OSM 的底圖提取幾何圖形。
rs extract --type building map.osm.pbf buildings.geojson現(xiàn)在我們從建筑物幾何圖形的 buildings.geojson 文件提取對(duì)應(yīng)的 Slippy Map tiles 文件,通常設(shè)置 zoom level 在19 或者 20 是比較合理的。
rs cover --zoom 20 buildings.geojson buildings.tiles基于 buildings.tiles 文件我們可以從 OAM 下載無人機(jī)影像并且將它柵格化成對(duì)應(yīng)的OSM蒙版瓦片,下面是一個(gè)訓(xùn)練數(shù)據(jù)的預(yù)覽效果:
如果你自己看會(huì)發(fā)現(xiàn)這些蒙版其實(shí)不是完美匹配的,因?yàn)槲覀冇?xùn)練的模型基于千萬(wàn)個(gè)圖像和蒙版,有一些噪音數(shù)據(jù)還是可以接受的。
創(chuàng)建無人機(jī)圖像瓦片最簡(jiǎn)單的方式是通過 OAM 的 API。 我們可以用 /meta 接口請(qǐng)求所有開放的給定區(qū)域的無人機(jī)影像。
http 'https://api.openaerialmap.org/meta?bbox=38.9410400390625,-7.0545565715284955,39.70458984374999,-5.711646879515092'JSON 數(shù)組是請(qǐng)求的響應(yīng),她包含了所有邊界框中的無人機(jī)影像元信息。我們可以用 jq 來過濾這些網(wǎng)絡(luò)請(qǐng)求響應(yīng),結(jié)合比如 通過用戶名或者日期這樣的過濾條件。
jq '.results[] | select(.user.name == "ZANZIBAR MAPPING INITIATIVE") | {user: .user.name, date: .acquisition_start, uuid: .uuid}'它將返回一個(gè)包含對(duì)應(yīng)GeoTIFF圖像的 JSON 對(duì)象
{"user": "ZANZIBAR MAPPING INITIATIVE","date": "2017-06-07T00:00:00.000Z","uuid": "https://oin-hotosm.s3.amazonaws.com/5ac7745591b5310010e0d49a/0/5ac7745591b5310010e0d49b.tif" }現(xiàn)在我們有兩個(gè)選項(xiàng)
這兩種方法都是為了實(shí)現(xiàn)一個(gè)目的: 生成一個(gè)包含 256x256大小的無人機(jī)影像的 Slippy Map。
我們可以用提取過的建筑幾何邊界和瓦片文件創(chuàng)建對(duì)應(yīng)蒙版。
rs rasterize --dataset dataset-building.toml --zoom 20 --size 256 buildings.geojson buildings.tiles masks在柵格化之前我們需要?jiǎng)?chuàng)建dataset-building.toml數(shù)據(jù)集;
訓(xùn)練與建模
RoboSat 分割模型是一個(gè)全連接神經(jīng)網(wǎng)絡(luò),為了保證模型效果,我們進(jìn)行了數(shù)據(jù)集切割:
我們按照上述比例對(duì) building.tiles 文件隨機(jī)洗牌到不同的 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因?yàn)榍熬昂捅尘霸跀?shù)據(jù)集中分布不均,模型訓(xùn)練之前需要先計(jì)算一下每個(gè)類的分布。
rs weights --dataset dataset-building.toml將權(quán)重以配置文件的形式保存起來,之后訓(xùn)練會(huì)用到。
一切都準(zhǔn)備好了,可以開始訓(xùn)練了:
rs train --model model-unet.toml --dataset dataset-building.toml在訓(xùn)練過程中對(duì)于每個(gè) epoch,都會(huì)將歷史的訓(xùn)練和驗(yàn)證的損失以及指標(biāo)保存到 checkpoint 中。我們可以在訓(xùn)練過程中選擇在 validation 中表現(xiàn)最好的model存在 checkpoint 中。
用保存下來的checkpoint能夠預(yù)測(cè)圖像中每個(gè)像素用以區(qū)分前景和背景的所屬類別概率,隨后這些所屬類別概率可轉(zhuǎn)為離散的分割蒙版。
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 服務(wù)器的方式直接對(duì)外提供柵格瓦片服務(wù)。我們通過 rs serve 也提供按需瓦片服務(wù),它既能有效進(jìn)行后處理(瓦片邊界、去噪音、矢量化,邊緣簡(jiǎn)化)也可以方便地debug。
如果你手工檢查預(yù)測(cè)結(jié)果你需要注意,本來不存在建筑物但是模型缺圈出來的建筑物是被稱為假陽(yáng)性錯(cuò)誤。假陽(yáng)性錯(cuò)誤是因?yàn)槲覀兊臄?shù)據(jù)集導(dǎo)致的,我們?cè)跀?shù)據(jù)集中反復(fù)采樣帶有建筑的例子,即使這些瓦片的背景像素不包含足夠的背景(被稱為負(fù)采樣)也一樣被用來學(xué)習(xí)勾勒建筑物輪廓。如果我們不反復(fù)輸入一張圖片,那么模型是很難區(qū)分出哪些是背景的。
解決這個(gè)問題有兩種方法:
在確認(rèn)真正的背景圖片后,不止要在OSM上標(biāo)注,而且還要找出對(duì)應(yīng)的全背景的負(fù)樣本到數(shù)據(jù)集中。接著,走一遍訓(xùn)練流程:
通常,在干凈的小數(shù)據(jù)集上做很多遍硬負(fù)挖掘和訓(xùn)練才能使得模型收斂。
恭喜!你現(xiàn)在有一個(gè)魯棒的模型用于預(yù)測(cè)了!
在花費(fèi)數(shù)小時(shí)的硬負(fù)樣挖掘,我們能產(chǎn)出分割概率了。
有趣的看到的是該模型并不完全確定建筑工地。這是因?yàn)樵谖覀冇糜矘油诰蚍椒ㄟx擇數(shù)據(jù)集時(shí)決定是否使用建筑工地決定的。
最后,后處理流程是有必要的,它將分割蒙版轉(zhuǎn)化為矢量化的 GeoJSON 之后用于瓦片文件生成。
本文不對(duì)后處理的細(xì)節(jié)展開,因?yàn)榛谛颖镜挠?xùn)練方式比較粗糙的,RoboSat 后處理模塊還在打磨中。
總結(jié)
本教程手把手過了一遍 RoboSat 全流程,從數(shù)據(jù)集準(zhǔn)備、訓(xùn)練分割模型到預(yù)測(cè)航拍圖片中的建筑物。本教程所有工具和數(shù)據(jù)都開源了。
嘗試一下吧! https://github.com/mapbox/rob...
作為分享主義者(sharism),本人所有互聯(lián)網(wǎng)發(fā)布的圖文均遵從CC版權(quán),轉(zhuǎn)載請(qǐng)保留作者信息并注明作者 Harry Zhu 的 FinanceR專欄:https://segmentfault.com/blog...,如果涉及源代碼請(qǐng)注明GitHub地址:https://github.com/harryprince。微信號(hào): harryzhustudio商業(yè)使用請(qǐng)聯(lián)系作者。
參考資料
https://www.openstreetmap.org...
https://github.com/mapbox/rob...
總結(jié)
以上是生活随笔為你收集整理的[译] 解密 Mapbox 卫星影像处理神器 Robosat的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在 CentOS 7 上生成 SSL
- 下一篇: ssh 免密登录