| """Explore the current dataset to understand lesion_id, target3, and NROI mixing.""" |
| import json |
| from datasets import load_from_disk |
| from collections import defaultdict, Counter |
|
|
| dd = load_from_disk('sandbox/datasets/F_hf_dataset_lesion') |
| ALL = [] |
| for split in ['train', 'validation', 'test']: |
| ds = dd[split] |
| for idx, r in enumerate(ds): |
| ALL.append({ |
| 'split': split, 'idx': idx, |
| 'lesion_id_auto': r['lesion_id'], |
| 'patient_id': r['patient_id'], |
| 'source_dataset': r['source_dataset'], |
| 'track_id': r['track_id'], |
| 'target3': r['target3'], |
| 'filename': r['original_filename'], |
| }) |
|
|
| with open('sandbox/tools/lesion_editor/edits.json') as f: |
| EDITS = json.load(f) |
|
|
| def edit_key(split, idx): |
| return f'{split}:{idx}' |
|
|
| def eff_lesion(rec): |
| k = edit_key(rec['split'], rec['idx']) |
| if k in EDITS: |
| return EDITS[k]['lesion_id'] |
| return rec['lesion_id_auto'] |
|
|
| |
| TARGET3_NAMES = {0: 'MT', 1: 'NML', 2: 'NROI'} |
|
|
| |
| nroi_records = [r for r in ALL if r['target3'] == 2] |
| nroi_lesion_ids = Counter() |
| for r in nroi_records: |
| lid = eff_lesion(r) |
| nroi_lesion_ids[lid] += 1 |
|
|
| print(f'=== NROI (target3=2) images: {len(nroi_records)} ===') |
| print(f'How many have non-null lesion_id: {sum(1 for r in nroi_records if eff_lesion(r) is not None and eff_lesion(r) != "")}') |
| print(f'How many have null/empty lesion_id: {sum(1 for r in nroi_records if eff_lesion(r) is None or eff_lesion(r) == "")}') |
| print(f'Unique lesion_ids among NROI: {len(nroi_lesion_ids)}') |
| print(f'Sample NROI lesion_ids: {list(nroi_lesion_ids.most_common(10))}') |
| print() |
|
|
| |
| nroi_auto_lids = Counter(r['lesion_id_auto'] for r in nroi_records) |
| print(f'NROI auto lesion_ids (top 10): {list(nroi_auto_lids.most_common(10))}') |
| print() |
|
|
| |
| |
| group_targets = defaultdict(Counter) |
| group_size = defaultdict(int) |
| for r in ALL: |
| lid = eff_lesion(r) |
| group_targets[lid][r['target3']] += 1 |
| group_size[lid] += 1 |
|
|
| |
| mixed_groups = {} |
| for lid, counts in group_targets.items(): |
| if counts[2] > 0 and (counts[0] > 0 or counts[1] > 0): |
| mixed_groups[lid] = dict(counts) |
|
|
| print(f'=== Groups mixing NROI with lesions (MT/NML): {len(mixed_groups)} ===') |
| for lid, counts in sorted(mixed_groups.items()): |
| total = sum(counts.values()) |
| names = {TARGET3_NAMES[k]: v for k, v in counts.items()} |
| print(f' {lid}: {total} imgs — {names}') |
| print() |
|
|
| |
| all_nroi_groups = {} |
| for lid, counts in group_targets.items(): |
| if counts[2] > 0 and counts[0] == 0 and counts[1] == 0: |
| all_nroi_groups[lid] = dict(counts) |
|
|
| print(f'=== Groups that are ALL NROI: {len(all_nroi_groups)} ===') |
| for lid, counts in sorted(all_nroi_groups.items()): |
| total = sum(counts.values()) |
| print(f' {lid}: {total} imgs — all NROI') |
| print() |
|
|
| |
| print(f'=== Overall target3 distribution ===') |
| overall = Counter(r['target3'] for r in ALL) |
| for k in sorted(overall): |
| print(f' {TARGET3_NAMES[k]}: {overall[k]}') |
| print() |
|
|
| |
| print(f'=== Sample lesion_id values (first 20 unique) ===') |
| unique_lids = sorted(set(eff_lesion(r) for r in ALL)) |
| print(f'Total unique lesion_ids: {len(unique_lids)}') |
| for lid in unique_lids[:20]: |
| counts = group_targets[lid] |
| names = {TARGET3_NAMES[k]: v for k, v in counts.items()} |
| print(f' {lid}: {group_size[lid]} imgs — {names}') |
|
|