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

YOLO NAS模型无法返回检测到的类别标签及物体数量问题咨询

问题解决办法

1. 正确获取检测到的目标数量与类别

你代码里的class_names是数据集的全量类别列表,不是单张图实际检测出的类别。要拿到当前图片的检测结果:

  • 检测到的物体数量直接取labels、confidence或bboxes的长度就行,这三个数组是一一对应的,每个元素对应一个检测框:
detected_obj_count = len(labels)
  • 如果要拿到检测到的所有类别名称(去重),别用class_names,而是从labels里提取:
detected_classes = list(set(labels))

要是你的labels字段返回的居然是全量类别(大概率是库的字段调用错了),那就看有没有class_ids字段——这个字段一般存的是检测到的类别索引,再用索引去class_names里取对应名称:

detected_class_ids = image_prediction.prediction.class_ids
detected_classes = [class_names[idx] for idx in detected_class_ids]
detected_obj_count = len(detected_class_ids)

2. Colab循环预测报错的修复

Colab新版本循环报错,大概率是这两个坑:

  • 循环里重复初始化模型:每次循环都创建image_prediction实例会炸内存,把模型初始化代码移到循环外面,循环里只传图片就行。
  • 图片路径/权限问题:新版本对文件访问权限更严,确保图片路径正确,要是用Drive里的图,先确认已经挂载成功。

给你个修正后的循环示例(以常见的目标检测预测库为例):

# 先把模型初始化放在循环外面,只跑一次
from inference_sdk import InferenceHTTPClient
client = InferenceHTTPClient(
    api_url="https://detect.roboflow.com",
    api_key="你的API密钥"
)

# 要预测的图片列表
img_list = ["pic1.jpg", "pic2.jpg", "pic3.jpg"]

# 循环预测
for img_path in img_list:
    try:
        pred_result = client.infer(img_path, model_id="你的模型ID/版本号")
        # 提取当前图片的检测数据
        predictions = pred_result["predictions"]
        detected_count = len(predictions)
        labels = [p["class"] for p in predictions]
        confs = [p["confidence"] for p in predictions]
        bboxes = [[p["x"], p["y"], p["width"], p["height"]] for p in predictions]
        print(f"这张图检测到 {detected_count} 个目标")
    except Exception as err:
        print(f"预测失败: {str(err)}")

根据你用的具体库调整返回结果的提取方式,核心就是复用模型实例,别在循环里反复创建。


内容的提问来源于stack exchange,提问作者XYZ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:56:02