You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何目标检测输出类别名称错误?水果检测失败的技术求助

目标检测识别水果时类别名称错误的问题

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

检测水果时的错误输出1
检测水果时的错误输出2

相关代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:25:25