add sofia models

This commit is contained in:
pikaliov
2026-04-29 08:04:33 +03:00
parent a27b5a7357
commit 0d8c82acc3
23 changed files with 4448 additions and 44 deletions

View File

@@ -0,0 +1,126 @@
"""SOFIA v7.1 — student model for cross-view geo-localization (CVGL).
Architecture:
stem → stage1 (StripDCN-lite) → stage2 (StripMixConv)
→ stage3 (MambaVision MV5) → stage4 (MambaVision MV1)
→ 1×1 neck → asymmetric Sat/UAV heads
Key novel components:
- StripDCN-lite: Strip DW with adaptive offset on one axis
- MambaVision MV5: Mamba ∥ MHSA ∥ Strip 3-way parallel
- CircularHarmonicPool: formally SO(2)-invariant UAV head
- AltitudeFiLM: telemetry-aware conditioning
Presets (see config.py):
- SOFIA-M (~500 M params, 500 MB INT8) — default
- SOFIA-L (~1 B params, 1 GB INT8) — max scale
- SOFIA-Tiny (~5 M) — reference from original v7.1 spec
Quick start:
from sofia_v71 import build_sofia
model = build_sofia("M")
out = model(sat=sat_tensor, uav=uav_tensor, altitude=alt_tensor)
g_sat, g_uav = out["g_sat"], out["g_uav"]
See README.md and HYP_SOFIA_v7_UltraDeep_дизайн.md for full design rationale.
"""
from .config import (
SOFIAConfig,
sofia_l_config,
sofia_m_config,
sofia_tiny_config,
DEFAULT_CONFIG,
)
from .model import (
SOFIAv71,
build_sofia,
Backbone,
Stem,
UltraLiteNeck,
SatHead,
UAVHead,
RingAuxHead,
)
from .layers import (
GGeM,
CircularHarmonicPool,
AltitudeFiLM,
TextFiLM,
RoPE2D,
SqueezeExcite,
LayerNorm2d,
)
from .blocks import (
StripDCNLiteBlock,
StripMixConvBlock,
SimpleMambaBlock,
Mamba2Block,
EfficientVMambaBlock,
MambaVisionBlock,
EVSSBridge,
Downsample,
build_mamba_block,
is_mamba_ssm_available,
is_mamba2_available,
)
from .quant import (
# DCN-M2
OffsetClampSTE,
offset_clamp_ste,
# k-scaled
KScaledFakeQuant,
KScaledMamba2Block,
# model-wide helpers
start_calibration,
finalize_calibration,
set_quant_enabled,
)
__version__ = "0.1.0"
__all__ = [
# Config
"SOFIAConfig",
"sofia_m_config",
"sofia_l_config",
"sofia_tiny_config",
"DEFAULT_CONFIG",
# Top-level
"SOFIAv71",
"build_sofia",
# Model parts
"Backbone",
"Stem",
"UltraLiteNeck",
"SatHead",
"UAVHead",
"RingAuxHead",
# Layers
"GGeM",
"CircularHarmonicPool",
"AltitudeFiLM",
"TextFiLM",
"RoPE2D",
"SqueezeExcite",
"LayerNorm2d",
# Blocks
"StripDCNLiteBlock",
"StripMixConvBlock",
"SimpleMambaBlock",
"Mamba2Block",
"EfficientVMambaBlock",
"MambaVisionBlock",
"EVSSBridge",
"Downsample",
"build_mamba_block",
"is_mamba_ssm_available",
"is_mamba2_available",
# Quantization
"OffsetClampSTE",
"offset_clamp_ste",
"KScaledFakeQuant",
"KScaledMamba2Block",
"start_calibration",
"finalize_calibration",
"set_quant_enabled",
]