语义分割,评估生成器的准确性很好,但预测看起来还可以

时间:2019-05-08 11:56:46

标签: keras

我对keras评估生成器的准确性有疑问

我将提供我的代码,问题将会跟进:

从模型部分开始,在模型末尾:

o = (Reshape(( outputHeight*outputWidth, n_classes)))(o)
o = (Activation('softmax'))(o)
#create model
model = Model( img_input , o )

评估部分:

K.set_learning_phase(0)
m = load_model(join(save_weights_path,"model.h5"))
batch_size = 1
test_path = "data/validation"
G =Generator(test_path,test_path,batch_size)

images = glob(join(test_path,"*.jpg"))
steps =len(images)
evaluator= m.evaluate_generator(G,steps = steps ,verbose = 1)

print("Accuracy :",evaluator[1])

我得到结果:

256/256 [==============================] - 10s 41ms/step
Accuracy : 0.7758417576551437

然后,我预测:     #feed数据256张图像
    X =发电机()     #预测     pr = m.predict(np.array([X]))[0]     #reshape     pr = pr.reshape((output_height,output_width,n_classes)).argmax(axis = -1)

结果对我来说还不错,但是其中一些效果不好...

图片大小为512 * 512

我想知道来自Evaluate_generator的准确性返回真的意味着

我的模型正确预测512 * 512 * 0.77像素?

谢谢!

编辑:

我只是做一个实验:

我在文件夹中只保留一张图像,然后

运行valuate_generator,返回的精度为:

1/1 [==============================] - 1s 1s/step
Accuracy : 0.5572433471679688

当我自己测试时:

img_name = glob("*.jpg")
gt_name = glob("*.png")

img = cv.imread(img_name[0])

gt = cv.imread(gt_name[0])

c = (img==gt).all(axis=-1)

total  = img.shape[0]*img.shape[1]

print(np.sum(c)/total)

猜猜是什么:

0.41905975341796875

1 个答案:

答案 0 :(得分:0)

事实证明我错了

我将细分输出保存为jpg文件,该文件会更改一些像素值

找到并保存为png文件后,acc与Keras提供的相同。