我有一张图像作为输入,有两个遮罩,我使用了多标签Unet,训练过程正常进行,但是当我尝试获取预测ID时遇到测试生成器的错误(KeyError:),我使用了pice鳕鱼
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_'>
我需要为测试数据集中的每个图像获取两个预测的蒙版并将其保存到单独的文件夹中,解决此问题的任何想法将不胜感激,谢谢您
我有一个图像作为输入和两个蒙版,我使用了多标签Unet,训练过程正常进行,但是当我尝试获取预测ID时遇到错误(KeyError:)...
您将相同的参数os.path.join(save_path,"%d_predict.tif"%(i))
两次传递给imsave()
,但应仅传递一次。这就是为什么什么都不起作用的原因,因为当imsave()
检查数组包含的数据类型时,数组参数实际上是第二次使用文件名,这没有任何意义。
仅将文件路径传递到imsave()
。