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

如何在OpenCV DNN中禁用COCO部分类别检测并启用其余类别

解决OpenCV DNN中SSD-MobileNet仅保留特定COCO类别的问题

别去删模型节点!SSD-MobileNet的预训练模型结构是固定的,随便删节点会直接破坏推理的张量传递逻辑,程序崩溃是必然的。正确的做法是在推理完成后过滤检测结果,只保留你需要的类别,完全不用动模型本身。

具体操作步骤:

  • 先确定你要保留的COCO类别对应的ID(COCO共80类,比如人是ID 0,汽车是ID 2,摩托车是ID 3,具体可查COCO类别对照表)。
  • 在代码处理检测结果的环节,加个过滤判断,跳过不在允许列表里的类别。

举个代码修改的例子,对应原仓库里的检测结果遍历部分:

# 先定义你要保留的类别ID集合
allowed_class_ids = {0, 2, 3, 5}  # 替换成你需要的类别ID

for i in range(detections.shape[2]):
    confidence = detections[0, 0, i, 2]
    if confidence > conf_threshold:
        class_id = int(detections[0, 0, i, 1])
        # 过滤掉不允许的类别
        if class_id not in allowed_class_ids:
            continue
        # 下面的绘制检测框、显示类别名称等逻辑正常执行
        class_name = classes[class_id]
        # ... 原代码里的绘制逻辑

如果你觉得推理后过滤还不够,想减少模型计算量,那得重新训练只包含目标类别的SSD-MobileNet模型,但这需要准备数据集、训练环境,成本比过滤高很多,一般场景下用推理后过滤就足够了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:31:49