Skip to content

Commit 4c0b37c

Browse files
Finalize synapse evaluation
1 parent 3918a07 commit 4c0b37c

File tree

4 files changed

+56
-16
lines changed

4 files changed

+56
-16
lines changed

scripts/export_lower_resolution.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import zarr
88

99
from flamingo_tools.s3_utils import get_s3_path, BUCKET_NAME, SERVICE_ENDPOINT
10-
from skimage.segmentation import relabel_sequential
10+
# from skimage.segmentation import relabel_sequential
1111

1212

1313
def filter_component(fs, segmentation, cochlea, seg_name, components):
@@ -44,6 +44,8 @@ def export_lower_resolution(args):
4444
print(data.shape)
4545
if args.filter_by_components is not None:
4646
data = filter_component(fs, data, args.cochlea, channel, args.filter_by_components)
47+
if args.binarize:
48+
data = (data > 0).astype("uint8")
4749
tifffile.imwrite(out_path, data, bigtiff=True, compression="zlib")
4850

4951

@@ -54,6 +56,7 @@ def main():
5456
parser.add_argument("--output_folder", "-o", required=True)
5557
parser.add_argument("--channels", nargs="+", default=["PV", "VGlut3", "CTBP2"])
5658
parser.add_argument("--filter_by_components", nargs="+", type=int, default=None)
59+
parser.add_argument("--binarize", action="store_true")
5760
args = parser.parse_args()
5861

5962
export_lower_resolution(args)

scripts/synapse_marker_detection/extract_training_data.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,10 +191,32 @@ def process_training_data_v3(visualize=True):
191191
extract_training_data(imaris_file, output_folder, tif_file=None, crop=True)
192192

193193

194+
def process_eval_data(visualize=False):
195+
input_root = "/mnt/vast-nhr/projects/nim00007/data/moser/cochlea-lightsheet/AnnotatedImageCrops/SynapseValidation" # noqa
196+
test_folders = ["M227R_IHC-synapsecrops", "MLR227L_IHC-synapsecrops"]
197+
test_output = "/mnt/vast-nhr/projects/nim00007/data/moser/cochlea-lightsheet/training_data/synapses/test_data/v3" # noqa
198+
exclude_names = []
199+
200+
for folder in test_folders:
201+
202+
if visualize:
203+
output_folder = None
204+
else:
205+
output_folder = test_output
206+
207+
imaris_files = sorted(glob(os.path.join(input_root, folder, "*.ims")))
208+
for imaris_file in imaris_files:
209+
if os.path.basename(imaris_file) in exclude_names:
210+
print("Skipping", imaris_file)
211+
continue
212+
extract_training_data(imaris_file, output_folder, tif_file=None, crop=True)
213+
214+
194215
def main():
195216
# process_training_data_v1()
196217
# process_training_data_v2(visualize=True)
197-
process_training_data_v3(visualize=False)
218+
# process_training_data_v3(visualize=False)
219+
process_eval_data(visualize=False)
198220

199221

200222
if __name__ == "__main__":

scripts/validation/synapses/prediction.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,12 @@ def pred_synapse_impl(input_path, output_folder):
5151
def predict_synapses():
5252
files = sorted(glob(os.path.join(INPUT_ROOT, "*.zarr")))
5353
for ff in files:
54-
print("Segmenting", ff)
5554
output_folder = os.path.join(OUTPUT_ROOT, Path(ff).stem)
55+
if os.path.exists(os.path.join(output_folder, "predictions.zarr", "prediction")):
56+
print("Synapse prediction in", ff, "already done")
57+
continue
58+
else:
59+
print("Predicting synapses in", ff)
5660
pred_synapse_impl(ff, output_folder)
5761

5862

@@ -68,8 +72,12 @@ def pred_ihc_impl(input_path, output_folder):
6872
def predict_ihcs():
6973
files = sorted(glob(os.path.join(INPUT_ROOT, "*.zarr")))
7074
for ff in files:
71-
print("Segmenting", ff)
7275
output_folder = os.path.join(OUTPUT_ROOT, f"{Path(ff).stem}_ihc")
76+
if os.path.exists(os.path.join(output_folder, "predictions.zarr", "prediction")):
77+
print("IHC segmentation in", ff, "already done")
78+
continue
79+
else:
80+
print("Segmenting IHCs in", ff)
7381
pred_ihc_impl(ff, output_folder)
7482

7583

@@ -147,8 +155,8 @@ def process_everything():
147155

148156

149157
def main():
150-
process_everything()
151-
# check_predictions()
158+
# process_everything()
159+
check_predictions()
152160

153161

154162
if __name__ == "__main__":

scripts/validation/synapses/run_evaluation.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import os
2+
from glob import glob
3+
from pathlib import Path
24

35
import pandas as pd
46
from elf.io import open_file
@@ -48,7 +50,7 @@ def visualize_synapse_detections(pred, gt, heatmap_path=None, ctbp2_path=None):
4850

4951
pred = pd.read_csv(pred, sep="\t")[["z", "y", "x"]].values
5052
gt = pd.read_csv(gt, sep="\t")[["z", "y", "x"]].values
51-
tps_pred, tps_gt, fps, fns = match_detections(pred, gt, max_dist=5)
53+
tps_pred, tps_gt, fps, fns = match_detections(pred, gt, max_dist=4)
5254

5355
tps = pred[tps_pred]
5456
fps = pred[fps]
@@ -91,15 +93,20 @@ def main():
9193
parser.add_argument("--visualize", action="store_true")
9294
args = parser.parse_args()
9395

94-
pred_files = [
95-
"/mnt/vast-nhr/projects/nim00007/data/moser/cochlea-lightsheet/AnnotatedImageCrops/SynapseValidation/m226l_midp330_vglut3-ctbp2/filtered_synapse_detection.tsv", # noqa
96-
]
97-
gt_files = [
98-
"/mnt/vast-nhr/projects/nim00007/data/moser/cochlea-lightsheet/training_data/synapses/test_data/v3/labels/m226l_midp330_vglut3-ctbp2_filtered.tsv", # noqa
99-
]
100-
ctbp2_files = [
101-
"/mnt/vast-nhr/projects/nim00007/data/moser/cochlea-lightsheet/training_data/synapses/test_data/v3/images/m226l_midp330_vglut3-ctbp2.zarr", # noqa
102-
]
96+
pred_root = "/mnt/vast-nhr/projects/nim00007/data/moser/cochlea-lightsheet/AnnotatedImageCrops/SynapseValidation"
97+
gt_root = "/mnt/vast-nhr/projects/nim00007/data/moser/cochlea-lightsheet/training_data/synapses/test_data/v3/labels"
98+
ctbp2_root = "/mnt/vast-nhr/projects/nim00007/data/moser/cochlea-lightsheet/training_data/synapses/test_data/v3/images" # noqa
99+
100+
ctbp2_files = sorted(glob(os.path.join(ctbp2_root, "*.zarr")))
101+
gt_files = sorted(glob(os.path.join(gt_root, "*_filtered.tsv")))
102+
assert len(ctbp2_files) == len(gt_files)
103+
104+
pred_files = []
105+
for ff in ctbp2_files:
106+
fname = Path(ff).stem
107+
pred_file = os.path.join(pred_root, fname, "filtered_synapse_detection.tsv")
108+
assert os.path.exists(pred_file), pred_file
109+
pred_files.append(pred_file)
103110

104111
if args.visualize:
105112
visualize_evaluation(pred_files, gt_files, ctbp2_files)

0 commit comments

Comments
 (0)