MS-SSIM
SSIM을 3~5단계 다운샘플에서 각각 계산해 가중합한다.
| ms_ssim.py |
|---|
| import torch.nn.functional as F
# 단일 스케일 SSIM 구현은 별도로 필요 (예: torchmetrics.functional.ssim,
# kornia.metrics.ssim, 또는 직접 구현). 아래는 다중 스케일 구조만 보여준다.
def ms_ssim_loss(pred, target, ssim_single, weights=(0.5, 0.3, 0.2)):
total = 0.0
for i, w in enumerate(weights):
if i > 0:
pred = F.avg_pool2d(pred, 2)
target = F.avg_pool2d(target, 2)
total += w * (1 - ssim_single(pred, target))
return total
|
- 단일 스케일 SSIM은 전체 구조에 강하지만 미세 구조(석회화)에 둔감하다
- 가중치는 고해상도 쪽에 더 크게 — 미세 구조에 더 큰 페널티
- 학습 손실로 쓸 때는
1 - SSIM 형태로 사용