見出し画像

写真一枚で「どこで撮ったか」がわかる時代——GeoCLIPを使ってみた


こんにちは、GIS芸人のいりやまです。


▷いりやまの働くマップクエストはこちら
▷GIS芸人のいりやまをもっと知りたい方はこちら
▷GISソフトウェア比較表はこちら




最近、こんな話をよく聞きます。

「スマホの写真、位置情報オフにしてるから安心」
「GPSタグさえ消せば、どこで撮ったかはバレない」

正直に言うと、私もつい最近までそう思っていました。GPSタグ(EXIF情報)が入っていなければ、写真から場所はわからない——35年GISの仕事をしてきた人間でも、そう信じて疑いませんでした。

ところが、その前提を静かに覆す技術が、もう何年も前から公開されていました。GeoCLIPというAIモデルです。今回は実際に手を動かして試した結果を、技術に詳しくない方にもわかるようにご紹介します。


GeoCLIPって何?

ひとことで言うと、**「写真を1枚見せると、それがどこで撮られたかを言い当てるAI」**です。

種明かしをすると、GeoCLIPは2023年に発表されたモデルで、世界中で撮影された470万枚もの写真と、その撮影地点(緯度経度)のペアを使って学習しています。

人間でいえば、世界中を旅して「この風景はだいたいこのあたりだな」という勘を磨き上げたベテラン旅行者のようなものです。ただし人間と違うのは、その「勘」が数字(緯度・経度)としてはっきり出力されるところです。

ベースになっているのは、OpenAIが作ったCLIPという技術。画像とテキストを同じ「意味の地図」の上に並べられる仕組みで、近年の画像AIブームを支えている重要な技術のひとつです。GeoCLIPは、このCLIPの仕組みを「画像」と「場所」のペアに応用したもの、とイメージしてもらえれば十分です。


実際にインストールして動かしてみた

百聞は一見にしかず、ということで手元の環境で試してみました。

インストールはこれだけです。

pip install geoclip

驚くほど簡単です。コードもほんの数行で、画像ファイルを渡すだけで上位候補の緯度経度と、その「自信度」をパーセンテージ風の数値で返してくれます。

import sys
from geoclip import GeoCLIP
from geoclip.model.image_encoder import ImageEncoder

def patched_forward(self, x):
    vision_out = self.CLIP.vision_model(x)
    x = vision_out.pooler_output
    x = self.CLIP.visual_projection(x)
    x = self.mlp(x)
    return x

ImageEncoder.forward = patched_forward

model = GeoCLIP()
path = sys.argv[1] if len(sys.argv) > 1 else "image.png"
top_gps, top_prob = model.predict(path, top_k=5)

for i in range(5):
    lat, lon = top_gps[i]
    prob = top_prob[i]
    print(f"#{i+1} 緯度: {lat:.6f}, 経度: {lon:.6f}  確率: {prob:.4f}")
    print(f"     https://maps.google.com/?q={lat},{lon}")

東京スカイツリーで試した結果

まずは誰でも知っている東京スカイツリーの空撮写真で試しました。


結果は、最も自信度の高い候補が実際の座標から誤差10メートル以内

#1 緯度: 35.712166, 経度: 139.811996  確率: 0.0306
#2 緯度: 35.710037, 経度: 139.810699  確率: 0.0293

EXIF(位置情報タグ)も、テキストでの説明も一切与えていません。写真の見た目だけから、これだけの精度で言い当てたわけです。正直、ちょっと鳥肌が立ちました。

浜松のアクトタワーで試すと…

調子に乗って、地元・浜松のアクトタワーでも試してみました。


すると——

緯度はほぼ正解(誤差200メートル以内)だったのに、経度が約200キロ西の大阪に飛んでしまいました。

理由を考えてみると、これは納得できます。「高層ビルが立ち並ぶ日本の地方都市」という見た目の特徴だけで判断すると、浜松も大阪もよく似て見えるのでしょう。学習データの中に浜松の写真が少なければ、より有名な大阪を選んでしまう、というわけです。

つまりGeoCLIPは、「世界的に有名な場所」や「その土地ならではの強い特徴がある景観」には強いけれど、「どこにでもありそうな地方都市」は苦手ということです。この向き不向きを知っておくと、使いどころを誤らずに済みます。

得意なこと

  • 世界的なランドマークの特定

  • 「どの国で撮られたか」の判定

  • 地域ならではの景観・植生の識別

苦手なこと

  • 地方都市のありふれた建物

  • 「どの市区町村か」の特定

  • 室内写真・接写


なぜこんなことができるのか

少しだけ仕組みに踏み込みます(難しい方は読み飛ばしてOKです)。

GeoCLIPは、画像を「512個の数字の並び」というベクトルに変換します。そして、そのベクトルが学習済みのGPS座標のベクトルとどれだけ近いかを計算して、「この画像はおそらくこの場所」と判断しています。

明示的に「この建物が見えたら東京」というようなルールを人間が教え込んでいるわけではありません。470万枚の学習を通じて、モデルの内部に「この手の風景はこのあたりに多い」という構造が、自然と刻み込まれているのです。


これはGISや不動産の仕事にどう関わるのか

ここからは少し実務寄りの話です。

GeoCLIPに続いて、衛星画像専用のGeoRSCLIPというモデルも登場しています。こちらはLandsatやSentinelといった衛星画像をそのまま読み込めるタイプで、理論上は「スギの壮齢林」「荒れた農地」といったテキストで衛星画像を検索することも可能になりつつあります。

これまでの衛星画像解析(NDVIなど)は、植生の活性度を数値で示すことはできても、「それが何を写しているか」を言葉で説明するのは苦手でした。この種の技術と組み合わせれば、**「数値の変化」+「意味の説明」**をセットで出せるようになります。森林資源の調査やJ-Creditの検証レポートなどで、説得力のある資料作りに役立ちそうです。


「位置情報はオフにしているから安心」は、もう過去の話かもしれない

最後に、少し背筋が伸びる話を。

GeoCLIPのようなモデルの存在は、「EXIFを消せば場所はわからない」という安心感が、技術的にはもう成り立たなくなっていることを示しています。

写真はアップロードされた瞬間、AIの目を通して「ベクトル」という数字の並びに変換されます。そのベクトルには、撮影者が意図せず、場所の手がかりが含まれてしまう可能性がある——ということです。

便利な技術であると同時に、こうした側面があることも、知っておいて損はないと思います。


まとめ

  • GeoCLIPは、写真1枚から撮影場所(緯度経度)を推定するAIモデル

  • インストールは`pip install geoclip`の一行、コードも数行で動く

  • 世界的ランドマークでは誤差10m以内という驚異的な精度を出すこともある

  • 一方で、似た景観の地方都市同士は取り違えることもある(得意・不得意がある)

  • GIS・リモートセンシングとの組み合わせで、今後さらに応用範囲が広がりそう

  • 「位置情報を消せば安心」という前提が揺らぎつつあることも、知っておきたい

技術の世界の話、で終わらせず、今日のパソコンで誰でも試せるところまで来ている——というのが、今回いちばんお伝えしたかったことです。


▷いりやまの働くマップクエストはこちら
▷GIS芸人のいりやまをもっと知りたい方はこちら
▷GISソフトウェア比較表はこちら

いいなと思ったら応援しよう!