Skip to content

Commit e579b9a

Browse files
committed
- 2021年03月14日
- 这一版本将数据集和方法的配置方法转换为基于json文件的配置。 - 一些配套的更改与简化。
1 parent 81ce89d commit e579b9a

File tree

11 files changed

+232
-106
lines changed

11 files changed

+232
-106
lines changed

.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,5 +273,4 @@ gen
273273
# private files
274274
/output/
275275
/untracked/
276-
/configs/methods/
277-
/configs/datasets/
276+
/configs/

configs/__init__.py

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

configs/utils/__init__.py

Whitespace-only changes.

configs/utils/config_generator.py

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

eval_cosod_all_methods.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# -*- coding: utf-8 -*-
22
import os
33

4-
from configs import total_info
54
from metrics.sod import cal_cosod_matrics, draw_curves
5+
from utils.generate_info import get_datasets_info, get_methods_info
66

77
"""
88
Include: Fm Curve/PR Curves/MAE/(max/mean/weighted) Fmeasure/Smeasure/Emeasure
@@ -12,6 +12,13 @@
1212
But it needs to have uniform naming rules for `pre` and `gt`.
1313
"""
1414

15+
total_info = dict(
16+
rgb_cosod=dict(
17+
dataset="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/datasets/json/rgb_cosod.json",
18+
method="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/methods/json/rgb_cosod_methods.json",
19+
),
20+
)
21+
1522
for_pr = True # 是否绘制pr曲线
1623

1724
# 当前支持rgb_cosod
@@ -21,10 +28,11 @@
2128
# 存放输出文件的文件夹
2229
output_path = "./output"
2330

24-
# 针对多个模型评估比较的设置
25-
dataset_info = data_info["dataset"]
2631
# 包含所有待比较模型结果的信息和绘图配置的字典
27-
drawing_info = data_info["method"]["drawing"]
32+
dataset_info = get_datasets_info(datastes_info_json=data_info["dataset"])
33+
drawing_info = get_methods_info(
34+
methods_info_json=data_info["method"], for_drawing=True, our_name="SINet"
35+
)
2836

2937
# 用来保存测试结果的文件的路径
3038
txt_path = os.path.join(output_path, f"{data_type}.txt")
@@ -66,7 +74,7 @@
6674
# 评估结果保留的小数点后数据的位数
6775
num_bits = 3
6876

69-
# 是否保留之前的评估记录(针对record_path文件有效
77+
# 是否保留之前的评估记录(针对txt_path文件有效
7078
resume_record = True
7179

7280
# 在计算指标的时候要跳过的数据集

eval_sod_all_methods.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# -*- coding: utf-8 -*-
2+
23
import os
34

4-
from configs import total_info
55
from metrics.sod import cal_sod_matrics, draw_curves
6+
from utils.generate_info import get_datasets_info, get_methods_info
67

78
"""
89
Include: Fm Curve/PR Curves/MAE/(max/mean/weighted) Fmeasure/Smeasure/Emeasure
@@ -12,6 +13,21 @@
1213
But it needs to have uniform naming rules for `pre` and `gt`.
1314
"""
1415

16+
total_info = dict(
17+
rgb_sod=dict(
18+
dataset="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/datasets/json/rgb_sod.json",
19+
method="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/methods/json/rgb_sod_methods.json",
20+
),
21+
rgb_cod=dict(
22+
dataset="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/datasets/json/rgb_cod.json",
23+
method="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/methods/json/rgb_cod_methods.json",
24+
),
25+
rgbd_sod=dict(
26+
dataset="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/datasets/json/rgbd_sod.json",
27+
method="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/methods/json/rgbd_sod_methods.json",
28+
),
29+
)
30+
1531
for_pr = True # 绘制pr曲线还是fm曲线
1632

1733
# 当前支持rgb_cod, rgb_sod, rgbd_sod
@@ -22,8 +38,10 @@
2238
output_path = "./output"
2339

2440
# 包含所有待比较模型结果的信息和绘图配置的字典
25-
dataset_info = data_info["dataset"]
26-
drawing_info = data_info["method"]["drawing"]
41+
dataset_info = get_datasets_info(datastes_info_json=data_info["dataset"])
42+
drawing_info = get_methods_info(
43+
methods_info_json=data_info["method"], for_drawing=True, our_name="SINet"
44+
)
2745

2846
# 用来保存测试结果的文件的路径
2947
txt_path = os.path.join(output_path, f"{data_type}.txt")
@@ -69,7 +87,7 @@
6987
resume_record = True
7088

7189
# 在计算指标的时候要跳过的数据集
72-
skipped_datasets = ["COD10K"]
90+
skipped_datasets = []
7391

7492
cal_sod_matrics(
7593
data_type=data_type,

eval_sod_all_methods_from_mat.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import numpy as np
66
import scipy.io as scio
77

8-
from configs import total_info
98
from metrics.sod import draw_curves
9+
from utils.generate_info import get_datasets_info, get_methods_info
1010
from utils.misc import colored_print, make_dir
1111
from utils.print_formatter import print_formatter
1212
from utils.recorders import MetricExcelRecorder, TxtRecorder
@@ -28,6 +28,25 @@
2828
But it needs to have uniform naming rules for `pre` and `gt`.
2929
"""
3030

31+
total_info = dict(
32+
rgb_cosod=dict(
33+
dataset="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/datasets/json/rgb_cosod.json",
34+
method="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/methods/json/rgb_cosod_methods.json",
35+
),
36+
rgb_sod=dict(
37+
dataset="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/datasets/json/rgb_sod.json",
38+
method="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/methods/json/rgb_sod_methods.json",
39+
),
40+
rgb_cod=dict(
41+
dataset="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/datasets/json/rgb_cod.json",
42+
method="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/methods/json/rgb_cod_methods.json",
43+
),
44+
rgbd_sod=dict(
45+
dataset="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/datasets/json/rgbd_sod.json",
46+
method="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/methods/json/rgbd_sod_methods.json",
47+
),
48+
)
49+
3150

3251
def export_valid_npy():
3352
"""
@@ -127,8 +146,11 @@ def export_valid_npy():
127146
output_path = "./output"
128147

129148
# 包含所有待比较模型结果的信息和绘图配置的字典
130-
dataset_info = data_info["dataset"]
131-
drawing_info = data_info["method"]["drawing"]
149+
# 包含所有待比较模型结果的信息和绘图配置的字典
150+
dataset_info = get_datasets_info(datastes_info_json=data_info["dataset"])
151+
drawing_info = get_methods_info(
152+
methods_info_json=data_info["method"], for_drawing=True, our_name="SINet"
153+
)
132154

133155
# 用来保存测试结果的文件的路径
134156
txt_path = os.path.join(output_path, f"{data_type}.txt")

eval_sod_single_method.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,26 @@
44

55
from tqdm import tqdm
66

7-
from configs import total_info
7+
from utils.generate_info import get_datasets_info
88
from utils.misc import colored_print, get_gt_pre_with_name, get_name_list, make_dir
99
from utils.print_formatter import print_formatter
1010
from utils.recorders import MetricExcelRecorder, MetricRecorder
1111

12+
total_info = dict(
13+
rgb_sod=dict(
14+
dataset="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/datasets/json/rgb_sod.json",
15+
method="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/methods/json/rgb_sod_methods.json",
16+
),
17+
rgb_cod=dict(
18+
dataset="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/datasets/json/rgb_cod.json",
19+
method="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/methods/json/rgb_cod_methods.json",
20+
),
21+
rgbd_sod=dict(
22+
dataset="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/datasets/json/rgbd_sod.json",
23+
method="/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/methods/json/rgbd_sod_methods.json",
24+
),
25+
)
26+
1227

1328
def cal_all_metrics():
1429
excel_recorder = MetricExcelRecorder(
@@ -98,7 +113,8 @@ def cal_all_metrics():
98113
make_dir(output_path)
99114
model_name = "CoNet" # 待评估的模型名字
100115
pred_path = data_info["method"]["selecting"][model_name] # 待评估的预测结果的路径
101-
dataset_info = data_info["dataset"]
116+
# 包含所有待比较模型结果的信息和绘图配置的字典
117+
dataset_info = get_datasets_info(datastes_info_json=data_info["dataset"])
102118
export_xlsx = False # 是否导出xlsx文件
103119
xlsx_path = os.path.join(output_path, "resutls.xlsx") # xlsx文件的路径
104120
num_bits = 3 # 评估结果保留的小数点后数据的位数

readme.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ A Python-based salient object detection and video object segmentation evaluation
1212

1313
## 重要提示
1414

15+
- 2021年03月14日
16+
- 这一版本将数据集和方法的配置方法转换为基于json文件的配置。
17+
- 一些配套的更改与简化。
1518
- 2021年03月12日
1619
- 这一版本正式将sod的评估、绘图代码与配置分离,主要考虑如下
1720
- 用户的配置是需要调整的,这部分不适宜被git严格的监视,也便于提交后续更新的时候,直接忽略关于配置的更改,即后续更新时,

tools/info_py_to_json.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# -*- coding: utf-8 -*-
2+
# @Time : 2021/3/14
3+
# @Author : Lart Pang
4+
# @GitHub : https://github.com/lartpang
5+
import json
6+
import os
7+
import sys
8+
from importlib import import_module
9+
10+
from mmcv import Config
11+
12+
source_config_root = "/home/lart/Coding/Py-SOD-VOS-EvalToolkit/configs/datasets/py"
13+
sys.path.insert(0, source_config_root)
14+
15+
source_config_files = os.listdir(source_config_root)
16+
for source_config_file in source_config_files:
17+
source_config_path = os.path.join(source_config_root, source_config_file)
18+
if not os.path.isfile(source_config_path):
19+
continue
20+
print(source_config_path)
21+
temp_module_name = os.path.splitext(source_config_file)[0]
22+
Config._validate_py_syntax(source_config_path)
23+
mod = import_module(temp_module_name)
24+
25+
total_dict = {}
26+
for name, value in mod.__dict__.items():
27+
name: str
28+
# For Methods
29+
# if not name.startswith("_") and isinstance(value, dict):
30+
# total_dict[name] = value
31+
32+
# For Datasets
33+
if not name.startswith("_") and name.endswith("_data") and isinstance(value, dict):
34+
total_dict = value
35+
36+
# delete imported module
37+
del sys.modules[temp_module_name]
38+
39+
with open(
40+
f"../datasets/json/{os.path.basename(temp_module_name)}.json", encoding="utf-8", mode="w"
41+
) as f:
42+
json.dump(total_dict, f, indent=2)

0 commit comments

Comments
 (0)