
세계에서 가장 정교한 거리 수준 이미지 지리 위치 소프트웨어
단일 이미지로 최첨단 AI 위치 추정
아이디어 • 작동 방식 • 시작하기 • 커뮤니티 허브 • 설치
당신은 사진을 가지고 있습니다. 어쩌면 비디오에서 캡처한 스크린샷일 수도 있습니다. 누군가 온라인에 올린 잘린 흐릿한 휴대폰 사진일 수도 있습니다. 상점 앞, 도로 구간, 건물 모퉁이만 보일 수도 있습니다. 당신은 그 사진이 정확히 어디서 찍혔는지 알고 싶습니다.
Netryx Astra V2가 그 질문에 답합니다.
이것은 단일 이미지를 가져와 거리 뷰 파노라마 데이터베이스와 비교하여 정확한 GPS 좌표를 찾는 오픈 소스 위치 추정 시스템입니다. 사진을 업로드하면 몇 분 안에 거리, 도시, 좌표를 몇 미터 오차 이내로 알려줍니다.
V2가 원래 Netryx(및 다른 도구들)와 다른 점은 매칭 파이프라인입니다. 우리는 이 프로젝트를 시작할 당시에는 존재하지 않았던 두 가지 모델을 사용하여 처음부터 모든 것을 재구축했습니다.
MegaLoc (CVPR 2025) — 장소 인식을 위한 가장 정확한 이미지 검색 모델로, 실내, 실외, 낮, 밤, 계절 변화를 포함한 6개 데이터셋에서 학습되었습니다. 올바른 동네를 찾아냅니다.
MASt3R (ECCV 2024) — 3D 인식 밀집 매칭기로, 픽셀 패턴뿐만 아니라 장면의 기하학적 구조를 이해합니다. 전통적인 매칭기로는 깨질 부분적이거나 크게 잘린 사진에서도 정확한 위치를 확인합니다.
그 결과, 이전 9단계 시스템을 대체하는 더 간단하면서도 더 정확한 3단계 파이프라인이 탄생했습니다.
원래 Netryx는 검색에 CosPlace를 사용하고, 검증에 DISK + LightGlue + LoFTR + RANSAC + 디스크립터 호핑 + 이웃 확장 스택을 사용했습니다. 작동은 했지만 취약했습니다. 많은 휴리스틱이 서로 겹쳐져 있었고, 각각은 이전 단계의 한계를 우회하기 위한 것이었습니다.
V2는 그 모든 것을 폐기했습니다. 다음은 무엇이 무엇을 대체했는지입니다.
단순화는 미학적인 것만이 아닙니다. 단계가 적을수록 문제가 발생할 곳이 줄어들고, 검색 속도가 빨라지며, 유지 관리가 가능한 코드가 됩니다.
파이프라인은 세 단계로 구성됩니다. 과장이 아닙니다. 진정으로 세 단계뿐입니다.
Query Image
│
▼
┌─────────────┐
│ MegaLoc │ "이 장면은 도시의 어디일까?"
│ Retrieval │
└─────┬───────┘
│ 상위 500개 후보
▼
┌─────────────┐
│ MASt3R │ "이게 실제로 같은 장소일까?"
│ Matching │
└─────┬───────┘
│ 점수가 매겨진 후보
▼
┌─────────────┐
│ Spatial │ "어떤 매치 클러스터가 가장 신뢰할 수 있을까?"
│ 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 재구성 문제로 취급하여 모든 픽셀에 대한 밀집 점 맵과 지역 특징 디스크립터를 예측합니다. 작은 중첩 영역에서도 수백 개의 신뢰할 수 있는 대응점을 생성합니다. 이는 2D 픽셀 패턴이 아닌 장면의 3D 구조를 이해하기 때문입니다.
Map-free localization 벤치마크(단일 참조 이미지, 시점 변화 최대 180°)에서 MASt3R는 이전 방법보다 30% 더 뛰어납니다. 이는 점진적인 개선이 아니라 세대적 도약입니다.
가장 높은 매치 점수를 가진 후보를 선택하는 문제는 오탐지가 존재한다는 것입니다. 5km 떨어진 두 개의 동일한 체인 레스토랑은 모두 높은 MASt3R 점수를 생성합니다. 소련 시대 아파트 블록 열은 모두 똑같아 보입니다.
공간적 합의가 이를 해결합니다. 검색 영역을 약 50미터 그리드 셀로 나누고 모든 좋은 매치를 지리적으로 클러스터링합니다. 각 셀은 해당 셀 및 이웃 셀의 모든 매치로부터 결합된 증거를 기반으로 점수를 얻습니다.
잘못된 위치에 200개의 인라이어가 있는 단일 이상값보다 올바른 위치에 각각 80-150개의 인라이어가 있는 5개 매치 클러스터가 더 높은 점수를 받습니다. 승리 클러스터의 최상의 매치가 최종 답변이 됩니다.
이것이 더 많은 유사 위치가 있는 더 큰 검색 반경에서도 정확도가 유지되는 이유입니다.
이 사진에서 볼 수 있듯이, 전혀 단서가 없습니다. 단지 작은 잘린 부분일 뿐입니다. 일반적인 OSINT는 여기서 절대 실패할 것입니다. 그러나 Netryx Astra는 메타데이터나 사전 단서 없이 완전히 로컬에서 실행하여 정확한 좌표까지 위치를 추정했습니다.
건물의 작은 잘린 사진, 모스크바에서 1km 반경 내 위치를 찾는 데 그것만으로 충분했습니다.
이것이 우리가 가장 기대하는 부분입니다.
도시를 인덱싱하는 데는 수시간의 계산 시간이 필요합니다. 모든 사용자가 같은 도시를 독립적으로 인덱싱하는 것은 낭비입니다. 그래서 공유 시스템을 구축했습니다. 한 사람이 모스크바를 인덱싱하고 결과를 업로드하면, 다른 모든 사람이 몇 분 안에 다운로드할 수 있습니다.
가장 빠른 방법입니다. 다른 사람이 이미 인덱싱 작업을 완료했습니다. 당신은 사전 구축된 인덱스를 다운로드하기만 하면 됩니다.
모드를 검색으로 설정하고, 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를 복제하고, 모델 가중치를 미리 다운로드합니다. 수동 구성이 필요 없습니다.
MASt3R 가중치는 첫 실행 시 Hugging Face에서 자동으로 다운로드됩니다.
폴더 구조는 다음과 같아야 합니다.
some_folder/
├── netryx-astra-v2/ # 이 리포지토리
│ ├── test_super.py
│ ├── megaloc_utils.py
│ ├── mast3r_utils.py
│ ├── netryx_hub.py
│ └── ...
└── mast3r/ # 별도로 복제
├── mast3r/
├── dust3r/
└── ...
mast3r_utils.py는 런타임에 인접한 mast3r/ 디렉토리를 자동으로 찾아 임포트합니다. 경로 구성이 필요 없습니다.
모든 것이 Apple Silicon에서 즉시 실행됩니다. 코드는 MPS 특성(구현되지 않은 연산의 CPU 폴백, 비연속 텐서의 .view() → .reshape() 몽키 패칭, 긴 인덱싱 실행 중 MPS 캐시 정리)을 자동으로 처리합니다.
M1/M2/M3/M4 Mac을 사용하는 경우 GPU 가속이 자동으로 사용됩니다. 구성이 필요 없습니다.
설치 스크립트를 실행한 후, 특정 장치에 맞는 rocm/pytorch를 venv에 수동으로 설치해야 합니다.
장치에 맞는 TheRock pytorch 빌드를 사용하세요: https://github.com/ROCm/TheRock/blob/main/RELEASES.md#installing-pytorch-python-packages
예를 들어 RX7xxx 시리즈 카드의 경우 설치:
pip install --index-url https://rocm.nightlies.amd.com/v2/gfx110X-all/ torch torchaudio torchvision
참고: 사용자가 render 그룹에 속해 있는지 확인하세요:
sudo usermod -aG render <userid>
그리고 기본 드라이버가 설치되어 있는지 확인하세요: https://rocm.docs.amd.com/projects/install-on-linux/en/latest/install/quick-start.html#amd-gpu-driver-installation
netryx-astra-v2/
├── test_super.py # 메인 응용 프로그램 — GUI, 파이프라인, 모든 것
├── megaloc_utils.py # MegaLoc 모델 로딩, 디스크립터 추출, PCA
├── megaloc_model.py # 독립형 MegaLoc 아키텍처 (torch.hub 실패 시 폴백)
├── mast3r_utils.py # MASt3R 로딩 및 밀집 매칭
├── netryx_hub.py # 커뮤니티 허브 — 업로드, 다운로드, 내보내기, 가져오기
├── README.md
├── LICENSE
└── requirements.txt
# 런타임에 생성됨 (git에 커밋되지 않음):
netryx_data/
├── megaloc_parts/ # 원본 8448-dim 디스크립터 청크 (인덱싱 중 생성)
└── index/ # 간결한 검색 인덱스
├── megaloc_descriptors.npy # PCA 축소 디스크립터
├── metadata.npz # 좌표, 방위각, 파노라마 ID
├── megaloc_pca.pkl # 질의 시 변환용 PCA 모델
└── manifest.json # 커뮤니티 허브에서 다운로드한 경우 존재
# 외부 종속성 (별도로 복제, 이 리포지토리 내부 아님):
../mast3r/ # https://github.com/naver/mast3r
필요시 test_super.py에서 다음 매개변수를 조정할 수 있습니다. 기본값은 대부분의 사용 사례에 적합합니다.
가장 조정하고 싶은 것은 INDEX_TARGET_DIM일 것입니다. 512로 낮추면 인덱스 크기가 절반으로 줄어들고 정확도 손실은 약 2-3%에 불과합니다.
우리는 이 도구가 할 수 있는 것과 할 수 없는 것에 대해 솔직하게 말하고자 합니다.
인덱스에 있는 장소만 찾을 수 있습니다. 사용자나 커뮤니티에서 인덱싱하지 않은 위치는 찾을 수 없습니다. 아무리 고급 모델이라도 존재하지 않는 데이터와 매칭할 수 없습니다. 정확도의 상한은 모델이 아니라 적용 범위에 의해 결정됩니다.
반복적인 건축물은 오탐지를 유발합니다. 체인 상점, 교외 주택 개발, 동일한 아파트 블록 열 등은 거리 수준에서 실제로 동일하게 보입니다. 공간적 합의가 도움이 되지만(가까운 매치 클러스터가 단일 고립 이상값보다 나음), 특히 유사 후보가 더 많은 큰 검색 반경(10km+)에서는 완벽하지 않습니다. 이는 Netryx에 특화된 한계가 아니라 이 분야의 미해결 문제입니다.
일부 지역에는 적용 범위 공백이 있습니다. 농촌 지역, 개발도상국, 새로 건설된 동네, 실내 공간은 인덱싱에 사용할 수 있는 거리 수준 이미지가 제한적이거나 없을 수 있습니다.
실시간 시스템이 아닙니다. 500개 후보에 대해 MASt3R를 실행하는 데는 소비자 GPU에서 몇 분이 걸립니다. 이 도구는 탐사 저널리즘, 인권 문서화, OSINT 연구, 보험 사기 조사 등 법의학 분석을 위해 설계되었습니다. 네비게이션이나 실시간 추적용이 아닙니다.
인덱싱에는 상당한 계산이 필요합니다. MegaLoc의 DINOv2 백본은 V1에서 사용된 CosPlace 백본보다 약 5배 더 무겁습니다. 1km 반경 인덱싱에는 약 20-30분이 걸립니다. 전체 도시(10km+)는 밤샘 작업입니다. 이것이 커뮤니티 허브가 존재하는 이유입니다. 이 비용을 한 번 지불하고 공유하기 위해서입니다. 또한 가장 많은 인라이어를 가진 매치가 반드시 올바른 매치는 아니므로 여러 결과를 반환하며, 사용자가 직접 교차 확인할 수 있습니다.
Netryx Astra V2를 연구나 작업에 사용하신다면 인용을 부탁드립니다.
@software{netryx_astra_v2,
title={Netryx Astra V2: State-of-the-Art AI Geolocation},
author={Sairaj Balaji},
year={2026},
url={https://github.com/yourusername/netryx-astra-v2}
}
MIT 라이선스. 자세한 내용은 LICENSE를 참조하세요.
MegaLoc 가중치는 MIT 라이선스입니다. MASt3R는 Apache 2.0 라이선스입니다. DINOv2는 Apache 2.0 라이선스입니다. 커뮤니티 공유 인덱스는 CC-BY-4.0입니다.
만든 사람: Sairaj Balaji
또한 Fast Company · 404 Media · Deutsche Welle에 소개된 PrismX도 제작했습니다.
| V1 (원본) | V2 (Astra) |
|---|
| 후보 찾기 | CosPlace (ResNet-50, 512-dim) | MegaLoc (DINOv2 ViT-B/14, 8448-dim → PCA 1024) |
| 매칭 확인 | DISK + LightGlue + RANSAC | MASt3R 밀집 3D 매칭 |
| 예외 처리 | LoFTR 대체, 디스크립터 호핑, 이웃 확장, Ultra Mode | 공간적 합의 — 그게 전부입니다 |
| 파이프라인 총 단계 수 | 9+ | 3 |
| 부분 이미지 매칭 | 취약 — 희소 키포인트가 작은 중첩에서 실패 | 강력 — MASt3R가 작은 영역에서도 밀집 대응점 발견 |
| 인덱스 공유 | 불가능 | Hugging Face를 통한 커뮤니티 허브 + 오프라인 .netryx 번들 |
| 매개변수 | 기본값 | 설명 |
|---|
INDEX_TARGET_DIM | 1024 | PCA 출력 차원. 512 = 더 작은 인덱스, 약간 덜 정확함. 1024 = 좋은 균형. |
MAX_PANOID_WORKERS | 16 | 인덱싱 중 병렬로 다운로드할 파노라마 수 |
MAX_DOWNLOAD_WORKERS | 100 | 동시 타일 다운로드 연결 (각 파노라마 = 8 타일) |
EARLY_EXIT_INLIER_THRESHOLD | 450 | MASt3R가 이 수만큼 밀집 매치를 찾으면 조기 종료 — 신뢰할 수 있는 히트 |
MAST3R_STAGE2_TOP_N | 500 | MASt3R를 실행할 MegaLoc 후보 수 |