0

I am trying to run https://github.com/facebookresearch/segment-anything/blob/main/notebooks/onnx_model_example.ipynb locally, on an M2 MacBook with Sonoma 14.5. However, I keep running into the following error at step 11:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
Cell In[75], line 1
----> 1 masks = mask_generator.generate(image)

File ~/opt/anaconda3/envs/ve_env/lib/python3.9/site-packages/torch/utils/_contextlib.py:115, in context_decorator.<locals>.decorate_context(*args, **kwargs)
    112 @functools.wraps(func)
    113 def decorate_context(*args, **kwargs):
    114     with ctx_factory():
--> 115         return func(*args, **kwargs)

File ~/opt/anaconda3/envs/ve_env/lib/python3.9/site-packages/segment_anything/automatic_mask_generator.py:163, in SamAutomaticMaskGenerator.generate(self, image)
    138 """
    139 Generates masks for the given image.
    140 
   (...)
    159          the mask, given in XYWH format.
    160 """
    162 # Generate masks
--> 163 mask_data = self._generate_masks(image)
    165 # Filter small disconnected regions and holes in masks
    166 if self.min_mask_region_area > 0:

File ~/opt/anaconda3/envs/ve_env/lib/python3.9/site-packages/segment_anything/automatic_mask_generator.py:206, in SamAutomaticMaskGenerator._generate_masks(self, image)
    204 data = MaskData()
    205 for crop_box, layer_idx in zip(crop_boxes, layer_idxs):
--> 206     crop_data = self._process_crop(image, crop_box, layer_idx, orig_size)
    207     data.cat(crop_data)
    209 # Remove duplicate masks between crops

File ~/opt/anaconda3/envs/ve_env/lib/python3.9/site-packages/segment_anything/automatic_mask_generator.py:236, in SamAutomaticMaskGenerator._process_crop(self, image, crop_box, crop_layer_idx, orig_size)
    234 cropped_im = image[y0:y1, x0:x1, :]
    235 cropped_im_size = cropped_im.shape[:2]
--> 236 self.predictor.set_image(cropped_im)
    238 # Get points for this crop
    239 points_scale = np.array(cropped_im_size)[None, ::-1]

File ~/opt/anaconda3/envs/ve_env/lib/python3.9/site-packages/segment_anything/predictor.py:57, in SamPredictor.set_image(self, image, image_format)
     55 # Transform the image to the form expected by the model
     56 input_image = self.transform.apply_image(image)
---> 57 input_image_torch = torch.as_tensor(input_image, device=self.device)
     58 input_image_torch = input_image_torch.permute(2, 0, 1).contiguous()[None, :, :, :]
     60 self.set_torch_image(input_image_torch, image.shape[:2])

RuntimeError: Could not infer dtype of numpy.uint8

I am using a conda environment with Python 3.9.19, and also tested with Python 3.11. Based on online comments I suspected this to be an issue with numpy versions, but having tried multiple versions I cannot find the correct combination. I am currently trying with the following:

numpy==1.24.4
torch==1.9.0
torchvision==0.10.0
opencv-python==4.10.0.84

Running the same notebook on Google Colab works fine, and the versions indicated there are:

import numpy as np
import torch
import cv2

print(np.__version__)
print(torch.__version__)
print(cv2.__version__)

1.25.2
2.3.0+cu121
4.8.0

This is using Python 3.10.12. These versions are not available on Mac, so I am stuck.

How can I find out why numpy.uint8 is not being recognized, and how can I fix this error? Most online comments point to upgrading numpy, but I have tried several numpy versions without luck. Any help is appreciated.

3
  • Some discussions regarding similar messages (coming from torch) suggest that it might be due to PyTorch not having been built with NumPy support.
    – Dan Mašek
    Commented Jul 3, 2024 at 17:50
  • Since it's due to failed type inference, it makes one wonder whether you could solve the issue by explicitly specifying a data type. As in, add dtype=torch.uint8 to the arguments of the troublesome torch.as_tensor call.
    – Dan Mašek
    Commented Jul 3, 2024 at 17:52
  • The problem is that torch.as_tensor is being called by mask_generator, so I'd need to go modify their code in order to make it work. I'm hoping to find a way that avoids changing 3rd party code. Can you please point me to how I could build PyTorch with numpy support?
    – LNI
    Commented Jul 3, 2024 at 18:25

1 Answer 1

0

For someone else that runs into the same issue, the cause seems to be an issue with JetBrains PyCharm's Jupyter Notebook support. I am filing a bug report with them as well. Running jupyter-notebook externally showed the correct version of numpy being used and the code works as expected.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.