【YOLOv8-Ultralytics】 【目标检测】【v8.3.235版本】 模型专用预测器代码predict.py解析

【YOLOv8-Ultralytics】 【目标检测】【v8.3.235版本】 模型专用预测器代码predict.py解析


文章目录


前言

代码路径:ultralytics\models\yolo\detect\predict.py

这段代码是 Ultralytics YOLO 框架中目标检测模型专用预测器 DetectionPredictor 的核心实现,继承自基础预测器 BasePredictor,专门适配 YOLO 目标检测的推理全流程。其核心作用是将模型输出的原始预测张量,通过「非极大值抑制(NMS)过滤冗余框→坐标缩放还原至原始图像尺寸→结构化封装为 Results 对象」的流程,转换为可直接用于可视化、保存、下游分析的检测结果,同时支持可选的目标特征提取能力,是 YOLO 检测模型推理阶段的核心组件。

YOLOv8-Ultralytics 系列文章目录


所需的库和模块

python 复制代码
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# 从ultralytics引擎预测器模块导入基础预测器基类(提供通用推理流程:数据加载、预处理、模型推理)
from ultralytics.engine.predictor import BasePredictor
# 从ultralytics引擎结果模块导入Results类(结构化封装推理结果)
from ultralytics.engine.results import Results
# 从ultralytics工具模块导入:非极大值抑制(NMS)、通用操作函数(框缩放、格式转换)
from ultralytics.utils import nms, ops

DetectionValidator 类

整体概览

项目 详情
类名 DetectionPredictor
父类 BasePredictor(Ultralytics 通用预测器,提供模型加载、图像预处理、推理执行等基础能力)
核心定位 YOLO 目标检测模型专用预测器,负责检测任务的预测后处理(NMS)、结果构造、目标特征提取、预测框缩放等核心逻辑
核心依赖模块 ultralytics.engine.predictor(基础预测器)、ultralytics.engine.results(结果封装)、ultralytics.utils.nms(非极大值抑制)、ultralytics.utils.ops(框缩放/格式转换)、torch(张量操作)
关键特性 1. 支持普通检测/旋转框检测(OBB)、类别无关NMS;2. 可选提取目标特征并绑定到结果对象;3. 自动适配批量/单张图像的结果构造;4. 预测框自动缩放到原始图像尺寸;5. 兼容end2end模型推理流程
典型使用流程 初始化预测器→加载模型→预处理输入图像→模型推理→NMS后处理→提取目标特征(可选)→构造Results结果对象→返回可视化/可解析的检测结果

1. DetectionPredictor 类属性说明表

属性名 类型 说明
args namespace 预测器配置参数命名空间(包含conf、iou、classes、max_det、agnostic_nms等NMS/推理参数)
model nn.Module 用于推理的YOLO检测模型实例
batch list 待处理的批次数据列表(包含图像路径、预处理后的图像张量、原始图像等)

2. DetectionPredictor 类方法说明表

方法名 功能说明
postprocess 对模型原始预测执行NMS后处理,转换为结构化Results对象(核心推理后处理)
get_obj_feats 从模型特征图中提取目标级特征(用于下游任务如特征匹配、检索)
construct_results 批量构建Results对象(遍历批次内所有样本)
construct_result 为单张图像构建Results对象(框坐标缩放、结构化封装)

预测后处理:postprocess

python 复制代码
def postprocess(self, preds, img, orig_imgs, **kwargs):
    """
    对模型原始预测执行后处理(NMS+结果结构化),返回结构化Results对象列表
    核心逻辑:NMS过滤冗余框→格式转换→特征提取(可选)→构建Results对象→附加特征(可选)

    参数:
        preds (torch.Tensor): 模型原始预测张量(维度:[B, N, 4+1+NC],4=框坐标,1=置信度,NC=类别数)
        img (torch.Tensor): 预处理后的输入图像张量(模型输入格式,已缩放/归一化)
        orig_imgs (torch.Tensor | list): 预处理前的原始图像(张量/列表格式,RGB/BGR需适配)
        **kwargs (Any): 额外关键字参数(预留扩展)

    返回:
        (list[Results]): 结构化推理结果列表,每个元素对应单张图像的检测结果(含框、类别、置信度等)

    示例:
        # >>> predictor = DetectionPredictor(overrides=dict(model="yolo11n.pt"))
        # >>> results = predictor.predict("path/to/image.jpg")
        # >>> processed_results = predictor.postprocess(preds, img, orig_imgs)
    """
    # 判断是否需要保存目标特征:检测是否存在_feats属性(模型推理时提取的特征图)
    save_feats = getattr(self, "_feats", None) is not None
    # 执行NMS后处理(过滤冗余检测框):
    # - conf: 置信度阈值(过滤低置信度框)
    # - iou: NMS的IoU阈值(合并重叠框)
    # - classes: 指定仅检测的类别(None则检测所有类别)
    # - agnostic_nms: 跨类别NMS(单类别/agnostic模式下启用)
    # - max_det: 单图最大检测框数量
    # - nc: 类别数(0表示自动识别,非detect任务时用模型类别数)
    # - end2end: 适配端到端模型的输出格式
    # - rotated: 适配旋转框检测(OBB任务)
    # - return_idxs=save_feats: 需要提取特征时返回目标索引(用于特征映射)
    preds = nms.non_max_suppression(
        preds,
        self.args.conf,
        self.args.iou,
        self.args.classes,
        self.args.agnostic_nms,
        max_det=self.args.max_det,
        nc=0 if self.args.task == "detect" else len(self.model.names),
        end2end=getattr(self.model, "end2end", False),
        rotated=self.args.task == "obb",
        return_idxs=save_feats,
    )

    # 格式转换:若原始图像是张量(非列表),转换为NumPy批次并反转通道(BGR→RGB,适配OpenCV格式)
    if not isinstance(orig_imgs, list):
        orig_imgs = ops.convert_torch2numpy_batch(orig_imgs)[..., ::-1]

    # 特征提取:需要保存特征时,从特征图提取目标级特征
    if save_feats:
        # 提取目标特征(按NMS返回的索引映射)
        obj_feats = self.get_obj_feats(self._feats, preds[1])
        # 分离NMS结果(preds[0]为检测框,preds[1]为目标索引)
        preds = preds[0]

    # 批量构建结构化Results对象
    results = self.construct_results(preds, img, orig_imgs, **kwargs)

    # 特征附加:将提取的目标特征绑定到Results对象
    if save_feats:
        for r, f in zip(results, obj_feats):
            r.feats = f

    return results
项目 详情
函数名 postprocess
功能概述 对模型原始预测结果执行NMS过滤冗余框,适配原始图像尺寸,可选提取目标特征,最终构造Results结果列表
返回值 list[Results]:每个元素为单张图的检测结果对象(包含框、类别、置信度、特征等)
核心逻辑 1. 判断是否提取目标特征;2. 执行NMS过滤预测框;3. 转换原始图像格式(张量→列表);4. 提取目标特征(可选);5. 构造Results结果列表;6. 绑定目标特征到结果(可选)
设计亮点 1. 按需提取目标特征,不影响常规预测流程;2. 自动适配原始图像的张量/列表格式;3. 兼容多种NMS配置(旋转框、类别无关、end2end)
注意事项 1. 提取目标特征时需确保模型推理过程中保存了_feats特征图;2. 旋转框检测需设置self.args.task="obb",否则NMS逻辑不匹配
概念 含义 对应代码控制逻辑
单类别检测任务 整个检测任务仅需识别一种目标(如只检测"人"、只检测"汽车")。 self.args.single_cls = True
单标签预测(每框一类) 每个检测框仅预测一个类别(vs 多标签:一个框预测多个类别,如"人+背包") nms.non_max_suppressionmulti_label 参数

根据配置自动切换 NMS 的类别处理逻辑,单类别任务强制开启类别无关 NMS 提升效率,多类别任务可手动开启只保留置信度最高的一个以减少重复检测,适配不同检测场景的需求。

模式 逻辑 适用场景
常规NMS(agnostic=False) 按类别分组,对每个类别单独执行NMS;不同类别间的框即使重叠度极高,也不会互相过滤 多类别目标边界清晰的场景(如人、自行车、汽车无重叠),避免误过滤不同类别的合法框
类别无关NMS(agnostic=True) 忽略类别信息,将所有框合并后执行一次NMS;只要框的IoU超过阈值,无论类别是否相同,只保留置信度最高的框 单类别检测、或多类别目标易混淆/重叠的场景(如汽车/卡车、猫/狗),减少重复检测

预测张量形状为 [B, N, 4 + 1 + nc],当 nc=0 时NMS 函数内部会自动从预测张量的维度推断类别数nc

目标特征提取:get_obj_feats

python 复制代码
def get_obj_feats(self, feat_maps, idxs):
    """
    从模型特征图中提取目标级特征(用于下游任务:特征匹配、检索、重识别等)
    核心逻辑:统一特征维度→拼接多尺度特征→按NMS索引提取目标特征

    参数:
        feat_maps (list[torch.Tensor]): 模型输出的多尺度特征图列表(如8x8、16x16、32x32)
        idxs (list[torch.Tensor]): 批次内每张图像的目标索引(NMS返回,映射特征图到检测目标)

    返回:
        (list[torch.Tensor]): 批次内每张图像的目标特征列表(空列表表示无检测目标)
    """
    # 延迟导入(避免推理时未使用特征提取的情况下加载冗余依赖)
    import torch

    # 找到所有特征图中最短的向量长度(统一特征维度,避免维度不匹配)
    s = min(x.shape[1] for x in feat_maps)
    # 多尺度特征拼接:
    # 1. permute(0,2,3,1): 特征图维度从[B,C,H,W]→[B,H,W,C](通道维度后置)
    # 2. reshape: 将通道维度拆分为[s, C/s],便于均值降维到统一长度s,[B,H,W,C]→[B,H*W,s,C/s]
    # 3. mean(dim=-1): 对拆分后的维度取均值,将所有特征向量统一为长度s,[B,H*W,s,C/s]→[B,H*W,s]
    # 4. cat(dim=1): 拼接多尺度特征(维度:[B, 总特征数, s]),总特征数即不同的尺度H*W的总数
    obj_feats = torch.cat(
        [x.permute(0, 2, 3, 1).reshape(x.shape[0], -1, s, x.shape[1] // s).mean(dim=-1) for x in feat_maps], dim=1
    )
    # 按索引提取每张图像的目标特征(无目标则返回空列表)
    return [feats[idx] if idx.shape[0] else [] for feats, idx in zip(obj_feats, idxs)]
项目 详情
函数名 get_obj_feats
功能概述 从模型输出的特征图中提取目标对应的特征向量,统一特征维度后按预测框索引筛选
返回值 `list[torch.Tensor
核心逻辑 1. 确定特征向量最短长度;2. 多尺度特征图维度统一+均值降维;3. 按索引提取单图目标特征
设计亮点 1. 自动适配多尺度特征图,统一特征维度;2. 无目标时优雅返回空列表,避免运行时错误;3. 均值降维保证特征长度一致,便于后续使用
注意事项 1. 特征图需为模型前向传播时保存的_feats属性,且维度需为[batch, channels, h, w];2. 索引idxs需与NMS返回的索引一一对应,否则特征提取错误

结果列表构造:construct_results

python 复制代码
def construct_results(self, preds, img, orig_imgs):
    """
    批量构建Results对象(遍历批次内所有图像,调用construct_result处理单张图像)

    参数:
        preds (list[torch.Tensor]): 批次内每张图像的NMS后检测结果(张量维度:[N,6],N=检测框数)
        img (torch.Tensor): 预处理后的批次图像张量(模型输入格式)
        orig_imgs (list[np.ndarray]): 批次内原始图像列表(NumPy格式)

    返回:
        (list[Results]): 批次内每张图像的结构化Results对象列表
    """
    return [
        self.construct_result(pred, img, orig_img, img_path)
        for pred, orig_img, img_path in zip(preds, orig_imgs, self.batch[0])
    ]
项目 详情
函数名 construct_results
功能概述 遍历批量预测结果,逐张图像调用construct_result构造单图Results对象,最终返回结果列表
返回值 list[Results]:批量图像的检测结果对象列表
核心逻辑 按批次维度遍历预测框、原始图像、图像路径,逐张构造Results对象
设计亮点 1. 简洁的列表推导式实现批量结果构造;2. 严格按批次顺序匹配,避免结果错位;3. 复用单图构造逻辑,降低代码冗余
注意事项 1. predsorig_imgsself.batch[0]的长度需一致,否则会触发维度不匹配错误;2. self.batch[0]需为图像路径列表,依赖BasePredictor的批量数据加载逻辑

单图结果构造:construct_result

python 复制代码
def construct_result(self, pred, img, orig_img, img_path):
    """
    为单张图像构建结构化Results对象(核心:框坐标缩放+结果封装)
    将模型输入尺寸的框坐标缩放到原始图像尺寸,确保坐标与原始图像匹配

    参数:
        pred (torch.Tensor): 单张图像的NMS后检测结果(维度:[N,6],6=xyxy+conf+cls)
        img (torch.Tensor): 预处理后的图像张量(模型输入格式)
        orig_img (np.ndarray): 原始图像(未预处理,NumPy格式)
        img_path (str): 原始图像文件路径(用于Results对象溯源)

    返回:
        (Results): 结构化Results对象,包含:
            - orig_img: 原始图像
            - path: 图像路径
            - names: 模型类别名映射
            - boxes: 缩放后的检测框(xyxy+conf+cls)
    """
    # 框坐标缩放:从模型输入尺寸→原始图像尺寸(消除预处理的缩放/填充影响)
    pred[:, :4] = ops.scale_boxes(img.shape[2:], pred[:, :4], orig_img.shape)
    # 构建并返回Results对象(封装所有推理结果)
    return Results(orig_img, path=img_path, names=self.model.names, boxes=pred[:, :6])
项目 详情
函数名 construct_result
功能概述 将单图预测框缩放到原始图像尺寸,封装为Results对象(包含图像、路径、类别名、检测框)
返回值 Results:单图检测结果对象(包含原始图像、路径、类别名、缩放后的检测框)
核心逻辑 1. 预测框缩放(模型输入尺寸→原始图像尺寸);2. 封装为Results对象
设计亮点 1. 自动适配模型输入与原始图像的尺寸差异,保证预测框位置精准;2. 结果对象封装所有核心信息,便于后续可视化/解析
注意事项 1. pred的前4列必须为xyxy格式,否则缩放后框位置错误;2. orig_img需为RGB通道,否则可视化时颜色异常

完整代码

python 复制代码
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# 从ultralytics引擎预测器模块导入基础预测器基类(提供通用推理流程:数据加载、预处理、模型推理)
from ultralytics.engine.predictor import BasePredictor
# 从ultralytics引擎结果模块导入Results类(结构化封装推理结果)
from ultralytics.engine.results import Results
# 从ultralytics工具模块导入:非极大值抑制(NMS)、通用操作函数(框缩放、格式转换)
from ultralytics.utils import nms, ops


class DetectionPredictor(BasePredictor):
    """
    基于BasePredictor扩展的YOLO目标检测专用预测器类
    该预测器针对目标检测任务定制,处理YOLO模型推理的专属需求:
    包括原始预测的NMS后处理、预测结果结构化封装、目标特征提取、框坐标缩放(模型输入→原始图像)等核心流程

    属性:
        args (namespace): 预测器配置参数命名空间(包含conf、iou、classes、max_det、agnostic_nms等NMS/推理参数)
        model (nn.Module): 用于推理的YOLO检测模型实例
        batch (list): 待处理的批次数据列表(包含图像路径、预处理后的图像张量、原始图像等)

    方法:
        postprocess: 对模型原始预测执行NMS后处理,转换为结构化Results对象(核心推理后处理)
        get_obj_feats: 从模型特征图中提取目标级特征(用于下游任务如特征匹配、检索)
        construct_results: 批量构建Results对象(遍历批次内所有样本)
        construct_result: 为单张图像构建Results对象(框坐标缩放、结构化封装)

    示例:
        # >>> from ultralytics.utils import ASSETS
        # >>> from ultralytics.models.yolo.detect import DetectionPredictor
        # >>> args = dict(model="yolo11n.pt", source=ASSETS)
        # >>> predictor = DetectionPredictor(overrides=args)
        # >>> predictor.predict_cli()  # 命令行模式推理
        # >>> results = predictor.predict("path/to/image.jpg")  # 编程模式推理
    """

    def postprocess(self, preds, img, orig_imgs, **kwargs):
        """
        对模型原始预测执行后处理(NMS+结果结构化),返回结构化Results对象列表
        核心逻辑:NMS过滤冗余框→格式转换→特征提取(可选)→构建Results对象→附加特征(可选)

        参数:
            preds (torch.Tensor): 模型原始预测张量(维度:[B, N, 4+1+NC],4=框坐标,1=置信度,NC=类别数)
            img (torch.Tensor): 预处理后的输入图像张量(模型输入格式,已缩放/归一化)
            orig_imgs (torch.Tensor | list): 预处理前的原始图像(张量/列表格式,RGB/BGR需适配)
            **kwargs (Any): 额外关键字参数(预留扩展)

        返回:
            (list[Results]): 结构化推理结果列表,每个元素对应单张图像的检测结果(含框、类别、置信度等)

        示例:
            # >>> predictor = DetectionPredictor(overrides=dict(model="yolo11n.pt"))
            # >>> results = predictor.predict("path/to/image.jpg")
            # >>> processed_results = predictor.postprocess(preds, img, orig_imgs)
        """
        # 判断是否需要保存目标特征:检测是否存在_feats属性(模型推理时提取的特征图)
        save_feats = getattr(self, "_feats", None) is not None
        # 执行NMS后处理(过滤冗余检测框):
        # - conf: 置信度阈值(过滤低置信度框)
        # - iou: NMS的IoU阈值(合并重叠框)
        # - classes: 指定仅检测的类别(None则检测所有类别)
        # - agnostic_nms: 跨类别NMS(单类别/agnostic模式下启用)
        # - max_det: 单图最大检测框数量
        # - nc: 类别数(0表示自动识别,非detect任务时用模型类别数)
        # - end2end: 适配端到端模型的输出格式
        # - rotated: 适配旋转框检测(OBB任务)
        # - return_idxs=save_feats: 需要提取特征时返回目标索引(用于特征映射)
        preds = nms.non_max_suppression(
            preds,
            self.args.conf,
            self.args.iou,
            self.args.classes,
            self.args.agnostic_nms,
            max_det=self.args.max_det,
            nc=0 if self.args.task == "detect" else len(self.model.names),
            end2end=getattr(self.model, "end2end", False),
            rotated=self.args.task == "obb",
            return_idxs=save_feats,
        )

        # 格式转换:若原始图像是张量(非列表),转换为NumPy批次并反转通道(BGR→RGB,适配OpenCV格式)
        if not isinstance(orig_imgs, list):
            orig_imgs = ops.convert_torch2numpy_batch(orig_imgs)[..., ::-1]

        # 特征提取:需要保存特征时,从特征图提取目标级特征
        if save_feats:
            # 提取目标特征(按NMS返回的索引映射)
            obj_feats = self.get_obj_feats(self._feats, preds[1])
            # 分离NMS结果(preds[0]为检测框,preds[1]为目标索引)
            preds = preds[0]

        # 批量构建结构化Results对象
        results = self.construct_results(preds, img, orig_imgs, **kwargs)

        # 特征附加:将提取的目标特征绑定到Results对象
        if save_feats:
            for r, f in zip(results, obj_feats):
                r.feats = f

        return results

    def get_obj_feats(self, feat_maps, idxs):
        """
        从模型特征图中提取目标级特征(用于下游任务:特征匹配、检索、重识别等)
        核心逻辑:统一特征维度→拼接多尺度特征→按NMS索引提取目标特征

        参数:
            feat_maps (list[torch.Tensor]): 模型输出的多尺度特征图列表(如8x8、16x16、32x32)
            idxs (list[torch.Tensor]): 批次内每张图像的目标索引(NMS返回,映射特征图到检测目标)

        返回:
            (list[torch.Tensor]): 批次内每张图像的目标特征列表(空列表表示无检测目标)
        """
        # 延迟导入(避免推理时未使用特征提取的情况下加载冗余依赖)
        import torch

        # 找到所有特征图中最短的向量长度(统一特征维度,避免维度不匹配)
        s = min(x.shape[1] for x in feat_maps)
        # 多尺度特征拼接:
        # 1. permute(0,2,3,1): 特征图维度从[B,C,H,W]→[B,H,W,C](通道维度后置)
        # 2. reshape: 将通道维度拆分为[s, C/s],便于均值降维到统一长度s,[B,H,W,C]→[B,H*W,s,C/s]
        # 3. mean(dim=-1): 对拆分后的维度取均值,将所有特征向量统一为长度s,[B,H*W,s,C/s]→[B,H*W,s]
        # 4. cat(dim=1): 拼接多尺度特征(维度:[B, 总特征数, s]),总特征数即不同的尺度H*W的总数
        obj_feats = torch.cat(
            [x.permute(0, 2, 3, 1).reshape(x.shape[0], -1, s, x.shape[1] // s).mean(dim=-1) for x in feat_maps], dim=1
        )
        # 按索引提取每张图像的目标特征(无目标则返回空列表)
        return [feats[idx] if idx.shape[0] else [] for feats, idx in zip(obj_feats, idxs)]

    def construct_results(self, preds, img, orig_imgs):
        """
        批量构建Results对象(遍历批次内所有图像,调用construct_result处理单张图像)

        参数:
            preds (list[torch.Tensor]): 批次内每张图像的NMS后检测结果(张量维度:[N,6],N=检测框数)
            img (torch.Tensor): 预处理后的批次图像张量(模型输入格式)
            orig_imgs (list[np.ndarray]): 批次内原始图像列表(NumPy格式)

        返回:
            (list[Results]): 批次内每张图像的结构化Results对象列表
        """
        return [
            self.construct_result(pred, img, orig_img, img_path)
            for pred, orig_img, img_path in zip(preds, orig_imgs, self.batch[0])
        ]

    def construct_result(self, pred, img, orig_img, img_path):
        """
        为单张图像构建结构化Results对象(核心:框坐标缩放+结果封装)
        将模型输入尺寸的框坐标缩放到原始图像尺寸,确保坐标与原始图像匹配

        参数:
            pred (torch.Tensor): 单张图像的NMS后检测结果(维度:[N,6],6=xyxy+conf+cls)
            img (torch.Tensor): 预处理后的图像张量(模型输入格式)
            orig_img (np.ndarray): 原始图像(未预处理,NumPy格式)
            img_path (str): 原始图像文件路径(用于Results对象溯源)

        返回:
            (Results): 结构化Results对象,包含:
                - orig_img: 原始图像
                - path: 图像路径
                - names: 模型类别名映射
                - boxes: 缩放后的检测框(xyxy+conf+cls)
        """
        # 框坐标缩放:从模型输入尺寸→原始图像尺寸(消除预处理的缩放/填充影响)
        pred[:, :4] = ops.scale_boxes(img.shape[2:], pred[:, :4], orig_img.shape)
        # 构建并返回Results对象(封装所有推理结果)
        return Results(orig_img, path=img_path, names=self.model.names, boxes=pred[:, :6])

适配YOLO检测的核心特性

特性 实现方式
多场景NMS适配 postprocess中NMS支持普通检测/旋转框、类别无关、end2end模型、类别过滤
目标特征提取 get_obj_feats统一多尺度特征维度,按预测框索引提取目标特征并绑定到结果
预测框精准缩放 construct_result调用scale_boxes自动适配模型输入/原始图像尺寸差异
结果标准化封装 统一使用Results对象封装结果,包含图像、路径、类别名、检测框、特征等
批量/单图兼容 construct_results遍历批量数据,复用单图构造逻辑,保证批次一致性

工程化核心优化

优化点 实现方式
按需特征提取 通过save_feats标记控制特征提取流程,不影响常规预测性能
维度兼容处理 无目标时返回空列表,避免张量维度错误;自动转换原始图像的张量/列表格式
代码冗余减少 批量结果构造复用单图逻辑,NMS参数复用预测器配置,降低代码重复
通道顺序适配 原始图像张量转numpy时执行[...,::-1],保证RGB通道顺序匹配

扩展与易用性能力

扩展项 用途
预留kwargs参数 postprocess**kwargs为后续功能扩展(如自定义后处理)预留接口
特征绑定到结果 提取的目标特征绑定到Results.feats,支持下游任务(如特征匹配)
统一结果对象 Results对象提供可视化、保存、解析等通用方法,降低下游使用成本

关键注意事项

  1. 模型类型匹配 :需确保model为检测模型(如yolo11n.pt),若传入分类/分割模型,NMS后处理会因预测格式不匹配报错;
  2. 特征提取启用条件 :需在模型推理时保存_feats特征图(如自定义模型前向传播时赋值self._feats),否则get_obj_feats不会执行;
  3. 旋转框检测配置 :检测旋转框(OBB)时需设置args.task="obb",否则NMS会按普通框处理,导致旋转框过滤错误;
  4. 图像通道顺序:原始图像需为RGB通道,若输入为BGR(如OpenCV读取),需手动转换,否则可视化结果颜色异常;
  5. 批量结果一致性 :确保predsorig_imgsimg_path的长度一致,避免批量结果构造时出现索引错位;
  6. 置信度阈值调整:低置信度阈值(如0.001)会增加检测框数量,可能导致NMS耗时增加,需根据场景平衡召回率与速度。

总结

详细介绍了 Ultralytics 框架中继承自 BaseValidator 的 YOLO 目标检测专用预测器。

相关推荐
JicasdC123asd11 小时前
密集残差瓶颈网络改进YOLOv26特征复用与梯度传播双重优化
网络·yolo·目标跟踪
JicasdC123asd15 小时前
密集连接瓶颈模块改进YOLOv26特征复用与梯度流动双重优化
人工智能·yolo·目标跟踪
duyinbi751716 小时前
局部特征提取改进YOLOv26空间移位卷积与轻量化设计双重突破
人工智能·yolo·目标跟踪
张道宁17 小时前
基于Spring Boot与Docker的YOLOv8检测服务实战
spring boot·yolo·docker
duyinbi751720 小时前
大核瓶颈架构改进YOLOv26扩大感受野与多尺度特征提取双重突破
yolo·架构
孤狼warrior20 小时前
YOLO技术架构发展详解(从v1到v8)近万字底层实现逻辑解析
yolo
Coovally AI模型快速验证20 小时前
无人机 RGB+热红外融合检测建筑裂缝与渗漏,34 层高楼约 2 小时
目标检测·计算机视觉·无人机·智慧城市·裂缝检测·渗漏检测
张张123y21 小时前
机器学习与深度学习:从基础概念到YOLOv8全解析
深度学习·yolo·机器学习
AI浩1 天前
CollabOD:用于无人机小目标检测的跨尺度视觉协作多骨干网络
人工智能·目标检测·无人机
Techblog of HaoWANG1 天前
目标检测与跟踪(9)-- Jetson Xavier NX GPIO控制3D结构光C与Python双版本实现(中)
c语言·人工智能·目标检测