问题描述
在运用卷积神经网络进行图像识别的过程中,将数据集分为训练集与验证集,首先进行模型的训练,最终模型在训练集与验证集上的正确率均达到0.999,将训练好的模型保存到本地,测试过程中直接读取本地模型对视频帧进行图像识别,正确率却远达不到0.999,即模型在训练集与验证集上的正确率很高,但在测试集上的正确率却很低。
可能的原因
- 测试集与训练集的图片尺寸不一致;
- 测试集与训练集的数组维度不一致;
- 数据未归一化,训练过程中图像为归一化数据,即 float 类型,而测试用图像未归一化,为 int 型。
- 以上原因会使程序报错或造成测试正确率低的情况,然而我在确认没有上述原因后,仍然存在测试集正确率低的问题。
最终的原因
在反复对比测试集与训练集,确定不存在上述原因后,考虑可能是视频可视化过程中发生了错误,由于验证集的正确率很高,故对验证集进行可视化测试,探究是否为可视化的问题。通过 cv2.imshow() 方法展示验证集,终于发现了问题所在。即测试集与验证集的图像数据通过 plt.imread() 方法读取,色彩空间为 RGB ,然而在对视频进行可视化时,通过 cv2.VideoCapture() 方法读取视频并进行切帧用于测试,色彩空间为 BGR ,测试集与训练集的色彩空间不一致,出现了识别率低的问题。
结论
训练集与测试集的图形数据通过不同方法读取,图形数据的色彩空间不一致,通过 cv2.cvtColor() 方法进行色彩空间的转换后传入模型进行测试,最终得到了与训练集与验证集近乎一致的正确率。