Skip to content

Commit 6569d47

Browse files
committed
1. 提供更丰富的指标的支持。
2. 更新`readme.md`和示例文件。 3. 提供更灵活的接口。
1 parent a5cef12 commit 6569d47

19 files changed

+1099
-1157
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,6 @@ gen
279279
/untracked/
280280
/configs/
281281
# /*.py
282-
# /*.sh
282+
/*.sh
283283
/results/rgb_sod.md
284284
/results/htmls/*.html

eval.py

Lines changed: 40 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,31 @@
66

77
from metrics import cal_sod_matrics
88
from utils.generate_info import get_datasets_info, get_methods_info
9-
from utils.misc import make_dir
10-
from utils.recorders import METRIC_MAPPING
9+
from utils.recorders import SUPPORTED_METRICS
1110

1211

1312
def get_args():
1413
parser = argparse.ArgumentParser(
1514
description=textwrap.dedent(
1615
r"""
17-
INCLUDE:
16+
A Powerful Evaluation Toolkit based on PySODMetrics.
17+
18+
INCLUDE: More metrics can be set in `utils/recorders/metric_recorder.py`
1819
1920
- F-measure-Threshold Curve
2021
- Precision-Recall Curve
2122
- MAE
2223
- weighted F-measure
2324
- S-measure
24-
- max/average/adaptive F-measure
25-
- max/average/adaptive E-measure
26-
- max/average Precision
27-
- max/average Sensitivity
28-
- max/average Specificity
29-
- max/average F-measure
30-
- max/average Dice
31-
- max/average IoU
25+
- max/average/adaptive/binary F-measure
26+
- max/average/adaptive/binary E-measure
27+
- max/average/adaptive/binary Precision
28+
- max/average/adaptive/binary Recall
29+
- max/average/adaptive/binary Sensitivity
30+
- max/average/adaptive/binary Specificity
31+
- max/average/adaptive/binary F-measure
32+
- max/average/adaptive/binary Dice
33+
- max/average/adaptive/binary IoU
3234
3335
NOTE:
3436
@@ -37,11 +39,27 @@ def get_args():
3739
3840
EXAMPLES:
3941
40-
python eval_all.py \
41-
--dataset-json configs/datasets/json/rgbd_sod.json \
42-
--method-json configs/methods/json/rgbd_other_methods.json configs/methods/json/rgbd_our_method.json --metric-npy output/rgbd_metrics.npy \
42+
python eval_image.py \
43+
--dataset-json configs/datasets/rgbd_sod.json \
44+
--method-json \
45+
configs/methods/json/rgbd_other_methods.json \
46+
configs/methods/json/rgbd_our_method.json \
47+
--metric-names sm wfm mae fmeasure em \
48+
--num-bits 4 \
49+
--num-workers 4 \
50+
--metric-npy output/rgbd_metrics.npy \
4351
--curves-npy output/rgbd_curves.npy \
44-
--record-tex output/rgbd_results.txt
52+
--record-txt output/rgbd_results.txt
53+
--to-overwrite \
54+
--record-xlsx output/test-metric.xlsx \
55+
--include-dataset \
56+
dataset-name1-from-dataset-json \
57+
dataset-name2-from-dataset-json \
58+
dataset-name3-from-dataset-json
59+
--include-methods \
60+
method-name1-from-method-json \
61+
method-name2-from-method-json \
62+
method-name3-from-method-json
4563
"""
4664
),
4765
formatter_class=argparse.RawTextHelpFormatter,
@@ -95,20 +113,16 @@ def get_args():
95113
"--metric-names",
96114
type=str,
97115
nargs="+",
98-
default=["mae", "fm", "em", "sm", "wfm"],
99-
choices=METRIC_MAPPING.keys(),
116+
default=["mae", "fmeasure", "precision", "recall", "em", "sm", "wfm"],
117+
choices=SUPPORTED_METRICS,
100118
help="Names of metrics",
101119
)
102120
args = parser.parse_args()
103121

104-
if args.metric_npy is not None:
105-
make_dir(os.path.dirname(args.metric_npy))
106-
if args.curves_npy is not None:
107-
make_dir(os.path.dirname(args.curves_npy))
108-
if args.record_txt is not None:
109-
make_dir(os.path.dirname(args.record_txt))
110-
if args.record_xlsx is not None:
111-
make_dir(os.path.dirname(args.record_xlsx))
122+
os.makedirs(os.path.dirname(args.metric_npy), exist_ok=True)
123+
os.makedirs(os.path.dirname(args.curves_npy), exist_ok=True)
124+
os.makedirs(os.path.dirname(args.record_txt), exist_ok=True)
125+
os.makedirs(os.path.dirname(args.record_xlsx), exist_ok=True)
112126
if args.to_overwrite and not args.record_txt:
113127
warnings.warn("--to-overwrite only works with a valid --record-txt")
114128
return args
@@ -132,7 +146,7 @@ def main():
132146
)
133147

134148
# 确保多进程在windows上也可以正常使用
135-
cal_sod_matrics.cal_sod_matrics(
149+
cal_sod_matrics.cal_image_matrics(
136150
sheet_name="Results",
137151
to_append=not args.to_overwrite,
138152
txt_path=args.record_txt,
@@ -143,7 +157,6 @@ def main():
143157
metrics_npy_path=args.metric_npy,
144158
num_bits=args.num_bits,
145159
num_workers=args.num_workers,
146-
use_mp=False,
147160
metric_names=args.metric_names,
148161
ncols_tqdm=119,
149162
)

examples/config_dataset_json_example.json

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
{
22
"LFSD": {
3-
"root": "Path_Of_RGBDSOD_Datasets/LFSD",
43
"image": {
54
"path": "Path_Of_RGBDSOD_Datasets/LFSD/Image",
5+
"prefix": "some_gt_prefix",
66
"suffix": ".jpg"
77
},
88
"mask": {
99
"path": "Path_Of_RGBDSOD_Datasets/LFSD/Mask",
10+
"prefix": "some_gt_prefix",
1011
"suffix": ".png"
1112
}
1213
},
1314
"NJUD": {
14-
"root": "Path_Of_RGBDSOD_Datasets/NJUD_FULL",
1515
"image": {
1616
"path": "Path_Of_RGBDSOD_Datasets/NJUD_FULL/Image",
1717
"suffix": ".jpg"
@@ -22,7 +22,6 @@
2222
}
2323
},
2424
"NLPR": {
25-
"root": "Path_Of_RGBDSOD_Datasets/NLPR_FULL",
2625
"image": {
2726
"path": "Path_Of_RGBDSOD_Datasets/NLPR_FULL/Image",
2827
"suffix": ".jpg"
@@ -33,7 +32,6 @@
3332
}
3433
},
3534
"RGBD135": {
36-
"root": "Path_Of_RGBDSOD_Datasets/RGBD135",
3735
"image": {
3836
"path": "Path_Of_RGBDSOD_Datasets/RGBD135/Image",
3937
"suffix": ".jpg"
@@ -44,7 +42,6 @@
4442
}
4543
},
4644
"SIP": {
47-
"root": "Path_Of_RGBDSOD_Datasets/SIP",
4845
"image": {
4946
"path": "Path_Of_RGBDSOD_Datasets/SIP/Image",
5047
"suffix": ".jpg"
@@ -55,7 +52,6 @@
5552
}
5653
},
5754
"SSD": {
58-
"root": "Path_Of_RGBDSOD_Datasets/SSD",
5955
"image": {
6056
"path": "Path_Of_RGBDSOD_Datasets/SSD/Image",
6157
"suffix": ".jpg"
@@ -66,7 +62,6 @@
6662
}
6763
},
6864
"STEREO797": {
69-
"root": "Path_Of_RGBDSOD_Datasets/STEREO797",
7065
"image": {
7166
"path": "Path_Of_RGBDSOD_Datasets/STEREO797/Image",
7267
"suffix": ".jpg"
@@ -77,7 +72,6 @@
7772
}
7873
},
7974
"STEREO1000": {
80-
"root": "Path_Of_RGBDSOD_Datasets/STEREO1000",
8175
"image": {
8276
"path": "Path_Of_RGBDSOD_Datasets/STEREO1000/Image",
8377
"suffix": ".jpg"
@@ -88,7 +82,6 @@
8882
}
8983
},
9084
"DUTRGBD": {
91-
"root": "Path_Of_RGBDSOD_Datasets/DUT-RGBD/Test",
9285
"image": {
9386
"path": "Path_Of_RGBDSOD_Datasets/DUT-RGBD/Test/Image",
9487
"suffix": ".jpg"

examples/config_dataset_py_example.py

Lines changed: 0 additions & 58 deletions
This file was deleted.

examples/config_method_json_example.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,22 @@
22
"Method1": {
33
"PASCAL-S": {
44
"path": "Path_Of_Method1/PASCAL-S/DGRL",
5+
"prefix": "some_method_prefix",
56
"suffix": ".png"
67
},
78
"ECSSD": {
89
"path": "Path_Of_Method1/ECSSD/DGRL",
10+
"prefix": "some_method_prefix",
911
"suffix": ".png"
1012
},
1113
"HKU-IS": {
1214
"path": "Path_Of_Method1/HKU-IS/DGRL",
15+
"prefix": "some_method_prefix",
1316
"suffix": ".png"
1417
},
1518
"DUT-OMRON": {
1619
"path": "Path_Of_Method1/DUT-OMRON/DGRL",
20+
"prefix": "some_method_prefix",
1721
"suffix": ".png"
1822
},
1923
"DUTS-TE": {

0 commit comments

Comments
 (0)