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
相关产品推荐
相关产品推荐

