使用TensorFlow的React对象检测应用识别错误、换模型报错求助
问题1:所有物体都被识别为Kangaroo的解决方法
原因
你加载的是专门训练的袋鼠检测专用预训练模型,该模型仅针对袋鼠类别做了特征训练,没有针对你定义的Other类做任何负样本训练,不会输出Other类的预测结果。同时如果你的置信度阈值设置过低,模型会把所有低置信度的袋鼠预测结果直接作为最高优先级输出,导致所有物体都被识别为袋鼠。
解决步骤
- 调整检测置信度阈值到0.5以上,所有得分低于阈值的预测结果统一归类为
Other,不要直接取所有预测结果中的最高得分类别 - 如果需要实现准确的袋鼠/非袋鼠二分类效果,需要自行准备包含非袋鼠样本的数据集,重新训练目标检测模型,不能直接使用现有的袋鼠专用预训练模型
问题2:更换通用检测模型后报
arraySync未定义错误的解决方法 原因
不同TensorFlow.js目标检测模型的输出张量顺序、结构完全不同,你当前使用的索引[4]/[5]/[6]是袋鼠专用模型的输出顺序,谷歌官方的ssdlite_mobilenet_v2通用模型的输出张量数量更少,不存在索引为4的张量,调用属性自然会报错。
解决步骤
- 先在预测代码后添加
console.log(predictions)打印输出张量列表,确认各张量对应的含义,官方ssdlite_mobilenet_v2的输出顺序通常为:predictions[0]对应检测框、predictions[1]对应置信度得分、predictions[2]对应类别ID、predictions[3]对应检测到的物体数量 - 修改你的预测结果提取代码为对应索引:
//Getting predictions const boxes = predictions[0].arraySync(); const scores = predictions[1].arraySync(); const classes = predictions[2].dataSync();
- 同步替换类别映射表,通用模型基于COCO数据集训练,共有90个类别,你现有的两类
classesDir无法匹配通用模型的输出结果
内容的提问来源于stack exchange,提问作者user8512043
相关产品推荐
相关产品推荐

