🗺️

QGIS の SAM(Segmentation Anything Model)のプラグインで自動アノテーションをする方法

2023/10/03に公開

Geo - SAM Segmentation の使い方

QGIS プラグインで SAM を使うツール Geo-SAM をご紹介します

https://geo-sam.readthedocs.io/en/latest/Usage/index.html

1. はじめに

最近の Meta の SAM(Segmentn Anything model)の発展は凄まじく、以前の記事にも書いたように地理空間、リモートセンシングの領域にも応用されています。

https://zenn.dev/syu_tan/articles/0b2d6a3e325d46

今回はそれをインタラクティブに QGIS 上でアノテーションを修正したりするのを自動で行ってくれるツールまで開発されています。対応する衛星、航空、光学、SARなど多分野で適用できるので共有します。

2. QGIS プラグインのインストール

基本的にはインストールガイドと内容は同じですが、日本語と画像ベースで記載しておきます。

QGIS については割愛します。

https://qgis.org/ja/site/forusers/alldownloads.html

1. インストール

ターミナルにて QGIS のアプリのパスまで移動します。

# Mac
cd /Applications/QGIS.app/Contents/MacOS/bin
# Linux
cd /usr/bin

# インストール
./pip3 install torch torchvision
./pip3 install torchgeo
./pip3 install segment-anything

以上です。

  1. QGIS のパスなどでエラーが出た場合は以下を確認ください。パスやディレクトリが違います。
./python3
>>> import qgis
  1. Python 自体が入ってない場合は以下を実行してください。
sudo apt-get update
sudo apt-get install python3-pip

2. ダウンロード

Geo-SAM プラグインをダウンロードしてください。

その後、zip ファイルを展開して、Geo-SAM という名前に変更します。

(背景でアザラシ好きがバレるぜ)

今度は QGIS を開いて、
設定 > ユーザープロファイル > アクティブなプロファイルフォルダを開く を選択します。

先ほど、名前を変更した Geo-SAM を以下のフォルダ階層に配置します。

python
└── plugins
    └── Geo-SAM
        ├── checkpoint
        ├── docs
        ├── ...
        ├── tools
        └── ui

具体的なパスは以下です。

# Windows
%APPDATA%\QGIS\QGIS3\profiles\default\python\plugins
# Mac
~/Library/Application\ Support/QGIS/QGIS3/profiles/default/python/plugins
# Linux
~/.local/share/QGIS/QGIS3/profiles/default/python/plugins

3. プラグインのアクティベイト

変更を反映させるために、QGIS を 再起動 します。

プラグイン > `プラグインの管理とインストール` を選択します。

その後、少し待つと、
インストール済み > Geo SAM を選択します。

左上のツールバーに2つアイコンが追加されると成功です。

4. モデルの選択

アノテーションを自動で行う画像の特徴量を生成してもらうためのモデルを取得します。

他の種類のモデルは以下です。
https://geo-sam.readthedocs.io/en/latest/Usage/encoding.html#download-sam-checkpoints

3. 自動アノテーション

では、自動アノテーションをしていきます。

左上の Use it to label landforms をクリックします。

すると、サンプルの画像が出てくるのでこちらで画像の点を選択することで勝手にアノテーションしてくれます。

1. 画面操作

  • FG はフォアグランドの略で検出したい地物の点
  • BG はバックグランドの略で検出したくない地物(背景)の点
  • BBox はバウンディングボックスの略で矩形で囲むモード
  • Clear は点を全て削除
  • Undo は先ほどの作業の取り消し

GISはやっぱり、動画を見てもらった方が早いかもしれません。

点打ちによる自動アノテーション

矩形による自動アノテーション

2. SAM の特徴量処理

オリジナルの自身の画像をやる前に中身の処理を少し紹介する必要?があります。

全体の流れとしては、事前に以下のように 特徴量: Feature を作成する必要があるからです。

この特徴量とは、セグメンテーションする物体を分ける元 のように理解してもらえたらと思います。

では、特徴量 を作成します。右側のアイコンを選択します。

設定がいくつかあるので見ていきましょう。

上から順に、

  • 入力画像のファイルまたはレイヤー
  • 処理するバンドの選択
  • 処理する範囲(見えてる画面だけなど、)
  • スライディングウィンドウの幅
  • SAM の種類(モデル)
  • モデルへのパス
  • GPU の使用
  • バッチサイズ(大きい方が早い)

デフォルトでも大丈夫です。

モデルは 1. でインストールしたものを選択します。

処理が終わるのを待ちましょう。範囲によっては時間がかかります。

Feature Folder を選択てして、自分が選択したレイヤーの名前のフォルダを選びます。

あとはアノテーションし放題ですね!!

3. SAM の応用

特殊衛星画像

今回は可視光画像 RGB 3バンドで検証しましたが、特徴量 が生成できればどんな画像でも可能です。
ということは、SAR や マルチバンドでも可能になります。

利用上の Tips みたいなものにはなるのですが、前処理によって差が大きく出てきてしまいます。
それでは困るので大体うまく行く、方法を紹介します。(保証はしませんw)

今回は、 Umbra の高解像度 SAR 画像(L2.xx の処理レベル)を使用します。

レイヤーのプロパティからシンポロジを選択

ここで 最大/最小設定 を累積範囲を選択して、 2% ~ 98% にします。
それで、自動的に範囲計算ができる指標が出ます。

  • 最小: 32
  • 最大: 81

この数値を控えて、特徴量生成をします。

まずは バンド の修正です。SAR の 1偏波を選択。マルチスペクトルなどは複数選択しましょう。

次に、 Data Value Range を先ほど、控えた数字にして見え方調節します。

この画像の方が地物が判読しやすい?ような気もしますね

4. 生成画像

近年は学習データの用意などにコストがかかるために、DDPM, GAN を始めとした衛星画像生成は普通に行われています。
HuggingFace ではそのデータが公開されています。

https://huggingface.co/datasets/mikonvergence/LAION-EO

例えば、以下
https://uploads-ssl.webflow.com/5e21095855fb4294cb9a5831/5e3a1ad60e42b035edd3a3ae_tailings-reservoir-morenci-mine.jpg

見分けがつかないですよね〜
ここまでの高画質画像が提供されているので使わない手はないです!

適当にジオリファレンスすることで同様に Geo-SAM を使用できます。

4. 最後に

最後まで読んでいただきありがとうございます!
専門的な判読はできません が、衛星系の大規模データでのアノテーションは大変なので少しても楽になるといいですね

このように新しいものがどんどん出ているので追いつくのがやっとです。
ツールなどを配布してくださった開発者には 感謝感謝ですね!
でもめちゃくちゃ楽しいのでこれからも色々書いていきたいと思います。

5. おまけ

こちら以外にも記事執筆をしているのでご参考になれば幸いです
https://zenn.dev/syu_tan

衛星データ解析として、宙畑のライターもしています。
https://sorabatake.jp/?s=秀輔

SAR 解析をよくやっていますが、画像系AI、地理空間や衛星データ、点群データに関心があります。
勉強している人は好きなので楽しく絡んでくれると嬉しいです。
https://twitter.com/emmyeil

Discussion