日本の大手町の航空・衛星の画像を SAM (AI)で推論してみた
少し前にAI界隈を騒がせた Meta社の Segment Anything Model(通称: SAM)
なんとこちらが 地理空間
方面での拡張した応用ライブラリとして segment-geospatialというものが出ていたので使ってみました。
概要
- 推論結果
- 環境
- コード
- 定性評価
- 定量評価
- まとめ
推論結果
何はともあれどうゆうアウトプットが出るのかの結果からです。
出力としては以下です。
- Google Earth の画像
- セグメントのマスク画像
- SAM の予測したポリゴン
いずれもジオコードされています。
自分で衛星や航空の画像を 持ち合わせていなくても Google earth から Tiff ファイルの地理座標情報の付与された画像とそのポリゴンが ここまで手軽に手に入るのは魅力的です。
当然 Google Earth の利用に準ずることにはなります。
QGIS でレイヤーを重ねて可視化するとこのような感じです。
車が判読できるくらいの解像度の画像でセグメンテーションできるのは素晴らしいですね〜
環境
今回は Google Colaboratoryを使用しました。
もちろん無料で、広い領域でレイヤーの処理する場合はメモリが厳しいです。
GPU
環境があればどこでも速やかに終わると思います。
コード
上記で 大手町
版 の Notebook を公開しています。
大雑把ではありますが処理について追記します。
ライブラリーのインストール
pip install -q segment-geospatial leafmap localtileserver
インポート
import os
import leafmap
import torch
from samgeo import SamGeo, tms_to_geotiff
大手町の可視化
m = leafmap.Map(center=[35.685518, 139.764275], zoom=19)
m.add_basemap('SATELLITE')
m
範囲の選択
推論範囲です。
bbox = [139.76, 35.68, 139.77, 35.69] # 35.685518, 139.764275
画像の取得
ダウンロードとタイリング処理です。
image = 'satellite.tif'
tms_to_geotiff(output=image, bbox=bbox, zoom=20, source='Satellite', overwrite=True)
SAMの取得
out_dir = os.path.join(os.path.expanduser('~'), 'Downloads')
checkpoint = os.path.join(out_dir, 'sam_vit_h_4b8939.pth')
device = 'cuda' if torch.cuda.is_available() else 'cpu'
sam = SamGeo(
checkpoint=checkpoint,
model_type='vit_h',
device=device,
erosion_kernel=(3, 3),
mask_multiplier=255,
sam_kwargs=None,
)
SAMの推論
モデルの推論で解像度的に30分くらいはかかります。
mask = 'segment.tiff'
sam.generate(image, mask)
ファイル形式の変換
ラスターベクターの処理などです
vector = 'segment.gpkg'
sam.tiff_to_gpkg(mask, vector, simplify_tolerance=None)
shapefile = 'segment.shp'
sam.tiff_to_vector(mask, shapefile)
推論結果を重ね合わせての可視化
ここでかなりメモリが必要です。
style = {
'color': '#9900ff',
'weight': 2,
'fillColor': '#7c4199',
'fillOpacity': 0.35,
}
m.add_vector(vector, layer_name='Vector', style=style)
m
定性評価
車やトラック、道路標識は検知しています。他にもビルの上のダクト?エアコン機器のようなものもしっかりです。
皇居の木々や道路樹木も検知しています。ヘリポートみたいに色変化があるものは完璧ですね
ビルの影まできちっとセグメントで分けれているのはステキ!
東京駅の屋根!
お堀になんか誤検知しちゃってるのかなぁ〜とか思ったら
Google Earth のロゴマークでした(笑)
定量評価
推論元の画像が .tif
の RGB 3チャンネル 8Bit形式で 105.1MB
SAMによって検知できたポリゴンは 23,435
個で、 .gpkg
形式で 28.81MB
なのでポリゴンのベクター形式にしてはかなりの量を検知しているようなイメージです。
SAM自体がRecall
意識しているぽいのが影響しているのでしょう
まとめ
今回は身近な?大手町について最新のAI(SAM)
と航空宇宙領域のデータ
を掛け合わせて遊んでみて楽しかったので共有や宇宙利用が広まることを願って記事にしてみました。
使ってみた感想としては、SAMでのセグメンテーションは航空宇宙領域でも問題なく、適用できますし、新しい特徴量
として考えることもできると思います。
他にもエッジ検出
はかなりの精度なので小物体の検出などに生かしていけるのかなと考えています。
良くも悪くもこのような革新が仕事を奪い、仕事を生み出してより良いものができることを願っています!
こんな衛星データいじる仕事がしたいし、楽しいですね〜!(子供w)
Discussion