junma commited on
Commit
b8b72d2
·
verified ·
1 Parent(s): 9d39ed9

Single-cancer Space: Kidney (Dataset102) with bundled weights

Browse files
PanCancerSeg-Specialized-weights/Dataset102_Kidney/nnUNetTrainerWandb2000__nnUNetResEncUNetMPlans__3d_fullres/dataset.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "channel_names": {
3
+ "0": "CT"
4
+ },
5
+ "labels": {
6
+ "background": 0,
7
+ "tumor": 1
8
+ },
9
+ "numTraining": 538,
10
+ "file_ending": ".nii.gz"
11
+ }
PanCancerSeg-Specialized-weights/Dataset102_Kidney/nnUNetTrainerWandb2000__nnUNetResEncUNetMPlans__3d_fullres/dataset_fingerprint.json ADDED
@@ -0,0 +1,5398 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "foreground_intensity_properties_per_channel": {
3
+ "0": {
4
+ "max": 3071.0,
5
+ "mean": 69.271484375,
6
+ "median": 64.0,
7
+ "min": -1021.0,
8
+ "percentile_00_5": -48.0,
9
+ "percentile_99_5": 260.0,
10
+ "std": 57.25662612915039
11
+ }
12
+ },
13
+ "median_relative_size_after_cropping": 1.0,
14
+ "shapes_after_crop": [
15
+ [
16
+ 611,
17
+ 512,
18
+ 512
19
+ ],
20
+ [
21
+ 602,
22
+ 512,
23
+ 512
24
+ ],
25
+ [
26
+ 261,
27
+ 512,
28
+ 512
29
+ ],
30
+ [
31
+ 270,
32
+ 512,
33
+ 512
34
+ ],
35
+ [
36
+ 64,
37
+ 512,
38
+ 512
39
+ ],
40
+ [
41
+ 834,
42
+ 512,
43
+ 512
44
+ ],
45
+ [
46
+ 157,
47
+ 512,
48
+ 512
49
+ ],
50
+ [
51
+ 61,
52
+ 512,
53
+ 512
54
+ ],
55
+ [
56
+ 227,
57
+ 512,
58
+ 512
59
+ ],
60
+ [
61
+ 77,
62
+ 512,
63
+ 512
64
+ ],
65
+ [
66
+ 50,
67
+ 512,
68
+ 512
69
+ ],
70
+ [
71
+ 80,
72
+ 512,
73
+ 512
74
+ ],
75
+ [
76
+ 89,
77
+ 512,
78
+ 512
79
+ ],
80
+ [
81
+ 92,
82
+ 512,
83
+ 512
84
+ ],
85
+ [
86
+ 439,
87
+ 512,
88
+ 512
89
+ ],
90
+ [
91
+ 75,
92
+ 512,
93
+ 512
94
+ ],
95
+ [
96
+ 178,
97
+ 512,
98
+ 512
99
+ ],
100
+ [
101
+ 97,
102
+ 512,
103
+ 512
104
+ ],
105
+ [
106
+ 121,
107
+ 512,
108
+ 512
109
+ ],
110
+ [
111
+ 129,
112
+ 512,
113
+ 512
114
+ ],
115
+ [
116
+ 96,
117
+ 512,
118
+ 512
119
+ ],
120
+ [
121
+ 38,
122
+ 512,
123
+ 512
124
+ ],
125
+ [
126
+ 541,
127
+ 512,
128
+ 512
129
+ ],
130
+ [
131
+ 85,
132
+ 512,
133
+ 512
134
+ ],
135
+ [
136
+ 103,
137
+ 512,
138
+ 512
139
+ ],
140
+ [
141
+ 302,
142
+ 512,
143
+ 512
144
+ ],
145
+ [
146
+ 723,
147
+ 512,
148
+ 512
149
+ ],
150
+ [
151
+ 98,
152
+ 512,
153
+ 512
154
+ ],
155
+ [
156
+ 131,
157
+ 512,
158
+ 512
159
+ ],
160
+ [
161
+ 38,
162
+ 512,
163
+ 512
164
+ ],
165
+ [
166
+ 117,
167
+ 512,
168
+ 512
169
+ ],
170
+ [
171
+ 189,
172
+ 512,
173
+ 512
174
+ ],
175
+ [
176
+ 423,
177
+ 512,
178
+ 512
179
+ ],
180
+ [
181
+ 110,
182
+ 512,
183
+ 512
184
+ ],
185
+ [
186
+ 98,
187
+ 512,
188
+ 512
189
+ ],
190
+ [
191
+ 163,
192
+ 512,
193
+ 512
194
+ ],
195
+ [
196
+ 97,
197
+ 512,
198
+ 512
199
+ ],
200
+ [
201
+ 32,
202
+ 512,
203
+ 512
204
+ ],
205
+ [
206
+ 90,
207
+ 512,
208
+ 512
209
+ ],
210
+ [
211
+ 207,
212
+ 512,
213
+ 512
214
+ ],
215
+ [
216
+ 52,
217
+ 512,
218
+ 512
219
+ ],
220
+ [
221
+ 301,
222
+ 512,
223
+ 512
224
+ ],
225
+ [
226
+ 172,
227
+ 512,
228
+ 512
229
+ ],
230
+ [
231
+ 101,
232
+ 512,
233
+ 512
234
+ ],
235
+ [
236
+ 62,
237
+ 512,
238
+ 512
239
+ ],
240
+ [
241
+ 159,
242
+ 512,
243
+ 512
244
+ ],
245
+ [
246
+ 142,
247
+ 512,
248
+ 512
249
+ ],
250
+ [
251
+ 85,
252
+ 512,
253
+ 512
254
+ ],
255
+ [
256
+ 670,
257
+ 512,
258
+ 512
259
+ ],
260
+ [
261
+ 96,
262
+ 512,
263
+ 512
264
+ ],
265
+ [
266
+ 68,
267
+ 512,
268
+ 512
269
+ ],
270
+ [
271
+ 673,
272
+ 512,
273
+ 512
274
+ ],
275
+ [
276
+ 553,
277
+ 512,
278
+ 512
279
+ ],
280
+ [
281
+ 104,
282
+ 512,
283
+ 512
284
+ ],
285
+ [
286
+ 101,
287
+ 512,
288
+ 512
289
+ ],
290
+ [
291
+ 90,
292
+ 512,
293
+ 512
294
+ ],
295
+ [
296
+ 80,
297
+ 512,
298
+ 512
299
+ ],
300
+ [
301
+ 103,
302
+ 512,
303
+ 512
304
+ ],
305
+ [
306
+ 738,
307
+ 512,
308
+ 512
309
+ ],
310
+ [
311
+ 145,
312
+ 512,
313
+ 512
314
+ ],
315
+ [
316
+ 29,
317
+ 512,
318
+ 512
319
+ ],
320
+ [
321
+ 86,
322
+ 512,
323
+ 512
324
+ ],
325
+ [
326
+ 527,
327
+ 512,
328
+ 512
329
+ ],
330
+ [
331
+ 53,
332
+ 512,
333
+ 512
334
+ ],
335
+ [
336
+ 103,
337
+ 512,
338
+ 512
339
+ ],
340
+ [
341
+ 445,
342
+ 512,
343
+ 512
344
+ ],
345
+ [
346
+ 285,
347
+ 512,
348
+ 512
349
+ ],
350
+ [
351
+ 626,
352
+ 512,
353
+ 512
354
+ ],
355
+ [
356
+ 90,
357
+ 512,
358
+ 512
359
+ ],
360
+ [
361
+ 57,
362
+ 512,
363
+ 512
364
+ ],
365
+ [
366
+ 612,
367
+ 512,
368
+ 512
369
+ ],
370
+ [
371
+ 164,
372
+ 512,
373
+ 512
374
+ ],
375
+ [
376
+ 145,
377
+ 512,
378
+ 512
379
+ ],
380
+ [
381
+ 80,
382
+ 512,
383
+ 512
384
+ ],
385
+ [
386
+ 90,
387
+ 512,
388
+ 512
389
+ ],
390
+ [
391
+ 66,
392
+ 512,
393
+ 512
394
+ ],
395
+ [
396
+ 88,
397
+ 512,
398
+ 512
399
+ ],
400
+ [
401
+ 326,
402
+ 512,
403
+ 512
404
+ ],
405
+ [
406
+ 124,
407
+ 512,
408
+ 512
409
+ ],
410
+ [
411
+ 88,
412
+ 512,
413
+ 512
414
+ ],
415
+ [
416
+ 151,
417
+ 512,
418
+ 512
419
+ ],
420
+ [
421
+ 129,
422
+ 512,
423
+ 512
424
+ ],
425
+ [
426
+ 94,
427
+ 512,
428
+ 512
429
+ ],
430
+ [
431
+ 274,
432
+ 512,
433
+ 512
434
+ ],
435
+ [
436
+ 87,
437
+ 512,
438
+ 512
439
+ ],
440
+ [
441
+ 199,
442
+ 512,
443
+ 512
444
+ ],
445
+ [
446
+ 49,
447
+ 512,
448
+ 512
449
+ ],
450
+ [
451
+ 99,
452
+ 512,
453
+ 512
454
+ ],
455
+ [
456
+ 55,
457
+ 512,
458
+ 512
459
+ ],
460
+ [
461
+ 76,
462
+ 512,
463
+ 512
464
+ ],
465
+ [
466
+ 735,
467
+ 512,
468
+ 512
469
+ ],
470
+ [
471
+ 98,
472
+ 512,
473
+ 512
474
+ ],
475
+ [
476
+ 787,
477
+ 512,
478
+ 512
479
+ ],
480
+ [
481
+ 43,
482
+ 512,
483
+ 512
484
+ ],
485
+ [
486
+ 314,
487
+ 512,
488
+ 512
489
+ ],
490
+ [
491
+ 683,
492
+ 512,
493
+ 512
494
+ ],
495
+ [
496
+ 85,
497
+ 512,
498
+ 512
499
+ ],
500
+ [
501
+ 234,
502
+ 512,
503
+ 512
504
+ ],
505
+ [
506
+ 105,
507
+ 512,
508
+ 512
509
+ ],
510
+ [
511
+ 470,
512
+ 512,
513
+ 512
514
+ ],
515
+ [
516
+ 512,
517
+ 512,
518
+ 512
519
+ ],
520
+ [
521
+ 316,
522
+ 512,
523
+ 512
524
+ ],
525
+ [
526
+ 665,
527
+ 512,
528
+ 512
529
+ ],
530
+ [
531
+ 114,
532
+ 512,
533
+ 512
534
+ ],
535
+ [
536
+ 153,
537
+ 512,
538
+ 512
539
+ ],
540
+ [
541
+ 102,
542
+ 512,
543
+ 512
544
+ ],
545
+ [
546
+ 84,
547
+ 512,
548
+ 512
549
+ ],
550
+ [
551
+ 51,
552
+ 512,
553
+ 512
554
+ ],
555
+ [
556
+ 76,
557
+ 512,
558
+ 512
559
+ ],
560
+ [
561
+ 34,
562
+ 512,
563
+ 512
564
+ ],
565
+ [
566
+ 186,
567
+ 512,
568
+ 512
569
+ ],
570
+ [
571
+ 113,
572
+ 512,
573
+ 512
574
+ ],
575
+ [
576
+ 43,
577
+ 512,
578
+ 512
579
+ ],
580
+ [
581
+ 304,
582
+ 512,
583
+ 512
584
+ ],
585
+ [
586
+ 325,
587
+ 512,
588
+ 512
589
+ ],
590
+ [
591
+ 433,
592
+ 512,
593
+ 512
594
+ ],
595
+ [
596
+ 69,
597
+ 512,
598
+ 512
599
+ ],
600
+ [
601
+ 673,
602
+ 512,
603
+ 512
604
+ ],
605
+ [
606
+ 91,
607
+ 512,
608
+ 512
609
+ ],
610
+ [
611
+ 285,
612
+ 512,
613
+ 512
614
+ ],
615
+ [
616
+ 79,
617
+ 512,
618
+ 512
619
+ ],
620
+ [
621
+ 50,
622
+ 512,
623
+ 512
624
+ ],
625
+ [
626
+ 389,
627
+ 512,
628
+ 512
629
+ ],
630
+ [
631
+ 262,
632
+ 512,
633
+ 512
634
+ ],
635
+ [
636
+ 171,
637
+ 512,
638
+ 512
639
+ ],
640
+ [
641
+ 107,
642
+ 512,
643
+ 512
644
+ ],
645
+ [
646
+ 105,
647
+ 512,
648
+ 512
649
+ ],
650
+ [
651
+ 206,
652
+ 512,
653
+ 512
654
+ ],
655
+ [
656
+ 48,
657
+ 512,
658
+ 512
659
+ ],
660
+ [
661
+ 53,
662
+ 512,
663
+ 512
664
+ ],
665
+ [
666
+ 159,
667
+ 512,
668
+ 512
669
+ ],
670
+ [
671
+ 532,
672
+ 512,
673
+ 512
674
+ ],
675
+ [
676
+ 186,
677
+ 512,
678
+ 512
679
+ ],
680
+ [
681
+ 61,
682
+ 512,
683
+ 512
684
+ ],
685
+ [
686
+ 634,
687
+ 512,
688
+ 512
689
+ ],
690
+ [
691
+ 101,
692
+ 512,
693
+ 512
694
+ ],
695
+ [
696
+ 109,
697
+ 512,
698
+ 512
699
+ ],
700
+ [
701
+ 76,
702
+ 512,
703
+ 512
704
+ ],
705
+ [
706
+ 103,
707
+ 512,
708
+ 512
709
+ ],
710
+ [
711
+ 279,
712
+ 512,
713
+ 512
714
+ ],
715
+ [
716
+ 581,
717
+ 512,
718
+ 512
719
+ ],
720
+ [
721
+ 274,
722
+ 512,
723
+ 512
724
+ ],
725
+ [
726
+ 92,
727
+ 512,
728
+ 512
729
+ ],
730
+ [
731
+ 197,
732
+ 512,
733
+ 512
734
+ ],
735
+ [
736
+ 86,
737
+ 512,
738
+ 512
739
+ ],
740
+ [
741
+ 591,
742
+ 512,
743
+ 512
744
+ ],
745
+ [
746
+ 70,
747
+ 512,
748
+ 512
749
+ ],
750
+ [
751
+ 36,
752
+ 512,
753
+ 512
754
+ ],
755
+ [
756
+ 97,
757
+ 512,
758
+ 512
759
+ ],
760
+ [
761
+ 106,
762
+ 512,
763
+ 512
764
+ ],
765
+ [
766
+ 1059,
767
+ 512,
768
+ 512
769
+ ],
770
+ [
771
+ 38,
772
+ 512,
773
+ 512
774
+ ],
775
+ [
776
+ 69,
777
+ 512,
778
+ 512
779
+ ],
780
+ [
781
+ 470,
782
+ 512,
783
+ 512
784
+ ],
785
+ [
786
+ 538,
787
+ 512,
788
+ 512
789
+ ],
790
+ [
791
+ 987,
792
+ 512,
793
+ 512
794
+ ],
795
+ [
796
+ 548,
797
+ 512,
798
+ 512
799
+ ],
800
+ [
801
+ 705,
802
+ 512,
803
+ 512
804
+ ],
805
+ [
806
+ 719,
807
+ 512,
808
+ 512
809
+ ],
810
+ [
811
+ 252,
812
+ 512,
813
+ 796
814
+ ],
815
+ [
816
+ 59,
817
+ 512,
818
+ 512
819
+ ],
820
+ [
821
+ 94,
822
+ 512,
823
+ 512
824
+ ],
825
+ [
826
+ 99,
827
+ 512,
828
+ 512
829
+ ],
830
+ [
831
+ 88,
832
+ 512,
833
+ 512
834
+ ],
835
+ [
836
+ 734,
837
+ 512,
838
+ 512
839
+ ],
840
+ [
841
+ 103,
842
+ 512,
843
+ 512
844
+ ],
845
+ [
846
+ 103,
847
+ 512,
848
+ 512
849
+ ],
850
+ [
851
+ 83,
852
+ 512,
853
+ 512
854
+ ],
855
+ [
856
+ 101,
857
+ 512,
858
+ 512
859
+ ],
860
+ [
861
+ 345,
862
+ 512,
863
+ 512
864
+ ],
865
+ [
866
+ 131,
867
+ 512,
868
+ 512
869
+ ],
870
+ [
871
+ 91,
872
+ 512,
873
+ 512
874
+ ],
875
+ [
876
+ 97,
877
+ 512,
878
+ 512
879
+ ],
880
+ [
881
+ 69,
882
+ 512,
883
+ 512
884
+ ],
885
+ [
886
+ 107,
887
+ 512,
888
+ 512
889
+ ],
890
+ [
891
+ 102,
892
+ 512,
893
+ 512
894
+ ],
895
+ [
896
+ 88,
897
+ 512,
898
+ 512
899
+ ],
900
+ [
901
+ 88,
902
+ 512,
903
+ 512
904
+ ],
905
+ [
906
+ 99,
907
+ 512,
908
+ 512
909
+ ],
910
+ [
911
+ 137,
912
+ 512,
913
+ 512
914
+ ],
915
+ [
916
+ 99,
917
+ 512,
918
+ 512
919
+ ],
920
+ [
921
+ 93,
922
+ 512,
923
+ 512
924
+ ],
925
+ [
926
+ 195,
927
+ 512,
928
+ 512
929
+ ],
930
+ [
931
+ 146,
932
+ 512,
933
+ 512
934
+ ],
935
+ [
936
+ 235,
937
+ 512,
938
+ 512
939
+ ],
940
+ [
941
+ 143,
942
+ 512,
943
+ 512
944
+ ],
945
+ [
946
+ 82,
947
+ 512,
948
+ 512
949
+ ],
950
+ [
951
+ 365,
952
+ 512,
953
+ 512
954
+ ],
955
+ [
956
+ 146,
957
+ 512,
958
+ 512
959
+ ],
960
+ [
961
+ 161,
962
+ 512,
963
+ 512
964
+ ],
965
+ [
966
+ 349,
967
+ 512,
968
+ 512
969
+ ],
970
+ [
971
+ 133,
972
+ 512,
973
+ 512
974
+ ],
975
+ [
976
+ 233,
977
+ 512,
978
+ 512
979
+ ],
980
+ [
981
+ 135,
982
+ 512,
983
+ 512
984
+ ],
985
+ [
986
+ 98,
987
+ 512,
988
+ 512
989
+ ],
990
+ [
991
+ 178,
992
+ 512,
993
+ 512
994
+ ],
995
+ [
996
+ 162,
997
+ 512,
998
+ 512
999
+ ],
1000
+ [
1001
+ 269,
1002
+ 512,
1003
+ 512
1004
+ ],
1005
+ [
1006
+ 121,
1007
+ 512,
1008
+ 512
1009
+ ],
1010
+ [
1011
+ 103,
1012
+ 512,
1013
+ 512
1014
+ ],
1015
+ [
1016
+ 96,
1017
+ 512,
1018
+ 512
1019
+ ],
1020
+ [
1021
+ 383,
1022
+ 512,
1023
+ 512
1024
+ ],
1025
+ [
1026
+ 620,
1027
+ 512,
1028
+ 512
1029
+ ],
1030
+ [
1031
+ 75,
1032
+ 512,
1033
+ 512
1034
+ ],
1035
+ [
1036
+ 93,
1037
+ 512,
1038
+ 512
1039
+ ],
1040
+ [
1041
+ 60,
1042
+ 512,
1043
+ 512
1044
+ ],
1045
+ [
1046
+ 140,
1047
+ 512,
1048
+ 512
1049
+ ],
1050
+ [
1051
+ 89,
1052
+ 512,
1053
+ 512
1054
+ ],
1055
+ [
1056
+ 102,
1057
+ 512,
1058
+ 512
1059
+ ],
1060
+ [
1061
+ 42,
1062
+ 512,
1063
+ 512
1064
+ ],
1065
+ [
1066
+ 95,
1067
+ 512,
1068
+ 512
1069
+ ],
1070
+ [
1071
+ 87,
1072
+ 512,
1073
+ 512
1074
+ ],
1075
+ [
1076
+ 636,
1077
+ 512,
1078
+ 512
1079
+ ],
1080
+ [
1081
+ 505,
1082
+ 512,
1083
+ 512
1084
+ ],
1085
+ [
1086
+ 82,
1087
+ 512,
1088
+ 512
1089
+ ],
1090
+ [
1091
+ 743,
1092
+ 512,
1093
+ 512
1094
+ ],
1095
+ [
1096
+ 139,
1097
+ 512,
1098
+ 512
1099
+ ],
1100
+ [
1101
+ 164,
1102
+ 512,
1103
+ 512
1104
+ ],
1105
+ [
1106
+ 167,
1107
+ 512,
1108
+ 512
1109
+ ],
1110
+ [
1111
+ 174,
1112
+ 512,
1113
+ 512
1114
+ ],
1115
+ [
1116
+ 141,
1117
+ 512,
1118
+ 512
1119
+ ],
1120
+ [
1121
+ 91,
1122
+ 512,
1123
+ 512
1124
+ ],
1125
+ [
1126
+ 479,
1127
+ 512,
1128
+ 512
1129
+ ],
1130
+ [
1131
+ 97,
1132
+ 512,
1133
+ 512
1134
+ ],
1135
+ [
1136
+ 103,
1137
+ 512,
1138
+ 512
1139
+ ],
1140
+ [
1141
+ 160,
1142
+ 512,
1143
+ 512
1144
+ ],
1145
+ [
1146
+ 145,
1147
+ 512,
1148
+ 512
1149
+ ],
1150
+ [
1151
+ 102,
1152
+ 512,
1153
+ 512
1154
+ ],
1155
+ [
1156
+ 266,
1157
+ 512,
1158
+ 512
1159
+ ],
1160
+ [
1161
+ 93,
1162
+ 512,
1163
+ 512
1164
+ ],
1165
+ [
1166
+ 165,
1167
+ 512,
1168
+ 512
1169
+ ],
1170
+ [
1171
+ 101,
1172
+ 512,
1173
+ 512
1174
+ ],
1175
+ [
1176
+ 96,
1177
+ 512,
1178
+ 512
1179
+ ],
1180
+ [
1181
+ 140,
1182
+ 512,
1183
+ 512
1184
+ ],
1185
+ [
1186
+ 159,
1187
+ 512,
1188
+ 512
1189
+ ],
1190
+ [
1191
+ 64,
1192
+ 512,
1193
+ 512
1194
+ ],
1195
+ [
1196
+ 175,
1197
+ 512,
1198
+ 512
1199
+ ],
1200
+ [
1201
+ 96,
1202
+ 512,
1203
+ 512
1204
+ ],
1205
+ [
1206
+ 92,
1207
+ 512,
1208
+ 512
1209
+ ],
1210
+ [
1211
+ 193,
1212
+ 512,
1213
+ 512
1214
+ ],
1215
+ [
1216
+ 99,
1217
+ 512,
1218
+ 512
1219
+ ],
1220
+ [
1221
+ 82,
1222
+ 512,
1223
+ 512
1224
+ ],
1225
+ [
1226
+ 92,
1227
+ 512,
1228
+ 512
1229
+ ],
1230
+ [
1231
+ 88,
1232
+ 512,
1233
+ 512
1234
+ ],
1235
+ [
1236
+ 149,
1237
+ 512,
1238
+ 512
1239
+ ],
1240
+ [
1241
+ 598,
1242
+ 512,
1243
+ 512
1244
+ ],
1245
+ [
1246
+ 284,
1247
+ 512,
1248
+ 512
1249
+ ],
1250
+ [
1251
+ 66,
1252
+ 512,
1253
+ 512
1254
+ ],
1255
+ [
1256
+ 258,
1257
+ 512,
1258
+ 512
1259
+ ],
1260
+ [
1261
+ 210,
1262
+ 512,
1263
+ 512
1264
+ ],
1265
+ [
1266
+ 45,
1267
+ 512,
1268
+ 512
1269
+ ],
1270
+ [
1271
+ 51,
1272
+ 512,
1273
+ 512
1274
+ ],
1275
+ [
1276
+ 491,
1277
+ 512,
1278
+ 512
1279
+ ],
1280
+ [
1281
+ 250,
1282
+ 512,
1283
+ 512
1284
+ ],
1285
+ [
1286
+ 180,
1287
+ 512,
1288
+ 512
1289
+ ],
1290
+ [
1291
+ 75,
1292
+ 512,
1293
+ 512
1294
+ ],
1295
+ [
1296
+ 32,
1297
+ 512,
1298
+ 512
1299
+ ],
1300
+ [
1301
+ 107,
1302
+ 512,
1303
+ 512
1304
+ ],
1305
+ [
1306
+ 82,
1307
+ 512,
1308
+ 512
1309
+ ],
1310
+ [
1311
+ 54,
1312
+ 512,
1313
+ 512
1314
+ ],
1315
+ [
1316
+ 615,
1317
+ 512,
1318
+ 512
1319
+ ],
1320
+ [
1321
+ 63,
1322
+ 512,
1323
+ 512
1324
+ ],
1325
+ [
1326
+ 653,
1327
+ 512,
1328
+ 512
1329
+ ],
1330
+ [
1331
+ 411,
1332
+ 512,
1333
+ 512
1334
+ ],
1335
+ [
1336
+ 91,
1337
+ 512,
1338
+ 512
1339
+ ],
1340
+ [
1341
+ 88,
1342
+ 512,
1343
+ 512
1344
+ ],
1345
+ [
1346
+ 46,
1347
+ 512,
1348
+ 512
1349
+ ],
1350
+ [
1351
+ 177,
1352
+ 512,
1353
+ 512
1354
+ ],
1355
+ [
1356
+ 101,
1357
+ 512,
1358
+ 512
1359
+ ],
1360
+ [
1361
+ 93,
1362
+ 512,
1363
+ 512
1364
+ ],
1365
+ [
1366
+ 468,
1367
+ 512,
1368
+ 512
1369
+ ],
1370
+ [
1371
+ 673,
1372
+ 512,
1373
+ 512
1374
+ ],
1375
+ [
1376
+ 238,
1377
+ 512,
1378
+ 512
1379
+ ],
1380
+ [
1381
+ 125,
1382
+ 512,
1383
+ 512
1384
+ ],
1385
+ [
1386
+ 94,
1387
+ 512,
1388
+ 512
1389
+ ],
1390
+ [
1391
+ 727,
1392
+ 512,
1393
+ 512
1394
+ ],
1395
+ [
1396
+ 79,
1397
+ 512,
1398
+ 512
1399
+ ],
1400
+ [
1401
+ 165,
1402
+ 512,
1403
+ 512
1404
+ ],
1405
+ [
1406
+ 60,
1407
+ 512,
1408
+ 512
1409
+ ],
1410
+ [
1411
+ 79,
1412
+ 512,
1413
+ 512
1414
+ ],
1415
+ [
1416
+ 266,
1417
+ 512,
1418
+ 512
1419
+ ],
1420
+ [
1421
+ 86,
1422
+ 512,
1423
+ 512
1424
+ ],
1425
+ [
1426
+ 337,
1427
+ 512,
1428
+ 512
1429
+ ],
1430
+ [
1431
+ 244,
1432
+ 512,
1433
+ 512
1434
+ ],
1435
+ [
1436
+ 41,
1437
+ 512,
1438
+ 512
1439
+ ],
1440
+ [
1441
+ 106,
1442
+ 512,
1443
+ 512
1444
+ ],
1445
+ [
1446
+ 54,
1447
+ 512,
1448
+ 512
1449
+ ],
1450
+ [
1451
+ 276,
1452
+ 512,
1453
+ 512
1454
+ ],
1455
+ [
1456
+ 86,
1457
+ 512,
1458
+ 512
1459
+ ],
1460
+ [
1461
+ 683,
1462
+ 512,
1463
+ 512
1464
+ ],
1465
+ [
1466
+ 131,
1467
+ 512,
1468
+ 512
1469
+ ],
1470
+ [
1471
+ 95,
1472
+ 512,
1473
+ 512
1474
+ ],
1475
+ [
1476
+ 591,
1477
+ 512,
1478
+ 512
1479
+ ],
1480
+ [
1481
+ 623,
1482
+ 512,
1483
+ 512
1484
+ ],
1485
+ [
1486
+ 564,
1487
+ 512,
1488
+ 512
1489
+ ],
1490
+ [
1491
+ 83,
1492
+ 512,
1493
+ 512
1494
+ ],
1495
+ [
1496
+ 102,
1497
+ 512,
1498
+ 512
1499
+ ],
1500
+ [
1501
+ 617,
1502
+ 512,
1503
+ 512
1504
+ ],
1505
+ [
1506
+ 624,
1507
+ 512,
1508
+ 512
1509
+ ],
1510
+ [
1511
+ 119,
1512
+ 512,
1513
+ 512
1514
+ ],
1515
+ [
1516
+ 144,
1517
+ 512,
1518
+ 512
1519
+ ],
1520
+ [
1521
+ 49,
1522
+ 512,
1523
+ 512
1524
+ ],
1525
+ [
1526
+ 59,
1527
+ 512,
1528
+ 512
1529
+ ],
1530
+ [
1531
+ 137,
1532
+ 512,
1533
+ 512
1534
+ ],
1535
+ [
1536
+ 97,
1537
+ 512,
1538
+ 512
1539
+ ],
1540
+ [
1541
+ 91,
1542
+ 512,
1543
+ 512
1544
+ ],
1545
+ [
1546
+ 95,
1547
+ 512,
1548
+ 512
1549
+ ],
1550
+ [
1551
+ 93,
1552
+ 512,
1553
+ 512
1554
+ ],
1555
+ [
1556
+ 109,
1557
+ 512,
1558
+ 512
1559
+ ],
1560
+ [
1561
+ 89,
1562
+ 512,
1563
+ 512
1564
+ ],
1565
+ [
1566
+ 97,
1567
+ 512,
1568
+ 512
1569
+ ],
1570
+ [
1571
+ 472,
1572
+ 512,
1573
+ 512
1574
+ ],
1575
+ [
1576
+ 97,
1577
+ 512,
1578
+ 512
1579
+ ],
1580
+ [
1581
+ 94,
1582
+ 512,
1583
+ 512
1584
+ ],
1585
+ [
1586
+ 150,
1587
+ 512,
1588
+ 512
1589
+ ],
1590
+ [
1591
+ 56,
1592
+ 512,
1593
+ 512
1594
+ ],
1595
+ [
1596
+ 142,
1597
+ 512,
1598
+ 512
1599
+ ],
1600
+ [
1601
+ 49,
1602
+ 512,
1603
+ 512
1604
+ ],
1605
+ [
1606
+ 81,
1607
+ 512,
1608
+ 651
1609
+ ],
1610
+ [
1611
+ 92,
1612
+ 512,
1613
+ 512
1614
+ ],
1615
+ [
1616
+ 118,
1617
+ 512,
1618
+ 512
1619
+ ],
1620
+ [
1621
+ 40,
1622
+ 512,
1623
+ 512
1624
+ ],
1625
+ [
1626
+ 47,
1627
+ 512,
1628
+ 512
1629
+ ],
1630
+ [
1631
+ 85,
1632
+ 512,
1633
+ 512
1634
+ ],
1635
+ [
1636
+ 40,
1637
+ 512,
1638
+ 632
1639
+ ],
1640
+ [
1641
+ 97,
1642
+ 512,
1643
+ 512
1644
+ ],
1645
+ [
1646
+ 47,
1647
+ 512,
1648
+ 512
1649
+ ],
1650
+ [
1651
+ 93,
1652
+ 512,
1653
+ 512
1654
+ ],
1655
+ [
1656
+ 96,
1657
+ 512,
1658
+ 512
1659
+ ],
1660
+ [
1661
+ 60,
1662
+ 512,
1663
+ 512
1664
+ ],
1665
+ [
1666
+ 127,
1667
+ 512,
1668
+ 512
1669
+ ],
1670
+ [
1671
+ 162,
1672
+ 512,
1673
+ 512
1674
+ ],
1675
+ [
1676
+ 106,
1677
+ 512,
1678
+ 512
1679
+ ],
1680
+ [
1681
+ 50,
1682
+ 512,
1683
+ 512
1684
+ ],
1685
+ [
1686
+ 49,
1687
+ 512,
1688
+ 512
1689
+ ],
1690
+ [
1691
+ 47,
1692
+ 512,
1693
+ 512
1694
+ ],
1695
+ [
1696
+ 151,
1697
+ 512,
1698
+ 512
1699
+ ],
1700
+ [
1701
+ 96,
1702
+ 512,
1703
+ 512
1704
+ ],
1705
+ [
1706
+ 70,
1707
+ 512,
1708
+ 512
1709
+ ],
1710
+ [
1711
+ 47,
1712
+ 512,
1713
+ 512
1714
+ ],
1715
+ [
1716
+ 52,
1717
+ 512,
1718
+ 512
1719
+ ],
1720
+ [
1721
+ 975,
1722
+ 512,
1723
+ 512
1724
+ ],
1725
+ [
1726
+ 63,
1727
+ 512,
1728
+ 512
1729
+ ],
1730
+ [
1731
+ 102,
1732
+ 512,
1733
+ 512
1734
+ ],
1735
+ [
1736
+ 103,
1737
+ 512,
1738
+ 512
1739
+ ],
1740
+ [
1741
+ 100,
1742
+ 512,
1743
+ 512
1744
+ ],
1745
+ [
1746
+ 198,
1747
+ 512,
1748
+ 512
1749
+ ],
1750
+ [
1751
+ 228,
1752
+ 512,
1753
+ 512
1754
+ ],
1755
+ [
1756
+ 125,
1757
+ 512,
1758
+ 512
1759
+ ],
1760
+ [
1761
+ 90,
1762
+ 512,
1763
+ 512
1764
+ ],
1765
+ [
1766
+ 124,
1767
+ 512,
1768
+ 512
1769
+ ],
1770
+ [
1771
+ 51,
1772
+ 512,
1773
+ 512
1774
+ ],
1775
+ [
1776
+ 125,
1777
+ 512,
1778
+ 512
1779
+ ],
1780
+ [
1781
+ 64,
1782
+ 512,
1783
+ 512
1784
+ ],
1785
+ [
1786
+ 159,
1787
+ 512,
1788
+ 512
1789
+ ],
1790
+ [
1791
+ 98,
1792
+ 512,
1793
+ 512
1794
+ ],
1795
+ [
1796
+ 132,
1797
+ 512,
1798
+ 512
1799
+ ],
1800
+ [
1801
+ 89,
1802
+ 512,
1803
+ 512
1804
+ ],
1805
+ [
1806
+ 52,
1807
+ 512,
1808
+ 512
1809
+ ],
1810
+ [
1811
+ 91,
1812
+ 512,
1813
+ 512
1814
+ ],
1815
+ [
1816
+ 143,
1817
+ 512,
1818
+ 512
1819
+ ],
1820
+ [
1821
+ 105,
1822
+ 512,
1823
+ 512
1824
+ ],
1825
+ [
1826
+ 58,
1827
+ 512,
1828
+ 512
1829
+ ],
1830
+ [
1831
+ 59,
1832
+ 512,
1833
+ 512
1834
+ ],
1835
+ [
1836
+ 95,
1837
+ 512,
1838
+ 512
1839
+ ],
1840
+ [
1841
+ 131,
1842
+ 512,
1843
+ 512
1844
+ ],
1845
+ [
1846
+ 100,
1847
+ 512,
1848
+ 512
1849
+ ],
1850
+ [
1851
+ 51,
1852
+ 512,
1853
+ 512
1854
+ ],
1855
+ [
1856
+ 87,
1857
+ 512,
1858
+ 512
1859
+ ],
1860
+ [
1861
+ 44,
1862
+ 512,
1863
+ 512
1864
+ ],
1865
+ [
1866
+ 61,
1867
+ 512,
1868
+ 512
1869
+ ],
1870
+ [
1871
+ 162,
1872
+ 512,
1873
+ 512
1874
+ ],
1875
+ [
1876
+ 45,
1877
+ 512,
1878
+ 512
1879
+ ],
1880
+ [
1881
+ 211,
1882
+ 512,
1883
+ 512
1884
+ ],
1885
+ [
1886
+ 97,
1887
+ 512,
1888
+ 512
1889
+ ],
1890
+ [
1891
+ 57,
1892
+ 512,
1893
+ 512
1894
+ ],
1895
+ [
1896
+ 77,
1897
+ 512,
1898
+ 512
1899
+ ],
1900
+ [
1901
+ 96,
1902
+ 512,
1903
+ 512
1904
+ ],
1905
+ [
1906
+ 177,
1907
+ 512,
1908
+ 512
1909
+ ],
1910
+ [
1911
+ 142,
1912
+ 512,
1913
+ 512
1914
+ ],
1915
+ [
1916
+ 116,
1917
+ 512,
1918
+ 512
1919
+ ],
1920
+ [
1921
+ 266,
1922
+ 512,
1923
+ 512
1924
+ ],
1925
+ [
1926
+ 47,
1927
+ 512,
1928
+ 512
1929
+ ],
1930
+ [
1931
+ 65,
1932
+ 512,
1933
+ 512
1934
+ ],
1935
+ [
1936
+ 83,
1937
+ 512,
1938
+ 512
1939
+ ],
1940
+ [
1941
+ 152,
1942
+ 512,
1943
+ 512
1944
+ ],
1945
+ [
1946
+ 209,
1947
+ 512,
1948
+ 512
1949
+ ],
1950
+ [
1951
+ 167,
1952
+ 512,
1953
+ 512
1954
+ ],
1955
+ [
1956
+ 161,
1957
+ 512,
1958
+ 512
1959
+ ],
1960
+ [
1961
+ 204,
1962
+ 512,
1963
+ 512
1964
+ ],
1965
+ [
1966
+ 59,
1967
+ 512,
1968
+ 512
1969
+ ],
1970
+ [
1971
+ 98,
1972
+ 512,
1973
+ 512
1974
+ ],
1975
+ [
1976
+ 129,
1977
+ 512,
1978
+ 512
1979
+ ],
1980
+ [
1981
+ 103,
1982
+ 512,
1983
+ 512
1984
+ ],
1985
+ [
1986
+ 61,
1987
+ 512,
1988
+ 512
1989
+ ],
1990
+ [
1991
+ 54,
1992
+ 512,
1993
+ 512
1994
+ ],
1995
+ [
1996
+ 36,
1997
+ 512,
1998
+ 512
1999
+ ],
2000
+ [
2001
+ 91,
2002
+ 512,
2003
+ 512
2004
+ ],
2005
+ [
2006
+ 63,
2007
+ 512,
2008
+ 512
2009
+ ],
2010
+ [
2011
+ 153,
2012
+ 512,
2013
+ 512
2014
+ ],
2015
+ [
2016
+ 680,
2017
+ 512,
2018
+ 512
2019
+ ],
2020
+ [
2021
+ 159,
2022
+ 512,
2023
+ 512
2024
+ ],
2025
+ [
2026
+ 92,
2027
+ 512,
2028
+ 512
2029
+ ],
2030
+ [
2031
+ 225,
2032
+ 512,
2033
+ 512
2034
+ ],
2035
+ [
2036
+ 302,
2037
+ 512,
2038
+ 512
2039
+ ],
2040
+ [
2041
+ 41,
2042
+ 512,
2043
+ 512
2044
+ ],
2045
+ [
2046
+ 89,
2047
+ 512,
2048
+ 512
2049
+ ],
2050
+ [
2051
+ 85,
2052
+ 512,
2053
+ 512
2054
+ ],
2055
+ [
2056
+ 198,
2057
+ 512,
2058
+ 512
2059
+ ],
2060
+ [
2061
+ 743,
2062
+ 512,
2063
+ 512
2064
+ ],
2065
+ [
2066
+ 97,
2067
+ 512,
2068
+ 512
2069
+ ],
2070
+ [
2071
+ 72,
2072
+ 512,
2073
+ 512
2074
+ ],
2075
+ [
2076
+ 446,
2077
+ 512,
2078
+ 512
2079
+ ],
2080
+ [
2081
+ 654,
2082
+ 512,
2083
+ 512
2084
+ ],
2085
+ [
2086
+ 325,
2087
+ 512,
2088
+ 512
2089
+ ],
2090
+ [
2091
+ 98,
2092
+ 512,
2093
+ 512
2094
+ ],
2095
+ [
2096
+ 525,
2097
+ 512,
2098
+ 512
2099
+ ],
2100
+ [
2101
+ 144,
2102
+ 512,
2103
+ 512
2104
+ ],
2105
+ [
2106
+ 75,
2107
+ 512,
2108
+ 512
2109
+ ],
2110
+ [
2111
+ 96,
2112
+ 512,
2113
+ 512
2114
+ ],
2115
+ [
2116
+ 84,
2117
+ 512,
2118
+ 512
2119
+ ],
2120
+ [
2121
+ 89,
2122
+ 512,
2123
+ 512
2124
+ ],
2125
+ [
2126
+ 95,
2127
+ 512,
2128
+ 512
2129
+ ],
2130
+ [
2131
+ 101,
2132
+ 512,
2133
+ 512
2134
+ ],
2135
+ [
2136
+ 103,
2137
+ 512,
2138
+ 512
2139
+ ],
2140
+ [
2141
+ 163,
2142
+ 512,
2143
+ 512
2144
+ ],
2145
+ [
2146
+ 35,
2147
+ 512,
2148
+ 512
2149
+ ],
2150
+ [
2151
+ 499,
2152
+ 512,
2153
+ 512
2154
+ ],
2155
+ [
2156
+ 42,
2157
+ 512,
2158
+ 512
2159
+ ],
2160
+ [
2161
+ 151,
2162
+ 512,
2163
+ 512
2164
+ ],
2165
+ [
2166
+ 60,
2167
+ 512,
2168
+ 512
2169
+ ],
2170
+ [
2171
+ 154,
2172
+ 512,
2173
+ 512
2174
+ ],
2175
+ [
2176
+ 99,
2177
+ 512,
2178
+ 512
2179
+ ],
2180
+ [
2181
+ 36,
2182
+ 512,
2183
+ 512
2184
+ ],
2185
+ [
2186
+ 632,
2187
+ 512,
2188
+ 512
2189
+ ],
2190
+ [
2191
+ 90,
2192
+ 512,
2193
+ 512
2194
+ ],
2195
+ [
2196
+ 65,
2197
+ 512,
2198
+ 512
2199
+ ],
2200
+ [
2201
+ 381,
2202
+ 512,
2203
+ 512
2204
+ ],
2205
+ [
2206
+ 44,
2207
+ 512,
2208
+ 512
2209
+ ],
2210
+ [
2211
+ 463,
2212
+ 512,
2213
+ 512
2214
+ ],
2215
+ [
2216
+ 493,
2217
+ 512,
2218
+ 512
2219
+ ],
2220
+ [
2221
+ 226,
2222
+ 512,
2223
+ 512
2224
+ ],
2225
+ [
2226
+ 457,
2227
+ 512,
2228
+ 512
2229
+ ],
2230
+ [
2231
+ 540,
2232
+ 512,
2233
+ 512
2234
+ ],
2235
+ [
2236
+ 344,
2237
+ 512,
2238
+ 512
2239
+ ],
2240
+ [
2241
+ 30,
2242
+ 512,
2243
+ 512
2244
+ ],
2245
+ [
2246
+ 165,
2247
+ 512,
2248
+ 512
2249
+ ],
2250
+ [
2251
+ 51,
2252
+ 512,
2253
+ 512
2254
+ ],
2255
+ [
2256
+ 48,
2257
+ 512,
2258
+ 512
2259
+ ],
2260
+ [
2261
+ 37,
2262
+ 512,
2263
+ 512
2264
+ ],
2265
+ [
2266
+ 45,
2267
+ 512,
2268
+ 512
2269
+ ],
2270
+ [
2271
+ 183,
2272
+ 512,
2273
+ 512
2274
+ ],
2275
+ [
2276
+ 492,
2277
+ 512,
2278
+ 512
2279
+ ],
2280
+ [
2281
+ 63,
2282
+ 512,
2283
+ 512
2284
+ ],
2285
+ [
2286
+ 452,
2287
+ 512,
2288
+ 512
2289
+ ],
2290
+ [
2291
+ 48,
2292
+ 512,
2293
+ 512
2294
+ ],
2295
+ [
2296
+ 181,
2297
+ 512,
2298
+ 512
2299
+ ],
2300
+ [
2301
+ 155,
2302
+ 512,
2303
+ 512
2304
+ ],
2305
+ [
2306
+ 511,
2307
+ 512,
2308
+ 512
2309
+ ],
2310
+ [
2311
+ 113,
2312
+ 512,
2313
+ 512
2314
+ ],
2315
+ [
2316
+ 484,
2317
+ 512,
2318
+ 512
2319
+ ],
2320
+ [
2321
+ 460,
2322
+ 512,
2323
+ 512
2324
+ ],
2325
+ [
2326
+ 215,
2327
+ 512,
2328
+ 512
2329
+ ],
2330
+ [
2331
+ 475,
2332
+ 512,
2333
+ 512
2334
+ ],
2335
+ [
2336
+ 56,
2337
+ 512,
2338
+ 512
2339
+ ],
2340
+ [
2341
+ 151,
2342
+ 512,
2343
+ 512
2344
+ ],
2345
+ [
2346
+ 199,
2347
+ 512,
2348
+ 512
2349
+ ],
2350
+ [
2351
+ 184,
2352
+ 512,
2353
+ 512
2354
+ ],
2355
+ [
2356
+ 38,
2357
+ 512,
2358
+ 512
2359
+ ],
2360
+ [
2361
+ 44,
2362
+ 512,
2363
+ 512
2364
+ ],
2365
+ [
2366
+ 73,
2367
+ 512,
2368
+ 512
2369
+ ],
2370
+ [
2371
+ 470,
2372
+ 512,
2373
+ 512
2374
+ ],
2375
+ [
2376
+ 80,
2377
+ 512,
2378
+ 512
2379
+ ],
2380
+ [
2381
+ 53,
2382
+ 512,
2383
+ 512
2384
+ ],
2385
+ [
2386
+ 253,
2387
+ 512,
2388
+ 512
2389
+ ],
2390
+ [
2391
+ 100,
2392
+ 512,
2393
+ 512
2394
+ ],
2395
+ [
2396
+ 133,
2397
+ 512,
2398
+ 512
2399
+ ],
2400
+ [
2401
+ 454,
2402
+ 512,
2403
+ 512
2404
+ ],
2405
+ [
2406
+ 190,
2407
+ 512,
2408
+ 512
2409
+ ],
2410
+ [
2411
+ 202,
2412
+ 512,
2413
+ 512
2414
+ ],
2415
+ [
2416
+ 55,
2417
+ 512,
2418
+ 512
2419
+ ],
2420
+ [
2421
+ 163,
2422
+ 512,
2423
+ 512
2424
+ ],
2425
+ [
2426
+ 256,
2427
+ 512,
2428
+ 512
2429
+ ],
2430
+ [
2431
+ 100,
2432
+ 512,
2433
+ 512
2434
+ ],
2435
+ [
2436
+ 178,
2437
+ 512,
2438
+ 512
2439
+ ],
2440
+ [
2441
+ 153,
2442
+ 512,
2443
+ 512
2444
+ ],
2445
+ [
2446
+ 48,
2447
+ 512,
2448
+ 512
2449
+ ],
2450
+ [
2451
+ 248,
2452
+ 512,
2453
+ 512
2454
+ ],
2455
+ [
2456
+ 55,
2457
+ 512,
2458
+ 512
2459
+ ],
2460
+ [
2461
+ 107,
2462
+ 512,
2463
+ 512
2464
+ ],
2465
+ [
2466
+ 124,
2467
+ 512,
2468
+ 512
2469
+ ],
2470
+ [
2471
+ 79,
2472
+ 512,
2473
+ 512
2474
+ ],
2475
+ [
2476
+ 147,
2477
+ 512,
2478
+ 512
2479
+ ],
2480
+ [
2481
+ 152,
2482
+ 512,
2483
+ 512
2484
+ ],
2485
+ [
2486
+ 116,
2487
+ 512,
2488
+ 512
2489
+ ],
2490
+ [
2491
+ 169,
2492
+ 512,
2493
+ 512
2494
+ ],
2495
+ [
2496
+ 151,
2497
+ 512,
2498
+ 512
2499
+ ],
2500
+ [
2501
+ 215,
2502
+ 512,
2503
+ 512
2504
+ ],
2505
+ [
2506
+ 215,
2507
+ 512,
2508
+ 512
2509
+ ],
2510
+ [
2511
+ 91,
2512
+ 512,
2513
+ 512
2514
+ ],
2515
+ [
2516
+ 181,
2517
+ 512,
2518
+ 512
2519
+ ],
2520
+ [
2521
+ 103,
2522
+ 512,
2523
+ 512
2524
+ ],
2525
+ [
2526
+ 554,
2527
+ 512,
2528
+ 512
2529
+ ],
2530
+ [
2531
+ 157,
2532
+ 512,
2533
+ 512
2534
+ ],
2535
+ [
2536
+ 133,
2537
+ 512,
2538
+ 512
2539
+ ],
2540
+ [
2541
+ 97,
2542
+ 512,
2543
+ 512
2544
+ ],
2545
+ [
2546
+ 287,
2547
+ 512,
2548
+ 512
2549
+ ],
2550
+ [
2551
+ 177,
2552
+ 512,
2553
+ 512
2554
+ ],
2555
+ [
2556
+ 171,
2557
+ 512,
2558
+ 512
2559
+ ],
2560
+ [
2561
+ 146,
2562
+ 512,
2563
+ 512
2564
+ ],
2565
+ [
2566
+ 193,
2567
+ 512,
2568
+ 512
2569
+ ],
2570
+ [
2571
+ 499,
2572
+ 512,
2573
+ 512
2574
+ ],
2575
+ [
2576
+ 152,
2577
+ 512,
2578
+ 512
2579
+ ],
2580
+ [
2581
+ 100,
2582
+ 512,
2583
+ 512
2584
+ ],
2585
+ [
2586
+ 122,
2587
+ 512,
2588
+ 512
2589
+ ],
2590
+ [
2591
+ 199,
2592
+ 512,
2593
+ 512
2594
+ ],
2595
+ [
2596
+ 80,
2597
+ 512,
2598
+ 512
2599
+ ],
2600
+ [
2601
+ 133,
2602
+ 512,
2603
+ 512
2604
+ ],
2605
+ [
2606
+ 147,
2607
+ 512,
2608
+ 512
2609
+ ],
2610
+ [
2611
+ 448,
2612
+ 512,
2613
+ 512
2614
+ ],
2615
+ [
2616
+ 230,
2617
+ 512,
2618
+ 512
2619
+ ],
2620
+ [
2621
+ 114,
2622
+ 512,
2623
+ 512
2624
+ ],
2625
+ [
2626
+ 344,
2627
+ 512,
2628
+ 512
2629
+ ],
2630
+ [
2631
+ 240,
2632
+ 512,
2633
+ 512
2634
+ ],
2635
+ [
2636
+ 230,
2637
+ 512,
2638
+ 512
2639
+ ],
2640
+ [
2641
+ 100,
2642
+ 512,
2643
+ 512
2644
+ ],
2645
+ [
2646
+ 153,
2647
+ 512,
2648
+ 512
2649
+ ],
2650
+ [
2651
+ 133,
2652
+ 512,
2653
+ 512
2654
+ ],
2655
+ [
2656
+ 103,
2657
+ 512,
2658
+ 512
2659
+ ],
2660
+ [
2661
+ 361,
2662
+ 512,
2663
+ 512
2664
+ ],
2665
+ [
2666
+ 112,
2667
+ 512,
2668
+ 512
2669
+ ],
2670
+ [
2671
+ 101,
2672
+ 512,
2673
+ 512
2674
+ ],
2675
+ [
2676
+ 95,
2677
+ 512,
2678
+ 512
2679
+ ],
2680
+ [
2681
+ 137,
2682
+ 512,
2683
+ 512
2684
+ ],
2685
+ [
2686
+ 81,
2687
+ 512,
2688
+ 512
2689
+ ],
2690
+ [
2691
+ 101,
2692
+ 512,
2693
+ 512
2694
+ ],
2695
+ [
2696
+ 56,
2697
+ 512,
2698
+ 512
2699
+ ],
2700
+ [
2701
+ 334,
2702
+ 512,
2703
+ 512
2704
+ ]
2705
+ ],
2706
+ "spacings": [
2707
+ [
2708
+ 0.5,
2709
+ 0.919921875,
2710
+ 0.919921875
2711
+ ],
2712
+ [
2713
+ 0.5,
2714
+ 0.798828125,
2715
+ 0.798828125
2716
+ ],
2717
+ [
2718
+ 1.0,
2719
+ 0.939453125,
2720
+ 0.939453125
2721
+ ],
2722
+ [
2723
+ 1.0,
2724
+ 0.85546875,
2725
+ 0.85546875
2726
+ ],
2727
+ [
2728
+ 4.0,
2729
+ 0.9765625,
2730
+ 0.9765625
2731
+ ],
2732
+ [
2733
+ 0.5,
2734
+ 0.9765625,
2735
+ 0.9765625
2736
+ ],
2737
+ [
2738
+ 3.0,
2739
+ 0.7421875,
2740
+ 0.7421875
2741
+ ],
2742
+ [
2743
+ 3.0,
2744
+ 0.939453125,
2745
+ 0.939453125
2746
+ ],
2747
+ [
2748
+ 3.0,
2749
+ 0.81640625,
2750
+ 0.81640625
2751
+ ],
2752
+ [
2753
+ 3.0,
2754
+ 0.80859375,
2755
+ 0.80859375
2756
+ ],
2757
+ [
2758
+ 3.0,
2759
+ 0.7578125,
2760
+ 0.7578125
2761
+ ],
2762
+ [
2763
+ 5.0,
2764
+ 0.703125,
2765
+ 0.703125
2766
+ ],
2767
+ [
2768
+ 5.0,
2769
+ 0.751953125,
2770
+ 0.751953125
2771
+ ],
2772
+ [
2773
+ 3.0,
2774
+ 0.68359375,
2775
+ 0.68359375
2776
+ ],
2777
+ [
2778
+ 1.0,
2779
+ 0.849609375,
2780
+ 0.849609375
2781
+ ],
2782
+ [
2783
+ 3.0,
2784
+ 0.705078125,
2785
+ 0.705078125
2786
+ ],
2787
+ [
2788
+ 2.5,
2789
+ 0.650390625,
2790
+ 0.650390625
2791
+ ],
2792
+ [
2793
+ 5.0,
2794
+ 0.6640625,
2795
+ 0.6640625
2796
+ ],
2797
+ [
2798
+ 2.5,
2799
+ 0.8613280057907104,
2800
+ 0.8613280057907104
2801
+ ],
2802
+ [
2803
+ 3.75,
2804
+ 0.9375,
2805
+ 0.9375
2806
+ ],
2807
+ [
2808
+ 5.0,
2809
+ 0.83984375,
2810
+ 0.83984375
2811
+ ],
2812
+ [
2813
+ 5.0,
2814
+ 0.822265625,
2815
+ 0.822265625
2816
+ ],
2817
+ [
2818
+ 0.5,
2819
+ 0.833984375,
2820
+ 0.833984375
2821
+ ],
2822
+ [
2823
+ 5.0,
2824
+ 0.6640625,
2825
+ 0.6640625
2826
+ ],
2827
+ [
2828
+ 2.5,
2829
+ 0.7363280057907104,
2830
+ 0.7363280057907104
2831
+ ],
2832
+ [
2833
+ 2.5,
2834
+ 0.875,
2835
+ 0.875
2836
+ ],
2837
+ [
2838
+ 0.5,
2839
+ 0.89453125,
2840
+ 0.89453125
2841
+ ],
2842
+ [
2843
+ 5.0,
2844
+ 0.83984375,
2845
+ 0.83984375
2846
+ ],
2847
+ [
2848
+ 5.0,
2849
+ 0.75390625,
2850
+ 0.75390625
2851
+ ],
2852
+ [
2853
+ 5.0,
2854
+ 0.73046875,
2855
+ 0.73046875
2856
+ ],
2857
+ [
2858
+ 3.0,
2859
+ 0.5180000066757202,
2860
+ 0.5180000066757202
2861
+ ],
2862
+ [
2863
+ 2.5,
2864
+ 0.7792969942092896,
2865
+ 0.7792969942092896
2866
+ ],
2867
+ [
2868
+ 1.0,
2869
+ 0.80859375,
2870
+ 0.80859375
2871
+ ],
2872
+ [
2873
+ 5.0,
2874
+ 0.8359375,
2875
+ 0.8359375
2876
+ ],
2877
+ [
2878
+ 5.0,
2879
+ 0.96484375,
2880
+ 0.96484375
2881
+ ],
2882
+ [
2883
+ 3.0,
2884
+ 0.798828125,
2885
+ 0.798828125
2886
+ ],
2887
+ [
2888
+ 5.0,
2889
+ 0.9375,
2890
+ 0.9375
2891
+ ],
2892
+ [
2893
+ 5.0,
2894
+ 0.779296875,
2895
+ 0.779296875
2896
+ ],
2897
+ [
2898
+ 5.0,
2899
+ 0.703125,
2900
+ 0.703125
2901
+ ],
2902
+ [
2903
+ 2.0,
2904
+ 0.7409999966621399,
2905
+ 0.7409999966621399
2906
+ ],
2907
+ [
2908
+ 3.0,
2909
+ 0.677734375,
2910
+ 0.677734375
2911
+ ],
2912
+ [
2913
+ 1.0,
2914
+ 0.859375,
2915
+ 0.859375
2916
+ ],
2917
+ [
2918
+ 3.0,
2919
+ 0.7379999756813049,
2920
+ 0.7379999756813049
2921
+ ],
2922
+ [
2923
+ 5.0,
2924
+ 0.966796875,
2925
+ 0.966796875
2926
+ ],
2927
+ [
2928
+ 3.0,
2929
+ 0.7409999966621399,
2930
+ 0.7409999966621399
2931
+ ],
2932
+ [
2933
+ 3.0,
2934
+ 0.9765625,
2935
+ 0.9765625
2936
+ ],
2937
+ [
2938
+ 5.0,
2939
+ 0.85546875,
2940
+ 0.85546875
2941
+ ],
2942
+ [
2943
+ 5.0,
2944
+ 1.0410000085830688,
2945
+ 1.0410000085830688
2946
+ ],
2947
+ [
2948
+ 0.5,
2949
+ 0.861328125,
2950
+ 0.861328125
2951
+ ],
2952
+ [
2953
+ 2.5,
2954
+ 0.6894530057907104,
2955
+ 0.6894530057907104
2956
+ ],
2957
+ [
2958
+ 2.5,
2959
+ 0.9609375,
2960
+ 0.9609375
2961
+ ],
2962
+ [
2963
+ 0.5,
2964
+ 0.95703125,
2965
+ 0.95703125
2966
+ ],
2967
+ [
2968
+ 0.5,
2969
+ 0.7734375,
2970
+ 0.7734375
2971
+ ],
2972
+ [
2973
+ 5.0,
2974
+ 0.9765625,
2975
+ 0.9765625
2976
+ ],
2977
+ [
2978
+ 5.0,
2979
+ 0.87890625,
2980
+ 0.87890625
2981
+ ],
2982
+ [
2983
+ 5.0,
2984
+ 0.78125,
2985
+ 0.78125
2986
+ ],
2987
+ [
2988
+ 3.0,
2989
+ 0.822265625,
2990
+ 0.822265625
2991
+ ],
2992
+ [
2993
+ 5.0,
2994
+ 0.951171875,
2995
+ 0.951171875
2996
+ ],
2997
+ [
2998
+ 0.5,
2999
+ 0.7890625,
3000
+ 0.7890625
3001
+ ],
3002
+ [
3003
+ 3.0,
3004
+ 0.833984375,
3005
+ 0.833984375
3006
+ ],
3007
+ [
3008
+ 5.0,
3009
+ 0.9765620231628418,
3010
+ 0.9765620231628418
3011
+ ],
3012
+ [
3013
+ 5.0,
3014
+ 0.9765625,
3015
+ 0.9765625
3016
+ ],
3017
+ [
3018
+ 0.5,
3019
+ 0.859375,
3020
+ 0.859375
3021
+ ],
3022
+ [
3023
+ 5.0,
3024
+ 0.703125,
3025
+ 0.703125
3026
+ ],
3027
+ [
3028
+ 2.5,
3029
+ 0.8203120231628418,
3030
+ 0.8203120231628418
3031
+ ],
3032
+ [
3033
+ 1.25,
3034
+ 0.8632810115814209,
3035
+ 0.8632810115814209
3036
+ ],
3037
+ [
3038
+ 1.0,
3039
+ 0.76171875,
3040
+ 0.76171875
3041
+ ],
3042
+ [
3043
+ 0.5,
3044
+ 0.703125,
3045
+ 0.703125
3046
+ ],
3047
+ [
3048
+ 5.0,
3049
+ 0.68359375,
3050
+ 0.68359375
3051
+ ],
3052
+ [
3053
+ 5.0,
3054
+ 0.732421875,
3055
+ 0.732421875
3056
+ ],
3057
+ [
3058
+ 0.5,
3059
+ 0.703125,
3060
+ 0.703125
3061
+ ],
3062
+ [
3063
+ 2.5,
3064
+ 0.6640625,
3065
+ 0.6640625
3066
+ ],
3067
+ [
3068
+ 5.0,
3069
+ 0.859375,
3070
+ 0.859375
3071
+ ],
3072
+ [
3073
+ 5.0,
3074
+ 0.6484375,
3075
+ 0.6484375
3076
+ ],
3077
+ [
3078
+ 5.0,
3079
+ 0.70703125,
3080
+ 0.70703125
3081
+ ],
3082
+ [
3083
+ 5.0,
3084
+ 0.677734375,
3085
+ 0.677734375
3086
+ ],
3087
+ [
3088
+ 5.0,
3089
+ 0.705078125,
3090
+ 0.705078125
3091
+ ],
3092
+ [
3093
+ 1.0,
3094
+ 0.962890625,
3095
+ 0.962890625
3096
+ ],
3097
+ [
3098
+ 5.0,
3099
+ 0.64453125,
3100
+ 0.64453125
3101
+ ],
3102
+ [
3103
+ 5.0,
3104
+ 0.72265625,
3105
+ 0.72265625
3106
+ ],
3107
+ [
3108
+ 3.0,
3109
+ 0.984000027179718,
3110
+ 0.984000027179718
3111
+ ],
3112
+ [
3113
+ 3.0,
3114
+ 0.779296875,
3115
+ 0.779296875
3116
+ ],
3117
+ [
3118
+ 3.0,
3119
+ 0.9765625,
3120
+ 0.9765625
3121
+ ],
3122
+ [
3123
+ 2.0,
3124
+ 0.9765625,
3125
+ 0.9765625
3126
+ ],
3127
+ [
3128
+ 5.0,
3129
+ 0.8119999766349792,
3130
+ 0.8119999766349792
3131
+ ],
3132
+ [
3133
+ 2.5,
3134
+ 0.7890620231628418,
3135
+ 0.7890620231628418
3136
+ ],
3137
+ [
3138
+ 5.0,
3139
+ 0.69140625,
3140
+ 0.69140625
3141
+ ],
3142
+ [
3143
+ 3.0,
3144
+ 0.4375,
3145
+ 0.4375
3146
+ ],
3147
+ [
3148
+ 5.0,
3149
+ 0.908203125,
3150
+ 0.908203125
3151
+ ],
3152
+ [
3153
+ 3.0,
3154
+ 0.767578125,
3155
+ 0.767578125
3156
+ ],
3157
+ [
3158
+ 0.5,
3159
+ 0.7890625,
3160
+ 0.7890625
3161
+ ],
3162
+ [
3163
+ 5.0,
3164
+ 0.703125,
3165
+ 0.703125
3166
+ ],
3167
+ [
3168
+ 0.5,
3169
+ 0.91015625,
3170
+ 0.91015625
3171
+ ],
3172
+ [
3173
+ 5.0,
3174
+ 0.703125,
3175
+ 0.703125
3176
+ ],
3177
+ [
3178
+ 1.5,
3179
+ 0.93359375,
3180
+ 0.93359375
3181
+ ],
3182
+ [
3183
+ 0.5,
3184
+ 0.73828125,
3185
+ 0.73828125
3186
+ ],
3187
+ [
3188
+ 5.0,
3189
+ 0.7409999966621399,
3190
+ 0.7409999966621399
3191
+ ],
3192
+ [
3193
+ 1.0,
3194
+ 0.69921875,
3195
+ 0.69921875
3196
+ ],
3197
+ [
3198
+ 5.0,
3199
+ 0.7070310115814209,
3200
+ 0.7070310115814209
3201
+ ],
3202
+ [
3203
+ 1.0,
3204
+ 0.82421875,
3205
+ 0.82421875
3206
+ ],
3207
+ [
3208
+ 0.5,
3209
+ 0.771484375,
3210
+ 0.771484375
3211
+ ],
3212
+ [
3213
+ 1.0,
3214
+ 0.83984375,
3215
+ 0.83984375
3216
+ ],
3217
+ [
3218
+ 0.5,
3219
+ 0.828125,
3220
+ 0.828125
3221
+ ],
3222
+ [
3223
+ 5.0,
3224
+ 0.78125,
3225
+ 0.78125
3226
+ ],
3227
+ [
3228
+ 3.0,
3229
+ 0.892578125,
3230
+ 0.892578125
3231
+ ],
3232
+ [
3233
+ 5.0,
3234
+ 0.806640625,
3235
+ 0.806640625
3236
+ ],
3237
+ [
3238
+ 5.0,
3239
+ 0.7167969942092896,
3240
+ 0.7167969942092896
3241
+ ],
3242
+ [
3243
+ 5.0,
3244
+ 0.865234375,
3245
+ 0.865234375
3246
+ ],
3247
+ [
3248
+ 2.5,
3249
+ 0.5859379768371582,
3250
+ 0.5859379768371582
3251
+ ],
3252
+ [
3253
+ 5.0,
3254
+ 0.830078125,
3255
+ 0.830078125
3256
+ ],
3257
+ [
3258
+ 2.5,
3259
+ 0.7421879768371582,
3260
+ 0.7421879768371582
3261
+ ],
3262
+ [
3263
+ 2.0,
3264
+ 0.7421875,
3265
+ 0.7421875
3266
+ ],
3267
+ [
3268
+ 5.0,
3269
+ 0.701171875,
3270
+ 0.701171875
3271
+ ],
3272
+ [
3273
+ 1.0,
3274
+ 0.80859375,
3275
+ 0.80859375
3276
+ ],
3277
+ [
3278
+ 0.5,
3279
+ 0.703125,
3280
+ 0.703125
3281
+ ],
3282
+ [
3283
+ 0.5,
3284
+ 0.671875,
3285
+ 0.671875
3286
+ ],
3287
+ [
3288
+ 2.5,
3289
+ 0.8457030057907104,
3290
+ 0.8457030057907104
3291
+ ],
3292
+ [
3293
+ 0.5,
3294
+ 0.85546875,
3295
+ 0.85546875
3296
+ ],
3297
+ [
3298
+ 5.0,
3299
+ 0.76171875,
3300
+ 0.76171875
3301
+ ],
3302
+ [
3303
+ 1.0,
3304
+ 0.83203125,
3305
+ 0.83203125
3306
+ ],
3307
+ [
3308
+ 5.0,
3309
+ 0.6859999895095825,
3310
+ 0.6859999895095825
3311
+ ],
3312
+ [
3313
+ 5.0,
3314
+ 0.72265625,
3315
+ 0.72265625
3316
+ ],
3317
+ [
3318
+ 1.25,
3319
+ 0.8691409826278687,
3320
+ 0.8691409826278687
3321
+ ],
3322
+ [
3323
+ 2.5,
3324
+ 0.703125,
3325
+ 0.703125
3326
+ ],
3327
+ [
3328
+ 3.0,
3329
+ 0.9765625,
3330
+ 0.9765625
3331
+ ],
3332
+ [
3333
+ 5.0,
3334
+ 0.94140625,
3335
+ 0.94140625
3336
+ ],
3337
+ [
3338
+ 3.0,
3339
+ 0.9765625,
3340
+ 0.9765625
3341
+ ],
3342
+ [
3343
+ 2.5,
3344
+ 0.8789060115814209,
3345
+ 0.8789060115814209
3346
+ ],
3347
+ [
3348
+ 5.0,
3349
+ 0.736328125,
3350
+ 0.736328125
3351
+ ],
3352
+ [
3353
+ 3.0,
3354
+ 0.546875,
3355
+ 0.546875
3356
+ ],
3357
+ [
3358
+ 3.0,
3359
+ 0.6679999828338623,
3360
+ 0.6679999828338623
3361
+ ],
3362
+ [
3363
+ 0.5,
3364
+ 0.712890625,
3365
+ 0.712890625
3366
+ ],
3367
+ [
3368
+ 2.5,
3369
+ 0.8496090173721313,
3370
+ 0.8496090173721313
3371
+ ],
3372
+ [
3373
+ 3.0,
3374
+ 0.947265625,
3375
+ 0.947265625
3376
+ ],
3377
+ [
3378
+ 0.5,
3379
+ 0.837890625,
3380
+ 0.837890625
3381
+ ],
3382
+ [
3383
+ 5.0,
3384
+ 0.68359375,
3385
+ 0.68359375
3386
+ ],
3387
+ [
3388
+ 2.5,
3389
+ 0.7421875,
3390
+ 0.7421875
3391
+ ],
3392
+ [
3393
+ 3.0,
3394
+ 0.68359375,
3395
+ 0.68359375
3396
+ ],
3397
+ [
3398
+ 5.0,
3399
+ 0.80078125,
3400
+ 0.80078125
3401
+ ],
3402
+ [
3403
+ 1.0,
3404
+ 0.82421875,
3405
+ 0.82421875
3406
+ ],
3407
+ [
3408
+ 0.5,
3409
+ 0.712890625,
3410
+ 0.712890625
3411
+ ],
3412
+ [
3413
+ 1.0,
3414
+ 0.80859375,
3415
+ 0.80859375
3416
+ ],
3417
+ [
3418
+ 5.0,
3419
+ 0.91796875,
3420
+ 0.91796875
3421
+ ],
3422
+ [
3423
+ 2.5,
3424
+ 0.791015625,
3425
+ 0.791015625
3426
+ ],
3427
+ [
3428
+ 3.0,
3429
+ 0.9765625,
3430
+ 0.9765625
3431
+ ],
3432
+ [
3433
+ 0.5,
3434
+ 0.703125,
3435
+ 0.703125
3436
+ ],
3437
+ [
3438
+ 5.0,
3439
+ 0.9765625,
3440
+ 0.9765625
3441
+ ],
3442
+ [
3443
+ 5.0,
3444
+ 0.90625,
3445
+ 0.90625
3446
+ ],
3447
+ [
3448
+ 3.0,
3449
+ 0.796875,
3450
+ 0.796875
3451
+ ],
3452
+ [
3453
+ 2.5,
3454
+ 0.7421879768371582,
3455
+ 0.7421879768371582
3456
+ ],
3457
+ [
3458
+ 0.5,
3459
+ 0.810546875,
3460
+ 0.810546875
3461
+ ],
3462
+ [
3463
+ 5.0,
3464
+ 0.72265625,
3465
+ 0.72265625
3466
+ ],
3467
+ [
3468
+ 3.0,
3469
+ 0.6640625,
3470
+ 0.6640625
3471
+ ],
3472
+ [
3473
+ 0.5,
3474
+ 0.9375,
3475
+ 0.9375
3476
+ ],
3477
+ [
3478
+ 0.5,
3479
+ 0.810546875,
3480
+ 0.810546875
3481
+ ],
3482
+ [
3483
+ 0.5,
3484
+ 0.9765625,
3485
+ 0.9765625
3486
+ ],
3487
+ [
3488
+ 0.5,
3489
+ 0.8515625,
3490
+ 0.8515625
3491
+ ],
3492
+ [
3493
+ 0.5,
3494
+ 0.703125,
3495
+ 0.703125
3496
+ ],
3497
+ [
3498
+ 0.5,
3499
+ 0.765625,
3500
+ 0.765625
3501
+ ],
3502
+ [
3503
+ 1.0,
3504
+ 0.451171875,
3505
+ 0.451171875
3506
+ ],
3507
+ [
3508
+ 5.0,
3509
+ 0.87109375,
3510
+ 0.87109375
3511
+ ],
3512
+ [
3513
+ 5.0,
3514
+ 0.55078125,
3515
+ 0.55078125
3516
+ ],
3517
+ [
3518
+ 5.0,
3519
+ 0.9375,
3520
+ 0.9375
3521
+ ],
3522
+ [
3523
+ 5.0,
3524
+ 0.69140625,
3525
+ 0.69140625
3526
+ ],
3527
+ [
3528
+ 1.0,
3529
+ 0.970703125,
3530
+ 0.970703125
3531
+ ],
3532
+ [
3533
+ 3.0,
3534
+ 0.7139999866485596,
3535
+ 0.7139999866485596
3536
+ ],
3537
+ [
3538
+ 5.0,
3539
+ 0.8730000257492065,
3540
+ 0.8730000257492065
3541
+ ],
3542
+ [
3543
+ 5.0,
3544
+ 0.7753909826278687,
3545
+ 0.7753909826278687
3546
+ ],
3547
+ [
3548
+ 5.0,
3549
+ 0.7549999952316284,
3550
+ 0.7549999952316284
3551
+ ],
3552
+ [
3553
+ 2.0,
3554
+ 0.9765625,
3555
+ 0.9765625
3556
+ ],
3557
+ [
3558
+ 5.0,
3559
+ 0.759765625,
3560
+ 0.759765625
3561
+ ],
3562
+ [
3563
+ 5.0,
3564
+ 0.765999972820282,
3565
+ 0.765999972820282
3566
+ ],
3567
+ [
3568
+ 5.0,
3569
+ 0.82421875,
3570
+ 0.82421875
3571
+ ],
3572
+ [
3573
+ 3.0,
3574
+ 0.736328125,
3575
+ 0.736328125
3576
+ ],
3577
+ [
3578
+ 5.0,
3579
+ 0.73046875,
3580
+ 0.73046875
3581
+ ],
3582
+ [
3583
+ 5.0,
3584
+ 0.9765625,
3585
+ 0.9765625
3586
+ ],
3587
+ [
3588
+ 5.0,
3589
+ 0.673828125,
3590
+ 0.673828125
3591
+ ],
3592
+ [
3593
+ 5.0,
3594
+ 0.865234375,
3595
+ 0.865234375
3596
+ ],
3597
+ [
3598
+ 5.0,
3599
+ 0.7421875,
3600
+ 0.7421875
3601
+ ],
3602
+ [
3603
+ 3.0,
3604
+ 0.7409999966621399,
3605
+ 0.7409999966621399
3606
+ ],
3607
+ [
3608
+ 5.0,
3609
+ 0.693359375,
3610
+ 0.693359375
3611
+ ],
3612
+ [
3613
+ 5.0,
3614
+ 0.9375,
3615
+ 0.9375
3616
+ ],
3617
+ [
3618
+ 1.5,
3619
+ 0.70703125,
3620
+ 0.70703125
3621
+ ],
3622
+ [
3623
+ 5.0,
3624
+ 0.83984375,
3625
+ 0.83984375
3626
+ ],
3627
+ [
3628
+ 2.5,
3629
+ 0.9121090173721313,
3630
+ 0.9121090173721313
3631
+ ],
3632
+ [
3633
+ 5.0,
3634
+ 0.734375,
3635
+ 0.734375
3636
+ ],
3637
+ [
3638
+ 5.0,
3639
+ 0.625,
3640
+ 0.625
3641
+ ],
3642
+ [
3643
+ 1.0,
3644
+ 0.6796875,
3645
+ 0.6796875
3646
+ ],
3647
+ [
3648
+ 5.0,
3649
+ 0.7421875,
3650
+ 0.7421875
3651
+ ],
3652
+ [
3653
+ 3.0,
3654
+ 0.72265625,
3655
+ 0.72265625
3656
+ ],
3657
+ [
3658
+ 1.25,
3659
+ 0.7421879768371582,
3660
+ 0.7421879768371582
3661
+ ],
3662
+ [
3663
+ 5.0,
3664
+ 0.78125,
3665
+ 0.78125
3666
+ ],
3667
+ [
3668
+ 1.25,
3669
+ 0.703125,
3670
+ 0.703125
3671
+ ],
3672
+ [
3673
+ 5.0,
3674
+ 0.75,
3675
+ 0.75
3676
+ ],
3677
+ [
3678
+ 5.0,
3679
+ 0.763671875,
3680
+ 0.763671875
3681
+ ],
3682
+ [
3683
+ 3.0,
3684
+ 0.818359375,
3685
+ 0.818359375
3686
+ ],
3687
+ [
3688
+ 3.0,
3689
+ 0.873046875,
3690
+ 0.873046875
3691
+ ],
3692
+ [
3693
+ 2.5,
3694
+ 0.732421875,
3695
+ 0.732421875
3696
+ ],
3697
+ [
3698
+ 2.5,
3699
+ 0.7421879768371582,
3700
+ 0.7421879768371582
3701
+ ],
3702
+ [
3703
+ 4.0,
3704
+ 0.7421875,
3705
+ 0.7421875
3706
+ ],
3707
+ [
3708
+ 2.5,
3709
+ 0.78125,
3710
+ 0.78125
3711
+ ],
3712
+ [
3713
+ 1.25,
3714
+ 0.8984379768371582,
3715
+ 0.8984379768371582
3716
+ ],
3717
+ [
3718
+ 1.0,
3719
+ 0.63671875,
3720
+ 0.63671875
3721
+ ],
3722
+ [
3723
+ 3.0,
3724
+ 0.875,
3725
+ 0.875
3726
+ ],
3727
+ [
3728
+ 5.0,
3729
+ 0.78125,
3730
+ 0.78125
3731
+ ],
3732
+ [
3733
+ 5.0,
3734
+ 0.970703125,
3735
+ 0.970703125
3736
+ ],
3737
+ [
3738
+ 5.0,
3739
+ 0.75390625,
3740
+ 0.75390625
3741
+ ],
3742
+ [
3743
+ 5.0,
3744
+ 0.884765625,
3745
+ 0.884765625
3746
+ ],
3747
+ [
3748
+ 5.0,
3749
+ 0.78125,
3750
+ 0.78125
3751
+ ],
3752
+ [
3753
+ 5.0,
3754
+ 0.8671875,
3755
+ 0.8671875
3756
+ ],
3757
+ [
3758
+ 3.0,
3759
+ 0.861328125,
3760
+ 0.861328125
3761
+ ],
3762
+ [
3763
+ 3.0,
3764
+ 0.7421875,
3765
+ 0.7421875
3766
+ ],
3767
+ [
3768
+ 1.0,
3769
+ 0.7734375,
3770
+ 0.7734375
3771
+ ],
3772
+ [
3773
+ 1.0,
3774
+ 0.953125,
3775
+ 0.953125
3776
+ ],
3777
+ [
3778
+ 3.75,
3779
+ 0.9375,
3780
+ 0.9375
3781
+ ],
3782
+ [
3783
+ 0.5,
3784
+ 0.82421875,
3785
+ 0.82421875
3786
+ ],
3787
+ [
3788
+ 3.0,
3789
+ 0.79296875,
3790
+ 0.79296875
3791
+ ],
3792
+ [
3793
+ 3.0,
3794
+ 0.859375,
3795
+ 0.859375
3796
+ ],
3797
+ [
3798
+ 3.0,
3799
+ 0.85546875,
3800
+ 0.85546875
3801
+ ],
3802
+ [
3803
+ 3.0,
3804
+ 0.78125,
3805
+ 0.78125
3806
+ ],
3807
+ [
3808
+ 5.0,
3809
+ 0.755859375,
3810
+ 0.755859375
3811
+ ],
3812
+ [
3813
+ 5.0,
3814
+ 0.7421875,
3815
+ 0.7421875
3816
+ ],
3817
+ [
3818
+ 3.0,
3819
+ 0.94921875,
3820
+ 0.94921875
3821
+ ],
3822
+ [
3823
+ 5.0,
3824
+ 0.861328125,
3825
+ 0.861328125
3826
+ ],
3827
+ [
3828
+ 5.0,
3829
+ 0.80078125,
3830
+ 0.80078125
3831
+ ],
3832
+ [
3833
+ 3.0,
3834
+ 0.9375,
3835
+ 0.9375
3836
+ ],
3837
+ [
3838
+ 3.0,
3839
+ 0.869140625,
3840
+ 0.869140625
3841
+ ],
3842
+ [
3843
+ 5.0,
3844
+ 0.7409999966621399,
3845
+ 0.7409999966621399
3846
+ ],
3847
+ [
3848
+ 1.0,
3849
+ 0.76171875,
3850
+ 0.76171875
3851
+ ],
3852
+ [
3853
+ 5.0,
3854
+ 0.64453125,
3855
+ 0.64453125
3856
+ ],
3857
+ [
3858
+ 3.0,
3859
+ 0.921875,
3860
+ 0.921875
3861
+ ],
3862
+ [
3863
+ 5.0,
3864
+ 0.8203125,
3865
+ 0.8203125
3866
+ ],
3867
+ [
3868
+ 5.0,
3869
+ 0.7409999966621399,
3870
+ 0.7409999966621399
3871
+ ],
3872
+ [
3873
+ 3.0,
3874
+ 0.685546875,
3875
+ 0.685546875
3876
+ ],
3877
+ [
3878
+ 3.0,
3879
+ 0.78125,
3880
+ 0.78125
3881
+ ],
3882
+ [
3883
+ 5.0,
3884
+ 0.921875,
3885
+ 0.921875
3886
+ ],
3887
+ [
3888
+ 2.5,
3889
+ 0.7773439884185791,
3890
+ 0.7773439884185791
3891
+ ],
3892
+ [
3893
+ 5.0,
3894
+ 0.80078125,
3895
+ 0.80078125
3896
+ ],
3897
+ [
3898
+ 5.0,
3899
+ 0.8203125,
3900
+ 0.8203125
3901
+ ],
3902
+ [
3903
+ 2.5,
3904
+ 0.703125,
3905
+ 0.703125
3906
+ ],
3907
+ [
3908
+ 5.0,
3909
+ 0.826171875,
3910
+ 0.826171875
3911
+ ],
3912
+ [
3913
+ 5.0,
3914
+ 0.76171875,
3915
+ 0.76171875
3916
+ ],
3917
+ [
3918
+ 5.0,
3919
+ 0.873046875,
3920
+ 0.873046875
3921
+ ],
3922
+ [
3923
+ 2.0,
3924
+ 0.703125,
3925
+ 0.703125
3926
+ ],
3927
+ [
3928
+ 3.0,
3929
+ 0.9760000109672546,
3930
+ 0.9760000109672546
3931
+ ],
3932
+ [
3933
+ 1.0,
3934
+ 0.7109375,
3935
+ 0.7109375
3936
+ ],
3937
+ [
3938
+ 2.0,
3939
+ 0.947265625,
3940
+ 0.947265625
3941
+ ],
3942
+ [
3943
+ 5.0,
3944
+ 0.9765625,
3945
+ 0.9765625
3946
+ ],
3947
+ [
3948
+ 1.0,
3949
+ 0.78515625,
3950
+ 0.78515625
3951
+ ],
3952
+ [
3953
+ 3.0,
3954
+ 0.8223433494567871,
3955
+ 0.8223433494567871
3956
+ ],
3957
+ [
3958
+ 5.0,
3959
+ 0.6796875,
3960
+ 0.6796875
3961
+ ],
3962
+ [
3963
+ 5.0,
3964
+ 0.853515625,
3965
+ 0.853515625
3966
+ ],
3967
+ [
3968
+ 1.0,
3969
+ 0.763671875,
3970
+ 0.763671875
3971
+ ],
3972
+ [
3973
+ 1.0,
3974
+ 0.75390625,
3975
+ 0.75390625
3976
+ ],
3977
+ [
3978
+ 2.5,
3979
+ 0.8203120231628418,
3980
+ 0.8203120231628418
3981
+ ],
3982
+ [
3983
+ 3.75,
3984
+ 0.9042969942092896,
3985
+ 0.9042969942092896
3986
+ ],
3987
+ [
3988
+ 5.0,
3989
+ 0.64453125,
3990
+ 0.64453125
3991
+ ],
3992
+ [
3993
+ 3.0,
3994
+ 0.7699999809265137,
3995
+ 0.7699999809265137
3996
+ ],
3997
+ [
3998
+ 5.0,
3999
+ 0.77734375,
4000
+ 0.77734375
4001
+ ],
4002
+ [
4003
+ 5.0,
4004
+ 0.75,
4005
+ 0.75
4006
+ ],
4007
+ [
4008
+ 0.5,
4009
+ 0.84375,
4010
+ 0.84375
4011
+ ],
4012
+ [
4013
+ 5.0,
4014
+ 0.681640625,
4015
+ 0.681640625
4016
+ ],
4017
+ [
4018
+ 0.5,
4019
+ 0.7890625,
4020
+ 0.7890625
4021
+ ],
4022
+ [
4023
+ 1.0,
4024
+ 0.7265625,
4025
+ 0.7265625
4026
+ ],
4027
+ [
4028
+ 5.0,
4029
+ 0.703125,
4030
+ 0.703125
4031
+ ],
4032
+ [
4033
+ 5.0,
4034
+ 0.666015625,
4035
+ 0.666015625
4036
+ ],
4037
+ [
4038
+ 5.0,
4039
+ 0.72265625,
4040
+ 0.72265625
4041
+ ],
4042
+ [
4043
+ 0.800000011920929,
4044
+ 0.673828125,
4045
+ 0.673828125
4046
+ ],
4047
+ [
4048
+ 5.0,
4049
+ 0.896484375,
4050
+ 0.896484375
4051
+ ],
4052
+ [
4053
+ 5.0,
4054
+ 0.72265625,
4055
+ 0.72265625
4056
+ ],
4057
+ [
4058
+ 0.5,
4059
+ 0.60546875,
4060
+ 0.60546875
4061
+ ],
4062
+ [
4063
+ 0.5,
4064
+ 0.896484375,
4065
+ 0.896484375
4066
+ ],
4067
+ [
4068
+ 1.0,
4069
+ 0.69921875,
4070
+ 0.69921875
4071
+ ],
4072
+ [
4073
+ 5.0,
4074
+ 0.86328125,
4075
+ 0.86328125
4076
+ ],
4077
+ [
4078
+ 5.0,
4079
+ 0.958984375,
4080
+ 0.958984375
4081
+ ],
4082
+ [
4083
+ 0.5,
4084
+ 0.85546875,
4085
+ 0.85546875
4086
+ ],
4087
+ [
4088
+ 5.0,
4089
+ 0.625,
4090
+ 0.625
4091
+ ],
4092
+ [
4093
+ 2.5,
4094
+ 0.6640625,
4095
+ 0.6640625
4096
+ ],
4097
+ [
4098
+ 3.0,
4099
+ 0.5370000004768372,
4100
+ 0.5370000004768372
4101
+ ],
4102
+ [
4103
+ 5.0,
4104
+ 0.7578125,
4105
+ 0.7578125
4106
+ ],
4107
+ [
4108
+ 1.0,
4109
+ 0.81640625,
4110
+ 0.81640625
4111
+ ],
4112
+ [
4113
+ 5.0,
4114
+ 0.689453125,
4115
+ 0.689453125
4116
+ ],
4117
+ [
4118
+ 1.0,
4119
+ 0.775390625,
4120
+ 0.775390625
4121
+ ],
4122
+ [
4123
+ 2.5,
4124
+ 0.734375,
4125
+ 0.734375
4126
+ ],
4127
+ [
4128
+ 5.0,
4129
+ 0.650390625,
4130
+ 0.650390625
4131
+ ],
4132
+ [
4133
+ 5.0,
4134
+ 0.8203125,
4135
+ 0.8203125
4136
+ ],
4137
+ [
4138
+ 3.0,
4139
+ 0.736328125,
4140
+ 0.736328125
4141
+ ],
4142
+ [
4143
+ 1.0,
4144
+ 0.83984375,
4145
+ 0.83984375
4146
+ ],
4147
+ [
4148
+ 5.0,
4149
+ 0.77734375,
4150
+ 0.77734375
4151
+ ],
4152
+ [
4153
+ 0.5,
4154
+ 0.8359375,
4155
+ 0.8359375
4156
+ ],
4157
+ [
4158
+ 5.0,
4159
+ 0.8203125,
4160
+ 0.8203125
4161
+ ],
4162
+ [
4163
+ 5.0,
4164
+ 0.890625,
4165
+ 0.890625
4166
+ ],
4167
+ [
4168
+ 0.5,
4169
+ 0.703125,
4170
+ 0.703125
4171
+ ],
4172
+ [
4173
+ 0.5,
4174
+ 0.767578125,
4175
+ 0.767578125
4176
+ ],
4177
+ [
4178
+ 0.5,
4179
+ 0.919921875,
4180
+ 0.919921875
4181
+ ],
4182
+ [
4183
+ 5.0,
4184
+ 0.62109375,
4185
+ 0.62109375
4186
+ ],
4187
+ [
4188
+ 5.0,
4189
+ 0.7400000095367432,
4190
+ 0.7400000095367432
4191
+ ],
4192
+ [
4193
+ 0.5,
4194
+ 0.734375,
4195
+ 0.734375
4196
+ ],
4197
+ [
4198
+ 0.5,
4199
+ 0.751953125,
4200
+ 0.751953125
4201
+ ],
4202
+ [
4203
+ 5.0,
4204
+ 0.810546875,
4205
+ 0.810546875
4206
+ ],
4207
+ [
4208
+ 5.0,
4209
+ 0.9765625,
4210
+ 0.9765625
4211
+ ],
4212
+ [
4213
+ 5.0,
4214
+ 0.82421875,
4215
+ 0.82421875
4216
+ ],
4217
+ [
4218
+ 5.0,
4219
+ 0.9765625,
4220
+ 0.9765625
4221
+ ],
4222
+ [
4223
+ 5.0,
4224
+ 0.8984379768371582,
4225
+ 0.8984379768371582
4226
+ ],
4227
+ [
4228
+ 2.0,
4229
+ 0.775390625,
4230
+ 0.775390625
4231
+ ],
4232
+ [
4233
+ 5.0,
4234
+ 0.951171875,
4235
+ 0.951171875
4236
+ ],
4237
+ [
4238
+ 5.0,
4239
+ 0.771484375,
4240
+ 0.771484375
4241
+ ],
4242
+ [
4243
+ 5.0,
4244
+ 0.83203125,
4245
+ 0.83203125
4246
+ ],
4247
+ [
4248
+ 5.0,
4249
+ 0.95703125,
4250
+ 0.95703125
4251
+ ],
4252
+ [
4253
+ 5.0,
4254
+ 0.9765625,
4255
+ 0.9765625
4256
+ ],
4257
+ [
4258
+ 5.0,
4259
+ 0.734375,
4260
+ 0.734375
4261
+ ],
4262
+ [
4263
+ 3.0,
4264
+ 0.83984375,
4265
+ 0.83984375
4266
+ ],
4267
+ [
4268
+ 5.0,
4269
+ 0.78125,
4270
+ 0.78125
4271
+ ],
4272
+ [
4273
+ 5.0,
4274
+ 0.78125,
4275
+ 0.78125
4276
+ ],
4277
+ [
4278
+ 2.0,
4279
+ 0.923828125,
4280
+ 0.923828125
4281
+ ],
4282
+ [
4283
+ 5.0,
4284
+ 0.7409999966621399,
4285
+ 0.7409999966621399
4286
+ ],
4287
+ [
4288
+ 3.0,
4289
+ 0.947265625,
4290
+ 0.947265625
4291
+ ],
4292
+ [
4293
+ 5.0,
4294
+ 0.87890625,
4295
+ 0.87890625
4296
+ ],
4297
+ [
4298
+ 3.0,
4299
+ 0.6662688255310059,
4300
+ 0.6662695407867432
4301
+ ],
4302
+ [
4303
+ 5.0,
4304
+ 0.7421875,
4305
+ 0.7421875
4306
+ ],
4307
+ [
4308
+ 5.0,
4309
+ 0.83984375,
4310
+ 0.83984375
4311
+ ],
4312
+ [
4313
+ 5.0,
4314
+ 0.669921875,
4315
+ 0.669921875
4316
+ ],
4317
+ [
4318
+ 5.0,
4319
+ 0.6875,
4320
+ 0.6875
4321
+ ],
4322
+ [
4323
+ 5.0,
4324
+ 0.60546875,
4325
+ 0.60546875
4326
+ ],
4327
+ [
4328
+ 5.0,
4329
+ 0.47171834111213684,
4330
+ 0.47171875834465027
4331
+ ],
4332
+ [
4333
+ 5.0,
4334
+ 0.888671875,
4335
+ 0.888671875
4336
+ ],
4337
+ [
4338
+ 5.0,
4339
+ 0.703125,
4340
+ 0.703125
4341
+ ],
4342
+ [
4343
+ 5.0,
4344
+ 0.69921875,
4345
+ 0.69921875
4346
+ ],
4347
+ [
4348
+ 5.0,
4349
+ 0.9765625,
4350
+ 0.9765625
4351
+ ],
4352
+ [
4353
+ 5.0,
4354
+ 0.82421875,
4355
+ 0.82421875
4356
+ ],
4357
+ [
4358
+ 5.0,
4359
+ 0.76171875,
4360
+ 0.76171875
4361
+ ],
4362
+ [
4363
+ 3.0,
4364
+ 0.765625,
4365
+ 0.765625
4366
+ ],
4367
+ [
4368
+ 2.5,
4369
+ 0.689453125,
4370
+ 0.689453125
4371
+ ],
4372
+ [
4373
+ 5.0,
4374
+ 0.74609375,
4375
+ 0.74609375
4376
+ ],
4377
+ [
4378
+ 5.0,
4379
+ 0.78125,
4380
+ 0.78125
4381
+ ],
4382
+ [
4383
+ 5.0,
4384
+ 0.775390625,
4385
+ 0.775390625
4386
+ ],
4387
+ [
4388
+ 3.0,
4389
+ 0.87109375,
4390
+ 0.87109375
4391
+ ],
4392
+ [
4393
+ 5.0,
4394
+ 0.755859375,
4395
+ 0.755859375
4396
+ ],
4397
+ [
4398
+ 5.0,
4399
+ 0.701171875,
4400
+ 0.701171875
4401
+ ],
4402
+ [
4403
+ 5.0,
4404
+ 0.7734375,
4405
+ 0.7734375
4406
+ ],
4407
+ [
4408
+ 5.0,
4409
+ 0.5859375,
4410
+ 0.5859375
4411
+ ],
4412
+ [
4413
+ 0.5,
4414
+ 0.962890625,
4415
+ 0.962890625
4416
+ ],
4417
+ [
4418
+ 5.0,
4419
+ 0.85546875,
4420
+ 0.85546875
4421
+ ],
4422
+ [
4423
+ 2.5,
4424
+ 0.74609375,
4425
+ 0.74609375
4426
+ ],
4427
+ [
4428
+ 2.5,
4429
+ 0.7421875,
4430
+ 0.7421875
4431
+ ],
4432
+ [
4433
+ 5.0,
4434
+ 0.8984375,
4435
+ 0.8984375
4436
+ ],
4437
+ [
4438
+ 2.5,
4439
+ 0.8320310115814209,
4440
+ 0.8320310115814209
4441
+ ],
4442
+ [
4443
+ 3.0,
4444
+ 0.796875,
4445
+ 0.796875
4446
+ ],
4447
+ [
4448
+ 5.0,
4449
+ 0.62109375,
4450
+ 0.62109375
4451
+ ],
4452
+ [
4453
+ 5.0,
4454
+ 0.705078125,
4455
+ 0.705078125
4456
+ ],
4457
+ [
4458
+ 2.0,
4459
+ 0.775390625,
4460
+ 0.775390625
4461
+ ],
4462
+ [
4463
+ 5.0,
4464
+ 0.82421875,
4465
+ 0.82421875
4466
+ ],
4467
+ [
4468
+ 5.0,
4469
+ 0.72265625,
4470
+ 0.72265625
4471
+ ],
4472
+ [
4473
+ 5.0,
4474
+ 0.765625,
4475
+ 0.765625
4476
+ ],
4477
+ [
4478
+ 4.0,
4479
+ 0.8203125,
4480
+ 0.8203125
4481
+ ],
4482
+ [
4483
+ 5.0,
4484
+ 0.703125,
4485
+ 0.703125
4486
+ ],
4487
+ [
4488
+ 2.0,
4489
+ 0.94140625,
4490
+ 0.94140625
4491
+ ],
4492
+ [
4493
+ 5.0,
4494
+ 0.921875,
4495
+ 0.921875
4496
+ ],
4497
+ [
4498
+ 5.0,
4499
+ 0.89453125,
4500
+ 0.89453125
4501
+ ],
4502
+ [
4503
+ 5.0,
4504
+ 0.703125,
4505
+ 0.703125
4506
+ ],
4507
+ [
4508
+ 5.0,
4509
+ 0.859375,
4510
+ 0.859375
4511
+ ],
4512
+ [
4513
+ 5.0,
4514
+ 0.705078125,
4515
+ 0.705078125
4516
+ ],
4517
+ [
4518
+ 5.0,
4519
+ 0.80078125,
4520
+ 0.80078125
4521
+ ],
4522
+ [
4523
+ 5.0,
4524
+ 0.974609375,
4525
+ 0.974609375
4526
+ ],
4527
+ [
4528
+ 5.0,
4529
+ 0.79296875,
4530
+ 0.79296875
4531
+ ],
4532
+ [
4533
+ 5.0,
4534
+ 0.8999999761581421,
4535
+ 0.8999999761581421
4536
+ ],
4537
+ [
4538
+ 2.141414165496826,
4539
+ 0.765999972820282,
4540
+ 0.765999972820282
4541
+ ],
4542
+ [
4543
+ 5.0,
4544
+ 0.6640625,
4545
+ 0.6640625
4546
+ ],
4547
+ [
4548
+ 5.0,
4549
+ 0.751953125,
4550
+ 0.751953125
4551
+ ],
4552
+ [
4553
+ 5.0,
4554
+ 0.703125,
4555
+ 0.703125
4556
+ ],
4557
+ [
4558
+ 5.0,
4559
+ 0.85546875,
4560
+ 0.85546875
4561
+ ],
4562
+ [
4563
+ 3.0,
4564
+ 0.947265625,
4565
+ 0.947265625
4566
+ ],
4567
+ [
4568
+ 5.0,
4569
+ 0.69921875,
4570
+ 0.69921875
4571
+ ],
4572
+ [
4573
+ 2.0,
4574
+ 0.968999981880188,
4575
+ 0.968999981880188
4576
+ ],
4577
+ [
4578
+ 3.0,
4579
+ 0.8359375,
4580
+ 0.8359375
4581
+ ],
4582
+ [
4583
+ 5.0,
4584
+ 0.8203125,
4585
+ 0.8203125
4586
+ ],
4587
+ [
4588
+ 2.5,
4589
+ 0.6640625,
4590
+ 0.6640625
4591
+ ],
4592
+ [
4593
+ 2.5,
4594
+ 0.521484375,
4595
+ 0.521484375
4596
+ ],
4597
+ [
4598
+ 1.0,
4599
+ 0.8849999904632568,
4600
+ 0.8849999904632568
4601
+ ],
4602
+ [
4603
+ 3.0,
4604
+ 0.8500000238418579,
4605
+ 0.8500000238418579
4606
+ ],
4607
+ [
4608
+ 2.5,
4609
+ 0.703125,
4610
+ 0.703125
4611
+ ],
4612
+ [
4613
+ 1.0,
4614
+ 0.82421875,
4615
+ 0.82421875
4616
+ ],
4617
+ [
4618
+ 5.0,
4619
+ 0.6640625,
4620
+ 0.6640625
4621
+ ],
4622
+ [
4623
+ 5.0,
4624
+ 0.9765625,
4625
+ 0.9765625
4626
+ ],
4627
+ [
4628
+ 5.0,
4629
+ 0.974609375,
4630
+ 0.974609375
4631
+ ],
4632
+ [
4633
+ 3.0,
4634
+ 0.76953125,
4635
+ 0.76953125
4636
+ ],
4637
+ [
4638
+ 2.0,
4639
+ 0.8828125,
4640
+ 0.8828125
4641
+ ],
4642
+ [
4643
+ 3.0,
4644
+ 0.861328125,
4645
+ 0.861328125
4646
+ ],
4647
+ [
4648
+ 3.0,
4649
+ 0.857421875,
4650
+ 0.857421875
4651
+ ],
4652
+ [
4653
+ 2.0,
4654
+ 0.91015625,
4655
+ 0.91015625
4656
+ ],
4657
+ [
4658
+ 4.0,
4659
+ 0.8050000071525574,
4660
+ 0.8050000071525574
4661
+ ],
4662
+ [
4663
+ 5.0,
4664
+ 0.814453125,
4665
+ 0.814453125
4666
+ ],
4667
+ [
4668
+ 2.0,
4669
+ 0.61328125,
4670
+ 0.61328125
4671
+ ],
4672
+ [
4673
+ 5.0,
4674
+ 0.9765625,
4675
+ 0.9765625
4676
+ ],
4677
+ [
4678
+ 5.0,
4679
+ 0.92578125,
4680
+ 0.92578125
4681
+ ],
4682
+ [
4683
+ 5.0,
4684
+ 0.75,
4685
+ 0.75
4686
+ ],
4687
+ [
4688
+ 5.0,
4689
+ 0.5859375,
4690
+ 0.5859375
4691
+ ],
4692
+ [
4693
+ 5.0,
4694
+ 0.83984375,
4695
+ 0.83984375
4696
+ ],
4697
+ [
4698
+ 5.0,
4699
+ 0.921875,
4700
+ 0.921875
4701
+ ],
4702
+ [
4703
+ 3.0,
4704
+ 0.9765625,
4705
+ 0.9765625
4706
+ ],
4707
+ [
4708
+ 1.0,
4709
+ 0.9765625,
4710
+ 0.9765625
4711
+ ],
4712
+ [
4713
+ 2.5,
4714
+ 0.703125,
4715
+ 0.703125
4716
+ ],
4717
+ [
4718
+ 5.0,
4719
+ 0.859375,
4720
+ 0.859375
4721
+ ],
4722
+ [
4723
+ 2.0,
4724
+ 0.703125,
4725
+ 0.703125
4726
+ ],
4727
+ [
4728
+ 1.0,
4729
+ 0.9765625,
4730
+ 0.9765625
4731
+ ],
4732
+ [
4733
+ 5.0,
4734
+ 0.771484375,
4735
+ 0.771484375
4736
+ ],
4737
+ [
4738
+ 5.0,
4739
+ 0.798828125,
4740
+ 0.798828125
4741
+ ],
4742
+ [
4743
+ 5.0,
4744
+ 0.72265625,
4745
+ 0.72265625
4746
+ ],
4747
+ [
4748
+ 2.487309694290161,
4749
+ 0.9765625,
4750
+ 0.9765625
4751
+ ],
4752
+ [
4753
+ 1.0,
4754
+ 0.7734375,
4755
+ 0.7734375
4756
+ ],
4757
+ [
4758
+ 5.0,
4759
+ 0.943359375,
4760
+ 0.943359375
4761
+ ],
4762
+ [
4763
+ 3.0,
4764
+ 0.8730000257492065,
4765
+ 0.8730000257492065
4766
+ ],
4767
+ [
4768
+ 1.0,
4769
+ 0.833984375,
4770
+ 0.833984375
4771
+ ],
4772
+ [
4773
+ 1.0,
4774
+ 0.87109375,
4775
+ 0.87109375
4776
+ ],
4777
+ [
4778
+ 1.0,
4779
+ 0.892578125,
4780
+ 0.892578125
4781
+ ],
4782
+ [
4783
+ 3.0,
4784
+ 0.392578125,
4785
+ 0.392578125
4786
+ ],
4787
+ [
4788
+ 1.0,
4789
+ 0.84765625,
4790
+ 0.84765625
4791
+ ],
4792
+ [
4793
+ 3.0,
4794
+ 0.67578125,
4795
+ 0.67578125
4796
+ ],
4797
+ [
4798
+ 3.0,
4799
+ 0.6980000138282776,
4800
+ 0.6980000138282776
4801
+ ],
4802
+ [
4803
+ 5.0,
4804
+ 0.7739999890327454,
4805
+ 0.7739999890327454
4806
+ ],
4807
+ [
4808
+ 5.0,
4809
+ 0.693359375,
4810
+ 0.693359375
4811
+ ],
4812
+ [
4813
+ 5.0,
4814
+ 0.75,
4815
+ 0.75
4816
+ ],
4817
+ [
4818
+ 5.0,
4819
+ 0.71875,
4820
+ 0.71875
4821
+ ],
4822
+ [
4823
+ 5.0,
4824
+ 0.8515625,
4825
+ 0.8515625
4826
+ ],
4827
+ [
4828
+ 1.5,
4829
+ 0.9765625,
4830
+ 0.9765625
4831
+ ],
4832
+ [
4833
+ 3.0,
4834
+ 0.7739999890327454,
4835
+ 0.7739999890327454
4836
+ ],
4837
+ [
4838
+ 5.0,
4839
+ 0.8500000238418579,
4840
+ 0.8500000238418579
4841
+ ],
4842
+ [
4843
+ 1.0,
4844
+ 0.9765625,
4845
+ 0.9765625
4846
+ ],
4847
+ [
4848
+ 5.0,
4849
+ 0.609375,
4850
+ 0.609375
4851
+ ],
4852
+ [
4853
+ 3.0,
4854
+ 0.7421875,
4855
+ 0.7421875
4856
+ ],
4857
+ [
4858
+ 5.0,
4859
+ 0.775390625,
4860
+ 0.775390625
4861
+ ],
4862
+ [
4863
+ 3.0,
4864
+ 0.6980000138282776,
4865
+ 0.6980000138282776
4866
+ ],
4867
+ [
4868
+ 5.0,
4869
+ 0.7421875,
4870
+ 0.7421875
4871
+ ],
4872
+ [
4873
+ 5.0,
4874
+ 0.7421875,
4875
+ 0.7421875
4876
+ ],
4877
+ [
4878
+ 1.0,
4879
+ 0.87109375,
4880
+ 0.87109375
4881
+ ],
4882
+ [
4883
+ 5.0,
4884
+ 0.7421875,
4885
+ 0.7421875
4886
+ ],
4887
+ [
4888
+ 3.0,
4889
+ 0.7409999966621399,
4890
+ 0.7409999966621399
4891
+ ],
4892
+ [
4893
+ 1.0,
4894
+ 0.77734375,
4895
+ 0.77734375
4896
+ ],
4897
+ [
4898
+ 5.0,
4899
+ 0.8460000157356262,
4900
+ 0.8460000157356262
4901
+ ],
4902
+ [
4903
+ 1.0,
4904
+ 0.80859375,
4905
+ 0.80859375
4906
+ ],
4907
+ [
4908
+ 1.0,
4909
+ 0.923828125,
4910
+ 0.923828125
4911
+ ],
4912
+ [
4913
+ 2.0,
4914
+ 0.703125,
4915
+ 0.703125
4916
+ ],
4917
+ [
4918
+ 1.0,
4919
+ 0.76171875,
4920
+ 0.76171875
4921
+ ],
4922
+ [
4923
+ 1.0,
4924
+ 0.9140625,
4925
+ 0.9140625
4926
+ ],
4927
+ [
4928
+ 1.0,
4929
+ 0.90625,
4930
+ 0.90625
4931
+ ],
4932
+ [
4933
+ 5.0,
4934
+ 0.6800000071525574,
4935
+ 0.6800000071525574
4936
+ ],
4937
+ [
4938
+ 3.0,
4939
+ 0.85546875,
4940
+ 0.85546875
4941
+ ],
4942
+ [
4943
+ 5.0,
4944
+ 0.9765625,
4945
+ 0.9765625
4946
+ ],
4947
+ [
4948
+ 5.0,
4949
+ 0.8203125,
4950
+ 0.8203125
4951
+ ],
4952
+ [
4953
+ 5.0,
4954
+ 0.703125,
4955
+ 0.703125
4956
+ ],
4957
+ [
4958
+ 5.0,
4959
+ 0.64453125,
4960
+ 0.64453125
4961
+ ],
4962
+ [
4963
+ 2.5,
4964
+ 0.8945310115814209,
4965
+ 0.8945310115814209
4966
+ ],
4967
+ [
4968
+ 1.0,
4969
+ 0.6640625,
4970
+ 0.6640625
4971
+ ],
4972
+ [
4973
+ 3.0,
4974
+ 0.72265625,
4975
+ 0.72265625
4976
+ ],
4977
+ [
4978
+ 1.0,
4979
+ 0.7890625,
4980
+ 0.7890625
4981
+ ],
4982
+ [
4983
+ 5.0,
4984
+ 0.6980000138282776,
4985
+ 0.6980000138282776
4986
+ ],
4987
+ [
4988
+ 3.0,
4989
+ 0.861328125,
4990
+ 0.861328125
4991
+ ],
4992
+ [
4993
+ 3.0,
4994
+ 0.8809999823570251,
4995
+ 0.8809999823570251
4996
+ ],
4997
+ [
4998
+ 0.5,
4999
+ 0.84375,
5000
+ 0.84375
5001
+ ],
5002
+ [
5003
+ 3.0,
5004
+ 0.48828125,
5005
+ 0.48828125
5006
+ ],
5007
+ [
5008
+ 1.0,
5009
+ 0.744140625,
5010
+ 0.744140625
5011
+ ],
5012
+ [
5013
+ 1.0,
5014
+ 0.77734375,
5015
+ 0.77734375
5016
+ ],
5017
+ [
5018
+ 3.0,
5019
+ 0.68359375,
5020
+ 0.68359375
5021
+ ],
5022
+ [
5023
+ 1.0,
5024
+ 0.75,
5025
+ 0.75
5026
+ ],
5027
+ [
5028
+ 5.0,
5029
+ 0.8500000238418579,
5030
+ 0.8500000238418579
5031
+ ],
5032
+ [
5033
+ 2.0,
5034
+ 0.9765625,
5035
+ 0.9765625
5036
+ ],
5037
+ [
5038
+ 2.5,
5039
+ 0.9765625,
5040
+ 0.9765625
5041
+ ],
5042
+ [
5043
+ 3.0,
5044
+ 0.921875,
5045
+ 0.921875
5046
+ ],
5047
+ [
5048
+ 5.0,
5049
+ 0.7400000095367432,
5050
+ 0.7400000095367432
5051
+ ],
5052
+ [
5053
+ 5.0,
5054
+ 0.677734375,
5055
+ 0.677734375
5056
+ ],
5057
+ [
5058
+ 4.0,
5059
+ 0.888671875,
5060
+ 0.888671875
5061
+ ],
5062
+ [
5063
+ 1.0,
5064
+ 0.69921875,
5065
+ 0.69921875
5066
+ ],
5067
+ [
5068
+ 5.0,
5069
+ 0.630859375,
5070
+ 0.630859375
5071
+ ],
5072
+ [
5073
+ 5.0,
5074
+ 0.76171875,
5075
+ 0.76171875
5076
+ ],
5077
+ [
5078
+ 2.0,
5079
+ 0.9765625,
5080
+ 0.9765625
5081
+ ],
5082
+ [
5083
+ 5.0,
5084
+ 0.943359375,
5085
+ 0.943359375
5086
+ ],
5087
+ [
5088
+ 2.5,
5089
+ 0.7421879768371582,
5090
+ 0.7421879768371582
5091
+ ],
5092
+ [
5093
+ 1.0,
5094
+ 0.76171875,
5095
+ 0.76171875
5096
+ ],
5097
+ [
5098
+ 3.0,
5099
+ 0.939453125,
5100
+ 0.939453125
5101
+ ],
5102
+ [
5103
+ 2.1940298080444336,
5104
+ 0.71484375,
5105
+ 0.71484375
5106
+ ],
5107
+ [
5108
+ 5.0,
5109
+ 0.85546875,
5110
+ 0.85546875
5111
+ ],
5112
+ [
5113
+ 4.0,
5114
+ 0.767578125,
5115
+ 0.767578125
5116
+ ],
5117
+ [
5118
+ 1.0,
5119
+ 0.77734375,
5120
+ 0.77734375
5121
+ ],
5122
+ [
5123
+ 2.5,
5124
+ 0.7714840173721313,
5125
+ 0.7714840173721313
5126
+ ],
5127
+ [
5128
+ 2.4858756065368652,
5129
+ 0.7578125,
5130
+ 0.7578125
5131
+ ],
5132
+ [
5133
+ 3.0,
5134
+ 0.78125,
5135
+ 0.78125
5136
+ ],
5137
+ [
5138
+ 5.0,
5139
+ 0.8007810115814209,
5140
+ 0.8007810115814209
5141
+ ],
5142
+ [
5143
+ 1.0,
5144
+ 0.681640625,
5145
+ 0.681640625
5146
+ ],
5147
+ [
5148
+ 5.0,
5149
+ 0.845703125,
5150
+ 0.845703125
5151
+ ],
5152
+ [
5153
+ 2.5,
5154
+ 0.796875,
5155
+ 0.796875
5156
+ ],
5157
+ [
5158
+ 5.0,
5159
+ 0.703125,
5160
+ 0.703125
5161
+ ],
5162
+ [
5163
+ 5.0,
5164
+ 0.728515625,
5165
+ 0.728515625
5166
+ ],
5167
+ [
5168
+ 2.999999761581421,
5169
+ 0.673828125,
5170
+ 0.673828125
5171
+ ],
5172
+ [
5173
+ 3.0,
5174
+ 0.6640625,
5175
+ 0.6640625
5176
+ ],
5177
+ [
5178
+ 5.0,
5179
+ 0.775390625,
5180
+ 0.775390625
5181
+ ],
5182
+ [
5183
+ 2.5,
5184
+ 0.8164060115814209,
5185
+ 0.8164060115814209
5186
+ ],
5187
+ [
5188
+ 3.0,
5189
+ 0.9765625,
5190
+ 0.9765625
5191
+ ],
5192
+ [
5193
+ 2.0,
5194
+ 0.810546875,
5195
+ 0.810546875
5196
+ ],
5197
+ [
5198
+ 4.0,
5199
+ 0.9765625,
5200
+ 0.9765625
5201
+ ],
5202
+ [
5203
+ 5.0,
5204
+ 0.7148439884185791,
5205
+ 0.7148439884185791
5206
+ ],
5207
+ [
5208
+ 2.5,
5209
+ 0.7421879768371582,
5210
+ 0.7421879768371582
5211
+ ],
5212
+ [
5213
+ 5.0,
5214
+ 0.939453125,
5215
+ 0.939453125
5216
+ ],
5217
+ [
5218
+ 1.25,
5219
+ 0.8886719942092896,
5220
+ 0.8886719942092896
5221
+ ],
5222
+ [
5223
+ 3.0,
5224
+ 0.78515625,
5225
+ 0.78515625
5226
+ ],
5227
+ [
5228
+ 5.0,
5229
+ 0.78125,
5230
+ 0.78125
5231
+ ],
5232
+ [
5233
+ 5.0,
5234
+ 0.703125,
5235
+ 0.703125
5236
+ ],
5237
+ [
5238
+ 0.8999999761581421,
5239
+ 0.703125,
5240
+ 0.703125
5241
+ ],
5242
+ [
5243
+ 2.5,
5244
+ 0.8632810115814209,
5245
+ 0.8632810115814209
5246
+ ],
5247
+ [
5248
+ 2.5,
5249
+ 0.6367189884185791,
5250
+ 0.6367189884185791
5251
+ ],
5252
+ [
5253
+ 3.0,
5254
+ 0.7421875,
5255
+ 0.7421875
5256
+ ],
5257
+ [
5258
+ 2.5,
5259
+ 0.8476560115814209,
5260
+ 0.8476560115814209
5261
+ ],
5262
+ [
5263
+ 1.25,
5264
+ 0.8125,
5265
+ 0.8125
5266
+ ],
5267
+ [
5268
+ 3.0,
5269
+ 0.78125,
5270
+ 0.78125
5271
+ ],
5272
+ [
5273
+ 5.0,
5274
+ 0.880859375,
5275
+ 0.880859375
5276
+ ],
5277
+ [
5278
+ 2.5,
5279
+ 0.859375,
5280
+ 0.859375
5281
+ ],
5282
+ [
5283
+ 2.5,
5284
+ 0.8417969942092896,
5285
+ 0.8417969942092896
5286
+ ],
5287
+ [
5288
+ 5.0,
5289
+ 0.67578125,
5290
+ 0.67578125
5291
+ ],
5292
+ [
5293
+ 3.75,
5294
+ 0.921875,
5295
+ 0.921875
5296
+ ],
5297
+ [
5298
+ 3.0,
5299
+ 0.625,
5300
+ 0.625
5301
+ ],
5302
+ [
5303
+ 1.25,
5304
+ 0.875,
5305
+ 0.875
5306
+ ],
5307
+ [
5308
+ 2.0,
5309
+ 0.703125,
5310
+ 0.703125
5311
+ ],
5312
+ [
5313
+ 5.0,
5314
+ 0.8125,
5315
+ 0.8125
5316
+ ],
5317
+ [
5318
+ 1.25,
5319
+ 0.8925780057907104,
5320
+ 0.8925780057907104
5321
+ ],
5322
+ [
5323
+ 1.5,
5324
+ 0.9765625,
5325
+ 0.9765625
5326
+ ],
5327
+ [
5328
+ 2.0,
5329
+ 0.7832030057907104,
5330
+ 0.7832030057907104
5331
+ ],
5332
+ [
5333
+ 5.0,
5334
+ 0.78125,
5335
+ 0.78125
5336
+ ],
5337
+ [
5338
+ 3.0,
5339
+ 0.703125,
5340
+ 0.703125
5341
+ ],
5342
+ [
5343
+ 3.75,
5344
+ 0.8242189884185791,
5345
+ 0.8242189884185791
5346
+ ],
5347
+ [
5348
+ 2.5,
5349
+ 0.78125,
5350
+ 0.78125
5351
+ ],
5352
+ [
5353
+ 1.25,
5354
+ 0.75,
5355
+ 0.75
5356
+ ],
5357
+ [
5358
+ 2.5,
5359
+ 0.8144530057907104,
5360
+ 0.8144530057907104
5361
+ ],
5362
+ [
5363
+ 5.0,
5364
+ 0.677734375,
5365
+ 0.677734375
5366
+ ],
5367
+ [
5368
+ 5.0,
5369
+ 0.740234375,
5370
+ 0.740234375
5371
+ ],
5372
+ [
5373
+ 3.0,
5374
+ 0.8046875,
5375
+ 0.8046875
5376
+ ],
5377
+ [
5378
+ 5.0,
5379
+ 0.7421875,
5380
+ 0.7421875
5381
+ ],
5382
+ [
5383
+ 5.0,
5384
+ 0.7421879768371582,
5385
+ 0.7421879768371582
5386
+ ],
5387
+ [
5388
+ 5.0,
5389
+ 0.80859375,
5390
+ 0.80859375
5391
+ ],
5392
+ [
5393
+ 1.5,
5394
+ 0.87890625,
5395
+ 0.87890625
5396
+ ]
5397
+ ]
5398
+ }
PanCancerSeg-Specialized-weights/Dataset102_Kidney/nnUNetTrainerWandb2000__nnUNetResEncUNetMPlans__3d_fullres/fold_0/checkpoint_best.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5a1c9e2894160d50dfa0f8c0ac0a88198897973f642c0cbeb33e935457fd9d8c
3
+ size 819774211
PanCancerSeg-Specialized-weights/Dataset102_Kidney/nnUNetTrainerWandb2000__nnUNetResEncUNetMPlans__3d_fullres/plans.json ADDED
@@ -0,0 +1,532 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "dataset_name": "Dataset102_Kidney",
3
+ "plans_name": "nnUNetResEncUNetMPlans",
4
+ "original_median_spacing_after_transp": [
5
+ 3.0,
6
+ 0.78125,
7
+ 0.78125
8
+ ],
9
+ "original_median_shape_after_transp": [
10
+ 108,
11
+ 512,
12
+ 512
13
+ ],
14
+ "image_reader_writer": "SimpleITKIO",
15
+ "transpose_forward": [
16
+ 0,
17
+ 1,
18
+ 2
19
+ ],
20
+ "transpose_backward": [
21
+ 0,
22
+ 1,
23
+ 2
24
+ ],
25
+ "configurations": {
26
+ "2d": {
27
+ "data_identifier": "nnUNetPlans_2d",
28
+ "preprocessor_name": "DefaultPreprocessor",
29
+ "batch_size": 13,
30
+ "patch_size": [
31
+ 512,
32
+ 512
33
+ ],
34
+ "median_image_size_in_voxels": [
35
+ 512.0,
36
+ 512.0
37
+ ],
38
+ "spacing": [
39
+ 0.78125,
40
+ 0.78125
41
+ ],
42
+ "normalization_schemes": [
43
+ "CTNormalization"
44
+ ],
45
+ "use_mask_for_norm": [
46
+ false
47
+ ],
48
+ "resampling_fn_data": "resample_data_or_seg_to_shape",
49
+ "resampling_fn_seg": "resample_data_or_seg_to_shape",
50
+ "resampling_fn_data_kwargs": {
51
+ "is_seg": false,
52
+ "order": 3,
53
+ "order_z": 0,
54
+ "force_separate_z": null
55
+ },
56
+ "resampling_fn_seg_kwargs": {
57
+ "is_seg": true,
58
+ "order": 1,
59
+ "order_z": 0,
60
+ "force_separate_z": null
61
+ },
62
+ "resampling_fn_probabilities": "resample_data_or_seg_to_shape",
63
+ "resampling_fn_probabilities_kwargs": {
64
+ "is_seg": false,
65
+ "order": 1,
66
+ "order_z": 0,
67
+ "force_separate_z": null
68
+ },
69
+ "architecture": {
70
+ "network_class_name": "dynamic_network_architectures.architectures.unet.ResidualEncoderUNet",
71
+ "arch_kwargs": {
72
+ "n_stages": 8,
73
+ "features_per_stage": [
74
+ 32,
75
+ 64,
76
+ 128,
77
+ 256,
78
+ 512,
79
+ 512,
80
+ 512,
81
+ 512
82
+ ],
83
+ "conv_op": "torch.nn.modules.conv.Conv2d",
84
+ "kernel_sizes": [
85
+ [
86
+ 3,
87
+ 3
88
+ ],
89
+ [
90
+ 3,
91
+ 3
92
+ ],
93
+ [
94
+ 3,
95
+ 3
96
+ ],
97
+ [
98
+ 3,
99
+ 3
100
+ ],
101
+ [
102
+ 3,
103
+ 3
104
+ ],
105
+ [
106
+ 3,
107
+ 3
108
+ ],
109
+ [
110
+ 3,
111
+ 3
112
+ ],
113
+ [
114
+ 3,
115
+ 3
116
+ ]
117
+ ],
118
+ "strides": [
119
+ [
120
+ 1,
121
+ 1
122
+ ],
123
+ [
124
+ 2,
125
+ 2
126
+ ],
127
+ [
128
+ 2,
129
+ 2
130
+ ],
131
+ [
132
+ 2,
133
+ 2
134
+ ],
135
+ [
136
+ 2,
137
+ 2
138
+ ],
139
+ [
140
+ 2,
141
+ 2
142
+ ],
143
+ [
144
+ 2,
145
+ 2
146
+ ],
147
+ [
148
+ 2,
149
+ 2
150
+ ]
151
+ ],
152
+ "n_blocks_per_stage": [
153
+ 1,
154
+ 3,
155
+ 4,
156
+ 6,
157
+ 6,
158
+ 6,
159
+ 6,
160
+ 6
161
+ ],
162
+ "n_conv_per_stage_decoder": [
163
+ 1,
164
+ 1,
165
+ 1,
166
+ 1,
167
+ 1,
168
+ 1,
169
+ 1
170
+ ],
171
+ "conv_bias": true,
172
+ "norm_op": "torch.nn.modules.instancenorm.InstanceNorm2d",
173
+ "norm_op_kwargs": {
174
+ "eps": 1e-05,
175
+ "affine": true
176
+ },
177
+ "dropout_op": null,
178
+ "dropout_op_kwargs": null,
179
+ "nonlin": "torch.nn.LeakyReLU",
180
+ "nonlin_kwargs": {
181
+ "inplace": true
182
+ }
183
+ },
184
+ "_kw_requires_import": [
185
+ "conv_op",
186
+ "norm_op",
187
+ "dropout_op",
188
+ "nonlin"
189
+ ]
190
+ },
191
+ "batch_dice": true
192
+ },
193
+ "3d_lowres": {
194
+ "data_identifier": "nnUNetResEncUNetMPlans_3d_lowres",
195
+ "preprocessor_name": "DefaultPreprocessor",
196
+ "batch_size": 2,
197
+ "patch_size": [
198
+ 128,
199
+ 128,
200
+ 128
201
+ ],
202
+ "median_image_size_in_voxels": [
203
+ 176,
204
+ 211,
205
+ 211
206
+ ],
207
+ "spacing": [
208
+ 2.4272624711896627,
209
+ 1.8962988056169228,
210
+ 1.8962988056169228
211
+ ],
212
+ "normalization_schemes": [
213
+ "CTNormalization"
214
+ ],
215
+ "use_mask_for_norm": [
216
+ false
217
+ ],
218
+ "resampling_fn_data": "resample_data_or_seg_to_shape",
219
+ "resampling_fn_seg": "resample_data_or_seg_to_shape",
220
+ "resampling_fn_data_kwargs": {
221
+ "is_seg": false,
222
+ "order": 3,
223
+ "order_z": 0,
224
+ "force_separate_z": null
225
+ },
226
+ "resampling_fn_seg_kwargs": {
227
+ "is_seg": true,
228
+ "order": 1,
229
+ "order_z": 0,
230
+ "force_separate_z": null
231
+ },
232
+ "resampling_fn_probabilities": "resample_data_or_seg_to_shape",
233
+ "resampling_fn_probabilities_kwargs": {
234
+ "is_seg": false,
235
+ "order": 1,
236
+ "order_z": 0,
237
+ "force_separate_z": null
238
+ },
239
+ "architecture": {
240
+ "network_class_name": "dynamic_network_architectures.architectures.unet.ResidualEncoderUNet",
241
+ "arch_kwargs": {
242
+ "n_stages": 6,
243
+ "features_per_stage": [
244
+ 32,
245
+ 64,
246
+ 128,
247
+ 256,
248
+ 320,
249
+ 320
250
+ ],
251
+ "conv_op": "torch.nn.modules.conv.Conv3d",
252
+ "kernel_sizes": [
253
+ [
254
+ 3,
255
+ 3,
256
+ 3
257
+ ],
258
+ [
259
+ 3,
260
+ 3,
261
+ 3
262
+ ],
263
+ [
264
+ 3,
265
+ 3,
266
+ 3
267
+ ],
268
+ [
269
+ 3,
270
+ 3,
271
+ 3
272
+ ],
273
+ [
274
+ 3,
275
+ 3,
276
+ 3
277
+ ],
278
+ [
279
+ 3,
280
+ 3,
281
+ 3
282
+ ]
283
+ ],
284
+ "strides": [
285
+ [
286
+ 1,
287
+ 1,
288
+ 1
289
+ ],
290
+ [
291
+ 2,
292
+ 2,
293
+ 2
294
+ ],
295
+ [
296
+ 2,
297
+ 2,
298
+ 2
299
+ ],
300
+ [
301
+ 2,
302
+ 2,
303
+ 2
304
+ ],
305
+ [
306
+ 2,
307
+ 2,
308
+ 2
309
+ ],
310
+ [
311
+ 2,
312
+ 2,
313
+ 2
314
+ ]
315
+ ],
316
+ "n_blocks_per_stage": [
317
+ 1,
318
+ 3,
319
+ 4,
320
+ 6,
321
+ 6,
322
+ 6
323
+ ],
324
+ "n_conv_per_stage_decoder": [
325
+ 1,
326
+ 1,
327
+ 1,
328
+ 1,
329
+ 1
330
+ ],
331
+ "conv_bias": true,
332
+ "norm_op": "torch.nn.modules.instancenorm.InstanceNorm3d",
333
+ "norm_op_kwargs": {
334
+ "eps": 1e-05,
335
+ "affine": true
336
+ },
337
+ "dropout_op": null,
338
+ "dropout_op_kwargs": null,
339
+ "nonlin": "torch.nn.LeakyReLU",
340
+ "nonlin_kwargs": {
341
+ "inplace": true
342
+ }
343
+ },
344
+ "_kw_requires_import": [
345
+ "conv_op",
346
+ "norm_op",
347
+ "dropout_op",
348
+ "nonlin"
349
+ ]
350
+ },
351
+ "batch_dice": false,
352
+ "next_stage": "3d_cascade_fullres"
353
+ },
354
+ "3d_fullres": {
355
+ "data_identifier": "nnUNetPlans_3d_fullres",
356
+ "preprocessor_name": "DefaultPreprocessor",
357
+ "batch_size": 2,
358
+ "patch_size": [
359
+ 128,
360
+ 128,
361
+ 128
362
+ ],
363
+ "median_image_size_in_voxels": [
364
+ 426.0,
365
+ 512.0,
366
+ 512.0
367
+ ],
368
+ "spacing": [
369
+ 1.0,
370
+ 0.78125,
371
+ 0.78125
372
+ ],
373
+ "normalization_schemes": [
374
+ "CTNormalization"
375
+ ],
376
+ "use_mask_for_norm": [
377
+ false
378
+ ],
379
+ "resampling_fn_data": "resample_data_or_seg_to_shape",
380
+ "resampling_fn_seg": "resample_data_or_seg_to_shape",
381
+ "resampling_fn_data_kwargs": {
382
+ "is_seg": false,
383
+ "order": 3,
384
+ "order_z": 0,
385
+ "force_separate_z": null
386
+ },
387
+ "resampling_fn_seg_kwargs": {
388
+ "is_seg": true,
389
+ "order": 1,
390
+ "order_z": 0,
391
+ "force_separate_z": null
392
+ },
393
+ "resampling_fn_probabilities": "resample_data_or_seg_to_shape",
394
+ "resampling_fn_probabilities_kwargs": {
395
+ "is_seg": false,
396
+ "order": 1,
397
+ "order_z": 0,
398
+ "force_separate_z": null
399
+ },
400
+ "architecture": {
401
+ "network_class_name": "dynamic_network_architectures.architectures.unet.ResidualEncoderUNet",
402
+ "arch_kwargs": {
403
+ "n_stages": 6,
404
+ "features_per_stage": [
405
+ 32,
406
+ 64,
407
+ 128,
408
+ 256,
409
+ 320,
410
+ 320
411
+ ],
412
+ "conv_op": "torch.nn.modules.conv.Conv3d",
413
+ "kernel_sizes": [
414
+ [
415
+ 3,
416
+ 3,
417
+ 3
418
+ ],
419
+ [
420
+ 3,
421
+ 3,
422
+ 3
423
+ ],
424
+ [
425
+ 3,
426
+ 3,
427
+ 3
428
+ ],
429
+ [
430
+ 3,
431
+ 3,
432
+ 3
433
+ ],
434
+ [
435
+ 3,
436
+ 3,
437
+ 3
438
+ ],
439
+ [
440
+ 3,
441
+ 3,
442
+ 3
443
+ ]
444
+ ],
445
+ "strides": [
446
+ [
447
+ 1,
448
+ 1,
449
+ 1
450
+ ],
451
+ [
452
+ 2,
453
+ 2,
454
+ 2
455
+ ],
456
+ [
457
+ 2,
458
+ 2,
459
+ 2
460
+ ],
461
+ [
462
+ 2,
463
+ 2,
464
+ 2
465
+ ],
466
+ [
467
+ 2,
468
+ 2,
469
+ 2
470
+ ],
471
+ [
472
+ 2,
473
+ 2,
474
+ 2
475
+ ]
476
+ ],
477
+ "n_blocks_per_stage": [
478
+ 1,
479
+ 3,
480
+ 4,
481
+ 6,
482
+ 6,
483
+ 6
484
+ ],
485
+ "n_conv_per_stage_decoder": [
486
+ 1,
487
+ 1,
488
+ 1,
489
+ 1,
490
+ 1
491
+ ],
492
+ "conv_bias": true,
493
+ "norm_op": "torch.nn.modules.instancenorm.InstanceNorm3d",
494
+ "norm_op_kwargs": {
495
+ "eps": 1e-05,
496
+ "affine": true
497
+ },
498
+ "dropout_op": null,
499
+ "dropout_op_kwargs": null,
500
+ "nonlin": "torch.nn.LeakyReLU",
501
+ "nonlin_kwargs": {
502
+ "inplace": true
503
+ }
504
+ },
505
+ "_kw_requires_import": [
506
+ "conv_op",
507
+ "norm_op",
508
+ "dropout_op",
509
+ "nonlin"
510
+ ]
511
+ },
512
+ "batch_dice": true
513
+ },
514
+ "3d_cascade_fullres": {
515
+ "inherits_from": "3d_fullres",
516
+ "previous_stage": "3d_lowres"
517
+ }
518
+ },
519
+ "experiment_planner_used": "nnUNetPlannerResEncM",
520
+ "label_manager": "LabelManager",
521
+ "foreground_intensity_properties_per_channel": {
522
+ "0": {
523
+ "max": 3071.0,
524
+ "mean": 69.271484375,
525
+ "median": 64.0,
526
+ "min": -1021.0,
527
+ "percentile_00_5": -48.0,
528
+ "percentile_99_5": 260.0,
529
+ "std": 57.25662612915039
530
+ }
531
+ }
532
+ }
README.md CHANGED
@@ -1,13 +1,131 @@
1
  ---
2
- title: PanCancerSeg Kidney
3
- emoji: 👀
4
- colorFrom: red
5
- colorTo: purple
6
  sdk: gradio
7
- sdk_version: 6.16.0
8
- python_version: '3.12'
9
  app_file: app.py
10
  pinned: false
 
 
11
  ---
12
 
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: PanCancerSeg Specialist Inference
3
+ emoji: 🩻
4
+ colorFrom: blue
5
+ colorTo: indigo
6
  sdk: gradio
7
+ sdk_version: 6.12.0
 
8
  app_file: app.py
9
  pinned: false
10
+ license: apache-2.0
11
+ short_description: CT tumour segmentation for 4 cancer types
12
  ---
13
 
14
+ # PanCancerSeg Inference
15
+
16
+ Run one cancer-specific PanCancerSeg nnUNet model on a single CT NIfTI image and save a segmentation mask, slice PNG previews, and an MP4 overlay video.
17
+
18
+ > On Hugging Face Spaces the trained weights are downloaded automatically at first
19
+ > run from [`KS987/PanCancerSeg-Specialized-weights`](https://huggingface.co/KS987/PanCancerSeg-Specialized-weights).
20
+ > Inference is GPU-recommended; the free CPU tier may be slow or run out of memory on large volumes.
21
+
22
+ ## Model Weights
23
+
24
+ Download the trained nnUNet weights from Hugging Face: [KS987/PanCancerSeg-Specialized-weights](https://huggingface.co/KS987/PanCancerSeg-Specialized-weights)
25
+
26
+ ```bash
27
+ git lfs install
28
+ git clone https://huggingface.co/KS987/PanCancerSeg-Specialized-weights
29
+ ```
30
+
31
+ ## Setup
32
+
33
+ Create an environment and install the Python dependencies:
34
+
35
+ ```bash
36
+ pip install -r requirements.txt
37
+ ```
38
+
39
+ Download the trained nnUNet model weights to a local directory. Inference resampling can require about 64 GB RAM for large 3D volumes.
40
+
41
+ Expected model layout:
42
+
43
+ ```text
44
+ nnUNet_results/
45
+ |-- Dataset102_Kidney/
46
+ | `-- nnUNetTrainerWandb2000__nnUNetResEncUNetMPlans__3d_fullres/
47
+ | `-- fold_0/
48
+ | `-- checkpoint_best.pth
49
+ |-- Dataset103_Liver/
50
+ |-- Dataset104_Pancreas/
51
+ `-- Dataset105_Lung/
52
+ ```
53
+
54
+ ## Usage
55
+
56
+ Input images can be named either `case.nii.gz` or `case_0000.nii.gz`; the script handles both.
57
+
58
+ `--cancer_type` values are `kidney_cancer`, `liver_cancer`, `pancreatic_cancer`, and `lung_cancer`.
59
+
60
+ Kidney cancer:
61
+
62
+ ```bash
63
+ python predict.py --input /path/to/case.nii.gz --cancer_type kidney_cancer --model_dir /path/to/nnUNet_results --output_dir ./output
64
+ ```
65
+
66
+ Liver cancer:
67
+
68
+ ```bash
69
+ python predict.py --input /path/to/case.nii.gz --cancer_type liver_cancer --model_dir /path/to/nnUNet_results --output_dir ./output
70
+ ```
71
+
72
+ Pancreatic cancer:
73
+
74
+ ```bash
75
+ python predict.py --input /path/to/case.nii.gz --cancer_type pancreatic_cancer --model_dir /path/to/nnUNet_results --output_dir ./output
76
+ ```
77
+
78
+ Lung cancer:
79
+
80
+ ```bash
81
+ python predict.py --input /path/to/case.nii.gz --cancer_type lung_cancer --model_dir /path/to/nnUNet_results --output_dir ./output
82
+ ```
83
+
84
+ Use CPU only when CUDA is unavailable:
85
+
86
+ ```bash
87
+ python predict.py --input /path/to/case.nii.gz --cancer_type kidney_cancer --model_dir /path/to/nnUNet_results --output_dir ./output --device cpu
88
+ ```
89
+
90
+ ## Output Files
91
+
92
+ The output directory contains:
93
+
94
+ - `{case_id}_seg.nii.gz`: predicted segmentation mask
95
+ - `{case_id}_slice_centroid.png`: centroid slice preview
96
+ - `{case_id}_slice_max_area.png`: max predicted area slice preview
97
+ - `{case_id}_slice_extent25.png`: 25% through predicted z-extent preview
98
+ - `{case_id}_slice_extent75.png`: 75% through predicted z-extent preview
99
+ - `{case_id}_overlay.mp4`: scroll-through overlay video
100
+
101
+ ## Supported Cancer Types
102
+
103
+ | `--cancer_type` | Dataset | Window level | Window width |
104
+ |---------------------------|---------|-------------:|-------------:|
105
+ | kidney_cancer | Dataset102_Kidney | 40 | 400 |
106
+ | liver_cancer | Dataset103_Liver | 40 | 400 |
107
+ | pancreatic_cancer | Dataset104_Pancreas | 40 | 400 |
108
+ | lung_cancer | Dataset105_Lung | -600 | 1500 |
109
+
110
+ ## Example Output
111
+
112
+ The `example/` folder contains sample output from running the kidney cancer model on a validation case (`FLARE23Ts_0005`), including slice PNGs, an overlay video, and the segmentation mask.
113
+
114
+ ## Troubleshooting
115
+
116
+ CUDA unavailable: run with `--device cpu` or install CUDA-enabled PyTorch.
117
+
118
+ Missing checkpoint: check that `--model_dir` points to the directory containing the `DatasetXXX_*` model folders and that `fold_0/checkpoint_best.pth` exists.
119
+
120
+ Missing custom trainer: make sure the cloned repository still has this layout:
121
+
122
+ ```text
123
+ PanCancerSeg-Inference/
124
+ |-- predict.py
125
+ `-- trainers/
126
+ `-- nnUNetTrainerWandb2000.py
127
+ ```
128
+
129
+ Do not move the `trainers/` directory out of the repository. `predict.py` automatically registers the trainer with nnUNet when inference starts.
130
+
131
+ MP4 video creation failed: the segmentation mask and PNG files may still have been created. Try running the command on another machine or ask technical support to install video support for OpenCV.
app.py ADDED
@@ -0,0 +1,377 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Gradio UI for PanCancerSeg single-case CT tumour segmentation."""
2
+
3
+ import shutil
4
+ import tempfile
5
+ from pathlib import Path
6
+
7
+ import gradio as gr
8
+
9
+ from predict import (
10
+ CANCER_CONFIGS,
11
+ install_custom_trainer,
12
+ resolve_case_id,
13
+ resolve_model_folder,
14
+ run_nnunet_prediction_single,
15
+ summarize_segmentation,
16
+ )
17
+ from visualize import generate_outputs
18
+
19
+ # ── Constants ──────────────────────────────────────────────────────────────────
20
+
21
+ CANCER_TYPE_CHOICES = {
22
+ "Kidney Cancer": "kidney_cancer",
23
+ "Liver Cancer": "liver_cancer",
24
+ "Pancreatic Cancer": "pancreatic_cancer",
25
+ "Lung Cancer": "lung_cancer",
26
+ }
27
+
28
+ DEFAULT_MODEL_DIR = str(Path(__file__).parent / "PanCancerSeg-Specialized-weights")
29
+ DEFAULT_DEVICE = "cuda"
30
+
31
+ # Hugging Face Hub repo that hosts the trained nnUNet weights. On Spaces (where the
32
+ # local weights folder is absent) we download them on first use.
33
+ MODEL_REPO_ID = "KS987/PanCancerSeg-Specialized-weights"
34
+
35
+ # Resolved once per process; subsequent inferences reuse it (no re-download).
36
+ _WEIGHTS_DIR: Path | None = None
37
+
38
+
39
+ def resolve_weights_dir() -> Path:
40
+ """Return a directory containing the DatasetXXX_* model folders.
41
+
42
+ Prefer a local checkout (fast local dev); otherwise download the weights
43
+ from the Hugging Face Hub once and cache the resolved path in-process so we
44
+ never hit the Hub again on later inferences.
45
+ """
46
+ global _WEIGHTS_DIR
47
+ if _WEIGHTS_DIR is not None:
48
+ return _WEIGHTS_DIR
49
+
50
+ local_dir = Path(DEFAULT_MODEL_DIR).expanduser().resolve()
51
+ if local_dir.exists() and any(local_dir.glob("Dataset*")):
52
+ _WEIGHTS_DIR = local_dir
53
+ return _WEIGHTS_DIR
54
+
55
+ from huggingface_hub import snapshot_download
56
+
57
+ downloaded = snapshot_download(
58
+ repo_id=MODEL_REPO_ID,
59
+ repo_type="model",
60
+ allow_patterns=["Dataset*/**"],
61
+ )
62
+ _WEIGHTS_DIR = Path(downloaded)
63
+ return _WEIGHTS_DIR
64
+
65
+
66
+ # ── ZeroGPU support ──────────────────────────────────────────────────────────
67
+ # On Hugging Face ZeroGPU Spaces the `spaces` package is available, and any GPU
68
+ # work must run inside a function decorated with `@spaces.GPU`. Locally (or on a
69
+ # dedicated GPU Space) the package is absent, so we fall back to a no-op so the
70
+ # same code keeps working everywhere.
71
+ try:
72
+ import spaces # type: ignore
73
+
74
+ _HAS_ZEROGPU = True
75
+ except ImportError:
76
+ spaces = None
77
+ _HAS_ZEROGPU = False
78
+
79
+
80
+ def gpu_task(duration: int = 180):
81
+ if _HAS_ZEROGPU:
82
+ return spaces.GPU(duration=duration)
83
+
84
+ def _identity(fn):
85
+ return fn
86
+
87
+ return _identity
88
+
89
+
90
+ @gpu_task(duration=180)
91
+ def run_gpu_segmentation(model_folder_str: str, input_file_str: str, output_file_str: str) -> None:
92
+ """Run nnUNet inference on GPU. Executed inside the ZeroGPU worker process.
93
+
94
+ Uses the single-case, no-multiprocessing path because ZeroGPU runs this in a
95
+ daemon process that is not allowed to spawn child processes.
96
+ """
97
+ # The custom trainer must be registered inside the GPU worker process so that
98
+ # nnUNet can discover it when initialising from the trained model folder.
99
+ install_custom_trainer()
100
+ run_nnunet_prediction_single(
101
+ model_folder=model_folder_str,
102
+ input_file=input_file_str,
103
+ output_file=output_file_str,
104
+ device="cuda",
105
+ )
106
+
107
+
108
+ _SAMPLE_DIR = Path(__file__).parent / "sample_input"
109
+ _CANCER_TYPE_TO_FOLDER = {
110
+ "Kidney Cancer": "kidney",
111
+ "Liver Cancer": "liver",
112
+ "Pancreatic Cancer": "pancreas",
113
+ "Lung Cancer": "lung",
114
+ }
115
+
116
+ def load_example(cancer_type_label: str, index: int) -> str:
117
+ """Return the index-th (1-based) example _0000.nii.gz for the given cancer type."""
118
+ folder = _SAMPLE_DIR / _CANCER_TYPE_TO_FOLDER[cancer_type_label]
119
+ files = sorted(folder.glob("*_0000.nii.gz"))
120
+ if len(files) < index:
121
+ raise gr.Error(f"Example {index} not found for {cancer_type_label} in {folder}")
122
+ return str(files[index - 1])
123
+
124
+
125
+ def count_examples(cancer_type_label: str) -> int:
126
+ """Number of bundled example CT volumes for a cancer type."""
127
+ folder = _SAMPLE_DIR / _CANCER_TYPE_TO_FOLDER[cancer_type_label]
128
+ if not folder.exists():
129
+ return 0
130
+ return len(sorted(folder.glob("*_0000.nii.gz")))
131
+
132
+
133
+ def available_cancer_labels(weights_dir) -> list:
134
+ """Cancer labels whose DatasetXXX folder is present under ``weights_dir``.
135
+
136
+ A single-cancer Space bundles exactly one DatasetXXX folder, so this returns
137
+ a single label and the UI locks to it. A full checkout with all four datasets
138
+ returns every label and the UI shows the selector.
139
+ """
140
+ weights_dir = Path(weights_dir)
141
+ found = [
142
+ label
143
+ for label, key in CANCER_TYPE_CHOICES.items()
144
+ if (weights_dir / CANCER_CONFIGS[key]["dataset_name"]).exists()
145
+ ]
146
+ return found or list(CANCER_TYPE_CHOICES.keys())
147
+
148
+
149
+ # ── Inference ──────────────────────────────────────────────────────────────────
150
+
151
+ def run_inference(
152
+ input_file,
153
+ cancer_type_label,
154
+ fps,
155
+ progress=gr.Progress(track_tqdm=True),
156
+ ):
157
+ if input_file is None:
158
+ raise gr.Error("Please upload a .nii.gz CT image first.")
159
+
160
+ input_path = Path(input_file)
161
+ if not input_path.name.endswith(".nii.gz"):
162
+ raise gr.Error(f"File must be .nii.gz format. Got: {input_path.name}")
163
+
164
+ progress(0.02, desc="Resolving model weights...")
165
+ try:
166
+ model_dir_path = resolve_weights_dir()
167
+ except Exception as e:
168
+ raise gr.Error(f"Failed to obtain model weights from '{MODEL_REPO_ID}': {e}")
169
+
170
+ cancer_key = CANCER_TYPE_CHOICES[cancer_type_label]
171
+ config = CANCER_CONFIGS[cancer_key]
172
+ case_id = resolve_case_id(input_path)
173
+
174
+ progress(0.10, desc="Loading model weights...")
175
+ model_folder = resolve_model_folder(model_dir_path, config["dataset_name"])
176
+
177
+ output_dir = Path(tempfile.mkdtemp(prefix="pancancerseg_out_"))
178
+
179
+ try:
180
+ with tempfile.TemporaryDirectory(prefix="pancancerseg_in_") as tmp:
181
+ tmp_path = Path(tmp)
182
+ tmp_input_dir = tmp_path / "input"
183
+ tmp_output_dir = tmp_path / "prediction"
184
+ tmp_input_dir.mkdir()
185
+ tmp_output_dir.mkdir()
186
+
187
+ nnunet_input = tmp_input_dir / f"{case_id}_0000.nii.gz"
188
+ try:
189
+ nnunet_input.symlink_to(input_path.resolve())
190
+ except (OSError, NotImplementedError):
191
+ shutil.copy2(input_path, nnunet_input)
192
+
193
+ raw_seg = tmp_output_dir / f"{case_id}.nii.gz"
194
+
195
+ progress(0.20, desc="Running nnUNet inference on GPU (this may take a few minutes)...")
196
+ run_gpu_segmentation(
197
+ str(model_folder),
198
+ str(nnunet_input),
199
+ str(raw_seg),
200
+ )
201
+
202
+ if not raw_seg.exists():
203
+ produced = [p.name for p in tmp_output_dir.glob("*.nii.gz")]
204
+ raise RuntimeError(
205
+ f"nnUNet did not produce the expected segmentation. Found: {produced}"
206
+ )
207
+
208
+ seg_path = output_dir / f"{case_id}_seg.nii.gz"
209
+ shutil.copy2(raw_seg, seg_path)
210
+
211
+ progress(0.80, desc="Generating slice images and overlay video...")
212
+ viz = generate_outputs(
213
+ image_path=input_path,
214
+ mask_path=seg_path,
215
+ output_dir=output_dir,
216
+ case_name=case_id,
217
+ cancer_type=config["display_name"],
218
+ wl=config["wl"],
219
+ ww=config["ww"],
220
+ color=config["color"],
221
+ alpha=0.5,
222
+ fps=int(fps),
223
+ )
224
+
225
+ progress(0.95, desc="Computing tumour volume...")
226
+ positive_voxels, tumor_volume_ml = summarize_segmentation(seg_path)
227
+
228
+ stats = (
229
+ f"Case ID : {case_id}\n"
230
+ f"Cancer type : {config['display_name']}\n"
231
+ f"Positive voxels: {positive_voxels:,}\n"
232
+ f"Tumour volume : {tumor_volume_ml:.3f} mL"
233
+ )
234
+
235
+ slices = viz["slices"]
236
+ video_path = viz["video"]
237
+ video_out = (
238
+ str(video_path)
239
+ if video_path.exists() and video_path.stat().st_size > 0
240
+ else None
241
+ )
242
+
243
+ progress(1.0, desc="Done!")
244
+ return (
245
+ stats,
246
+ str(seg_path),
247
+ str(slices.get("centroid")),
248
+ str(slices.get("max_area")),
249
+ str(slices.get("extent25")),
250
+ str(slices.get("extent75")),
251
+ video_out,
252
+ )
253
+
254
+ except Exception as e:
255
+ shutil.rmtree(output_dir, ignore_errors=True)
256
+ raise gr.Error(str(e))
257
+
258
+
259
+ # ── UI ─────────────────────────────────────────────────────────────────────────
260
+
261
+ def build_ui(available_labels=None):
262
+ labels = available_labels or list(CANCER_TYPE_CHOICES.keys())
263
+ single = len(labels) == 1
264
+ default_label = labels[0]
265
+
266
+ if single:
267
+ title = f"# PanCancerSeg — {default_label} CT Segmentation"
268
+ intro = (
269
+ f"Upload a `.nii.gz` CT image and click **Run Inference** to segment "
270
+ f"**{default_label.lower()}** and obtain a mask plus visualisations."
271
+ )
272
+ else:
273
+ title = "# PanCancerSeg — Specialist CT Tumour Segmentation"
274
+ intro = (
275
+ "Upload a `.nii.gz` CT image, select the cancer type, and click "
276
+ "**Run Inference** to obtain a segmentation mask and visualisations."
277
+ )
278
+
279
+ n_examples = count_examples(default_label) if single else 2
280
+
281
+ with gr.Blocks(title="PanCancerSeg Inference") as demo:
282
+ gr.Markdown(f"{title}\n{intro}")
283
+
284
+ with gr.Row():
285
+ # ── Left panel: inputs ─────────────────────────────────────────────
286
+ with gr.Column(scale=1, min_width=300):
287
+ input_file = gr.File(
288
+ label="CT Image (.nii.gz)",
289
+ file_types=[".gz"],
290
+ )
291
+ cancer_type = gr.Dropdown(
292
+ choices=labels,
293
+ value=default_label,
294
+ label="Cancer Type",
295
+ interactive=not single,
296
+ )
297
+ fps = gr.Slider(
298
+ minimum=1,
299
+ maximum=30,
300
+ value=10,
301
+ step=1,
302
+ label="Video FPS",
303
+ )
304
+ example_buttons = []
305
+ if n_examples > 0:
306
+ with gr.Row():
307
+ for i in range(1, n_examples + 1):
308
+ label = "Load Example" if n_examples == 1 else f"Load Example {i}"
309
+ example_buttons.append(gr.Button(label, size="lg"))
310
+ run_btn = gr.Button("Run Inference", variant="primary", size="lg")
311
+ video_out = gr.Video(label="Overlay Video")
312
+
313
+ # ── Right panel: outputs ───────────────────────────────────────────
314
+ with gr.Column(scale=2):
315
+ with gr.Row():
316
+ stats_box = gr.Textbox(
317
+ label="Inference Summary",
318
+ lines=4,
319
+ interactive=False,
320
+ )
321
+ seg_file = gr.File(label="Download Segmentation Mask (.nii.gz)")
322
+ with gr.Row():
323
+ img_centroid = gr.Image(label="Centroid Slice", type="filepath")
324
+ img_max_area = gr.Image(label="Max Area Slice", type="filepath")
325
+ with gr.Row():
326
+ img_ext25 = gr.Image(label="Extent 25% Slice", type="filepath")
327
+ img_ext75 = gr.Image(label="Extent 75% Slice", type="filepath")
328
+
329
+ for idx, btn in enumerate(example_buttons, start=1):
330
+ btn.click(
331
+ fn=(lambda i: lambda ct: load_example(ct, i))(idx),
332
+ inputs=[cancer_type],
333
+ outputs=[input_file],
334
+ )
335
+
336
+ run_btn.click(
337
+ fn=run_inference,
338
+ inputs=[input_file, cancer_type, fps],
339
+ outputs=[
340
+ stats_box,
341
+ seg_file,
342
+ img_centroid,
343
+ img_max_area,
344
+ img_ext25,
345
+ img_ext75,
346
+ video_out,
347
+ ],
348
+ )
349
+
350
+ return demo
351
+
352
+
353
+ if __name__ == "__main__":
354
+ import os
355
+
356
+ # Warm the weights cache at startup so the very first inference (and every
357
+ # later one) does not trigger a download. Failures are non-fatal: we fall
358
+ # back to lazy download on the first request.
359
+ labels = None
360
+ try:
361
+ weights_dir = resolve_weights_dir()
362
+ labels = available_cancer_labels(weights_dir)
363
+ print(f"[startup] available cancer models: {labels}")
364
+ except Exception as e:
365
+ print(f"[startup] weight pre-fetch skipped: {e}")
366
+
367
+ demo = build_ui(labels)
368
+ # Hugging Face Spaces expect the app on port 7860 (set via GRADIO_SERVER_PORT).
369
+ # Locally this falls back to 7860 unless overridden.
370
+ port = int(os.environ.get("GRADIO_SERVER_PORT", 7860))
371
+ demo.launch(
372
+ server_name="0.0.0.0",
373
+ server_port=port,
374
+ share=False,
375
+ theme=gr.themes.Soft(),
376
+ ssr_mode=False,
377
+ )
predict.py ADDED
@@ -0,0 +1,318 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Run single-case PanCancerSeg nnUNet CT inference and visualization."""
2
+
3
+ import argparse
4
+ import shutil
5
+ import tempfile
6
+ from pathlib import Path
7
+
8
+ import numpy as np
9
+ import SimpleITK as sitk
10
+ import torch
11
+
12
+ from visualize import generate_outputs
13
+
14
+
15
+ CANCER_CONFIGS = {
16
+ "kidney_cancer": {
17
+ "dataset_id": 102,
18
+ "dataset_name": "Dataset102_Kidney",
19
+ "display_name": "Kidney cancer",
20
+ "wl": 40,
21
+ "ww": 400,
22
+ "color": (255, 0, 0),
23
+ },
24
+ "liver_cancer": {
25
+ "dataset_id": 103,
26
+ "dataset_name": "Dataset103_Liver",
27
+ "display_name": "Liver cancer",
28
+ "wl": 40,
29
+ "ww": 400,
30
+ "color": (255, 0, 0),
31
+ },
32
+ "pancreatic_cancer": {
33
+ "dataset_id": 104,
34
+ "dataset_name": "Dataset104_Pancreas",
35
+ "display_name": "Pancreatic cancer",
36
+ "wl": 40,
37
+ "ww": 400,
38
+ "color": (255, 0, 0),
39
+ },
40
+ "lung_cancer": {
41
+ "dataset_id": 105,
42
+ "dataset_name": "Dataset105_Lung",
43
+ "display_name": "Lung cancer",
44
+ "wl": -600,
45
+ "ww": 1500,
46
+ "color": (255, 0, 0),
47
+ },
48
+ }
49
+
50
+ CANCER_TYPE_ALIASES = {
51
+ "kidney": "kidney_cancer",
52
+ "liver": "liver_cancer",
53
+ "pancreas": "pancreatic_cancer",
54
+ "lung": "lung_cancer",
55
+ }
56
+
57
+ TRAINER_NAME = "nnUNetTrainerWandb2000"
58
+ PLANS_NAME = "nnUNetResEncUNetMPlans"
59
+ CONFIGURATION = "3d_fullres"
60
+ CHECKPOINT_NAME = "checkpoint_best.pth"
61
+
62
+
63
+ def parse_args():
64
+ parser = argparse.ArgumentParser(
65
+ description="Run one PanCancerSeg cancer-specific nnUNet model on a single NIfTI image."
66
+ )
67
+ parser.add_argument("--input", required=True, help="Path to a single .nii.gz image")
68
+ parser.add_argument(
69
+ "--cancer_type",
70
+ required=True,
71
+ help=(
72
+ "Cancer-specific model to use. "
73
+ f"Canonical values: {', '.join(sorted(CANCER_CONFIGS))}. "
74
+ f"Legacy aliases still accepted: {', '.join(sorted(CANCER_TYPE_ALIASES))}."
75
+ ),
76
+ )
77
+ parser.add_argument(
78
+ "--model_dir",
79
+ required=True,
80
+ help="Path to nnUNet results directory containing DatasetXXX_* folders",
81
+ )
82
+ parser.add_argument("--output_dir", default="./output", help="Where to save results")
83
+ parser.add_argument("--fps", type=int, default=10, help="Video frames per second")
84
+ parser.add_argument("--device", choices=["cuda", "cpu"], default="cuda")
85
+ return parser.parse_args()
86
+
87
+
88
+ def main():
89
+ args = parse_args()
90
+ args.cancer_type = normalize_cancer_type(args.cancer_type)
91
+ input_path = Path(args.input).expanduser().resolve()
92
+ model_dir = Path(args.model_dir).expanduser().resolve()
93
+ output_dir = Path(args.output_dir).expanduser().resolve()
94
+
95
+ if not input_path.exists():
96
+ raise FileNotFoundError(f"Input image not found: {input_path}")
97
+ if input_path.name.startswith("._") or not input_path.name.endswith(".nii.gz"):
98
+ raise ValueError(f"Expected a .nii.gz image, got: {input_path.name}")
99
+ if not model_dir.exists():
100
+ raise FileNotFoundError(f"Model directory not found: {model_dir}")
101
+ if args.device == "cuda" and not torch.cuda.is_available():
102
+ raise RuntimeError(
103
+ "CUDA was requested but torch.cuda.is_available() is False. "
104
+ "Use --device cpu or install CUDA-enabled PyTorch."
105
+ )
106
+ if args.fps <= 0:
107
+ raise ValueError("--fps must be a positive integer")
108
+
109
+ output_dir.mkdir(parents=True, exist_ok=True)
110
+ config = CANCER_CONFIGS[args.cancer_type]
111
+ case_id = resolve_case_id(input_path)
112
+
113
+ install_custom_trainer()
114
+ model_folder = resolve_model_folder(model_dir, config["dataset_name"])
115
+
116
+ with tempfile.TemporaryDirectory(prefix="pancancerseg_") as tmp:
117
+ tmp_path = Path(tmp)
118
+ tmp_input_dir = tmp_path / "input"
119
+ tmp_output_dir = tmp_path / "prediction"
120
+ tmp_input_dir.mkdir()
121
+ tmp_output_dir.mkdir()
122
+
123
+ nnunet_input = tmp_input_dir / f"{case_id}_0000.nii.gz"
124
+ symlink_or_copy(input_path, nnunet_input)
125
+
126
+ run_nnunet_prediction(
127
+ model_folder=model_folder,
128
+ input_dir=tmp_input_dir,
129
+ output_dir=tmp_output_dir,
130
+ device=args.device,
131
+ )
132
+
133
+ raw_seg = tmp_output_dir / f"{case_id}.nii.gz"
134
+ if not raw_seg.exists():
135
+ produced = sorted(tmp_output_dir.glob("*.nii.gz"))
136
+ raise FileNotFoundError(
137
+ f"nnUNet did not write the expected segmentation {raw_seg}. "
138
+ f"Found: {[p.name for p in produced]}"
139
+ )
140
+
141
+ seg_path = output_dir / f"{case_id}_seg.nii.gz"
142
+ shutil.copy2(raw_seg, seg_path)
143
+
144
+ viz_outputs = generate_outputs(
145
+ image_path=input_path,
146
+ mask_path=seg_path,
147
+ output_dir=output_dir,
148
+ case_name=case_id,
149
+ cancer_type=config["display_name"],
150
+ wl=config["wl"],
151
+ ww=config["ww"],
152
+ color=config["color"],
153
+ alpha=0.5,
154
+ fps=args.fps,
155
+ )
156
+
157
+ positive_voxels, tumor_volume_ml = summarize_segmentation(seg_path)
158
+ print_summary(seg_path, viz_outputs, positive_voxels, tumor_volume_ml)
159
+
160
+
161
+ def resolve_case_id(input_path):
162
+ name = input_path.name
163
+ if not name.endswith(".nii.gz"):
164
+ raise ValueError(f"Expected a .nii.gz image, got: {name}")
165
+ case_id = name[: -len(".nii.gz")]
166
+ if case_id.endswith("_0000"):
167
+ case_id = case_id[: -len("_0000")]
168
+ if not case_id:
169
+ raise ValueError(f"Could not resolve a case ID from: {input_path}")
170
+ return case_id
171
+
172
+
173
+ def normalize_cancer_type(cancer_type):
174
+ cancer_type = cancer_type.strip().lower()
175
+ normalized = CANCER_TYPE_ALIASES.get(cancer_type, cancer_type)
176
+ if normalized not in CANCER_CONFIGS:
177
+ valid = sorted(list(CANCER_CONFIGS) + list(CANCER_TYPE_ALIASES))
178
+ raise ValueError(
179
+ f"Unsupported --cancer_type '{cancer_type}'. Valid values: {', '.join(valid)}"
180
+ )
181
+ return normalized
182
+
183
+
184
+ def install_custom_trainer():
185
+ import nnunetv2
186
+
187
+ src = Path(__file__).resolve().parent / "trainers" / f"{TRAINER_NAME}.py"
188
+ if not src.exists():
189
+ raise FileNotFoundError(f"Custom trainer file is missing: {src}")
190
+
191
+ variants_dir = Path(nnunetv2.__path__[0]) / "training" / "nnUNetTrainer" / "variants"
192
+ variants_dir.mkdir(parents=True, exist_ok=True)
193
+ dst = variants_dir / src.name
194
+
195
+ if dst.exists() or dst.is_symlink():
196
+ try:
197
+ if dst.resolve() == src.resolve():
198
+ return dst
199
+ except OSError:
200
+ pass
201
+ dst.unlink()
202
+
203
+ try:
204
+ dst.symlink_to(src.resolve())
205
+ except (OSError, NotImplementedError):
206
+ shutil.copy2(src, dst)
207
+ print(f"Installed custom trainer: {dst}")
208
+ return dst
209
+
210
+
211
+ def resolve_model_folder(model_dir, dataset_name):
212
+ model_folder = (
213
+ model_dir
214
+ / dataset_name
215
+ / f"{TRAINER_NAME}__{PLANS_NAME}__{CONFIGURATION}"
216
+ )
217
+ checkpoint = model_folder / "fold_0" / CHECKPOINT_NAME
218
+ if not checkpoint.exists():
219
+ raise FileNotFoundError(
220
+ f"Expected checkpoint not found: {checkpoint}. "
221
+ "Check --model_dir and make sure the trained weights are downloaded."
222
+ )
223
+ return model_folder
224
+
225
+
226
+ def symlink_or_copy(src, dst):
227
+ try:
228
+ dst.symlink_to(src.resolve())
229
+ except (OSError, NotImplementedError):
230
+ shutil.copy2(src, dst)
231
+
232
+
233
+ def run_nnunet_prediction(model_folder, input_dir, output_dir, device):
234
+ from nnunetv2.inference.predict_from_raw_data import nnUNetPredictor
235
+
236
+ predictor = nnUNetPredictor(
237
+ tile_step_size=0.5,
238
+ use_gaussian=True,
239
+ use_mirroring=False,
240
+ perform_everything_on_device=(device == "cuda"),
241
+ device=torch.device(device),
242
+ verbose=False,
243
+ verbose_preprocessing=False,
244
+ allow_tqdm=True,
245
+ )
246
+ predictor.initialize_from_trained_model_folder(
247
+ str(model_folder),
248
+ use_folds=(0,),
249
+ checkpoint_name=CHECKPOINT_NAME,
250
+ )
251
+ predictor.predict_from_files(
252
+ str(input_dir),
253
+ str(output_dir),
254
+ save_probabilities=False,
255
+ overwrite=True,
256
+ num_processes_preprocessing=1,
257
+ num_processes_segmentation_export=1,
258
+ folder_with_segs_from_prev_stage=None,
259
+ num_parts=1,
260
+ part_id=0,
261
+ )
262
+
263
+
264
+ def run_nnunet_prediction_single(model_folder, input_file, output_file, device):
265
+ """Single-case nnUNet inference without any multiprocessing.
266
+
267
+ Uses nnUNet's in-process API so it works inside restricted environments
268
+ (e.g. ZeroGPU daemon workers) where spawning child processes is forbidden.
269
+ """
270
+ from nnunetv2.inference.predict_from_raw_data import nnUNetPredictor
271
+ from nnunetv2.imageio.simpleitk_reader_writer import SimpleITKIO
272
+
273
+ predictor = nnUNetPredictor(
274
+ tile_step_size=0.5,
275
+ use_gaussian=True,
276
+ use_mirroring=False,
277
+ perform_everything_on_device=(device == "cuda"),
278
+ device=torch.device(device),
279
+ verbose=False,
280
+ verbose_preprocessing=False,
281
+ allow_tqdm=True,
282
+ )
283
+ predictor.initialize_from_trained_model_folder(
284
+ str(model_folder),
285
+ use_folds=(0,),
286
+ checkpoint_name=CHECKPOINT_NAME,
287
+ )
288
+
289
+ io = SimpleITKIO()
290
+ images, properties = io.read_images([str(input_file)])
291
+ segmentation = predictor.predict_single_npy_array(
292
+ images, properties, None, None, False
293
+ )
294
+ io.write_seg(segmentation, str(output_file), properties)
295
+
296
+
297
+ def summarize_segmentation(seg_path):
298
+ seg = sitk.ReadImage(str(seg_path))
299
+ seg_arr = sitk.GetArrayFromImage(seg)
300
+ positive_voxels = int(np.count_nonzero(seg_arr))
301
+ spacing_x, spacing_y, spacing_z = seg.GetSpacing()
302
+ tumor_volume_ml = positive_voxels * spacing_x * spacing_y * spacing_z / 1000.0
303
+ return positive_voxels, tumor_volume_ml
304
+
305
+
306
+ def print_summary(seg_path, viz_outputs, positive_voxels, tumor_volume_ml):
307
+ print("\nPanCancerSeg inference complete")
308
+ print(f"Segmentation mask : {seg_path}")
309
+ print("Slice PNGs :")
310
+ for label, path in viz_outputs["slices"].items():
311
+ print(f" {label:9s} : {path}")
312
+ print(f"Overlay video : {viz_outputs['video']}")
313
+ print(f"Positive voxels : {positive_voxels}")
314
+ print(f"Tumor volume : {tumor_volume_ml:.3f} mL")
315
+
316
+
317
+ if __name__ == "__main__":
318
+ main()
requirements.txt ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ nnunetv2>=2.6
2
+ torch>=2.0
3
+ nibabel>=5.0
4
+ numpy
5
+ opencv-python>=4.8
6
+ matplotlib>=3.7
7
+ scipy
8
+ SimpleITK>=2.3
9
+ wandb
10
+ huggingface_hub>=1.18.0
11
+ spaces
12
+ gradio>=6.12.0
sample_input/kidney/FLARE_10805_0000.nii.gz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ac97bf77bb7f9f7ba8529acccc7c1b70b5deafc18843ef9d24c0f5582bf40327
3
+ size 31061757
trainers/nnUNetTrainerWandb2000.py ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """nnUNet trainer with Weights & Biases logging and 2000 epochs.
2
+
3
+ Place this file (or symlink it) into the nnUNet trainer variants directory
4
+ so that nnUNet can discover it via the -tr flag:
5
+
6
+ VARIANTS_DIR=$(python -c "import nnunetv2; print(nnunetv2.__path__[0])")/training/nnUNetTrainer/variants
7
+ ln -sf $(realpath nnUNetTrainerWandb2000.py) "$VARIANTS_DIR/nnUNetTrainerWandb2000.py"
8
+
9
+ Then train with:
10
+ nnUNetv2_train DATASET CONFIG FOLD -tr nnUNetTrainerWandb2000 ...
11
+ """
12
+
13
+ import os
14
+
15
+ import torch
16
+ import wandb
17
+ from nnunetv2.training.nnUNetTrainer.nnUNetTrainer import nnUNetTrainer
18
+
19
+
20
+ class nnUNetTrainerWandb2000(nnUNetTrainer):
21
+ def __init__(self, plans: dict, configuration: str, fold: int,
22
+ dataset_json: dict,
23
+ device: torch.device = torch.device("cuda")):
24
+ super().__init__(plans, configuration, fold, dataset_json, device)
25
+ self.num_epochs = 2000
26
+
27
+ def on_train_start(self):
28
+ super().on_train_start()
29
+ wandb.init(
30
+ project=os.environ.get("WANDB_PROJECT", "CVPR2026-PanCancerSeg"),
31
+ name=f"{self.plans_manager.dataset_name}_fold{self.fold}",
32
+ config={
33
+ "dataset": self.plans_manager.dataset_name,
34
+ "configuration": self.configuration_name,
35
+ "fold": self.fold,
36
+ "num_epochs": self.num_epochs,
37
+ "batch_size": self.batch_size,
38
+ "patch_size": list(self.configuration_manager.patch_size),
39
+ },
40
+ resume="allow",
41
+ )
42
+
43
+ def on_epoch_end(self):
44
+ super().on_epoch_end()
45
+
46
+ # Save periodic checkpoint every 200 epochs after epoch 1000
47
+ if self.current_epoch > 1000 and self.current_epoch % 200 == 0:
48
+ self.save_checkpoint(
49
+ os.path.join(self.output_folder, f"checkpoint_epoch{self.current_epoch}.pth")
50
+ )
51
+
52
+ logs = self.logger.my_fantastic_logging
53
+ metrics = {"epoch": self.current_epoch}
54
+ if logs["train_losses"]:
55
+ metrics["train_loss"] = logs["train_losses"][-1]
56
+ if logs["val_losses"]:
57
+ metrics["val_loss"] = logs["val_losses"][-1]
58
+ if logs["ema_fg_dice"]:
59
+ metrics["ema_fg_dice"] = logs["ema_fg_dice"][-1]
60
+ if logs["dice_per_class_or_region"]:
61
+ latest = logs["dice_per_class_or_region"][-1]
62
+ for i, d in enumerate(latest):
63
+ metrics[f"dice_class_{i}"] = d
64
+ metrics["learning_rate"] = self.optimizer.param_groups[0]["lr"]
65
+ metrics["epoch_time"] = self.logger.my_fantastic_logging.get(
66
+ "epoch_end_timestamps", [0])[-1] - self.logger.my_fantastic_logging.get(
67
+ "epoch_start_timestamps", [0])[-1]
68
+ wandb.log(metrics, step=self.current_epoch)
69
+
70
+ def on_train_end(self):
71
+ super().on_train_end()
72
+ wandb.finish()
visualize.py ADDED
@@ -0,0 +1,287 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Visualization helpers for single-case PanCancerSeg inference."""
2
+
3
+ from pathlib import Path
4
+
5
+ import cv2
6
+ import numpy as np
7
+ import SimpleITK as sitk
8
+
9
+ import matplotlib
10
+
11
+ matplotlib.use("Agg")
12
+ import matplotlib.pyplot as plt
13
+
14
+
15
+ DEFAULT_OVERLAY_COLOR = (255, 0, 0)
16
+
17
+
18
+ def preprocess_volume(volume, wl, ww):
19
+ """Apply CT windowing and return uint8 data in [0, 255]."""
20
+ volume = volume.astype(np.float32, copy=False)
21
+ lower_bound = wl - ww / 2
22
+ upper_bound = wl + ww / 2
23
+ clipped = np.clip(volume, lower_bound, upper_bound)
24
+ return _normalize_to_uint8(clipped)
25
+
26
+
27
+ def overlay_mask(gray_slice, mask_slice, color=DEFAULT_OVERLAY_COLOR, alpha=0.5):
28
+ """Apply a semi-transparent RGB overlay to one grayscale slice."""
29
+ gray_slice = np.asarray(gray_slice, dtype=np.uint8)
30
+ if gray_slice.ndim != 2:
31
+ raise ValueError(f"Expected a 2D grayscale slice, got shape {gray_slice.shape}")
32
+
33
+ rgb = np.stack([gray_slice] * 3, axis=-1)
34
+ mask = mask_slice > 0
35
+ if not np.any(mask):
36
+ return rgb
37
+
38
+ out = rgb.copy()
39
+ color_arr = np.asarray(color, dtype=np.float32)
40
+ blended = out[mask].astype(np.float32) * (1 - alpha) + color_arr * alpha
41
+ out[mask] = np.clip(blended, 0, 255).astype(np.uint8)
42
+ return out
43
+
44
+
45
+ def find_key_slices(mask_vol):
46
+ """Return named representative z-slices for a mask in [z, y, x] order."""
47
+ if mask_vol.ndim != 3:
48
+ raise ValueError(f"Expected a 3D mask volume, got shape {mask_vol.shape}")
49
+
50
+ depth = mask_vol.shape[0]
51
+ if depth == 0:
52
+ raise ValueError("Cannot select key slices from an empty z-dimension")
53
+
54
+ mask = mask_vol > 0
55
+ if np.any(mask):
56
+ z_indices = np.where(np.any(mask, axis=(1, 2)))[0]
57
+ areas = mask.reshape(depth, -1).sum(axis=1)
58
+ coords = np.argwhere(mask)
59
+ centroid_z = int(round(float(coords[:, 0].mean())))
60
+ min_z = int(z_indices.min())
61
+ max_z = int(z_indices.max())
62
+ return {
63
+ "centroid": _clip_slice(centroid_z, depth),
64
+ "max_area": int(areas.argmax()),
65
+ "extent25": _clip_slice(round(min_z + 0.25 * (max_z - min_z)), depth),
66
+ "extent75": _clip_slice(round(min_z + 0.75 * (max_z - min_z)), depth),
67
+ }
68
+
69
+ middle = depth // 2
70
+ offset = max(1, depth // 10)
71
+ return {
72
+ "centroid": middle,
73
+ "max_area": _clip_slice(middle - offset, depth),
74
+ "extent25": _clip_slice(middle + offset, depth),
75
+ "extent75": _clip_slice(middle + 2 * offset, depth),
76
+ }
77
+
78
+
79
+ def generate_slice_images(
80
+ image_uint8,
81
+ mask_vol,
82
+ output_dir,
83
+ case_name,
84
+ color=DEFAULT_OVERLAY_COLOR,
85
+ alpha=0.5,
86
+ ):
87
+ """Save side-by-side PNGs for representative slices."""
88
+ output_dir = Path(output_dir)
89
+ output_dir.mkdir(parents=True, exist_ok=True)
90
+
91
+ key_slices = find_key_slices(mask_vol)
92
+ outputs = {}
93
+
94
+ for label, z_idx in key_slices.items():
95
+ gray_slice = image_uint8[z_idx]
96
+ mask_slice = mask_vol[z_idx] > 0
97
+ overlay = overlay_mask(gray_slice, mask_slice, color=color, alpha=alpha)
98
+
99
+ fig, axes = plt.subplots(1, 2, figsize=(10, 5), dpi=150)
100
+ axes[0].imshow(gray_slice, cmap="gray", vmin=0, vmax=255)
101
+ axes[0].set_title("Image")
102
+ axes[0].axis("off")
103
+ axes[1].imshow(overlay)
104
+ axes[1].set_title("Segmentation overlay")
105
+ axes[1].axis("off")
106
+ fig.suptitle(f"{case_name} | z={z_idx}")
107
+ fig.tight_layout()
108
+
109
+ out_path = output_dir / f"{case_name}_slice_{label}.png"
110
+ fig.savefig(out_path, dpi=150, bbox_inches="tight", facecolor="white")
111
+ plt.close(fig)
112
+ outputs[label] = out_path
113
+
114
+ return outputs
115
+
116
+
117
+ def generate_video(
118
+ image_uint8,
119
+ mask_vol,
120
+ output_dir,
121
+ case_name,
122
+ cancer_type,
123
+ color=DEFAULT_OVERLAY_COLOR,
124
+ alpha=0.5,
125
+ fps=10,
126
+ ):
127
+ """Generate an MP4 scroll-through overlay video."""
128
+ output_dir = Path(output_dir)
129
+ output_dir.mkdir(parents=True, exist_ok=True)
130
+ video_path = output_dir / f"{case_name}_overlay.mp4"
131
+
132
+ start_z, end_z = _video_z_range(mask_vol)
133
+ first_frame = _make_video_frame(
134
+ image_uint8[start_z],
135
+ mask_vol[start_z],
136
+ color,
137
+ alpha,
138
+ start_z,
139
+ image_uint8.shape[0],
140
+ cancer_type,
141
+ )
142
+ height, width = first_frame.shape[:2]
143
+
144
+ writer = _open_video_writer(video_path, fps, width, height)
145
+ # Frame annotations are drawn in RGB space; convert only when writing to OpenCV.
146
+ writer.write(cv2.cvtColor(first_frame, cv2.COLOR_RGB2BGR))
147
+
148
+ for z_idx in range(start_z + 1, end_z + 1):
149
+ frame = _make_video_frame(
150
+ image_uint8[z_idx],
151
+ mask_vol[z_idx],
152
+ color,
153
+ alpha,
154
+ z_idx,
155
+ image_uint8.shape[0],
156
+ cancer_type,
157
+ )
158
+ writer.write(cv2.cvtColor(frame, cv2.COLOR_RGB2BGR))
159
+
160
+ writer.release()
161
+ return video_path
162
+
163
+
164
+ def generate_outputs(
165
+ image_path,
166
+ mask_path,
167
+ output_dir,
168
+ case_name,
169
+ cancer_type,
170
+ wl,
171
+ ww,
172
+ color=DEFAULT_OVERLAY_COLOR,
173
+ alpha=0.5,
174
+ fps=10,
175
+ ):
176
+ """Read image and mask volumes, then write PNG previews and MP4 video."""
177
+ image = sitk.ReadImage(str(image_path))
178
+ mask = sitk.ReadImage(str(mask_path))
179
+ image_vol = sitk.GetArrayFromImage(image)
180
+ mask_vol = sitk.GetArrayFromImage(mask)
181
+
182
+ if image_vol.shape != mask_vol.shape:
183
+ raise ValueError(
184
+ "Image and segmentation shapes do not match: "
185
+ f"image={image_vol.shape}, segmentation={mask_vol.shape}. "
186
+ "Both arrays are expected in [z, y, x] order."
187
+ )
188
+
189
+ image_uint8 = preprocess_volume(image_vol, wl, ww)
190
+ slice_paths = generate_slice_images(
191
+ image_uint8,
192
+ mask_vol,
193
+ output_dir,
194
+ case_name,
195
+ color,
196
+ alpha,
197
+ )
198
+ video_path = generate_video(
199
+ image_uint8,
200
+ mask_vol,
201
+ output_dir,
202
+ case_name,
203
+ cancer_type,
204
+ color,
205
+ alpha,
206
+ fps,
207
+ )
208
+ return {"slices": slice_paths, "video": video_path}
209
+
210
+
211
+ def _normalize_to_uint8(volume):
212
+ v_min = float(np.min(volume))
213
+ v_max = float(np.max(volume))
214
+ if not np.isfinite(v_min) or not np.isfinite(v_max) or v_max <= v_min:
215
+ return np.zeros(volume.shape, dtype=np.uint8)
216
+ normalized = (volume - v_min) / (v_max - v_min) * 255.0
217
+ return np.clip(normalized, 0, 255).astype(np.uint8)
218
+
219
+
220
+ def _clip_slice(index, depth):
221
+ return int(np.clip(index, 0, depth - 1))
222
+
223
+
224
+ def _video_z_range(mask_vol, padding=10, empty_window=80):
225
+ depth = mask_vol.shape[0]
226
+ mask = mask_vol > 0
227
+ if np.any(mask):
228
+ z_indices = np.where(np.any(mask, axis=(1, 2)))[0]
229
+ return (
230
+ max(0, int(z_indices.min()) - padding),
231
+ min(depth - 1, int(z_indices.max()) + padding),
232
+ )
233
+
234
+ if depth <= empty_window:
235
+ return 0, depth - 1
236
+ middle = depth // 2
237
+ half = empty_window // 2
238
+ return max(0, middle - half), min(depth - 1, middle + half)
239
+
240
+
241
+ def _make_video_frame(gray_slice, mask_slice, color, alpha, z_idx, depth, cancer_type):
242
+ frame = overlay_mask(gray_slice, mask_slice, color=color, alpha=alpha)
243
+ frame = _upscale_if_small(frame)
244
+
245
+ annotation = f"Slice {z_idx + 1}/{depth} | {cancer_type}"
246
+ font = cv2.FONT_HERSHEY_SIMPLEX
247
+ font_scale = max(0.6, min(frame.shape[:2]) / 900)
248
+ thickness = max(1, int(round(font_scale * 2)))
249
+ text_size, baseline = cv2.getTextSize(annotation, font, font_scale, thickness)
250
+ x, y = 12, 12 + text_size[1]
251
+ cv2.rectangle(
252
+ frame,
253
+ (x - 6, y - text_size[1] - 6),
254
+ (x + text_size[0] + 6, y + baseline + 6),
255
+ (0, 0, 0),
256
+ thickness=-1,
257
+ )
258
+ cv2.putText(frame, annotation, (x, y), font, font_scale, (255, 255, 255), thickness, cv2.LINE_AA)
259
+ return frame
260
+
261
+
262
+ def _upscale_if_small(frame, min_short_side=512):
263
+ height, width = frame.shape[:2]
264
+ short_side = min(height, width)
265
+ if short_side >= min_short_side:
266
+ return frame
267
+ scale = min_short_side / short_side
268
+ new_size = (int(round(width * scale)), int(round(height * scale)))
269
+ return cv2.resize(frame, new_size, interpolation=cv2.INTER_LINEAR)
270
+
271
+
272
+ def _open_video_writer(video_path, fps, width, height):
273
+ attempts = [
274
+ ("avc1", "H.264/avc1"),
275
+ ("mp4v", "MPEG-4/mp4v"),
276
+ ]
277
+ for fourcc_text, label in attempts:
278
+ fourcc = cv2.VideoWriter_fourcc(*fourcc_text)
279
+ writer = cv2.VideoWriter(str(video_path), fourcc, float(fps), (width, height))
280
+ if writer.isOpened():
281
+ return writer
282
+ writer.release()
283
+ raise RuntimeError(
284
+ f"Could not open MP4 writer at {video_path}. Tried "
285
+ + ", ".join(label for _, label in attempts)
286
+ + ". Install an OpenCV build with MP4 codec support or try another machine."
287
+ )