Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当基于视频帧和单个快照进行预测时,Keras模型的预测不同_Python_Tensorflow_Machine Learning_Keras - Fatal编程技术网

Python 当基于视频帧和单个快照进行预测时,Keras模型的预测不同

Python 当基于视频帧和单个快照进行预测时,Keras模型的预测不同,python,tensorflow,machine-learning,keras,Python,Tensorflow,Machine Learning,Keras,我正在Keras中训练一个二值图像分类模型,最终目标是解析整个视频。我有一个脚本,从训练视频中读取一些快照,让模型预测它们。我还有另一个脚本,它读取视频并在每个单独的帧中运行模型,并将输出保存到数据帧。出于某种原因,即使图像预测脚本所经过的许多图像是直接从视频中提取的,但即使输入图像相同,视频预测脚本的预测也将完全不同。视频预测脚本始终为每个帧预测相同的类,即使是训练集中的帧 以下是我脚本的预测部分: #Image Prediction image = cv2.resize(cv

我正在Keras中训练一个二值图像分类模型,最终目标是解析整个视频。我有一个脚本,从训练视频中读取一些快照,让模型预测它们。我还有另一个脚本,它读取视频并在每个单独的帧中运行模型,并将输出保存到数据帧。出于某种原因,即使图像预测脚本所经过的许多图像是直接从视频中提取的,但即使输入图像相同,视频预测脚本的预测也将完全不同。视频预测脚本始终为每个帧预测相同的类,即使是训练集中的帧

以下是我脚本的预测部分:

#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öllerwhat
np.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)