zernike-cnn-v8-1.4 (атмосферная модель)
EfficientNet-B2 (PyTorch + timm), восстанавливает 14 коэффициентов Цернике (OSA-нумерация Z1…Z14, радианы) из пары PSF (phase diversity).
Конфигурация
- Распределение обучения: Колмогоров (статистика Нолла), D/r₀ ∈ [0.5, 20]
- Диверсификационный дефокус: +1.0 / −2.0 рад (по моде OSA Z4)
- Размер входа: пара изображений 256×256,
uint16→sqrt-нормировка → 2-канальный тензор - Loss при обучении:
weighted_noll(1/σ²_Noll по каждой моде) - Модель камеры при обучении: полная Konnik (photon/dark/PRNU/RON/saturation/ADC, full_well=30 000 e⁻, RON=1.6 e⁻ RMS, 16 бит)
- Train/Val: 700 000 / 200 000 пар PSF
Метрики
| Тест | MAE/коэф., рад | WF RMS, рад | Strehl |
|---|---|---|---|
| Колмогоров D/r₀ ∈ [0.5, 20] | 0.0092 | 0.050 | 0.997 |
| Closed-loop (D/r₀=5, 15 итер., gain=0.4) | — | 0.034 | 0.999 |
На равномерно распределённых аберрациях U[−6,+6] на каждую моду —
ломается (MAE ≈ 3.95 рад). Для лабораторных задач использовать
вторую модель zernike-cnn-v8-2.0-def1_5.
Использование
from huggingface_hub import hf_hub_download
import torch, timm, torch.nn as nn
ckpt_path = hf_hub_download(
repo_id="YOUR_USERNAME/zernike-cnn-v8-1.4",
filename="best_model.pt"
)
class ZernikeModel(nn.Module):
def __init__(self, num_outputs=14):
super().__init__()
self.backbone = timm.create_model(
"efficientnet_b2", pretrained=False, in_chans=2, num_classes=0
)
self.head = nn.Sequential(
nn.Linear(self.backbone.num_features, 256),
nn.SiLU(),
nn.Dropout(0.1),
nn.Linear(256, num_outputs),
)
def forward(self, x):
return self.head(self.backbone(x))
model = ZernikeModel().eval()
ckpt = torch.load(ckpt_path, map_location="cpu", weights_only=True)
state = ckpt.get("model_state_dict", ckpt)
model.load_state_dict(state)
- Downloads last month
- 4
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support