简介:本文深度解析YOLOv5中detect.py脚本的核心参数,涵盖模型加载、输入处理、推理配置及结果可视化等关键环节,结合代码示例与实用建议,帮助开发者高效掌握参数调优技巧。
YOLOv5的detect.py是目标检测任务的核心入口脚本,负责加载预训练模型、处理输入数据(图像/视频/流)、执行推理并输出检测结果。其参数设计遵循模块化原则,主要分为四大类:模型配置、输入处理、推理控制和输出可视化。通过解析这些参数,开发者可灵活控制检测流程的精度、速度和展示效果。
脚本通过argparse库实现命令行参数解析,核心参数包括:
weights、device、halfsource、imgsz、conf_thres、iou_thressave_txt、save_conf、save_crop、project、nameaugment、agnostic_nms、classes调用时,参数通过parser.add_argument()定义,例如:
parser.add_argument('--weights', nargs='+', type=str, default='yolov5s.pt', help='model.pt path(s)')parser.add_argument('--source', type=str, default='data/images', help='source')
--weights)yolov5s.pt)或多模型(['yolov5s.pt', 'yolov5m.pt'])并行推理。torch.load()加载,权重文件需与代码版本匹配(如YOLOv5 v6.0+的.pt文件包含模型结构和权重)。runs/train/exp/weights/best.pt作为权重输入。--device)cpu/0/cuda:0),默认自动检测可用设备。torch.cuda.is_available()判断GPU可用性,若指定device='cpu'则强制使用CPU。device=0(单卡)或device='0,1'(多卡并行)。half=False禁用半精度加速,避免兼容性问题。--half)
if device.type != 'cpu' and half:model.half() # 转换为半精度
--source)data/images/bus.jpgdata/videos/street.mp4data/images/(处理目录下所有文件)rtsp://example.com/stream(需FFmpeg支持)screen(实时捕获屏幕)cv2.VideoCapture()或PIL.Image.open()读取,统一转换为torch.Tensor。--imgsz)640或1280),影响模型感受野和推理速度。imgsz x imgsz,长边填充至方形(保持长宽比)。imgsz(如1280)以保留细节。imgsz(如320)以提升帧率。--conf-thres)0.25),值越高结果越精确但可能漏检。0.5以上。0.2以捕捉更多潜在目标。--iou-thres(IOU阈值,默认0.45)、--agnostic-nms(类别无关NMS)。iou-thres至0.3。agnostic-nms避免同类框误删。--classes)--classes 0 2 3对应人、车、卡车)。--project/--name)runs/detect/project/name/目录,包含:vis/)labels/,若save_txt=True)crops/,若save_crop=True)project='my_project'和name='exp'指定。--line-thickness)3),提升可视化效果。
cv2.rectangle(img, pt1, pt2, color, thickness=args.line_thickness)
--augment)--workers)8),加速批量推理。16。2-4避免资源竞争。
python detect.py \--weights yolov5s.pt \--source data/videos/test.mp4 \--imgsz 1280 \--conf-thres 0.4 \--iou-thres 0.5 \--save-txt \--project runs/custom \--name exp1 \--device 0 \--half
此命令使用YOLOv5s模型在GPU 0上以1280分辨率处理视频,保存检测框文本结果至runs/custom/exp1/labels/。
imgsz、提高conf-thres、启用augment。imgsz、禁用half=False(CPU)、降低workers。classes和agnostic-nms聚焦特定目标。save_txt和save_crop为后续分析提供结构化数据。通过深入理解detect.py的参数逻辑,开发者可针对不同场景(实时监控、工业检测、自动驾驶等)实现高效的目标检测解决方案。