Spaces:
Runtime error
Runtime error
Implement logic
Browse files- signal_to_reconstrution_error.py +50 -47
- tests.py +6 -11
signal_to_reconstrution_error.py
CHANGED
@@ -11,13 +11,20 @@
|
|
11 |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12 |
# See the License for the specific language governing permissions and
|
13 |
# limitations under the License.
|
14 |
-
"""
|
15 |
|
16 |
import evaluate
|
17 |
import datasets
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
|
19 |
|
20 |
-
# TODO: Add BibTeX citation
|
21 |
_CITATION = """\
|
22 |
@InProceedings{huggingface:module,
|
23 |
title = {A great new module},
|
@@ -26,70 +33,66 @@ year={2020}
|
|
26 |
}
|
27 |
"""
|
28 |
|
29 |
-
# TODO: Add description of the module here
|
30 |
-
_DESCRIPTION = """\
|
31 |
-
This new module is designed to solve this great ML task and is crafted with a lot of care.
|
32 |
-
"""
|
33 |
-
|
34 |
|
35 |
-
# TODO: Add description of the arguments of the module here
|
36 |
_KWARGS_DESCRIPTION = """
|
37 |
-
Calculates how good are predictions given some references, using certain scores
|
38 |
Args:
|
39 |
-
predictions
|
40 |
-
|
41 |
-
|
42 |
-
reference should be a string with tokens separated by spaces.
|
43 |
Returns:
|
44 |
-
|
45 |
-
|
46 |
Examples:
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
>>> print(results)
|
53 |
-
{'accuracy': 1.0}
|
54 |
"""
|
55 |
|
56 |
-
# TODO: Define external resources urls if needed
|
57 |
-
BAD_WORDS_URL = "http://url/to/external/resource/bad_words.txt"
|
58 |
|
|
|
|
|
|
|
59 |
|
60 |
@evaluate.utils.file_utils.add_start_docstrings(_DESCRIPTION, _KWARGS_DESCRIPTION)
|
61 |
class SignaltoReconstrutionError(evaluate.Metric):
|
62 |
-
"""TODO: Short description of my evaluation module."""
|
63 |
-
|
64 |
def _info(self):
|
65 |
-
# TODO: Specifies the evaluate.EvaluationModuleInfo object
|
66 |
return evaluate.MetricInfo(
|
67 |
-
# This is the description that will appear on the modules page.
|
68 |
module_type="metric",
|
69 |
description=_DESCRIPTION,
|
70 |
citation=_CITATION,
|
71 |
inputs_description=_KWARGS_DESCRIPTION,
|
72 |
-
|
73 |
-
|
74 |
-
'predictions': datasets.Value('int64'),
|
75 |
-
'references': datasets.Value('int64'),
|
76 |
-
}),
|
77 |
-
# Homepage of the module for documentation
|
78 |
-
homepage="http://module.homepage",
|
79 |
-
# Additional links to the codebase or references
|
80 |
-
codebase_urls=["http://github.com/path/to/codebase/of/new_module"],
|
81 |
-
reference_urls=["http://path.to.reference.url/new_module"]
|
82 |
)
|
83 |
|
84 |
-
def
|
85 |
-
|
86 |
-
|
87 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
|
89 |
-
def _compute(self, predictions, references):
|
90 |
"""Returns the scores"""
|
91 |
-
|
92 |
-
|
93 |
return {
|
94 |
-
"
|
95 |
-
}
|
|
|
11 |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12 |
# See the License for the specific language governing permissions and
|
13 |
# limitations under the License.
|
14 |
+
"""Signal-to-Reconstruction Error (SRE) metric."""
|
15 |
|
16 |
import evaluate
|
17 |
import datasets
|
18 |
+
import numpy as np
|
19 |
+
|
20 |
+
|
21 |
+
_DESCRIPTION = """\
|
22 |
+
Compute the Signal-to-Reconstruction Error (SRE) metric. This metric is commonly used to
|
23 |
+
asses the performance of denoising, super-resolution and style transfer algorithms in
|
24 |
+
audio and image processing.
|
25 |
+
"""
|
26 |
|
27 |
|
|
|
28 |
_CITATION = """\
|
29 |
@InProceedings{huggingface:module,
|
30 |
title = {A great new module},
|
|
|
33 |
}
|
34 |
"""
|
35 |
|
|
|
|
|
|
|
|
|
|
|
36 |
|
|
|
37 |
_KWARGS_DESCRIPTION = """
|
|
|
38 |
Args:
|
39 |
+
predictions (`list` of `np.array`): Predicted labels.
|
40 |
+
references (`list` of `np.array`): Ground truth labels.
|
41 |
+
sample_weight (`list` of `float`): Sample weights Defaults to None.
|
|
|
42 |
Returns:
|
43 |
+
sre (`float`): Signal-to-Reconstruction Error (SRE) metric. The SRE values are
|
44 |
+
positive and they are expressed in decibels (dB). The higher the SRE value, the better.
|
45 |
Examples:
|
46 |
+
Example 1-A simple example
|
47 |
+
>>> sre = evaluate.load("jpxkqx/signal_to_reconstruction_error")
|
48 |
+
>>> results = sre.compute(references=[[0, 0], [-1, -1]], predictions=[[0, 1], [0, 0]])
|
49 |
+
>>> print(results)
|
50 |
+
{"Signal-to-Reconstruction Error": 23.01}
|
|
|
|
|
51 |
"""
|
52 |
|
|
|
|
|
53 |
|
54 |
+
def signal_reconstruction_error(y_true: np.array, y_hat: np.array) -> np.array:
|
55 |
+
return 10 * np.log10(np.sum(y_true ** 2) / np.sum((y_true - y_hat) ** 2))
|
56 |
+
|
57 |
|
58 |
@evaluate.utils.file_utils.add_start_docstrings(_DESCRIPTION, _KWARGS_DESCRIPTION)
|
59 |
class SignaltoReconstrutionError(evaluate.Metric):
|
|
|
|
|
60 |
def _info(self):
|
|
|
61 |
return evaluate.MetricInfo(
|
|
|
62 |
module_type="metric",
|
63 |
description=_DESCRIPTION,
|
64 |
citation=_CITATION,
|
65 |
inputs_description=_KWARGS_DESCRIPTION,
|
66 |
+
features=datasets.Features(self._get_feature_types()),
|
67 |
+
homepage="https://huggingface.co/spaces/jpxkqx/signal_to_reconstrution_error",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
)
|
69 |
|
70 |
+
def _get_feature_types(self):
|
71 |
+
if self.config_name == "multilist":
|
72 |
+
return {
|
73 |
+
# 1st Seq - num_samples, 2nd Seq - Height, 3rd Seq - Width
|
74 |
+
"predictions": datasets.Sequence(
|
75 |
+
datasets.Sequence(datasets.Sequence(datasets.Value("float32")))
|
76 |
+
),
|
77 |
+
"references": datasets.Sequence(
|
78 |
+
datasets.Sequence(datasets.Sequence(datasets.Value("float32")))
|
79 |
+
),
|
80 |
+
}
|
81 |
+
else:
|
82 |
+
return {
|
83 |
+
# 1st Seq - Height, 2rd Seq - Width
|
84 |
+
"predictions": datasets.Sequence(
|
85 |
+
datasets.Sequence(datasets.Value("float32"))
|
86 |
+
),
|
87 |
+
"references": datasets.Sequence(
|
88 |
+
datasets.Sequence(datasets.Value("float32"))
|
89 |
+
),
|
90 |
+
}
|
91 |
|
92 |
+
def _compute(self, predictions, references, sample_weight=None):
|
93 |
"""Returns the scores"""
|
94 |
+
samples = zip(np.array(references), np.array(predictions))
|
95 |
+
psnrs = list(map(lambda args: signal_reconstruction_error(*args), samples))
|
96 |
return {
|
97 |
+
"Signal-to-Reconstruction Error": np.average(psnrs, weights=sample_weight)
|
98 |
+
}
|
tests.py
CHANGED
@@ -1,17 +1,12 @@
|
|
1 |
test_cases = [
|
2 |
{
|
3 |
-
"predictions": [0, 0],
|
4 |
-
"references": [1, 1],
|
5 |
-
"result":
|
6 |
},
|
7 |
{
|
8 |
-
"predictions": [
|
9 |
-
"references": [1, 1],
|
10 |
-
"result":
|
11 |
-
},
|
12 |
-
{
|
13 |
-
"predictions": [1, 0],
|
14 |
-
"references": [1, 1],
|
15 |
-
"result": {"metric_score": 0.5}
|
16 |
}
|
17 |
]
|
|
|
1 |
test_cases = [
|
2 |
{
|
3 |
+
"predictions": [[0.1, 0.1], [1.0, 0.1]],
|
4 |
+
"references": [[0.1, 0.1], [0.9, 0.1]],
|
5 |
+
"result": 23.010298856486173
|
6 |
},
|
7 |
{
|
8 |
+
"predictions": [[0, 1], [0, 0]],
|
9 |
+
"references": [[0, 0], [-1, -1]],
|
10 |
+
"result": 1.2493873660829993
|
|
|
|
|
|
|
|
|
|
|
11 |
}
|
12 |
]
|