Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ValueError: could not broadcast input array from shape (256,256,3) into shape (256,256) #50

Open
jazberna1 opened this issue Aug 23, 2024 · 2 comments
Assignees
Labels
bug Something isn't working

Comments

@jazberna1
Copy link

Hello,

I get the following error in section 5.1 Generate prediction(s) from unseen dataset when running the notebook U-Net_2D_ZeroCostDL4Mic.ipynb with this dataset https://zenodo.org/records/5639253 which I believe is given as example.

ValueError                                Traceback (most recent call last)
Cell In[6], line 88, in function_29(output_widget)
     86 predictions = []
     87 for i in tqdm(range(number_of_dataset)):
---> 88   predictions.append(predict_as_tiles(os.path.join(Data_folder, source_dir_list[i]), unet))
     89   # predictions.append(prediction(os.path.join(Data_folder, source_dir_list[i]), os.path.join(Prediction_model_path, Prediction_model_name)))
     90 
     91 # Save the results in the folder along with the masks according to the set threshold
     92 saveResult(Results_folder, predictions, source_dir_list, prefix=prediction_prefix, threshold=None)

Cell In[7], line 514, in predict_as_tiles(Image_path, model)
    512     # Get the prediction from the patch and paste it in the prediction in the right place
    513     predicted_patch = model.predict(patch, batch_size = 1)
--> 514     prediction[xi:xi+patch_size[0], yi:yi+patch_size[1]] = np.squeeze(predicted_patch)
    516 return prediction[0:Image_raw.shape[0], 0: Image_raw.shape[1]]

ValueError: could not broadcast input array from shape (256,256,3) into shape (256,256)

To Reproduce
I have run the following sections of the notebook:

  1. Install U-Net dependencies
    1.1. Load key dependencies
  2. Select your parameters and paths
    2.1. Setting main training parameters
    2.2. Data augmentation
    Here I disable Use_Data_augmentation
    2.3. Using weights from a pre-trained model as initial weights
    Here I selected Use_pretrained_model and the code picks up the appropiate weights
  Weights found in:
  data/training/model/my_model/weights_best.hdf5
  1. Using the trained model
    5.1 Generate prediction(s) from unseen dataset
    Here in setion 5.1 is where I get the error.

Describe the bug
ValueError: could not broadcast input array from shape (256,256,3) into shape (256,256)

Expected behavior
Get model predictions

Screenshots
Screenshot 2024-08-23 at 20 17 04

Desktop (please complete the following information):

  • OS: macOS Monterey
  • Browser: chrome
  • Version: chrome version 127.0.6533.122

Smartphone (please complete the following information):
Does not apply

@jazberna1 jazberna1 added the bug Something isn't working label Aug 23, 2024
@jazberna1
Copy link
Author

jazberna1 commented Aug 26, 2024

Hi,

I took a look to the code and this is what I think is happening:
In function predict_as_tiles the input image is read as one channel image
Image_raw = io.imread(Image_path, as_gray = True)
Then the placeholder for the whole prediction is set as as having one channel too:
prediction = np.zeros(Image.shape)
However the predicted_patch has three channels:
predicted_patch = model.predict(patch, batch_size = 1)

Hence the error here when trying to fill the prediction array with the corresponding predicted patch
prediction[xi:xi+patch_size[0], yi:yi+patch_size[1]] = np.squeeze(predicted_patch)

I did make this change so the prediction array has three channels:
prediction = np.zeros((Image.shape[0],Image.shape[1],3))

By doing so I was able to get the predictions:

Screenshot 2024-08-26 at 13 27 37

This is the version I am using:

6. Version log
v2.1.1:

Replaced all absolute pathing with relative pathing
v2.1:

TensorFlow version updated from 1.15 to the one locally installed in Google Colab's virtual machine (currently TensorFlow 2.11).

Export BioImage Model Zoo model has been updated. Currently using version 0.5.8

Generate predictions from unseen data has been corrected to be compatible with other data format (e.g. png)

Installs a new version of fpdf and fixes bugs in the function to write pdf files.

@IvanHCenalmor
Copy link
Collaborator

Hi @jazberna1 ,

Thank you very much for reporting this bug! ❤️
Seems that you are right, the seems that the code is only prepared for 1 channel.
Your proposed solution seems a really good approach, I will test it and check that it works in other possible scenarios and if works I will upload the newest version and let you know 🤗

Thanks again!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants