YOLOv5推理——detect.py参数列表及常用参数

1.推理指令

使用已有的模型进行推理,在命令行中传入参数

python detect.py --weight yolov5s.pt --source demo.mp4 --data coco.yaml 

# --weight训练好的或者预训练的模型文件
# --sourse要传入进行推理的文件(传入0表示打开电脑默认摄像头)
# --data数据集的配置文件

(或者直接修改detect.py文件默认参数,这样不需要在命令行传入参数直接运行python detect.py,但每次都修改有些麻烦)

最终推理结果会被放置在yolov5/runs/detect目录下 

 2.参数列表

参数功能传入信息示例
--weights指定模型路径或 Triton URL模型文件路径,如 ROOT / "Models/model_onnx/ASL_m_85.onnx"
--source指定输入文件、目录、URL、全局匹配模式、屏幕(0 代表 webcam)文件路径或目录路径等,如 ROOT / "../Datas/test-vid/love.mp4"
--data指定数据集配置文件路径数据集配置文件路径,如 ROOT / "data/data_ASL.yaml"
--imgsz指定推理图像大小一个或两个整数组成的列表,表示高和宽,如 [640]
--conf-thres设置置信度阈值浮点数,如 0.25
--iou-thres设置非极大值抑制(NMS)的 IoU 阈值浮点数,如 0.45
--max-det设置每张图像的最大检测数量整数,如 1000
--device指定 CUDA 设备,若为空则为 CPU设备编号或 "cpu",如 "0" 或 "0,1,2,3"
--view-img是否显示结果布尔值,action="store_true",若执行命令时带有该参数则为 True
--save-txt是否将结果保存为.txt 文件布尔值,action="store_true",若执行命令时带有该参数则为 True
--save-csv是否将结果以 CSV 格式保存布尔值,action="store_true",若执行命令时带有该参数则为 True
--save-conf在保存为.txt 文件的标签中是否保存置信度布尔值,action="store_true",若执行命令时带有该参数则为 True
--save-crop是否保存裁剪后的预测框布尔值,action="store_true",若执行命令时带有该参数则为 True
--nosave是否不保存图像或视频布尔值,action="store_true",若执行命令时带有该参数则为 True
--classes按类别进行过滤整数组成的列表,如 [0] 或 [0, 2, 3]
--agnostic-nms是否进行类别无关的 NMS布尔值,action="store_true",若执行命令时带有该参数则为 True
--augment是否进行增强推理布尔值,action="store_true",若执行命令时带有该参数则为 True
--visualize是否可视化特征布尔值,action="store_true",若执行命令时带有该参数则为 True
--update是否更新所有模型布尔值,action="store_true",若执行命令时带有该参数则为 True
--project指定保存结果的项目路径路径,如 ROOT / "runs/detect"
--name指定保存结果的名称字符串,如 "exp"
--exist-ok若项目 / 名称已存在是否继续,不递增布尔值,action="store_true",若执行命令时带有该参数则为 True
--line-thickness设置边界框的厚度(像素)整数,如 3
--hide-labels是否隐藏标签布尔值,action="store_true",若执行命令时带有该参数则为 True
--hide-conf是否隐藏置信度布尔值,action="store_true",若执行命令时带有该参数则为 True
--half是否使用 FP16 半精度推理布尔值,action="store_true",若执行命令时带有该参数则为 True
--dnn是否使用 OpenCV DNN 进行 ONNX 推理布尔值,action="store_true",若执行命令时带有该参数则为 True
--vid-stride设置视频帧率步长整数,如 1

3.常用参数

一般可能修改的参数有:

1. --source

    指定模型推理的输入源。

2. --weights

   指定模型的权重文件路径或Triton URL。当有新的训练好的模型或者要使用不同的预训练模型时,这个参数就需要修改。

3. --conf - thres

   置信度阈值,用于筛选检测结果中可信度较高的目标

   例如,在一个对准确性要求极高的场景下,可以适当提高`--conf - thres`,减少误检

4. --iou - thres

   是非极大值抑制(NMS)的交并比(IoU)阈值,用于去除重叠过多的检测框

   如果想要更完整地检测出目标,可能需要适当降低`--iou - thres`,但这可能会导致一些稍微重叠的检测框被保留

5. --classes

   用于按类别过滤检测结果。当只关注特定类别的目标检测时,可以修改这个参数。

   例如,模型可以检测多种物体(如人、车、动物等),但在某个应用场景中只关心人的检测,就可以通过这个参数指定只检测人的类别。

5. --device

   指定使用的计算设备,如CUDA设备或CPU。当有不同的硬件资源可用或者想要在不同设备上测试模型性能时,会修改这个参数。

### YOLOv5 7.0 中 `detect.py` 的源码解析及功能说明 #### 功能概述 YOLOv5 是一种高效的实时目标检测框架,其核心文件之一是 `detect.py`。该文件的主要目的是加载预训练模型并执行推理操作,从而完成图像或视频中的对象检测任务。尽管当前引用主要针对的是 YOLOv5-6.x 版本[^1],但可以推测 YOLOv5 7.0 的 `detect.py` 文件在结构上与其相似。 以下是基于现有知识和引用内容对 YOLOv5 7.0 中 `detect.py` 的详细解析: --- #### 主要模块与逻辑分解 ##### 1. **导入必要的库** `detect.py` 开始部分会引入一系列 Python 库以及 YOLOv5 自定义的工具类。这些库用于处理数据输入、模型加载、推理计算等功能。 ```python import argparse import os from pathlib import Path import cv2 import torch import numpy as np from models.common import DetectMultiBackend from utils.dataloaders import IMG_FORMATS, VID_FORMATS, LoadImages, LoadStreams from utils.general import (LOGGER, Profile, check_file, check_img_size, increment_path, non_max_suppression, scale_boxes, strip_optimizer) from utils.plots import Annotator, colors, save_one_box from utils.torch_utils import select_device, smart_inference_mode ``` 这部分代码的功能在于初始化所需的依赖项,并确保程序能够正常运行[^2]。 --- ##### 2. **参数解析** 通过命令行传递参数来控制脚本的行为是一个常见的设计模式。`argparse` 被用来接收用户输入的各种选项,例如权重路径、图片大小等。 ```python parser = argparse.ArgumentParser() parser.add_argument('--weights', nargs='+', type=str, default='yolov5s.pt', help='model path(s)') parser.add_argument('--source', type=str, default='data/images', help='file/dir/URL/glob') parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[640], help='inference size h,w') opt = parser.parse_args() ``` 上述代码片段允许用户指定自定义配置,比如使用的模型权重文件位置 (`--weights`) 和待检测的数据来源 (`--source`) 等[^3]。 --- ##### 3. **设备选择** 为了支持多平台部署(CPU 或 GPU),`detect.py` 提供了一个自动化的设备分配机制: ```python device = select_device(opt.device) ``` 此函数会优先尝试使用 NVIDIA CUDA 加速硬件资源;如果不可用,则回退到 CPU 进行运算。 --- ##### 4. **模型加载** 利用 `DetectMultiBackend` 类实例化一个检测器对象,它负责管理不同类型的后端引擎(如 ONNX、TensorRT)。这一步骤对于实际推断至关重要。 ```python model = DetectMultiBackend(weights=opt.weights, device=device, dnn=False, data=None, fp16=True) stride, names, pt = model.stride, model.names, model.pt imgsz = check_img_size(imgsz=imgsz, s=stride) ``` 此处还包含了尺寸校验环节以匹配网络需求。 --- ##### 5. **数据流准备** 根据传入的目标媒介形式(单张静态图还是动态影像序列),分别调用了不同的加载方法——要么逐帧读取本地磁盘上的素材,要么捕捉来自摄像头或其他直播渠道的内容。 ```python if webcam: view_img = True dataset = LoadStreams(source, img_size=imgsz, stride=stride, auto=pt and not jit) else: dataset = LoadImages(source, img_size=imgsz, stride=stride, auto=pt and not jit) ``` --- ##### 6. **前向传播与后处理** 当每一批次样本准备好之后便进入预测阶段,在这里应用了非极大抑制算法去除冗余框体只保留最优解集。 ```python for path, im, im0s, vid_cap, s in dataset: im = torch.from_numpy(im).to(device) im = im.half() if half else im.float() # uint8 to fp16/32 im /= 255 # normalize to [0, 1] pred = model(im) det = non_max_suppression(pred, conf_thres=conf_thres, iou_thres=iou_thres)[0] annotator = Annotator(im0.copy(), line_width=line_thickness, example=str(names)) if len(det): det[:, :4] = scale_coords(im.shape[2:], det[:, :4], im0.shape).round() for *xyxy, conf, cls in reversed(det): c = int(cls) # integer class label = f'{names[c]} {conf:.2f}' annotator.box_label(xyxy, label, color=colors(c, True)) cv2.imshow('Detection Result', im0) cv2.waitKey(1) # 1 millisecond delay per frame update. ``` 以上展示了如何提取边界框坐标及其对应的类别标签信息,并将其可视化叠加至原始画面上显示给最终使用者观看效果。 --- #### 总结 综上所述,`detect.py` 实现了一套完整的从输入获取直至输出展示的工作流程,涵盖了多个关键技术要点如跨平台兼容性考虑、高效内存管理策略等方面的设计理念均体现了作者团队深厚的技术功底。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值