)
手把手教你部署YOLO系列目标检测模型含代码使用Github官方代码版本1 前言2 项目获取和部署2.1 项目获取2.2 部署项目3 使用官方权重进行检测3.1 单图片检测3.2 视频检测4 制作自己的数据集训练模型1 前言YOLOYou Only Look Once系列是目前目标检测领域最具影响力的算法之一。它由 Joseph Redmon 等人于 2016 年首次提出核心思想是将目标检测任务转化为单次回归问题直接在整张图像上预测目标的类别与边界框从而实现了检测速度与精度的出色平衡。经过多年迭代YOLO 已从最初的 YOLOv1 演进到 YOLOv5、YOLOv8 乃至 YOLOv9、YOLOv10 等众多版本在工业界和学术界都得到了广泛应用覆盖自动驾驶、安防监控、工业质检、医学影像等众多场景。Ultralytics 是 YOLO 系列最活跃的官方维护团队之一其开源的 Ultralytics YOLO 项目GitHub 仓库 ultralytics/ultralytics提供了统一的模型训练、验证与推理接口支持 YOLOv5、YOLOv8 及后续版本并内置了丰富的预训练权重、数据集工具与可视化能力。该项目以简洁的 Python API 和命令行工具著称让开发者无需深入底层实现即可快速完成目标检测任务的部署与落地。大部分教程都是直接安装ultralytics的库运行yolo这样缺少一些可定制性例如想要修改、改进模型比较困难本文是直接现在官方项目源码运行具有更大的灵活性。本教程将手把手带你基于 Ultralytics 官方 GitHub 项目完成 YOLO 系列目标检测模型的获取、部署与推理全程提供可运行的代码示例帮助你从零开始跑通整个流程。2 项目获取和部署2.1 项目获取Ultralytics在Github上有官方项目大家可以自行搜索下载。由于官方代码下载之后还需要下载对应权重文件加上有时候Git连不上所以我帮大家下载好了项目源码和权重文件YOLOv8、YOLO11、YOLO12供大家免费下载下载位置在2.2 部署项目上述链接下载下来之后是一个压缩包解压出来之后内容如下第一个文件夹就是Ultralytics的官方项目一会儿我们要用Pycharm打开这个项目。第二个文件夹是官方提供的权重我下载了一些提供给各位使用。如果需要更多权重可以查看官方项目中的“readme.md”文档。接下来我们使用Pycharm用VSCode也行不影响以项目形式打开“ultralytics-main”这个文件夹。打开之后可以考虑建立一个新的环境专门用于运行这个YOLO项目。如果不知道怎么样安装环境可以参考我之前的博文手把手教你安装Pytorch环境。假设你现在新建了一个名为“yolo”的anaconda环境那么请你激活他让后使用“pip install ”命令将Pytorch环境安装好然后将下列库全部安装好。matplotlib3.3.0numpy1.24.4# pinned by Snyk to avoid a vulnerabilityopencv-python4.6.0 pillow7.1.2 pyyaml5.3.1 requests2.23.0 scipy1.4.1 tqdm4.64.0为了方便你可以将上面的内容复制到一个txt文档中例如叫做reqs.txt然后使用命令“pip install -r reqs.txt的路径/reqs.txt”一次性将所需的库全部装好。在运行过程中如果还提示缺少什么库那就装什么库即可。最后不要忘了在Pycharm中将项目的解释器设置为刚才部署好环境的那个解释器在本例中就是“yolo”环境中的解释器。3 使用官方权重进行检测好经过上述步骤项目就部署好了接下来我们尝试使用官方的模型进行预测。3.1 单图片检测首先将“weights”文件夹直接拷贝到项目根目录然后建立一个名为“detect.py”的脚本然后编写测试脚本。fromultralyticsimportYOLOif__name____main__:# 从官方文件中加载模型modelYOLO(modelrweights/yolov8n.pt)#模型路径model.predict(sourcerultralytics/assets,#图片路径imgsz416,conf0.5,saveTrue,showTrue,modeexp,show_labelsTrue)这里你先只需要了解两个参数如上面代码的注释所示。一个是你要加载的模型路径上述代码加载了“weights”文件夹中的“yolov8n.pt”也就是官方YOLOv8n模型用于检测需要检测的图片放在文件夹“ultralytics/assets”中这里面有官方提供的两张图片你可以把他换成你自己想检测的图片文件夹。直接运行上述脚本检测好的图像会一闪而过结果存储在根目录的“runs/detect”文件夹中每次检测结果会在这个文件夹建立一个由“mode”参数指定的文件夹例如本例结果就存放在“runs/detect/exp”文件夹中。同一个“mode”参数运行多次会自动以“1、2、3…”顺序编号。3.2 视频检测视频检测实际上核心原理和图像检测一模一样只不过逻辑复杂一点点。首先我们从视频流可以是视频文件或者摄像头读取一帧图像然后送给YOLO检测最后显示出来。代码如下 YOLO 视频目标检测 —— 实时显示版OpenCV 用法: python detect_video_show.py --source input.mp4 --model yolov8n.pt 按键: q 退出, s 保存当前帧截图 importargparseimporttimefrompathlibimportPathimportcv2fromultralyticsimportYOLOdefmain():parserargparse.ArgumentParser(descriptionYOLO 视频目标检测实时显示)parser.add_argument(--source,default0,help输入视频路径或 0 表示摄像头)parser.add_argument(--model,defaultweights/yolov8n.pt,help模型权重路径)parser.add_argument(--conf,typefloat,default0.25,help置信度阈值)parser.add_argument(--iou,typefloat,default0.7,helpNMS IoU 阈值)parser.add_argument(--device,defaultcpu,help推理设备: cpu / 0)parser.add_argument(--save,actionstore_true,help是否保存输出视频)parser.add_argument(--output,defaultruns/detect/video_show,help输出目录)parser.add_argument(--imgsz,typeint,default640,help推理分辨率)argsparser.parse_args()# 打开视频源支持摄像头 0srcint(args.source)ifargs.source.isdigit()elseargs.sourceifisinstance(src,str)andnotPath(src).exists():raiseFileNotFoundError(f视频文件不存在:{src})capcv2.VideoCapture(src)ifnotcap.isOpened():raiseRuntimeError(f无法打开视频源:{args.source})# 视频信息fpscap.get(cv2.CAP_PROP_FPS)or25wint(cap.get(cv2.CAP_PROP_FRAME_WIDTH))hint(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))print(f视频信息:{w}x{h}{fps:.2f}FPS)# 输出视频写入器writerNoneout_dirPath(args.output)ifargs.save:out_dir.mkdir(parentsTrue,exist_okTrue)out_pathout_dir/f{Path(args.source).stem}_out.mp4fourcccv2.VideoWriter_fourcc(*mp4v)writercv2.VideoWriter(str(out_path),fourcc,fps,(w,h))print(f输出视频将保存至:{out_path})# 加载模型modelYOLO(args.model)prev_ttime.time()whileTrue:ret,framecap.read()ifnotret:print(视频结束或读取失败)break# 推理传入单帧verboseFalse 关闭逐帧日志resultsmodel.predict(sourceframe,confargs.conf,iouargs.iou,deviceargs.device,imgszargs.imgsz,verboseFalse,)# 画框result.plot() 返回 BGR 图可直接交给 OpenCVannotatedresults[0].plot()# 计算并显示 FPSnowtime.time()fps_now1.0/max(now-prev_t,1e-6)prev_tnow cv2.putText(annotated,fFPS:{fps_now:.1f},(10,30),cv2.FONT_HERSHEY_SIMPLEX,1.0,(0,255,0),2,)# 显示cv2.imshow(YOLO Video Detection (press q to quit),annotated)# 保存ifwriterisnotNone:writer.write(annotated)# 按键处理keycv2.waitKey(1)0xFFifkeyord(q):print(用户退出)breakelifkeyord(s):shotout_dir/fshot_{int(time.time())}.jpgout_dir.mkdir(parentsTrue,exist_okTrue)cv2.imwrite(str(shot),annotated)print(f已保存截图:{shot})cap.release()ifwriterisnotNone:writer.release()cv2.destroyAllWindows()print(完成)if__name____main__:main()附检测结果。nano版本检测性能还是有限FPS是在老古董5代低压i7上跑出来的。4 制作自己的数据集训练模型下一篇博文更新喜欢可以点个关注。