日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[译] 解密 Mapbox 卫星影像处理神器 Robosat

發布時間:2025/3/21 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [译] 解密 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" }

    現在我們有兩個選項

  • 下載 GeoTIFF 然后用 rasterio 和 rio-tiler 小工具來切割 GeoTIFF生成對應的瓦片。
  • 請求 OAM 的 API 直接獲取對應的瓦片。
  • 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 分割模型是一個全連接神經網絡,為了保證模型效果,我們進行了數據集切割:

  • 80% 訓練集,用于模型訓練
  • 10% 驗證集,用戶模型效果驗證
  • 10% 預留集,用戶模型超參數調優
  • 我們按照上述比例對 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。

    如果你手工檢查預測結果你需要注意,本來不存在建筑物但是模型缺圈出來的建筑物是被稱為假陽性錯誤。假陽性錯誤是因為我們的數據集導致的,我們在數據集中反復采樣帶有建筑的例子,即使這些瓦片的背景像素不包含足夠的背景(被稱為負采樣)也一樣被用來學習勾勒建筑物輪廓。如果我們不反復輸入一張圖片,那么模型是很難區分出哪些是背景的。

    解決這個問題有兩種方法:

  • 添加隨機采樣的背景瓦片到訓練集中,重新計算類的分布權重,然后再次訓練,或者使用我們訓練好的模型在數據集上反復訓練,然后故意在已知無建筑物的樣本中進行預測。如果模型出現誤判了,然后我們就調出這部分數據集,再次訓練。
  • 使用所謂的 "硬負挖掘",允許我們主動添加負樣本。這個方法只在小而干凈的數據集上使用。對于"硬負挖掘" 我們從不在 building.tiles 的瓦片中隨機采樣來訓練模型。然后通過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...

    總結

    以上是生活随笔為你收集整理的[译] 解密 Mapbox 卫星影像处理神器 Robosat的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。