为何目标检测输出类别名称错误?水果检测失败的技术求助
目标检测识别水果时类别名称错误的问题
我是机器视觉领域的新手,正在尝试进行目标检测任务。按照YouTube教程完全复现代码后,模型能正确识别car和person,但检测水果时输出的类别名称不正确。


相关代码
import cv2 import matplotlib.pyplot as plt import numpy as np config_file = "ssd_mobilenet_v3_large_coco_2020_01_14.pbtxt" frozen_model = "frozen_inference_graph.pb" model = cv2.dnn_DetectionModel(frozen_model, config_file) classlabels = [] file_name = 'labels.txt' with open(file_name, 'rt') as fpt: classlabels = fpt.read().rstrip('\n').split('\n') model.setInputSize(320,320) model.setInputScale(1.0/127.5) model.setInputMean((127.5,127.5,127.5)) model.setInputSwapRB(True) # Read the image img = cv2.imread('person.jpg') ClassIndex, confidence, bbox = model.detect(img, confThreshold=0.5) print(ClassIndex) font_scale = 3 font = cv2.FONT_HERSHEY_PLAIN for ClassInd, conf, boxes in zip(ClassIndex.flatten(), confidence.flatten(), bbox): cv2.rectangle(img,boxes,(255,0,0),2) cv2.putText(img,classlabels[ClassInd-1],(boxes[0]+10,boxes[1]+40), font, fontScale=font_scale,color=(0,255,0), thickness=3) plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.show()
问题原因
你使用的ssd_mobilenet_v3_large_coco_2020_01_14模型是基于COCO数据集训练的,COCO仅包含苹果、香蕉等极少数水果类别,大部分水果不在其训练范围内。当模型遇到未见过的水果时,会匹配最接近的已知类别,导致输出错误名称。同时,代码中读取的labels.txt是COCO类别列表,本身没有你要检测的多数水果类别,无法输出正确名称。
解决办法
- 使用针对水果训练的预训练模型:选择在Fruit-360这类水果数据集上训练好的目标检测模型,直接用于检测。
- 自定义训练模型:收集目标水果的标注图片,用TensorFlow、PyTorch等框架,基于现有预训练模型微调,训练专属的水果检测模型。
- 核对类别索引(仅适用于COCO包含的水果):如果检测苹果、香蕉这类COCO已有的水果,确认
labels.txt的类别顺序和模型输出的ClassIndex完全对应,避免索引错位导致的名称错误。
内容的提问来源于stack exchange,提问作者Amirreza Hashemi
相关产品推荐
相关产品推荐

