【问题标题】:KeyError: <class 'numpy.str_'> in multi label U-netKeyError:多标签 U-net 中的 <class 'numpy.str_'>
【发布时间】:2020-07-24 17:14:25
【问题描述】:

我有一个图像作为输入和两个掩码,我使用了多标签 Unet,训练过程没有任何问题,但是当我尝试获取预测 Id 时遇到了测试生成器的错误 (KeyError: ),我使用了鳕鱼片

def testGenerator(test_path= "data/membrane/test/image",num_image = 1584,target_size = (224,224),flag_multi_class = False,as_gray = False):
for i in range(num_image):
    img = io.imread(os.path.join(test_path,"%d.jpg"%i),as_gray = as_gray)
    img = img / 255.
    img = trans.resize(img,target_size)
    img = np.reshape(img,img.shape) if (not flag_multi_class) else img
    img = np.reshape(img,(1,)+img.shape)
    yield img

对于可视化,我使用了

def labelVisualize(num_class,color_dict,img):
     img = img[:,:,0] if len(img.shape) == 3 else img
     img_out = np.zeros(img.shape + (3,))
     for i in range(num_class):
     img_out[img == i,:] = color_dict[i]
     return img_out / 255


def saveResult(save_path,npyfile,flag_multi_class = False,num_class = 2):
    for i,item in enumerate(npyfile):
         img = labelVisualize(num_class,COLOR_DICT,item) if flag_multi_class else item[:,:,0]
         io.imsave(os.path.join(save_path,"%d_predict.tif"%(i)), os.path.join(save_path,"%d_predict.tif"%(i)),skimage.img_as_ubyte(img))

回溯如图:

KeyError                       Traceback (most recent call last)
<ipython-input-29-60fe459f67b9> in <module>
      4 results = model.predict_generator(testGene,10,verbose=1)
      5 #saveResult("data/membrane/test/results",results)
----> 6 saveResult("data/membrane/test/results/road",results)
      7 saveResult("data/membrane/test/results/cl",results)

<ipython-input-26-6c6016bc75cc> in saveResult(save_path, npyfile, flag_multi_class, num_class)
      26     for i,item in enumerate(npyfile):
      27         img = labelVisualize(num_class,COLOR_DICT,item) if  flag_multi_class else item[:,:,0]
 ---> 28         io.imsave(os.path.join(save_path,"%d_predict.tif"%    (i)), os.path.join(save_path,"%d_predict.tif"%  (i)),skimage.img_as_ubyte(img))

/anaconda3/lib/python3.6/site-packages/skimage/io/_io.py in imsave(fname, arr, plugin, **plugin_args)
     137         if fname.lower().endswith(('.tiff', '.tif')):
     138             plugin = 'tifffile'
 --> 139     if is_low_contrast(arr):
     140         warn('%s is a low contrast image' % fname)
     141     if arr.dtype == bool:

  /anaconda3/lib/python3.6/site-packages/skimage/exposure/exposure.py in is_low_contrast(image, fraction_threshold, lower_percentile, upper_percentile, method)
     501         image = rgb2gray(image)
     502 
 --> 503     dlimits = dtype_limits(image, clip_negative=False)
     504     limits = np.percentile(image, [lower_percentile, upper_percentile])
     505     ratio = (limits[1] - limits[0]) / (dlimits[1] - dlimits[0])

 /anaconda3/lib/python3.6/site-packages/skimage/util/dtype.py in dtype_limits(image, clip_negative)
      55         warn('The default of `clip_negative` in `skimage.util.dtype_limits` '
      56              'will change to `False` in version 0.15.')
 ---> 57     imin, imax = dtype_range[image.dtype.type]
      58     if clip_negative:
      59         imin = 0

KeyError: <class 'numpy.str_'>

我需要为测试数据集中的每个图像获取两个预测掩码并将其保存到单独的文件夹中,任何解决此问题的想法将不胜感激,提前谢谢您

【问题讨论】:

  • 发布回溯并向我们展示您的哪一行代码失败。
  • @JohnZwinck,感谢您的回复,我编辑了问题并添加了回溯,我认为我的错误可能是从这一行形成的 (io.imsave(os.path.join(save_path,"% d_predict.tif"%(i)), os.path.join(save_path,"%d_predict.tif"%(i)),skimage.img_as_ubyte(img))), 我不知道如何将两个预测分开掩码并将其保存到两个不同的文件夹中,预测的掩码应该与输入图像具有相同的编号,例如:image_0、predicted_mask_0、predicted_mask_0,提前谢谢

标签: python image-processing keras image-segmentation scikit-image


【解决方案1】:

您将相同的参数os.path.join(save_path,"%d_predict.tif"%(i)) 两次传递给imsave(),但它应该只传递一次。这就是为什么没有任何效果的原因,因为当imsave() 检查您的数组包含什么类型的数据时,数组参数实际上是第二次的文件名,这没有任何意义。

只将文件路径传递给imsave()

【讨论】:

  • 感谢您的回复,当我得到 (ValueError: Invalid number of channels in image array.) 时,我通过了 imsave 参数,当我试图以不同的方式解决它时,我已经得到了这里提到的问题(stackoverflow.com/questions/60861264/…),对不起,我的编码不好,但是我通过两条路径 BC 传递了 imsave 的原因我想将来自同一图像的两个预测掩码保存到两个不同的文件夹中,到目前为止我不知道该怎么做,提前谢谢你
  • 如果要保存两个文件,只需调用两次imsave()。很高兴看到这解决了您的第一个问题,也许您会考虑通过单击左侧的复选标记来接受此答案。
  • 当我两次调用 imsave 时,我在这里遇到了与我之前提到的相同的问题 (stackoverflow.com/questions/60861264/…),不幸的是,我的问题都没有解决,但所有这些情况只是为了找到解决方法它
猜你喜欢
  • 2023-03-29
  • 2020-09-23
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
相关资源
最近更新 更多