2026/4/18 13:51:05
网站建设
项目流程
做网站的那些高清图上哪里找,如何获取网站js图片,关键词排名优化免费,毕节公司做网站YOLO11输出解析#xff1a;预测框后处理代码实例
YOLO11是Ultralytics公司推出的最新一代目标检测算法#xff0c;延续了YOLO系列“实时性”与“高精度”的双重优势。相比前代模型#xff0c;YOLO11在骨干网络结构、特征融合机制和损失函数设计上进行了多项创新#xff0c…YOLO11输出解析预测框后处理代码实例YOLO11是Ultralytics公司推出的最新一代目标检测算法延续了YOLO系列“实时性”与“高精度”的双重优势。相比前代模型YOLO11在骨干网络结构、特征融合机制和损失函数设计上进行了多项创新显著提升了小目标检测能力和边界框定位精度。其核心输出为一组包含类别概率、置信度分数和归一化坐标值的预测框在实际应用中需要经过一系列后处理步骤才能转化为可视化的检测结果。基于YOLO11算法构建的深度学习镜像提供了完整的计算机视觉开发环境集成了PyTorch、OpenCV、NumPy等关键依赖库并预装了Jupyter Notebook和SSH远程访问支持极大简化了部署流程。用户无需手动配置复杂环境即可快速启动训练或推理任务特别适合科研验证与工程落地场景。1. Jupyter的使用方式该镜像内置Jupyter Lab环境可通过浏览器直接进行交互式开发。启动服务后访问指定端口即可进入Web界面。如下图所示用户可以在Notebook中编写Python脚本逐步调试模型前处理、推理和后处理逻辑。典型工作流包括加载预训练权重、输入图像预处理、执行推理并可视化输出。由于Jupyter支持单元格分步执行非常适合用于分析YOLO11每一层的输出形态尤其是对解码前的原始张量进行探索。例如你可以将model(inputs)的输出打印出来观察其形状是否为[batch_size, num_anchors * grid_h * grid_w, 4 num_classes]从而确认锚点数量与分类头的一致性。2. SSH的使用方式对于习惯命令行操作的开发者镜像也支持通过SSH连接进行远程开发。使用标准SSH客户端输入IP地址、端口及认证信息即可登录终端环境拥有完整的文件系统权限和进程控制能力。这种方式更适合运行长时间训练任务或批量推理作业。结合tmux或screen工具即使断开连接也能保证进程持续运行。此外可利用rsync或sftp高效同步本地数据集与远程模型输出。3. 使用YOLO11进行预测框后处理当我们运行完YOLO11模型推理后得到的是一个未经处理的原始输出张量。要从中提取出有意义的检测结果必须完成以下三个关键步骤解码Anchor、非极大值抑制NMS、坐标还原到原图尺寸。下面我们将结合具体代码逐一解析。3.1 进入项目目录并运行训练脚本首先确保你已进入正确的项目路径cd ultralytics-8.3.9/然后可以运行训练脚本以生成模型权重或者直接加载官方提供的预训练模型进行推理python train.py训练完成后模型会保存在runs/train/exp/weights/best.pt路径下。接下来我们重点来看如何对推理输出做后处理。上图展示了训练过程中的损失曲线和mAP指标变化趋势表明模型正在有效收敛。一旦获得可用模型就可以开始部署阶段的工作。3.2 模型输出结构解析YOLO11的输出通常是一个形状为(1, num_boxes, 84)的张量以COCO数据集为例其中第0维是批次大小batch size第1维是所有候选框的总数由不同尺度特征图上的锚点生成第2维包含4个位置参数cx, cy, w, h 80个类别得分注意这里的坐标是相对于输入图像尺寸如640×640归一化后的值。我们可以用如下代码获取输出import torch from ultralytics import YOLO # 加载模型 model YOLO(yolo11s.pt) # 或者你自己训练的 best.pt results model(test.jpg) # 获取原始输出张量 output results[0].boxes.data # 形状为 [num_detections, 6]: (x1, y1, x2, y2, conf, cls)这个output已经是经过内部默认后处理的结果但为了深入理解原理我们需要从更底层的输出入手。3.3 手动实现预测框解码如果你希望绕过默认处理流程可以直接访问模型的中间层输出。以下是手动解码Anchor的核心逻辑示例import numpy as np def decode_outputs(pred_tensor, anchors, input_size640): 手动解码YOLO11的原始输出张量 pred_tensor: shape [batch, anchors_per_grid * grid_h * grid_w, 4num_classes] anchors: list of tuples [(w1, h1), (w2, h2), ...] batch_size pred_tensor.shape[0] num_boxes pred_tensor.shape[1] num_classes pred_tensor.shape[2] - 4 # 初始化解码后的框 decoded_boxes [] for i in range(batch_size): boxes [] for j in range(num_boxes): raw_box pred_tensor[i, j, :4] # 取出xywh class_scores pred_tensor[i, j, 4:] # 解码公式参考YOLOv8/v11设计 cx (raw_box[0] * 2 - 0.5) * input_size cy (raw_box[1] * 2 - 0.5) * input_size w (raw_box[2] * 2) ** 2 * anchor_w h (raw_box[3] * 2) ** 2 * anchor_h # 转换为左上角右下角坐标 x1 cx - w / 2 y1 cy - h / 2 x2 cx w / 2 y2 cy h / 2 conf torch.sigmoid(raw_box[4]) # 置信度 cls_id torch.argmax(class_scores) score torch.max(torch.softmax(class_scores, dim0)) boxes.append([x1, y1, x2, y2, conf.item(), cls_id.item(), score.item()]) decoded_boxes.append(boxes) return decoded_boxes提示上述代码仅为示意实际YOLO11采用多尺度Head结构需分别处理三个不同分辨率的特征图输出并对应不同的Anchor尺寸。3.4 非极大值抑制NMS多个重叠的预测框可能指向同一个物体因此需要通过NMS去除冗余检测。PyTorch提供了高效的nms函数from torchvision.ops import nms # 假设 boxes 是 [N, 4] 的 tensorscores 是 [N] 的置信度 boxes output[:, :4] # x1y1x2y2 scores output[:, 4] keep_indices nms(boxes, scores, iou_threshold0.5) final_boxes output[keep_indices]这一步能有效减少重复框保留最可信的检测结果。3.5 将坐标映射回原始图像尺寸模型推理通常使用固定尺寸如640×640输入而原始图像可能是任意比例。因此需要将预测框按比例还原def scale_boxes(img1_shape, boxes, img0_shape, ratio_padNone): 将归一化后的预测框缩放回原始图像尺寸 if ratio_pad is None: gain min(img1_shape[0] / img0_shape[0], img1_shape[1] / img0_shape[1]) pad (img1_shape[1] - img0_shape[1] * gain) / 2, (img1_shape[0] - img0_shape[0] * gain) / 2 else: gain ratio_pad[0] pad ratio_pad[1] boxes[:, [0, 2]] - pad[0] # x padding boxes[:, [1, 3]] - pad[1] # y padding boxes[:, :4] / gain clip_boxes(boxes, img0_shape) return boxes def clip_boxes(boxes, shape): 限制框坐标不超出图像边界 boxes[:, [0, 2]] boxes[:, [0, 2]].clamp(0, shape[1]) boxes[:, [1, 3]] boxes[:, [1, 3]].clamp(0, shape[0])这样处理后得到的坐标就可以准确叠加在原始图像上进行绘制。4. 完整后处理流程整合示例下面是一个完整的推理后处理脚本模板适用于大多数YOLO11应用场景from ultralytics import YOLO import cv2 # 加载模型 model YOLO(yolo11s.pt) # 推理 results model(input.jpg, imgsz640, conf0.25, iou0.45) # 获取结果 for result in results: orig_img result.orig_img boxes result.boxes.xyxy.cpu().numpy() confs result.boxes.conf.cpu().numpy() classes result.boxes.cls.cpu().numpy() # 绘制检测框 for i, box in enumerate(boxes): x1, y1, x2, y2 map(int, box) label fClass {int(classes[i])}: {confs[i]:.2f} cv2.rectangle(orig_img, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.putText(orig_img, label, (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2) cv2.imwrite(output.jpg, orig_img)此脚本自动完成了从输入预处理、模型推理、NMS过滤到坐标还原的全过程最终输出带标注的图像。5. 总结本文详细解析了YOLO11模型输出的后处理流程涵盖从原始张量解码、Anchor转换、非极大值抑制到坐标还原的关键步骤。通过Jupyter和SSH两种使用方式开发者可以根据需求选择交互式调试或命令行批量处理模式。配合预置镜像环境能够快速搭建起稳定可靠的视觉检测系统。掌握这些底层机制不仅有助于提升模型调优能力还能在定制化部署如边缘设备优化、低延迟场景中发挥重要作用。建议读者动手实践文中代码尝试修改置信度阈值、IoU参数等观察其对最终检测效果的影响。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。