External Email - Use Caution
Dear FreeSurfer Developers,
I am trying to run the new “NextBrain" probabilistic atlas mri_histo_atlas_segment model, which internally calls mri_synthseg with additional parameters `--threads 8 --cpu --parc --robust` as a first step. My system: MacBook Pro 2021 with M1 pro chip, currently running macOS Monterey 12.6 I installed the most up-to-date developmental FS version: freesurfer-macOS-darwin_arm64-dev-20240211-4e530af
Currently, I am definitely getting stuck on the mri_synthseg step, so for now my issue is related to SynthSeg, not to the NextBrain package.
This is what I did so far, assuming I am in the SUBJECTS folder:
1. The example for mri_hist_atlas_segment, `mri_histo_atlas_segment bert/mri/orig.mgz bert/mri/histo_atlas_segmentation/ 1 8` will return an error without displaying the error message.
2. I reproduced the error by running it’s analysis steps one by one: SynthSeg returns an error right after running it with any kind of configuration (e.g., `mri_synthseg --i bert/mri/orig.mgz --o mri/synthseg.mgz`): `module 'numpy' has no attribute ‘float128’. This is traceable to line 1595 of freesurfer/dev/python/scripts/mri_synthseg. The error generally seems to be a known issue on Apple chips. I fixed it with replacing `np.float128` with `np.longfloat`.
3. Now, SynthSeg starts to set itself up but quits with: ``` Node: 'model_1/unet_bn_down_0/FusedBatchNormV3' Detected at node 'model_1/unet_bn_down_0/FusedBatchNormV3' defined at (most recent call last): File "/Applications/freesurfer/dev/python/scripts/mri_synthseg", line 2642, in <module> main() File "/Applications/freesurfer/dev/python/scripts/mri_synthseg", line 162, in main predict( File "/Applications/freesurfer/dev/python/scripts/mri_synthseg", line 323, in predict post_patch_segmentation = net.predict(image) File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/utils/traceback_utils.py", line 65, in error_handler return fn(*args, **kwargs) File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/engine/training.py", line 2554, in predict tmp_batch_outputs = self.predict_function(iterator) File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/engine/training.py", line 2341, in predict_function return step_function(self, iterator) File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/engine/training.py", line 2327, in step_function outputs = model.distribute_strategy.run(run_step, args=(data,)) File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/engine/training.py", line 2315, in run_step outputs = model.predict_step(data) File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/engine/training.py", line 2283, in predict_step return self(x, training=False) File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/utils/traceback_utils.py", line 65, in error_handler return fn(*args, **kwargs) File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/engine/training.py", line 569, in __call__ return super().__call__(*args, **kwargs) File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/utils/traceback_utils.py", line 65, in error_handler return fn(*args, **kwargs) File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/engine/base_layer.py", line 1150, in __call__ outputs = call_fn(inputs, *args, **kwargs) File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/utils/traceback_utils.py", line 96, in error_handler return fn(*args, **kwargs) File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/engine/functional.py", line 512, in call return self._run_internal_graph(inputs, training=training, mask=mask) File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/engine/functional.py", line 669, in _run_internal_graph outputs = node.layer(*args, **kwargs) File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/utils/traceback_utils.py", line 65, in error_handler return fn(*args, **kwargs) File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/engine/base_layer.py", line 1150, in __call__ outputs = call_fn(inputs, *args, **kwargs) File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/utils/traceback_utils.py", line 96, in error_handler return fn(*args, **kwargs) File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/layers/normalization/batch_normalization.py", line 597, in call outputs = self._fused_batch_norm( File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/layers/normalization/batch_normalization.py", line 990, in _fused_batch_norm output, mean, variance = control_flow_util.smart_cond( File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/utils/control_flow_util.py", line 108, in smart_cond return tf.__internal__.smart_cond.smart_cond( File "/Applications/freesurfer/dev/python/miniconda3_apple_dist/py3_8_13/lib/python3.8/site-packages/keras/src/layers/normalization/batch_normalization.py", line 979, in _fused_batch_norm_inference return tf.compat.v1.nn.fused_batch_norm( Node: 'model_1/unet_bn_down_0/FusedBatchNormV3' 2 root error(s) found. (0) INVALID_ARGUMENT: input must be 4-dimensional[1,256,256,256,24] [[{{node model_1/unet_bn_down_0/FusedBatchNormV3}}]] [[model_1/model/gaussian_blur/ExpandDims_27/_546]] (1) INVALID_ARGUMENT: input must be 4-dimensional[1,256,256,256,24] [[{{node model_1/unet_bn_down_0/FusedBatchNormV3}}]] 0 successful operations. 0 derived errors ignored. [Op:__inference_predict_function_4927]
resuming program execution ```
4. After further messing around with the mri_synthseg script, I can get past that point by changing all lines that call the `unet` function from `net = unet(nb_features=24, input_shape=[None, None, None, 1], ...)` to `net = unet(nb_features=24, input_shape=[1, None, None, None, 1], ...)` or similar (e.g. line 627, 645, 667, 684, …). However, then it crashes at a later point with other errors apparently related to data dimensionality.
I would really appreciate any suggestions! I know that running the analysis on a MacBook might not be the best choice anyways, but before I try to set it up on our institute HTC (which might be a whole other challenge), I though I try it that way. Also, I figured someone might be interested in the error report.
Thanks a lot! Best wishes, Leon
____________
Leon D. Lotter, MD
Clinician Scientist PhD candidate INM-7: Brain and Behaviour, Research Centre Juelich Institute of Systems Neuroscience, University Hospital Duesseldorf Max Planck School of Cognition, Leipzig
https://secure-web.cisco.com/1dp_Q8wZIqLOEUSqDix0kribzUPxw3EWu7oCDRmyzTKfFU2... leondlotter@gmail.com l.lotter@fz-juelich.de
freesurfer@nmr.mgh.harvard.edu