一、 番外篇-YOLOV10尝鲜
最近由清华大学的研究团队研发的最新的YOLOV10模型。这一新一代的YOLO模型专注于实时端到端的目标检测。YOLOv10在多个方面进行了改进,包括优化模型架构、消除非极大值抑制(NMS)后处理步骤,并引入了高效的模型设计策略,从而在提高检测精度的同时显著降低了计算开销和推理延迟。
具体来说,YOLOv10的研发团队包括Ao Wang, Hui Chen, Lihao Liu, Kai Chen, Zijia Lin, Jungong Han和Guiguang Ding。这些研究人员通过广泛的实验,证明了YOLOv10在不同模型规模上实现了最先进的性能和效率。例如,与YOLOv9-C相比,YOLOv10-B在相同性能下延迟减少了46%,参数减少了25%。
通过这些改进,YOLOv10在实时性和精度方面都达到了新的高度,适用于各种实时目标检测应用,如自动驾驶、视频监控和智能安防等。
好奇心驱使尝试一下v10模型的效果。下载了yolov10s.pt版本,进行实时视频监控测试。
各版本下载和介绍如下:
模型下载:
YOLOv10-N:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10n.pt
YOLOv10-S:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10s.pt
YOLOv10-M:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10m.pt
YOLOv10-B:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10b.pt
YOLOv10-L:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10l.pt
YOLOv10-X:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10x.pt
模型介绍:
二、YOLOv10实战:
1.实时检测
30行左右代码构建基于YOLOv10的实时视频监控**
代码如下:运行后电脑摄像头自动开启,实时检测摄像头内的目标。
import cv2
from ultralytics import YOLOv10
model = YOLOv10("yolov10s.pt")
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break # 如果没有读取到帧,退出循环
results = model.predict(frame)
# 遍历每个预测结果
for result in results:
# 结果中的每个元素对应一张图片的预测
boxes = result.boxes # 获取边界框信息
for box in boxes:
x1, y1, x2, y2 = map(int, box.xyxy[0])
cls = int(box.cls[0])
conf = float(box.conf[0])
cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2)
cv2.putText(frame, f'{model.names[cls]} {conf:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
(255, 0, 0), 2)
# 显示带有检测结果的帧
cv2.imshow('YOLOv10实时检测', frame)
# 按'q'键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
检测结果:
检测效果确实很赞!
参考:基于YOLOv10实现你的第一个视觉AI大模型
另附:基于YOLOv8的实时视频监控写法如下:
代码如下:运行后电脑摄像头自动开启,实时检测摄像头内的目标。
完整代码:
import cv2
from ultralytics import YOLO
model = YOLO("yolov8n.pt") #
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break # 如果没有读取到帧,退出循环
results = model.predict(frame)
class_counts = {}
for result in results:
boxes = result.boxes
for box in boxes:
x1, y1, x2, y2 = map(int, box.xyxy[0])
cls = int(box.cls[0])
conf = float(box.conf[0])
class_name = model.names[cls]
# 统计每种类别的数量
if class_name in class_counts:
class_counts[class_name] += 1
else:
class_counts[class_name] = 1
# 在图像上绘制边界框和标签
cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2)
cv2.putText(frame, f'{class_name} {conf:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
(255, 0, 0), 2)
# 在图像上绘制类别数量
y_offset = 30
for class_name, count in class_counts.items():
cv2.putText(frame, f'{class_name}: {count}', (10, y_offset), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)
y_offset += 30
# 显示带有检测结果的帧
cv2.imshow('YOLO实时检测', frame)
# 按'q'键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
检测效果如下:
2.YOLOV10图片推理:
完整代码如下:
from ultralytics import YOLOv10
import supervision as sv
import cv2
MODEL_PATH = 'yolov10s.pt'
IMAGE_PATH = 'test_images_1/veh2.jpg'
model = YOLOv10(MODEL_PATH)
image = cv2.imread(IMAGE_PATH)
results = model(source=image, conf=0.25, verbose=False)[0]
detections = sv.Detections.from_ultralytics(results)
box_annotator = sv.BoxAnnotator()
category_dict = {
0: 'person', 1: 'bicycle', 2: 'car', 3: 'motorcycle', 4: 'airplane', 5: 'bus',
6: 'train', 7: 'truck', 8: 'boat', 9: 'traffic light', 10: 'fire hydrant',
11: 'stop sign', 12: 'parking meter', 13: 'bench', 14: 'bird', 15: 'cat',
16: 'dog', 17: 'horse', 18: 'sheep', 19: 'cow', 20: 'elephant', 21: 'bear',
22: 'zebra', 23: 'giraffe', 24: 'backpack', 25: 'umbrella', 26: 'handbag',
27: 'tie', 28: 'suitcase', 29: 'frisbee', 30: 'skis', 31: 'snowboard',
32: 'sports ball', 33: 'kite', 34: 'baseball bat', 35: 'baseball glove',
36: 'skateboard', 37: 'surfboard', 38: 'tennis racket', 39: 'bottle',
40: 'wine glass', 41: 'cup', 42: 'fork', 43: 'knife', 44: 'spoon', 45: 'bowl',
46: 'banana', 47: 'apple', 48: 'sandwich', 49: 'orange', 50: 'broccoli',
51: 'carrot', 52: 'hot dog', 53: 'pizza', 54: 'donut', 55: 'cake',
56: 'chair', 57: 'couch', 58: 'potted plant', 59: 'bed', 60: 'dining table',
61: 'toilet', 62: 'tv', 63: 'laptop', 64: 'mouse', 65: 'remote', 66: 'keyboard',
67: 'cell phone', 68: 'microwave', 69: 'oven', 70: 'toaster', 71: 'sink',
72: 'refrigerator', 73: 'book', 74: 'clock', 75: 'vase', 76: 'scissors',
77: 'teddy bear', 78: 'hair drier', 79: 'toothbrush'
}
labels = [
f"{category_dict[class_id]} {confidence:.2f}"
for class_id, confidence in zip(detections.class_id, detections.confidence)
]
annotated_image = box_annotator.annotate(
image.copy(), detections=detections, labels=labels
)
# cv2.imwrite('result.jpg', annotated_image)
cv2.imshow("res",annotated_image)
cv2.waitKey()
cv2.destroyAllWindows()
检测结果如下:
参考链接:https://github.com/THU-MIG/yolov10
下载权重:https://github.com/THU-MIG/yolov10/releases/download/v1.0/yolov10n.pt
参考:YOLOv10尝鲜测试五分钟极简配置
三、 YOLO版本简史
YOLO(You Only Look Once)系列目标检测模型的发展历程中,不同版本是由不同的研究团队研发的。以下是各个版本的研发团队简介:
YOLOv1
研发团队:Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi
- 机构:华盛顿大学和Facebook AI Research (FAIR)
- 发布时间:2016年
- 简介:YOLOv1是YOLO系列的第一个版本,提出了一种统一的目标检测方法,能够在单次前向传递中预测物体边界和类别。
YOLOv2 (YOLO9000)
研发团队:Joseph Redmon, Ali Farhadi
- 机构:华盛顿大学
- 发布时间:2017年
- 简介:YOLOv2在YOLOv1的基础上进行了改进,引入了多尺度训练和Batch Normalization等技术,并扩展了模型的检测能力(YOLO9000)来识别9000种类别。
YOLOv3
研发团队:Joseph Redmon, Ali Farhadi
- 机构:华盛顿大学
- 发布时间:2018年
- 简介:YOLOv3进一步改进了网络结构,引入了残差网络和多尺度特征金字塔,使其在精度和速度上有显著提升。
YOLOv4
研发团队:Alexey Bochkovskiy, Chien-Yao Wang, Hong-Yuan Mark Liao
- 机构:Alexey Bochkovskiy的独立研究与台湾国立中山大学
- 发布时间:2020年
- 简介:YOLOv4在YOLOv3的基础上,结合了许多新技术如CSPNet、Mish激活函数和SAM,进一步提高了性能。
YOLOv5
研发团队:Glenn Jocher
- 机构:Ultralytics LLC
- 发布时间:2020年
- 简介:YOLOv5由Ultralytics团队开发,注重易用性和快速部署,提供了多种预训练模型和丰富的工具,便于在各种应用中使用。
YOLOv6
研发团队:Meituan-Dianping
- 机构:美团
- 发布时间:2022年
- 简介:YOLOv6专注于工业应用中的高效目标检测,优化了模型的推理速度和精度,适合在生产环境中部署。
YOLOv7
研发团队:Wong Kin-Yiu, Alexey Bochkovskiy, Chien-Yao Wang, Hong-Yuan Mark Liao
- 机构:台湾国立中山大学
- 发布时间:2022年
- 简介:YOLOv7进一步优化了网络架构和训练策略,使得模型在速度和精度上都达到了新的高度。
YOLOv8
研发团队:Ultralytics LLC
- 机构:Ultralytics LLC
- 发布时间:2023年
- 简介:YOLOv8延续了YOLOv5的开发理念,通过改进的架构和训练方法,进一步提升了目标检测的性能和效率。
YOLOv9
研发团队:Ultralytics LLC
- 机构:Ultralytics LLC
- 发布时间:2024年
- 简介:YOLOv9在YOLOv8的基础上,针对大规模数据集和复杂场景进行了优化,提供了更高的检测精度和速度。
YOLOv10
研发团队:Ao Wang, Hui Chen, Lihao Liu, Kai Chen, Zijia Lin, Jungong Han, Guiguang Ding
- 机构:清华大学
- 发布时间:2024年
- 简介:YOLOv10通过优化模型架构和消除非极大值抑制(NMS),显著提升了实时目标检测的性能和效率。
这些不同版本的YOLO模型在各自的时代都对目标检测技术做出了重要贡献,推动了这一领域的发展。各个版本在精度、速度和易用性上都有不同的侧重点,以满足不同应用场景的需求。