
世界で最も洗練されたストリートレベル画像ジオロケーションソフトウェア
一枚の画像から、最先端のAI地理特定。
アイデア • 仕組み • はじめに • コミュニティハブ • インストール
あなたは写真を持っている。動画のスクリーンショットかもしれない。誰かがオンラインに投稿した、トリミングされぼやけた携帯電話の写真かもしれない。店先、道路の一部、または建物の角だけが写っているかもしれない。あなたはそれが正確にどこで撮影されたのか知りたい。
Netryx Astra V2はその質問に答える。
これはオープンソースの地理特定システムで、一枚の画像を、ストリートビューのパノラマデータベースと照合して正確なGPS座標を見つけ出す。写真をアップロードすれば、数分以内に通り、都市、座標が数メートル単位で表示される。
V2がオリジナルのNetryx(および他のツール)と異なる点は、マッチングパイプラインにある。私たちはこのプロジェクトを開始した時点では存在しなかった2つのモデルを使用して、すべてをゼロから再構築した。
その結果、置き換えた9段階のシステムよりもシンプルで正確な3段階パイプラインが実現した。
オリジナルのNetryxは、検索にCosPlace、検証にDISK + LightGlue + LoFTR + RANSAC + 記述子ホッピング + 近傍拡張のスタックを使用していた。動作はしたが、脆弱だった。多くのヒューリスティックが積み重なり、それぞれが前段階の制限を回避するためのものであった。
V2はそれらをすべて捨てた。以下が置き換えの内訳である。
| V1(オリジナル) | V2(Astra) | |
|---|---|---|
| 候補の検出 | CosPlace(ResNet-50, 512-dim) | MegaLoc(DINOv2 ViT-B/14, 8448-dim → PCA 1024) |
| マッチの確認 | DISK + LightGlue + RANSAC | MASt3R 高密度3Dマッチング |
| エッジケースの処理 | LoFTRフォールバック、記述子ホッピング、近傍拡張、ウルトラモード | 空間コンセンサス — それだけ |
| 総パイプライン段数 | 9以上 | 3 |
| 部分画像マッチング | 弱い — スパースキーポイントは重なりが小さいと失敗 | 強い — MASt3Rが小さな領域でも高密度な対応を見つける |
| インデックスの共有 | 不可能 | Hugging Face + オフラインの .netryx バンドルによるコミュニティハブ |
単純化は見た目だけではない。段数が少ないということは、問題が発生する箇所が減り、検索が高速化し、コードが実際に保守可能になることを意味する。
パイプラインは3段階。誇張ではなく、本当に3段階だけである。
Query Image
│
▼
┌─────────────┐
│ MegaLoc │ "Where in the city could this be?"
│ Retrieval │
└─────┬───────┘
│ Top 500 candidates
▼
┌─────────────┐
│ MASt3R │ "Is this actually the same place?"
│ Matching │
└─────┬───────┘
│ Scored candidates
▼
┌─────────────┐
│ Spatial │ "Which cluster of matches is most trustworthy?"
│ Consensus │
└─────┬───────┘
│
▼
📍 GPS Coordinates
クエリ画像はコンパクトな記述子(8448次元のベクトル)に変換され、シーンの視覚的な本質を捉える。これをPCAで1024次元に削減し、ドット積類似度でインデックス内のすべての位置と比較する。
また、クエリ画像を少しズームインした中央クロップと水平反転版の記述子も抽出し、結果を統合する。これにより、クエリがインデックス画像と異なるズームレベルや逆向きの場合も対応できる。
出力は、視覚的類似度でランク付けされた上位500件の候補位置である。
MegaLocはGabriele Bertonの研究室(CosPlaceやEigenPlacesを開発したグループ)による最新の成果で、SF-XL、GSV-Cities、MSLS、ランドマーク検索データを同時に学習している。屋内、屋外、都市、田舎、昼、夜のすべてのベンチマークで一貫して最高性能を達成する他の検索モデルは存在しない。
500件の候補それぞれについて、対応するストリートビューパノラマをダウンロードし、インデックスされた方位角でクロップし、MASt3Rを実行してクエリとクロップ間の高密度なピクセル対応を見つける。
これが難しいクエリに対する魔法である。従来のマッチャー(SuperPoint + LightGlueなど)はせいぜい500~2000のスパースキーポイントを抽出しマッチングを試みる。クエリ画像がデータベース画像と20%しか重なっていない場合、共視キーポイントは50個程度しかなく、信頼できるマッチングには不十分である。
MASt3Rは全く異なる方法で動作する。マッチングを3D再構成問題として扱い、すべてのピクセルに対して高密度な点群マップと局所特徴記述子を予測する。小さな重なり領域でも、シーンの3D構造を理解しているため、数百の信頼できる対応が得られる。これは単なる2Dピクセルパターンではない。
Map-free localizationベンチマーク(単一参照画像、視点変更最大180度)では、MASt3Rは従来手法を30%上回る性能を示した。これは漸進的な改善ではなく、世代を超えた飛躍である。
最大マッチングスコアの候補を選ぶだけの問題は、偽陽性が存在することである。5km離れた同一のチェーンレストランは両方とも高いMASt3Rスコアを生み出す。ソビエト時代のアパート群はすべて同じに見える。
空間コンセンサスがこれを解決する。検索エリアを約50メートルのグリッドセルに分割し、すべての良いマッチを地理的にクラスタリングする。各セルは、そのセルと隣接セル内のすべてのマッチからの総合的な証拠に基づいてスコア付けされる。
間違った場所に200のインライアを持つ単一の外れ値は、正しい場所にそれぞれ80~150のインライアを持つ5つのマッチのクラスターに負ける。勝ったクラスター内の最良のマッチが最終回答となる。
これが、より多くの類似位置が存在する大半径の検索でも精度が維持される理由である。
この写真では、手がかりとなるものが全くない。小さくトリミングされた部分だけである。従来のOSINTはここで完全に失敗する。しかしNetryx Astraは、メタデータや事前の手がかりなしに完全ローカルで実行し、正確な座標まで特定した。
建物の小さなトリミング写真。モスクワで半径1km以内の位置を見つけるにはこれだけで十分だった。
これが私たちが最も興奮している部分である。
都市のインデックス作成には数時間の計算時間がかかる。すべてのユーザーが同じ都市を個別にインデックスするのは無駄である。そこで共有システムを構築した。誰かがモスクワをインデックスし、結果をアップロードすれば、他の全員が数分でダウンロードできる。
最も速い方法。誰かがすでにインデックス作業を行っており、あなたはその事前構築済みインデックスをダウンロードするだけ。
モードをSearchに設定し、Run Searchをクリックし、クエリ画像を選択する。地図座標と検索半径はインデックスのメタデータから自動入力される。この機能はコミュニティが貢献し互いにサポートする場合にのみ機能する。もしあなたが地域をインデックスしたなら、それをアップロードしていただければ感謝される。
重要: PCAの適合中にアプリケーションがメモリ不足でフリーズした場合は、ターミナルで以下のコマンドを使用してください! python3 -c "from test_super import build_compact_index; build_compact_index()"
まだ誰もインデックスしていない都市や地域をインデックスしたいですか?アプリがパノラマのダウンロード、記述子の抽出、検索インデックスの構築まで全て処理する。
python test_super.py
内部で行われていること: アプリは半径内のグリッドポイントを生成し、利用可能なパノラマ位置をすべて見つけ、各パノラマをタイルとしてダウンロードして合成し、各パノラマを複数の方位角でクロップし、各クロップからMegaLoc記述子を抽出し、すべての記述子にPCAを適合させ、コンパクトな検索インデックスを構築する。
友人、Discordサーバー、ダウンロードリンクから.netryxファイルを入手した場合、アプリで📥 Import Indexをクリックし、ファイルを選択するだけで検索準備完了。アカウント不要、インターネット不要、完全オフラインワークフロー。
インデックスはHugging Face Hubに公開データセットとしてホストされている。誰でもアカウントなしでダウンロードできる。貢献(アップロード)には無料のHugging Faceアカウントが必要。
GUIから: 🌐 Community Hubボタンをクリックして、利用可能なインデックスを閲覧、検索、ダウンロード。⬆ Upload Current Indexをクリックして自分のインデックスを共有。
インデックスバンドルは.netryx形式を使用。ZIPアーカイブで以下を含む:
エクスポート時には地理的フィルタリングが自動で行われる。インデックスにモスクワ+パリ+東京が含まれていても、「モスクワ1km」をエクスポートすればモスクワのエントリのみが含まれる。大規模インデックスから特定の地域を手作業なしでスライスできる。
Hugging Faceを使いたくない場合、ファイルをエクスポートして好きな方法で共有する:
# エクスポート
python netryx_hub.py export \
--index-dir ./netryx_data/index \
-o moscow_1km.netryx \
--city moscow --radius 1 --lat 55.75 --lon 37.62
# Discord、メール、Google Driveなどでファイルを送信
# 相手がインポート
python netryx_hub.py import moscow_1km.netryx -o ./netryx_data/index
Mac / Linux:
git clone https://github.com/sparkyniner/Netryx-Astra-V2-Geolocation-Tool.git
cd netryx-astra-v2
chmod +x setup.sh && ./setup.sh
source venv/bin/activate
python3 test_super.py
Windows:
git clone https://github.com/sparkyniner/netryx-astra-v2.git
cd netryx-astra-v2
次に**setup.batをダブルクリックしてすべてインストール。完了したらrun.bat**をダブルクリックして起動。
以上。セットアップスクリプトが仮想環境を作成し、すべての依存関係をインストールし、リポジトリの隣にMASt3Rをクローンし、モデルの重みを事前ダウンロードする。手動設定は不要。