FastSurferCNN.utils.metrics¶
- class FastSurferCNN.utils.metrics.DiceScore(num_classes, class_ids=None, device=None, one_hot=False, output_transform=<function DiceScore.<lambda>>)[source]¶
Accumulating the component of the dice coefficient i.e. the union and intersection.
- Parameters:
- op
callable()
A callable to update the accumulator. Method’s signature is
(accumulator, output)
. For example, to compute arithmetic mean value,op = lambda a, x: a + x
.- output_transform
callable()
,optional
A callable that is used to transform the
Engine
’sprocess_function
’s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs.- device
str
ortorch.device
,optional
Device specification in case of distributed computation usage. In most cases, it can be defined as “cuda:local_rank” or “cuda” if already set
torch.cuda.set_device(local_rank)
. By default, if a distributed process group is initialized and available, the device is set tocuda
.
- op
Methods
- FastSurferCNN.utils.metrics.dice_score(pred, gt, validate=True)[source]¶
Calculates the Dice Dissimilarity between pred and gt (best 0).
- Parameters:
- pred
np.ndarray
Predicted image.
- gt
np.ndarray
Ground truth image.
- validate
bool
If True, use the scipy implementation of the Dice Similarity. If False, use the numpy implementation.
- pred
- Returns:
float
Dice Similarity between pred and gt.
- FastSurferCNN.utils.metrics.hd(result, reference, voxelspacing=None, connectivity=1)[source]¶
Computes the (symmetric) Hausdorff Distance (HD) between the binary objects in two images. It is defined as the maximum surface distance between the objects.
- Parameters:
- resultarray_like
Input data containing objects. Can be any type but will be converted into binary: background where 0, object everywhere else.
- referencearray_like
Input data containing objects. Can be any type but will be converted into binary: background where 0, object everywhere else.
- voxelspacing
float
or sequenceof
floats
,optional
The voxelspacing in a distance unit i.e. spacing of elements along each dimension. If a sequence, must be of length equal to the input rank; if a single number, this is used for all axes. If not specified, a grid spacing of unity is implied.
- connectivity
int
The neighbourhood/connectivity considered when determining the surface of the binary objects. This value is passed to
scipy.ndimage.morphology.generate_binary_structure
and should usually be \(> 1\). Note that the connectivity influences the result in the case of the Hausdorff distance.
- Returns:
- hd
float
The symmetric Hausdorff Distance between the object(s) in
result
and the object(s) inreference
. The distance unit is the same as for the spacing of elements along each dimension, which is usually given in mm.- hd50
float
The 50th percentile of the Hausdorff Distance.
- hd95
float
The 95th percentile of the Hausdorff Distance.
- hd
See also
assd
Average Symmetric Surface Distance, computes the average symmetric surface distance.
asd
Average Surface Distance, computes the average surface distance.
Notes
This is a real metric. The binary images can therefore be supplied in any order.
- FastSurferCNN.utils.metrics.hd95(result, reference, voxelspacing=None, connectivity=1)[source]¶
Computes the 95th percentile of the Hausdorff Distance.
Computes the 95th percentile of the (symmetric) Hausdorff Distance (HD) between the binary objects in two images. Compared to the Hausdorff Distance, this metric is slightly more stable to small outliers and is commonly used in Biomedical Segmentation challenges.
- Parameters:
- result
Any
Input data containing objects. Can be any type but will be converted into binary: background where 0, object everywhere else.
- referencearray_like
Input data containing objects. Can be any type but will be converted into binary: background where 0, object everywhere else.
- voxelspacing
float
or sequenceof
floats
,optional
The voxelspacing in a distance unit i.e. spacing of elements along each dimension. If a sequence, must be of length equal to the input rank; if a single number, this is used for all axes. If not specified, a grid spacing of unity is implied.
- connectivity
int
The neighbourhood/connectivity considered when determining the surface of the binary objects. This value is passed to
scipy.ndimage.morphology.generate_binary_structure
and should usually be \(> 1\). Note that the connectivity influences the result in the case of the Hausdorff distance.
- result
- Returns:
- hd95
float
The 95th percentile of the symmetric Hausdorff Distance between the object(s) in
`result`
and the object(s) in`reference`
. The distance unit is the same as for the spacing of elements along each dimension, which is usually given in mm.
- hd95
See also
hd
Computes the symmetric Hausdorff Distance.
Notes
This is a real metric. The binary images can therefore be supplied in any order.
- FastSurferCNN.utils.metrics.iou_score(pred_cls, true_cls, nclass=79)[source]¶
Compute the intersection-over-union score.
Both inputs should be categorical (as opposed to one-hot).
- Parameters:
- pred_cls
torch.Tensor
Network prediction (categorical).
- true_cls
torch.Tensor
Ground truth (categorical).
- nclass
int
Number of classes (Default value = 79).
- pred_cls
- Returns:
np.ndarray
An array containing the intersection for each class.
np.ndarray
An array containing the union for each class.
- FastSurferCNN.utils.metrics.precision_recall(pred_cls, true_cls, nclass=79)[source]¶
Calculate recall (TP/(TP + FN) and precision (TP/(TP+FP) per class.
- Parameters:
- pred_cls
torch.Tensor
Network prediction (categorical).
- true_cls
torch.Tensor
Ground truth (categorical).
- nclass
int
Number of classes (Default value = 79).
- pred_cls
- Returns:
np.ndarray
An array containing the number of true positives for each class.
np.ndarray
An array containing the sum of true positives and false negatives for each class.
np.ndarray
An array containing the sum of true positives and false positives for each class.