ImageAI自定义图像分类始终输出相同假阳性结果如何解决
问题排查及解决方案
核心问题原因
- 依赖版本不兼容,预处理逻辑不一致
ImageAI v2.1.6官方适配的运行环境为TensorFlow 2.4.x、Keras 2.4.3,当前使用的TensorFlow 2.6.0、Keras 2.6.0版本过高,会导致训练和推理阶段的图像预处理逻辑不匹配:训练阶段的图像会被归一化到[0,1]区间,而推理阶段错误沿用了ImageNet预训练模型的归一化逻辑(减均值、除以标准差),输入数据分布完全偏离训练时的分布,模型会输出错误的置信度结果。 classification_speed参数bug
ImageAI v2.1.6的fastest推理速度模式存在已知bug,会错误调整输入图像的尺寸和填充方式,导致输入到模型的图像完全失真,无论输入什么内容,模型都会输出固定的预测结果。- 数据集训练不充分或结构错误
当前使用的是第9轮训练的模型,模型尚未充分收敛,可能出现偏差。同时需检查数据集结构是否符合ImageAI要求:根目录下需包含train和test两个子文件夹,每个子文件夹下再按类别分对应数量的独立文件夹存放对应图像,若结构错误也会导致模型训练失效。
解决步骤
- 先修改
loadModel的参数,将classification_speed = 'fastest'替换为classification_speed = 'normal',重新测试,多数情况下该修改即可解决固定输出的问题。 - 若修改速度参数无效,降级依赖版本:卸载当前的TensorFlow、Keras,安装
TensorFlow==2.4.1、Keras==2.4.3版本,重新训练后测试。 - 验证训练有效性:先用训练集中的图像做推理测试,若训练集图像也无法正确分类,检查数据集的文件夹结构是否符合要求,确认
num_objects参数和实际类别数量一致。 - 若上述操作都无效,可以去掉
enhance_data=True参数重新训练,部分情况下数据增强逻辑和高版本TF适配也会出现异常。
内容的提问来源于stack exchange,提问作者LearninProgrammin
相关产品推荐
相关产品推荐

