Multi-Scale SSIM¶
Module Interface¶
- class torchmetrics.MultiScaleStructuralSimilarityIndexMeasure(gaussian_kernel=True, kernel_size=11, sigma=1.5, reduction='elementwise_mean', data_range=None, k1=0.01, k2=0.03, betas=(0.0448, 0.2856, 0.3001, 0.2363, 0.1333), normalize='relu', **kwargs)[source]
Computes MultiScaleSSIM, Multi-scale Structural Similarity Index Measure, which is a generalization of Structural Similarity Index Measure by incorporating image details at different resolution scores.
As input to
forward
andupdate
the metric accepts the following inputAs output of forward and compute the metric returns the following output
msssim
(:Tensor
): ifreduction!='none'
returns float scalar tensor with average MSSSIM value over sample else returns tensor of shape(N,)
with SSIM values per sample
- Parameters
gaussian_kernel¶ (
bool
) – IfTrue
(default), a gaussian kernel is used, if false a uniform kernel is usedkernel_size¶ (
Union
[int
,Sequence
[int
]]) – size of the gaussian kernelsigma¶ (
Union
[float
,Sequence
[float
]]) – Standard deviation of the gaussian kernelreduction¶ (
Literal
[‘elementwise_mean’, ‘sum’, ‘none’, None]) –a method to reduce metric score over labels.
'elementwise_mean'
: takes the mean'sum'
: takes the sum'none'
orNone
: no reduction will be applied
data_range¶ (
Optional
[float
]) – Range of the image. IfNone
, it is determined from the image (max - min)k1¶ (
float
) – Parameter of structural similarity index measure.k2¶ (
float
) – Parameter of structural similarity index measure.betas¶ (
Tuple
[float
,...
]) – Exponent parameters for individual similarities and contrastive sensitivies returned by different image resolutions.normalize¶ (
Literal
[‘relu’, ‘simple’, None]) – When MultiScaleStructuralSimilarityIndexMeasure loss is used for training, it is desirable to use normalizes to improve the training stability. This normalize argument is out of scope of the original implementation [1], and it is adapted from https://github.com/jorge-pessoa/pytorch-msssim instead.kwargs¶ (
Any
) – Additional keyword arguments, see Advanced metric settings for more info.
- Returns
Tensor with Multi-Scale SSIM score
- Raises
ValueError – If
kernel_size
is not an int or a Sequence of ints with size 2 or 3.ValueError – If
betas
is not a tuple of floats with lengt 2.ValueError – If
normalize
is neither None, ReLU nor simple.
Example
>>> from torchmetrics import MultiScaleStructuralSimilarityIndexMeasure >>> import torch >>> preds = torch.rand([3, 3, 256, 256], generator=torch.manual_seed(42)) >>> target = preds * 0.75 >>> ms_ssim = MultiScaleStructuralSimilarityIndexMeasure(data_range=1.0) >>> ms_ssim(preds, target) tensor(0.9627)
Initializes internal Module state, shared by both nn.Module and ScriptModule.
Functional Interface¶
- torchmetrics.functional.multiscale_structural_similarity_index_measure(preds, target, gaussian_kernel=True, sigma=1.5, kernel_size=11, reduction='elementwise_mean', data_range=None, k1=0.01, k2=0.03, betas=(0.0448, 0.2856, 0.3001, 0.2363, 0.1333), normalize='relu')[source]
Computes MultiScaleSSIM, Multi-scale Structual Similarity Index Measure, which is a generalization of Structual Similarity Index Measure by incorporating image details at different resolution scores.
- Parameters
preds¶ (
Tensor
) – Predictions from model of shape[N, C, H, W]
target¶ (
Tensor
) – Ground truth values of shape[N, C, H, W]
kernel_size¶ (
Union
[int
,Sequence
[int
]]) – size of the gaussian kernelsigma¶ (
Union
[float
,Sequence
[float
]]) – Standard deviation of the gaussian kernelreduction¶ (
Literal
[‘elementwise_mean’, ‘sum’, ‘none’, None]) –a method to reduce metric score over labels.
'elementwise_mean'
: takes the mean'sum'
: takes the sum'none'
orNone
: no reduction will be applied
data_range¶ (
Optional
[float
]) – Range of the image. IfNone
, it is determined from the image (max - min)k1¶ (
float
) – Parameter of structural similarity index measure.k2¶ (
float
) – Parameter of structural similarity index measure.betas¶ (
Tuple
[float
,...
]) – Exponent parameters for individual similarities and contrastive sensitivies returned by different image resolutions.normalize¶ (
Optional
[Literal
[‘relu’, ‘simple’]]) – When MultiScaleSSIM loss is used for training, it is desirable to use normalizes to improve the training stability. This normalize argument is out of scope of the original implementation [1], and it is adapted from https://github.com/jorge-pessoa/pytorch-msssim instead.
- Return type
- Returns
Tensor with Multi-Scale SSIM score
- Raises
TypeError – If
preds
andtarget
don’t have the same data type.ValueError – If
preds
andtarget
don’t haveBxCxHxW shape
.ValueError – If the length of
kernel_size
orsigma
is not2
.ValueError – If one of the elements of
kernel_size
is not anodd positive number
.ValueError – If one of the elements of
sigma
is not apositive number
.
Example
>>> from torchmetrics.functional import multiscale_structural_similarity_index_measure >>> preds = torch.rand([3, 3, 256, 256], generator=torch.manual_seed(42)) >>> target = preds * 0.75 >>> multiscale_structural_similarity_index_measure(preds, target, data_range=1.0) tensor(0.9627)
References
[1] Multi-Scale Structural Similarity For Image Quality Assessment by Zhou Wang, Eero P. Simoncelli and Alan C. Bovik MultiScaleSSIM