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

目标检测前动态选择已训练预定义类别可行性咨询

方案可行性及实现思路

这个方案完全可行,而且是目标检测推理阶段很常见的优化需求,核心是在推理前后对类别做筛选,只保留你需要的、模型已训练过的类别结果,具体可以通过以下几种方式实现:

  • 动态调整类别映射表
    先整理模型训练时的完整类别列表,再根据你选中的类别,建立一个新的“模型输出索引→目标类别”的映射关系。比如模型原类别是['person', 'car', 'dog', 'cat'],你选中['person', 'car'],就只保留这两个类别的索引(0和1),后续推理时直接忽略其他索引对应的结果。

  • 过滤模型预测结果
    模型完成推理输出检测框、类别概率后,直接过滤掉不在选中列表里的结果。这个步骤可以放在非极大值抑制(NMS)之前或之后:

    • NMS前过滤:先把不属于选中类别的预测框剔除,再做NMS,能减少计算量;
    • NMS后过滤:对NMS后的结果做二次筛选,逻辑更简单,适合快速验证。
  • 修改框架后处理逻辑
    如果用的是YOLO、Faster R-CNN这类成熟框架,直接修改推理后处理的代码块即可。比如用YOLOv8的话,可以在推理后添加过滤逻辑:

    # 假设模型已训练类别:['person', 'car', 'dog', 'cat']
    selected_classes = ['person', 'car']
    class_names = model.names
    # 获取选中类别的索引
    selected_ids = [class_names.index(cls) for cls in selected_classes]
    
    # 执行推理
    results = model(input_image)
    # 过滤结果
    for res in results:
        # 筛选出类别在选中列表里的检测框
        valid_mask = res.boxes.cls.isin(torch.tensor(selected_ids))
        res.boxes = res.boxes[valid_mask]
    # 后续只处理过滤后的results即可
    

注意事项

  • 必须确保选中的类别是模型实际训练过的,否则模型对未训练类别输出的概率极低,过滤也没有意义;
  • 这种操作只会减少需要处理的结果数量,不会影响模型对选中类别的检测精度,反而可能因为减少了不必要的计算,小幅提升推理速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:16:14