Spaces:
Running
Running
download support (#3)
Browse files- support download (89939b6de09486b9614c74cdb2d01ecb52e05b51)
- fix bug (13a8b4d6e9fd4c1f84bf1aff8c74261dcb9fcfc0)
- __pycache__/utils.cpython-39.pyc +0 -0
- app.py +25 -0
- model/__pycache__/inference_cpu.cpython-39.pyc +0 -0
- model/data_process/__pycache__/demo_data_process.cpython-39.pyc +0 -0
- model/data_process/demo_data_process.py +5 -3
- model/inference_cpu.py +2 -3
- model/network/__pycache__/model.cpython-39.pyc +0 -0
- model/segment_anything_volumetric/__pycache__/__init__.cpython-39.pyc +0 -0
- model/segment_anything_volumetric/__pycache__/automatic_mask_generator.cpython-39.pyc +0 -0
- model/segment_anything_volumetric/__pycache__/build_sam.cpython-39.pyc +0 -0
- model/segment_anything_volumetric/__pycache__/predictor.cpython-39.pyc +0 -0
- model/segment_anything_volumetric/modeling/__pycache__/__init__.cpython-39.pyc +0 -0
- model/segment_anything_volumetric/modeling/__pycache__/common.cpython-39.pyc +0 -0
- model/segment_anything_volumetric/modeling/__pycache__/image_encoder.cpython-39.pyc +0 -0
- model/segment_anything_volumetric/modeling/__pycache__/image_encoder_swin.cpython-39.pyc +0 -0
- model/segment_anything_volumetric/modeling/__pycache__/mask_decoder.cpython-39.pyc +0 -0
- model/segment_anything_volumetric/modeling/__pycache__/prompt_encoder.cpython-39.pyc +0 -0
- model/segment_anything_volumetric/modeling/__pycache__/sam.cpython-39.pyc +0 -0
- model/segment_anything_volumetric/modeling/__pycache__/transformer.cpython-39.pyc +0 -0
- model/segment_anything_volumetric/utils/__pycache__/__init__.cpython-39.pyc +0 -0
- model/segment_anything_volumetric/utils/__pycache__/amg.cpython-39.pyc +0 -0
- model/segment_anything_volumetric/utils/__pycache__/transforms.cpython-39.pyc +0 -0
- model/utils/__pycache__/monai_inferers_utils.cpython-39.pyc +0 -0
- model/utils/__pycache__/visualize.cpython-39.pyc +0 -0
- model/utils/monai_inferers_utils.py +1 -1
- utils.py +1 -1
__pycache__/utils.cpython-39.pyc
CHANGED
Binary files a/__pycache__/utils.cpython-39.pyc and b/__pycache__/utils.cpython-39.pyc differ
|
|
app.py
CHANGED
@@ -9,6 +9,8 @@ import matplotlib.pyplot as plt
|
|
9 |
from PIL import Image, ImageDraw
|
10 |
import monai.transforms as transforms
|
11 |
from utils import show_points, make_fig, reflect_points_into_model, initial_rectangle, reflect_json_data_to_3D_box, reflect_box_into_model, run
|
|
|
|
|
12 |
|
13 |
print('script run')
|
14 |
|
@@ -24,6 +26,7 @@ if 'reset_demo_case' not in st.session_state:
|
|
24 |
|
25 |
if 'preds_3D' not in st.session_state:
|
26 |
st.session_state.preds_3D = None
|
|
|
27 |
|
28 |
if 'data_item' not in st.session_state:
|
29 |
st.session_state.data_item = None
|
@@ -117,6 +120,7 @@ if st.session_state.option is not None and \
|
|
117 |
st.session_state.data_item = process_ct_gt(st.session_state.option)
|
118 |
st.session_state.reset_demo_case = False
|
119 |
st.session_state.preds_3D = None
|
|
|
120 |
|
121 |
prompt_col1, prompt_col2 = st.columns(2)
|
122 |
|
@@ -150,6 +154,7 @@ with prompt_col2:
|
|
150 |
["Point prompt", "Box prompt"],
|
151 |
on_change=clear_prompts,
|
152 |
disabled=(not spatial_prompt_on))
|
|
|
153 |
|
154 |
if spatial_prompt == "Point prompt":
|
155 |
st.session_state.use_point_prompt = True
|
@@ -284,8 +289,28 @@ with col1:
|
|
284 |
disabled=(st.session_state.option is None or (len(st.session_state.points)==0 and not st.session_state.use_box_prompt and st.session_state.preds_3D is None))):
|
285 |
clear_prompts()
|
286 |
st.session_state.preds_3D = None
|
|
|
287 |
st.rerun()
|
288 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
289 |
with col3:
|
290 |
run_button_name = 'Run'if not st.session_state.running else 'Running'
|
291 |
if st.button(run_button_name, type="primary", use_container_width=True,
|
|
|
9 |
from PIL import Image, ImageDraw
|
10 |
import monai.transforms as transforms
|
11 |
from utils import show_points, make_fig, reflect_points_into_model, initial_rectangle, reflect_json_data_to_3D_box, reflect_box_into_model, run
|
12 |
+
import nibabel as nib
|
13 |
+
import tempfile
|
14 |
|
15 |
print('script run')
|
16 |
|
|
|
26 |
|
27 |
if 'preds_3D' not in st.session_state:
|
28 |
st.session_state.preds_3D = None
|
29 |
+
st.session_state.preds_3D_ori = None
|
30 |
|
31 |
if 'data_item' not in st.session_state:
|
32 |
st.session_state.data_item = None
|
|
|
120 |
st.session_state.data_item = process_ct_gt(st.session_state.option)
|
121 |
st.session_state.reset_demo_case = False
|
122 |
st.session_state.preds_3D = None
|
123 |
+
st.session_state.preds_3D_ori = None
|
124 |
|
125 |
prompt_col1, prompt_col2 = st.columns(2)
|
126 |
|
|
|
154 |
["Point prompt", "Box prompt"],
|
155 |
on_change=clear_prompts,
|
156 |
disabled=(not spatial_prompt_on))
|
157 |
+
st.session_state.enforce_zoom = st.checkbox('Enforce zoom-out-zoom-in')
|
158 |
|
159 |
if spatial_prompt == "Point prompt":
|
160 |
st.session_state.use_point_prompt = True
|
|
|
289 |
disabled=(st.session_state.option is None or (len(st.session_state.points)==0 and not st.session_state.use_box_prompt and st.session_state.preds_3D is None))):
|
290 |
clear_prompts()
|
291 |
st.session_state.preds_3D = None
|
292 |
+
st.session_state.preds_3D_ori = None
|
293 |
st.rerun()
|
294 |
|
295 |
+
with col2:
|
296 |
+
img_nii = None
|
297 |
+
if st.session_state.preds_3D_ori is not None and st.session_state.data_item is not None:
|
298 |
+
meta_dict = st.session_state.data_item['meta']
|
299 |
+
pred_array = st.session_state.preds_3D_ori.transpose(2, 1, 0)
|
300 |
+
img_nii = nib.Nifti1Image(pred_array, affine=meta_dict['affine'])
|
301 |
+
|
302 |
+
with tempfile.NamedTemporaryFile(suffix=".nii.gz") as tmpfile:
|
303 |
+
nib.save(img_nii, tmpfile.name)
|
304 |
+
with open(tmpfile.name, "rb") as f:
|
305 |
+
bytes_data = f.read()
|
306 |
+
st.download_button(
|
307 |
+
label="Download result(.nii.gz)",
|
308 |
+
data=bytes_data,
|
309 |
+
file_name="segvol_preds.nii.gz",
|
310 |
+
mime="application/octet-stream",
|
311 |
+
disabled=img_nii is None
|
312 |
+
)
|
313 |
+
|
314 |
with col3:
|
315 |
run_button_name = 'Run'if not st.session_state.running else 'Running'
|
316 |
if st.button(run_button_name, type="primary", use_container_width=True,
|
model/__pycache__/inference_cpu.cpython-39.pyc
CHANGED
Binary files a/model/__pycache__/inference_cpu.cpython-39.pyc and b/model/__pycache__/inference_cpu.cpython-39.pyc differ
|
|
model/data_process/__pycache__/demo_data_process.cpython-39.pyc
CHANGED
Binary files a/model/data_process/__pycache__/demo_data_process.cpython-39.pyc and b/model/data_process/__pycache__/demo_data_process.cpython-39.pyc differ
|
|
model/data_process/demo_data_process.py
CHANGED
@@ -60,7 +60,7 @@ def process_ct_gt(case_path, spatial_size=(32,256,256)):
|
|
60 |
DimTranspose(keys=["image"]),
|
61 |
MinMaxNormalization(),
|
62 |
transforms.SpatialPadd(keys=["image"], spatial_size=spatial_size, mode='constant'),
|
63 |
-
transforms.CropForegroundd(keys=["image"], source_key="image"),
|
64 |
transforms.ToTensord(keys=["image"]),
|
65 |
]
|
66 |
)
|
@@ -70,13 +70,14 @@ def process_ct_gt(case_path, spatial_size=(32,256,256)):
|
|
70 |
item = {}
|
71 |
# generate ct_voxel_ndarray
|
72 |
if type(case_path) is str:
|
73 |
-
ct_voxel_ndarray,
|
74 |
else:
|
75 |
bytes_data = case_path.read()
|
76 |
with tempfile.NamedTemporaryFile(suffix='.nii.gz') as tmp:
|
77 |
tmp.write(bytes_data)
|
78 |
tmp.seek(0)
|
79 |
-
ct_voxel_ndarray,
|
|
|
80 |
ct_voxel_ndarray = np.array(ct_voxel_ndarray).squeeze()
|
81 |
ct_voxel_ndarray = np.expand_dims(ct_voxel_ndarray, axis=0)
|
82 |
item['image'] = ct_voxel_ndarray
|
@@ -88,4 +89,5 @@ def process_ct_gt(case_path, spatial_size=(32,256,256)):
|
|
88 |
|
89 |
item_z = z_transform(item)
|
90 |
item['z_image'] = item_z['image']
|
|
|
91 |
return item
|
|
|
60 |
DimTranspose(keys=["image"]),
|
61 |
MinMaxNormalization(),
|
62 |
transforms.SpatialPadd(keys=["image"], spatial_size=spatial_size, mode='constant'),
|
63 |
+
# transforms.CropForegroundd(keys=["image"], source_key="image"),
|
64 |
transforms.ToTensord(keys=["image"]),
|
65 |
]
|
66 |
)
|
|
|
70 |
item = {}
|
71 |
# generate ct_voxel_ndarray
|
72 |
if type(case_path) is str:
|
73 |
+
ct_voxel_ndarray, meta_tensor_dict = img_loader(case_path)
|
74 |
else:
|
75 |
bytes_data = case_path.read()
|
76 |
with tempfile.NamedTemporaryFile(suffix='.nii.gz') as tmp:
|
77 |
tmp.write(bytes_data)
|
78 |
tmp.seek(0)
|
79 |
+
ct_voxel_ndarray, meta_tensor_dict = img_loader(tmp.name)
|
80 |
+
|
81 |
ct_voxel_ndarray = np.array(ct_voxel_ndarray).squeeze()
|
82 |
ct_voxel_ndarray = np.expand_dims(ct_voxel_ndarray, axis=0)
|
83 |
item['image'] = ct_voxel_ndarray
|
|
|
89 |
|
90 |
item_z = z_transform(item)
|
91 |
item['z_image'] = item_z['image']
|
92 |
+
item['meta'] = meta_tensor_dict
|
93 |
return item
|
model/inference_cpu.py
CHANGED
@@ -167,7 +167,6 @@ def inference_case(_image, _image_zoom_out, _point_prompt, text_prompt, _box_pro
|
|
167 |
transforms.Resize((325,325,325), mode='trilinear')
|
168 |
]
|
169 |
)
|
170 |
-
|
171 |
-
|
172 |
-
return (torch.sigmoid(logits) > 0.5).int().numpy()
|
173 |
|
|
|
167 |
transforms.Resize((325,325,325), mode='trilinear')
|
168 |
]
|
169 |
)
|
170 |
+
logits_resize = resize_transform(logits)[0]
|
171 |
+
return (torch.sigmoid(logits_resize) > 0.5).int().numpy(), (torch.sigmoid(logits) > 0.5).int().numpy()
|
|
|
172 |
|
model/network/__pycache__/model.cpython-39.pyc
CHANGED
Binary files a/model/network/__pycache__/model.cpython-39.pyc and b/model/network/__pycache__/model.cpython-39.pyc differ
|
|
model/segment_anything_volumetric/__pycache__/__init__.cpython-39.pyc
CHANGED
Binary files a/model/segment_anything_volumetric/__pycache__/__init__.cpython-39.pyc and b/model/segment_anything_volumetric/__pycache__/__init__.cpython-39.pyc differ
|
|
model/segment_anything_volumetric/__pycache__/automatic_mask_generator.cpython-39.pyc
CHANGED
Binary files a/model/segment_anything_volumetric/__pycache__/automatic_mask_generator.cpython-39.pyc and b/model/segment_anything_volumetric/__pycache__/automatic_mask_generator.cpython-39.pyc differ
|
|
model/segment_anything_volumetric/__pycache__/build_sam.cpython-39.pyc
CHANGED
Binary files a/model/segment_anything_volumetric/__pycache__/build_sam.cpython-39.pyc and b/model/segment_anything_volumetric/__pycache__/build_sam.cpython-39.pyc differ
|
|
model/segment_anything_volumetric/__pycache__/predictor.cpython-39.pyc
CHANGED
Binary files a/model/segment_anything_volumetric/__pycache__/predictor.cpython-39.pyc and b/model/segment_anything_volumetric/__pycache__/predictor.cpython-39.pyc differ
|
|
model/segment_anything_volumetric/modeling/__pycache__/__init__.cpython-39.pyc
CHANGED
Binary files a/model/segment_anything_volumetric/modeling/__pycache__/__init__.cpython-39.pyc and b/model/segment_anything_volumetric/modeling/__pycache__/__init__.cpython-39.pyc differ
|
|
model/segment_anything_volumetric/modeling/__pycache__/common.cpython-39.pyc
CHANGED
Binary files a/model/segment_anything_volumetric/modeling/__pycache__/common.cpython-39.pyc and b/model/segment_anything_volumetric/modeling/__pycache__/common.cpython-39.pyc differ
|
|
model/segment_anything_volumetric/modeling/__pycache__/image_encoder.cpython-39.pyc
CHANGED
Binary files a/model/segment_anything_volumetric/modeling/__pycache__/image_encoder.cpython-39.pyc and b/model/segment_anything_volumetric/modeling/__pycache__/image_encoder.cpython-39.pyc differ
|
|
model/segment_anything_volumetric/modeling/__pycache__/image_encoder_swin.cpython-39.pyc
CHANGED
Binary files a/model/segment_anything_volumetric/modeling/__pycache__/image_encoder_swin.cpython-39.pyc and b/model/segment_anything_volumetric/modeling/__pycache__/image_encoder_swin.cpython-39.pyc differ
|
|
model/segment_anything_volumetric/modeling/__pycache__/mask_decoder.cpython-39.pyc
CHANGED
Binary files a/model/segment_anything_volumetric/modeling/__pycache__/mask_decoder.cpython-39.pyc and b/model/segment_anything_volumetric/modeling/__pycache__/mask_decoder.cpython-39.pyc differ
|
|
model/segment_anything_volumetric/modeling/__pycache__/prompt_encoder.cpython-39.pyc
CHANGED
Binary files a/model/segment_anything_volumetric/modeling/__pycache__/prompt_encoder.cpython-39.pyc and b/model/segment_anything_volumetric/modeling/__pycache__/prompt_encoder.cpython-39.pyc differ
|
|
model/segment_anything_volumetric/modeling/__pycache__/sam.cpython-39.pyc
CHANGED
Binary files a/model/segment_anything_volumetric/modeling/__pycache__/sam.cpython-39.pyc and b/model/segment_anything_volumetric/modeling/__pycache__/sam.cpython-39.pyc differ
|
|
model/segment_anything_volumetric/modeling/__pycache__/transformer.cpython-39.pyc
CHANGED
Binary files a/model/segment_anything_volumetric/modeling/__pycache__/transformer.cpython-39.pyc and b/model/segment_anything_volumetric/modeling/__pycache__/transformer.cpython-39.pyc differ
|
|
model/segment_anything_volumetric/utils/__pycache__/__init__.cpython-39.pyc
CHANGED
Binary files a/model/segment_anything_volumetric/utils/__pycache__/__init__.cpython-39.pyc and b/model/segment_anything_volumetric/utils/__pycache__/__init__.cpython-39.pyc differ
|
|
model/segment_anything_volumetric/utils/__pycache__/amg.cpython-39.pyc
CHANGED
Binary files a/model/segment_anything_volumetric/utils/__pycache__/amg.cpython-39.pyc and b/model/segment_anything_volumetric/utils/__pycache__/amg.cpython-39.pyc differ
|
|
model/segment_anything_volumetric/utils/__pycache__/transforms.cpython-39.pyc
CHANGED
Binary files a/model/segment_anything_volumetric/utils/__pycache__/transforms.cpython-39.pyc and b/model/segment_anything_volumetric/utils/__pycache__/transforms.cpython-39.pyc differ
|
|
model/utils/__pycache__/monai_inferers_utils.cpython-39.pyc
CHANGED
Binary files a/model/utils/__pycache__/monai_inferers_utils.cpython-39.pyc and b/model/utils/__pycache__/monai_inferers_utils.cpython-39.pyc differ
|
|
model/utils/__pycache__/visualize.cpython-39.pyc
CHANGED
Binary files a/model/utils/__pycache__/visualize.cpython-39.pyc and b/model/utils/__pycache__/visualize.cpython-39.pyc differ
|
|
model/utils/monai_inferers_utils.py
CHANGED
@@ -192,7 +192,7 @@ def sliding_window_inference(
|
|
192 |
slices = dense_patch_slices(image_size, roi_size, scan_interval)
|
193 |
num_win = len(slices) # number of windows per image
|
194 |
total_slices = num_win * batch_size # total number of windows
|
195 |
-
if total_slices > 10:
|
196 |
return logits_global_single
|
197 |
|
198 |
# Create window-level importance map
|
|
|
192 |
slices = dense_patch_slices(image_size, roi_size, scan_interval)
|
193 |
num_win = len(slices) # number of windows per image
|
194 |
total_slices = num_win * batch_size # total number of windows
|
195 |
+
if total_slices > 10 and not st.session_state.enforce_zoom:
|
196 |
return logits_global_single
|
197 |
|
198 |
# Create window-level importance map
|
utils.py
CHANGED
@@ -61,7 +61,7 @@ def run():
|
|
61 |
if st.session_state.use_box_prompt:
|
62 |
box_prompt = reflect_box_into_model(st.session_state.rectangle_3Dbox)
|
63 |
inference_case.clear()
|
64 |
-
st.session_state.preds_3D = inference_case(image, image_zoom_out,
|
65 |
text_prompt=text_prompt,
|
66 |
_point_prompt=point_prompt,
|
67 |
_box_prompt=box_prompt)
|
|
|
61 |
if st.session_state.use_box_prompt:
|
62 |
box_prompt = reflect_box_into_model(st.session_state.rectangle_3Dbox)
|
63 |
inference_case.clear()
|
64 |
+
st.session_state.preds_3D, st.session_state.preds_3D_ori = inference_case(image, image_zoom_out,
|
65 |
text_prompt=text_prompt,
|
66 |
_point_prompt=point_prompt,
|
67 |
_box_prompt=box_prompt)
|