Python 当基于视频帧和单个快照进行预测时,Keras模型的预测不同
我正在Keras中训练一个二值图像分类模型,最终目标是解析整个视频。我有一个脚本,从训练视频中读取一些快照,让模型预测它们。我还有另一个脚本,它读取视频并在每个单独的帧中运行模型,并将输出保存到数据帧。出于某种原因,即使图像预测脚本所经过的许多图像是直接从视频中提取的,但即使输入图像相同,视频预测脚本的预测也将完全不同。视频预测脚本始终为每个帧预测相同的类,即使是训练集中的帧 以下是我脚本的预测部分:Python 当基于视频帧和单个快照进行预测时,Keras模型的预测不同,python,tensorflow,machine-learning,keras,Python,Tensorflow,Machine Learning,Keras,我正在Keras中训练一个二值图像分类模型,最终目标是解析整个视频。我有一个脚本,从训练视频中读取一些快照,让模型预测它们。我还有另一个脚本,它读取视频并在每个单独的帧中运行模型,并将输出保存到数据帧。出于某种原因,即使图像预测脚本所经过的许多图像是直接从视频中提取的,但即使输入图像相同,视频预测脚本的预测也将完全不同。视频预测脚本始终为每个帧预测相同的类,即使是训练集中的帧 以下是我脚本的预测部分: #Image Prediction image = cv2.resize(cv
#Image Prediction
image = cv2.resize(cv2.imread(impath), (300, 300))
if("y" in gray.lower()):
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
else:
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image = image.astype("float") / 255.0
image = img_to_array(image)
image = np.expand_dims(image, axis=0)
prediction = model.predict(image)[0]
print(prediction)
视频预测
在取得成功的同时:
成功,frame=self.video.read()
如果(未成功):
打破
图像=cv2。调整大小(帧,(300300))
图像=cv2.CVT颜色(图像,cv2.COLOR\u BGR2GRAY)
image=image.astype(“float”)/255.0
image=img_到_数组(image)
图像=np。展开尺寸(图像,轴=0)
预测=自我。模型。预测(图像)[0]
如果(预测<.5):
预测=0
其他:
预测=1
打印(预测)
这两个脚本对图像进行相同的预处理,不应该有任何原因导致预测结果不同。我认为这与OpenCV在视频帧中的读取方式有关,但我不知道
当我在视频预测过程中打印预测值时,它们都非常接近.5,这不应该经常发生,因为我的损失值应该在.4左右,这意味着我应该得到比.5多得多的.9秒和.1秒
我对任何想法都持开放态度。谢谢您的帮助。您确定
video.read()
正在输出相同的内容cv2.imread(…)
?检查里面的值。我已经用type()和np.size检查过了,video.read()和cv2.imread()都是返回numpy数组,大小为270000,形状为(300,300,1)@DanielMöllerwhatnp.array_equal(video_array,image_array)
返回?但它们都没有说明任何“内容”。使用视频的第一帧作为图像,它返回True@ksooklall
#Video Prediction
while success:
success, frame = self.video.read()
if(not success):
break
image = cv2.resize(frame, (300, 300))
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image = image.astype("float") / 255.0
image = img_to_array(image)
image = np.expand_dims(image, axis=0)
prediction = self.model.predict(image)[0]
if(prediction < .5):
prediction = 0
else:
prediction = 1
print(prediction)