我正在 Keras 中训练一个二值图像分类模型,最终目标是解析整个视频。我有一个脚本,它从训练视频中读取一些快照,并让模型对其进行预测。我有另一个脚本读取视频并通过每个单独的帧运行模型并将输出保存到 DataFrame。出于某种原因,即使图像预测脚本处理的许多图像都是直接从视频中提取的,即使输入图像相同,视频预测脚本也会预测完全不同。视频预测脚本总是为每一帧预测相同的类别,即使对于训练集中的帧也是如此。
以下是我的脚本的预测部分:
#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)
#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)
这两个脚本对图像进行相同的预处理,不应该有任何理由导致预测结果不同。使用 np.array_equal 我推断出数组在大小、形状和内容上都没有不同。我还使用 imshow 进行比较,我可以确认两者在视觉上是相同的。
当我在视频预测期间打印预测值时,它们都非常接近 0.5,这不应该经常发生,因为我的损失值应该在 0.4 左右,这意味着我应该得到更多的 0.9s 和0.1 秒比 0.5 秒。
我对任何想法都持开放态度。感谢您的帮助。