ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

YOLOv5 测试时增强(TTA)实战指南:在验证与推理阶段提升 mAP 与 Recall

YOLOv5 测试时增强(TTA)实战指南:在验证与推理阶段提升 mAP 与 Recall YOLOv5 测试时增强TTA实战指南在验证与推理阶段提升 mAP 与 Recall【免费下载链接】yolov10YOLOv10: Real-Time End-to-End Object Detection [NeurIPS 2024]项目地址: https://gitcode.com/GitHub_Trending/yo/yolov10本篇指南完整讲解 YOLOv5 的测试时增强Test-Time AugmentationTTA技术从建立常规验证基线、通过--augment标志开启 TTA 验证到在detect.py与 PyTorch Hub 中启用 TTA 推理并给出完整的命令输出与指标解读。读完本文你将掌握如何在不重新训练模型的前提下利用多尺度与水平翻转推理换取更高的 mAP、Recall并理解 TTA 的源码实现路径能够自行裁剪增强操作。TTA 是什么测试时增强的核心思想训练时数据增强如 Mosaic、HSV 抖动、随机翻转通过扩充样本多样性提升模型泛化能力而测试时增强TTA则是在推理或验证阶段对同一张输入图像施加多种轻量级变换水平左右翻转、多种分辨率缩放让模型对每一路变换分别前向推理再将各路预测结果合并后再执行 NMS最终输出融合后的检测结果。这种多路推理 结果融合的做法能有效降低单次前向的随机方差通常表现为mAP 与 Recall 的提升代价是推理耗时成倍增加。正如本文档所说TTA 是提升 YOLOv5 模型性能的一步到位方案无需任何重训练。环境准备在进行 TTA 实验前需要准备一个可运行的 YOLO 环境克隆仓库并安装依赖环境要求Python3.8.0与PyTorch1.8。模型权重与数据集会在首次使用时自动下载git clone https://gitcode.com/GitHub_Trending/yo/yolov10 # 克隆仓库 cd yolov10 pip install -r requirements.txt # 安装依赖第一步建立常规验证基线Test Normally任何效果对比都需要一个公平的参照。在启用 TTA 之前先在 COCO val2017 上以图像尺寸 640 像素对yolov5x.pt做一次常规验证。yolov5x.pt是体积最大、精度最高的官方权重也可以换成yolov5s.pt、yolov5m.pt、yolov5l.pt或你自训数据集的./weights/best.ptpython val.py --weights yolov5x.pt --data coco.yaml --img 640 --half常规验证的关键输出如下以官方 YOLOv5 v5.0 输出为示例运行于 Tesla P100-PCIE-16GBPyTorch 1.9.0val: data./data/coco.yaml, weights[yolov5x.pt], batch_size32, imgsz640, conf_thres0.001, iou_thres0.65, taskval, device, single_clsFalse, augmentFalse, verboseFalse, save_txtFalse, save_hybridFalse, save_confFalse, save_jsonTrue, projectruns/val, nameexp, exist_okFalse, halfTrue Class Images Labels P R mAP.5 mAP.5:.95: 100% 157/157 [02:3000:00, 1.05it/s] all 5000 36335 0.746 0.626 0.68 0.49 Speed: 0.1ms pre-process, 22.4ms inference, 1.4ms NMS per image at shape (32, 3, 640, 640) # --- baseline speed Evaluating pycocotools mAP... saving runs/val/exp/yolov5x_predictions.json... Average Precision (AP) [ IoU0.50:0.95 | area all | maxDets100 ] 0.504 # --- baseline mAP Average Precision (AP) [ IoU0.50 | area all | maxDets100 ] 0.688 Average Precision (AP) [ IoU0.75 | area all | maxDets100 ] 0.546 Average Precision (AP) [ IoU0.50:0.95 | area small | maxDets100 ] 0.351 Average Precision (AP) [ IoU0.50:0.95 | areamedium | maxDets100 ] 0.551 Average Precision (AP) [ IoU0.50:0.95 | area large | maxDets100 ] 0.644 Average Recall (AR) [ IoU0.50:0.95 | area all | maxDets 1 ] 0.382 Average Recall (AR) [ IoU0.50:0.95 | area all | maxDets 10 ] 0.628 Average Recall (AR) [ IoU0.50:0.95 | area all | maxDets100 ] 0.681 # --- baseline mAR Average Recall (AR) [ IoU0.50:0.95 | area small | maxDets100 ] 0.524 Average Recall (AR) [ IoU0.50:0.95 | areamedium | maxDets100 ] 0.735 Average Recall (AR) [ IoU0.50:0.95 | area large | maxDets100 ] 0.826记录下基线关键指标mAP0.5:0.95 0.504、mAR 0.681单图推理耗时约22.4ms640 尺寸。这些数字将用于与 TTA 结果对比。提示验证阶段默认使用conf_thres0.001、iou_thres0.65--half开启 FP16 半精度推理以加快验证速度save_jsonTrue会把预测结果保存为 COCO 格式的yolov5x_predictions.json供 pycocotools 计算官方向量指标。第二步开启 TTA 验证Test with TTA在任何val.py命令后追加--augment即可启用 TTA同时建议将图像尺寸增大约 30%如 640 → 832以获得更优结果python val.py --weights yolov5x.pt --data coco.yaml --img 832 --augment --half开启 TTA 后每张图片会经历水平翻转 3 种分辨率的多路前向推理输出合并后再执行 NMS因此推理耗时通常是常规推理的2~3 倍——其中一部分来自更大的图像尺寸832 vs 640另一部分来自 TTA 操作本身。TTA 验证的关键输出如下val: data./data/coco.yaml, weights[yolov5x.pt], batch_size32, imgsz832, conf_thres0.001, iou_thres0.6, taskval, device, single_clsFalse, augmentTrue, verboseFalse, save_txtFalse, save_hybridFalse, save_confFalse, save_jsonTrue, projectruns/val, nameexp, exist_okFalse, halfTrue Class Images Labels P R mAP.5 mAP.5:.95: 100% 157/157 [07:2900:00, 2.86s/it] all 5000 36335 0.718 0.656 0.695 0.503 Speed: 0.2ms pre-process, 80.6ms inference, 2.7ms NMS per image at shape (32, 3, 832, 832) # --- TTA speed Evaluating pycocotools mAP... saving runs/val/exp2/yolov5x_predictions.json... Average Precision (AP) [ IoU0.50:0.95 | area all | maxDets100 ] 0.516 # --- TTA mAP Average Precision (AP) [ IoU0.50 | area all | maxDets100 ] 0.701 Average Precision (AP) [ IoU0.75 | area all | maxDets100 ] 0.562 Average Precision (AP) [ IoU0.50:0.95 | area small | maxDets100 ] 0.361 Average Precision (AP) [ IoU0.50:0.95 | areamedium | maxDets100 ] 0.564 Average Precision (AP) [ IoU0.50:0.95 | area large | maxDets100 ] 0.656 Average Recall (AR) [ IoU0.50:0.95 | area all | maxDets 1 ] 0.388 Average Recall (AR) [ IoU0.50:0.95 | area all | maxDets 10 ] 0.640 Average Recall (AR) [ IoU0.50:0.95 | area all | maxDets100 ] 0.696 # --- TTA mAR Average Recall (AR) [ IoU0.50:0.95 | area small | maxDets100 ] 0.553 Average Recall (AR) [ IoU0.50:0.95 | areamedium | maxDets100 ] 0.744 Average Recall (AR) [ IoU0.50:0.95 | area large | maxDets100 ] 0.833TTA 效果一目了然mAP0.5:0.95 从 0.504 提升到 0.516mAR 从 0.681 提升到 0.696其中小目标small的 AR 从 0.524 提升到 0.553提升最为明显——这正是 TTA 多尺度推理对弱小目标检测的典型增益。同时请注意TTA 模式下推理耗时从 22.4ms 涨到 80.6ms约为 3.6 倍且输出目录变为runs/val/exp2每次运行自动递增命名。源码中的 augment 传递链在当前 YOLOv10/Ultralytics 框架源码中--augment标志的传递链路清晰可查验证与推理共用同一入口配置层在 ultralytics/cfg/default.yaml 中augment: False # (bool) apply image augmentation to prediction sources定义了默认关闭验证层在 ultralytics/engine/validator.py 中augment self.args.augment and (not self.training)先判断是否在训练中随后在推理循环中通过preds model(batch[img], augmentaugment)把标志传入模型前向推理层在 ultralytics/engine/predictor.py 中return self.model(im, augmentself.args.augment, visualizevisualize, embedself.args.embed, *args, **kwargs)将标志透传给模型。也就是说augment是一个贯穿配置、验证器、预测器的布尔开关最终由模型前向方法决定如何执行多路增强推理。同时 tests/test_python.py 中的test_model_forward用例专门验证了model(sourceNone, imgsz32, augmentTrue)在无输入源、仅开启增强时的前向路径保证该分支始终可用。第三步TTA 推理Inference with TTAdetect.py的 TTA 用法与val.py完全一致——在任意detect.py命令后追加--augmentpython detect.py --weights yolov5s.pt --img 832 --source data/images --augment输出示例权重首次使用会自动下载--img 832会按原始宽高比适配输入如832x640、480x832YOLOv5 v5.0-267-g6a3ee7c torch 1.9.0cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB) Fusing layers... Model Summary: 224 layers, 7266973 parameters, 0 gradients image 1/2 /content/yolov5/data/images/bus.jpg: 832x640 4 persons, 1 bus, 1 fire hydrant, Done. (0.029s) image 2/2 /content/yolov5/data/images/zidane.jpg: 480x832 3 persons, 3 ties, Done. (0.024s) Results saved to runs/detect/exp Done. (0.156s)在 Ultralytics 统一框架含本仓库的 YOLOv10下同样的功能通过YOLOAPI 或 CLI 完成例如model.predict(source..., imgsz832, augmentTrue)或yolo predict ... augmentTrue。PyTorch Hub TTATTA 已内置于所有 YOLOv5 PyTorch Hub 模型中推理时传入augmentTrue即可启用import torch # 模型 model torch.hub.load(ultralytics/yolov5, yolov5s) # 或 yolov5m, yolov5x, 自定义模型 # 图像 img https://ultralytics.com/images/zidane.jpg # 或本地文件、PIL、OpenCV、numpy、多图列表 # 推理 results model(img, augmentTrue) # --- TTA 推理 # 结果 results.print() # 或 .show(), .save(), .crop(), .pandas() 等自定义 TTA 操作如果你需要调整 TTA 具体施加哪些变换例如只做水平翻转、或改变参与的多尺度集合在 YOLOv5 中可以修改models/yolo.py中DetectionModel.forward_augment()方法——它定义了多尺度缩放的尺寸集合、左右翻转以及多路输出的合并逻辑。这也是理解增强了什么、如何融合的最佳切入点该方法内部对图像做多次不同尺度的 resize并将原图与翻转图一同送入网络最后把各路的检测结果拼接后统一送入 NMS。在当前 YOLOv10 仓库中模型前向同样接收augment参数因此基于 ultralytics/engine/predictor.py 与 ultralytics/engine/validator.py 的调用链自定义 TTA 时只需保持多路前向、结果合并后 NMS的语义即可。TTA 实战注意事项综合文档与源码使用 TTA 时有几个要点与基线公平对比TTA 通常配合更大的--img约增大 30%使用对比时应同时考虑分辨率与增强本身带来的增益文档中的耗时拆分832 vs 640 的纯分辨率开销 TTA 操作开销正是为了区分两者耗时预算TTA 推理约为常规推理的 2~3 倍在实时性敏感场景需权衡精度与延迟--halfFP16可在不明显损失精度的情况下缓解部分开销NMS 参数文档示例中 TTA 模式验证采用iou_thres0.6比常规验证0.65更严格因为多路融合后会产生更多相近框需要更谨慎的去重适用场景TTA 对小目标与低置信度目标的 Recall 提升尤其明显小目标 AR 0.524 → 0.553适合离线评测、竞赛刷分、对精度要求高且不苛求速度的推理场景源码验证仓库测试 tests/test_python.py 持续回归augmentTrue前向路径修改自定义 TTA 后建议运行相关测试确保链路完整。支持的运行环境官方为 TTA 实验提供了多种开箱即用的运行环境均预装 CUDA、CUDNN、Python 与 PyTorch 等核心依赖可直接参考仓库内对应指南GCP 快速入门指南AWS 快速入门指南AzureML 快速入门指南Docker 快速入门指南总结何时该用 TTATTA 是一条零训练成本的性能提升路径只需在val.py、detect.py或 PyTorch Hub 推理中追加一个标志即可获得 mAP 与 Recall 的提升尤其利于小目标。它的代价是 2~3 倍的推理耗时与更严格的 NMS 参数调整。具体到工程决策追求极限精度离线评测、竞赛、质检回放分析→ 开启--augment并适当增大--img实时推理视频流、边缘设备→ 关闭 TTA仅把 TTA 作为离线评估的上限参考二次开发→ 通过修改前向增强方法自定义多尺度与翻转策略或参考本仓库验证器与预测器中augment的传递实现将同样的机制移植到 YOLOv10 等模型中。【免费下载链接】yolov10YOLOv10: Real-Time End-to-End Object Detection [NeurIPS 2024]项目地址: https://gitcode.com/GitHub_Trending/yo/yolov10创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表