python - 键错误:在多标签 U-net 中
问题描述
我有一个图像作为输入和两个掩码,我使用了多标签 Unet,训练过程没有任何问题,但是当我尝试获取预测 Id 时遇到了测试生成器的错误 (KeyError: ) 我使用了 cod
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_'>
我需要为测试数据集中的每个图像获取两个预测掩码并将其保存到单独的文件夹中,解决此问题的任何想法将不胜感激,提前谢谢
解决方案
您将相同的参数os.path.join(save_path,"%d_predict.tif"%(i))
两次传递给imsave()
,但它应该只传递一次。这就是为什么没有任何作用的原因,因为当imsave()
检查数组包含什么类型的数据时,数组参数实际上是第二次的文件名,这没有意义。
只将文件路径传递给imsave()
.
推荐阅读
- python - 如何在 Python 中将十六进制值列表转换为十六进制字符串?
- reactjs - 如何将 create-react-app 转换为 Preact?
- twilio - 如何将传入消息发送到 flex 并调用函数?将 2 个动作连接到 1 个触发器
- android - 如何在可滚动活动中的 ListView 下方放置一个按钮?
- keras - 如何在 Tensorboard 中可视化度量回调?
- powershell - 如何使用管道在 Rundeck 中运行 Powershell 命令
- apache - 基于查询字符串查找的 Apache httpd 重写 url
- python - 似乎无法让我的谷歌地图数据抓取工作
- c# - 将具有未定义参数类型的方法传递给另一个方法
- asp.net - 当我没有指定任何内容时,强化发现的隐藏字段