文章目录
- Github
- 官网
- 简介
- 视频帧推理
- 视频设备ID
- 安装依赖
- 检测示例
- 分类示例
- 姿势估计
Github
- https://github.com/ultralytics/ultralytics
官网
- https://docs.ultralytics.com/zh
- https://docs.ultralytics.com/zh/quickstart/
简介
Ultralytics 是一个软件公司,专注于开发计算机视觉和深度学习工具。他们的主要产品是 YOLOv5,这是一个快速、高效的目标检测模型,特别适用于实时应用。YOLOv5 是对经典的 YOLO(You Only Look Once)系列模型的升级,采用了现代化的深度学习技术和优化策略,以提供更好的性能和更低的计算成本。
Ultralytics 还开发了其他一些工具和库,帮助研究人员和开发者在计算机视觉和深度学习领域更高效地工作。他们的开源项目广受欢迎,为社区提供了强大的工具和资源,以推动计算机视觉技术的发展和应用。
视频帧推理
使用 OpenCV (cv2) 和 YOLOv8 对视频帧进行推理。本脚本示例需要安装必要的软件包 (opencv-python 和 ultralytics).
视频设备ID
注: Mac 环境下可以使用 ffmpeg 进行搜索视频设备,当然此步骤可以省略盲填一个编号如果不出视频可再换设备编号。
brew install ffmpeg
# 列出视频的设备ID
ffmpeg -f avfoundation -list_devices true -i ""
注意: [0] FaceTime HD Camera,deviceID := 0 是电脑摄像头。
安装依赖
# 怕包冲突可以清理当前环境所有安装包
pip freeze | xargs pip uninstall -y
pip install --upgrade pip
pip install opencv-python
pip install ultralytics
检测示例
YOLOv8 这里显示的是经过预训练的检测模型。Detect、Segment 和 Pose 模型是在COCO数据集上预先训练的,而 Classify 模型则是在ImageNet数据集上预先训练的。
首次使用时,模型会自动从最新的Ultralytics 版本下载。
模型 | 尺寸(像素) | mAPval 50-95 | 速度 CPU ONNX(毫秒) | 速度 A100 TensorRT(毫秒) | params (M) | FLOPs (B) at 640 |
---|---|---|---|---|---|---|
YOLOv8n | 640 | 37.3 | 80.4 | 0.99 | 3.2 | 8.7 |
YOLOv8s | 640 | 44.9 | 128.4 | 1.20 | 11.2 | 28.6 |
YOLOv8m | 640 | 50.2 | 234.7 | 1.83 | 25.9 | 78.9 |
YOLOv8l | 640 | 52.9 | 375.2 | 2.39 | 43.7 | 165.2 |
YOLOv8x | 640 | 53.9 | 479.1 | 3.53 | 68.2 | 257.8 |
import cv2from ultralytics import YOLO# 加载 YOLOv8 模型
model = YOLO("yolov8n.pt")# 打开视频文件
# cap = cv2.VideoCapture("path/to/your/video/file.mp4")
# 或使用设备“0”打开视频捕获设备读取帧
cap = cv2.VideoCapture(0)# 设置视频帧大小
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 200)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 200)title = "YOLOv8 Inference"
# 设置窗口位置
cv2.namedWindow(title, cv2.WINDOW_NORMAL)
cv2.moveWindow(title, 200, 200)# 循环播放视频帧
while cap.isOpened():# 从视频中读取一帧success, frame = cap.read()if success:# 在框架上运行 YOLOv8 推理results = model(frame)# 在框架上可视化结果annotated_frame = results[0].plot()# 显示带标注的框架cv2.imshow(title, annotated_frame)# 如果按下“q”,则中断循环if cv2.waitKey(1) & 0xFF == ord("q"):breakelse:# 如果到达视频末尾,则中断循环break# 释放视频捕获对象并关闭显示窗口
cap.release()
cv2.destroyAllWindows()
- 输出结果
分类示例
模型 | 尺寸(像素) | acc top1 | acc top5 | 速度 CPU ONNX(毫秒) | 速度 A100 TensorRT(毫秒) | params (M) | FLOPs (B) at 640 |
---|---|---|---|---|---|---|---|
YOLOv8n-cls | 224 | 69.0 | 88.3 | 12.9 | 0.31 | 2.7 | 4.3 |
YOLOv8s-cls | 224 | 73.8 | 91.7 | 23.4 | 0.35 | 6.4 | 13.5 |
YOLOv8m-cls | 224 | 76.8 | 93.5 | 85.4 | 0.62 | 17.0 | 42.7 |
YOLOv8l-cls | 224 | 76.8 | 93.5 | 163.0 | 0.87 | 37.5 | 99.7 |
YOLOv8x-cls | 224 | 79.0 | 94.6 | 232.0 | 1.01 | 57.4 | 154.8 |
- 直接替换示例代码中的模型就可以。
model = YOLO("yolov8n-cls.pt")
- 输出结果(咖啡杯 0.78 左右)
姿势估计
模型 | 尺寸(像素) | 50-95 | mAPpose 50 | 速度 CPU ONNX(毫秒) | 速度 A100 TensorRT(毫秒) | params (M) | FLOPs (B) at 640 |
---|---|---|---|---|---|---|---|
YOLOv8n-pose | 640 | 50.4 | 80.1 | 131.8 | 1.18 | 3.3 | 9.2 |
YOLOv8s-pose | 640 | 60.0 | 86.2 | 233.2 | 1.42 | 11.6 | 30.2 |
YOLOv8m-pose | 640 | 65.0 | 88.8 | 456.3 | 2.00 | 26.4 | 81.0 |
YOLOv8l-pose | 640 | 67.6 | 90.0 | 784.5 | 2.59 | 44.4 | 168.6 |
YOLOv8x-pose | 640 | 69.2 | 90.2 | 1607.1 | 3.73 | 69.4 | 263.2 |
YOLOv8x-pose-p6 | 1280 | 71.6 | 91.2 | 4088.7 | 10.04 | 99.1 | 1066.4 |
- 直接替换示例代码中的模型就可以。
model = YOLO("yolov8n-pose.pt")