| | import argparse |
| | import json |
| | import os |
| |
|
| | train_rate = 0.6 |
| | val_rate = 0.2 |
| | test_rate = 0.2 |
| |
|
| |
|
| | def save_json(content, path, filename): |
| | if not os.path.exists(path): |
| | os.makedirs(path, exist_ok=True) |
| | dst_file_name = os.path.join(path, filename) |
| | with open(dst_file_name, "w+") as fp: |
| | json.dump(content, fp, indent=4, separators=(",", ":")) |
| |
|
| |
|
| | def generate_labels(data_path, output_path): |
| | """ |
| | Loading a model by name. |
| | |
| | Args: |
| | data_path: path to classification dataset, which must contain `inbody` and `outbody` directories. |
| | output_path: path to save labels |
| | """ |
| |
|
| | data_list = [os.path.join(root, x) for root, _, filenames in os.walk(data_path) for x in filenames if "jpg" in x] |
| | label_list = [int("outbody" in os.path.basename(os.path.dirname(x))) for x in data_list] |
| | data_label_json = [{"image": x, "label": y} for x, y in zip(data_list, label_list)] |
| | inbody_list = list(filter(lambda x: x["label"] == 0, data_label_json)) |
| | outbody_list = list(filter(lambda x: not (x["label"] == 0), data_label_json)) |
| | inbody_train_len = int(len(inbody_list) * train_rate) |
| | outbody_train_len = int(len(outbody_list) * train_rate) |
| | inbody_val_len = int(len(inbody_list) * (train_rate + val_rate)) |
| | outbody_val_len = int(len(outbody_list) * (train_rate + val_rate)) |
| | inbody_train_list = inbody_list[:inbody_train_len] |
| | outbody_train_list = outbody_list[:outbody_train_len] |
| | inbody_val_list = inbody_list[inbody_train_len:inbody_val_len] |
| | outbody_val_list = outbody_list[outbody_train_len:outbody_val_len] |
| | inbody_test_list = inbody_list[inbody_val_len:] |
| | outbody_test_list = outbody_list[outbody_val_len:] |
| | train_list = inbody_train_list + outbody_train_list |
| | val_list = inbody_val_list + outbody_val_list |
| | test_list = inbody_test_list + outbody_test_list |
| | save_json(train_list, out_path, "train_samples.json") |
| | save_json(val_list, out_path, "val_samples.json") |
| | save_json(test_list, out_path, "test_samples.json") |
| |
|
| |
|
| | if __name__ == "__main__": |
| | parser = argparse.ArgumentParser() |
| | |
| | parser.add_argument( |
| | "--datapath", |
| | type=str, |
| | default=r"/workspace/data/endoscopic_inbody_classification", |
| | help="The root path of the inbody classification dataset.", |
| | ) |
| |
|
| | |
| | parser.add_argument("--outpath", type=str, default=r"./label", help="The output path of labels.") |
| |
|
| | args = parser.parse_args() |
| | data_path = args.datapath |
| | out_path = args.outpath |
| |
|
| | if not os.path.exists(out_path): |
| | os.makedirs(out_path, exist_ok=True) |
| | generate_labels(data_path, out_path) |
| |
|