《博主简介》
小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。
✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~
👍感谢小伙伴们点赞、关注!
《------往期经典推荐------》
二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】,持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~
《------正文------》
简介
继 YOLOv8 和 YOLOv9 之后,YOLOv10也相继推出。这一突破性的迭代有望在目标检测领域实现重大飞跃。让我们深入研究细节,了解 YOLOv10 如何赋能计算机视觉的未来。
YOLOv10 擅长精确定位和识别图像和视频中的物体。这种能力构成了众多应用的支柱,包括自动驾驶汽车、先进的安全系统和强大的图像搜索引擎。然而,YOLOv10 在这些基础上引入了超越 YOLOv8 和 YOLOv9 的突破性创新。
YOLOv10 性能的关键创新:
- 无 NMS 训练:YOLOv10 通过采用一种称为一致双重分配的新技术,消除了训练期间对非最大抑制 (NMS) 的需求。这简化了推理过程,从而显著减少了延迟,使实时对象检测速度更快。
- 整体模型设计:YOLOv10 的架构师精心优化了模型的各个组件,将效率和准确性放在首位。这种整体方法包括轻量级分类头、独特的空间通道解耦下采样技术和秩引导块设计。其结果是一个在不牺牲计算效率的情况下实现卓越性能的模型。
- 增强的模型能力:YOLOv10 集成了大核卷积和部分自注意力模块等尖端功能。这些改进提高了模型的性能,而不会产生大量的计算成本。这种功耗和效率之间的平衡使 YOLOv10 成为适用于更广泛计算机视觉任务的多功能工具。
通过结合这些创新,YOLOv10 将自己定位为实时对象检测的强大引擎。它能够提供卓越的准确性和效率,为各种计算机视觉应用带来令人兴奋的可能性。请继续关注 YOLOv10 如何塑造这个充满活力的领域的未来!
使用 YOLOv10 处理图像和视频
步骤 1:安装必要的库
pip install opencv-python ultralytics
第 2 步:导入库
import cv2 from ultralytics import YOLO
第 3 步:选择模型尺寸
model = YOLO("yolov10x.pt")
可以比较不同的型号并权衡它们各自的优缺点。在这种情况下,我们选择了 yolov10x.pt。
第 4 步:编写一个函数来检测图像和视频中的对象
def predict(chosen_model, img, classes=[], conf=0.5): if classes: results = chosen_model.predict(img, classes=classes, conf=conf) else: results = chosen_model.predict(img, conf=conf) return results def predict_and_detect(chosen_model, img, classes=[], conf=0.5, rectangle_thickness=2, text_thickness=1): results = predict(chosen_model, img, classes, conf=conf) for result in results: for box in result.boxes: cv2.rectangle(img, (int(box.xyxy[0][0]), int(box.xyxy[0][1])), (int(box.xyxy[0][2]), int(box.xyxy[0][3])), (255, 0, 0), rectangle_thickness) cv2.putText(img, f"{result.names[int(box.cls[0])]}", (int(box.xyxy[0][0]), int(box.xyxy[0][1]) - 10), cv2.FONT_HERSHEY_PLAIN, 1, (255, 0, 0), text_thickness) return img, results
predict()
功能
此函数采用三个参数:
chosen_model
:用于预测的训练模型img
:要进行预测的图像classes
:(可选)要将预测筛选到的类名列表conf
:(可选)要考虑的预测的最小置信度阈值
该函数首先检查是否提供了 classes
参数。如果是,则使用 classes
参数调用该 chosen_model.predict()
方法,该参数仅将预测筛选为这些类。否则,将调用该 chosen_model.predict()
方法时不带 classes
参数,该参数将返回所有预测。
该 conf
参数用于筛选出置信度分数低于指定阈值的预测。这对于消除误报很有用。
该函数返回预测结果列表,其中每个结果都包含以下信息:
name
:预测类的名称conf
:预测的置信度分数box
:预测对象的边界框
predict_and_detect()
功能
此函数采用与 predict()
函数相同的参数,但除了预测结果外,它还返回带注释的图像。
该函数首先调用该 predict()
函数以获取预测结果。然后,它循环访问预测结果,并在每个预测对象周围绘制一个边界框。预测类的名称也写在边界框上方。
该函数返回一个包含带注释的图像和预测结果的元组。
以下是这两个函数之间差异的摘要:
- 该
predict()
函数仅返回预测结果,而该predict_and_detect()
函数还返回带注释的图像。 - 该
predict_and_detect()
函数是predict()
函数的包装器,这意味着它在内部调用函数predict()
。
第 5 步:使用 YOLOv10 检测图像中的对象
# read the image image = cv2.imread("YourImagePath") result_img, _ = predict_and_detect(model, image, classes=[], conf=0.5)
如果要检测特定类(可在此处找到),只需在类列表中输入对象的 ID 号即可。
第 6 步:保存并绘制结果图像
cv2.imshow("Image", result_img) cv2.imwrite("YourSavePath", result_img) cv2.waitKey(0)
第 7 步:使用 YOLOv10 检测视频中的对象
video_path = r"YourVideoPath" cap = cv2.VideoCapture(video_path) while True: success, img = cap.read() if not success: break result_img, _ = predict_and_detect(model, img, classes=[], conf=0.5) cv2.imshow("Image", result_img) cv2.waitKey(1)
第 8 步:保存结果视频
# defining function for creating a writer (for mp4 videos) def create_video_writer(video_cap, output_filename): # grab the width, height, and fps of the frames in the video stream. frame_width = int(video_cap.get(cv2.CAP_PROP_FRAME_WIDTH)) frame_height = int(video_cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) fps = int(video_cap.get(cv2.CAP_PROP_FPS)) # initialize the FourCC and a video writer object fourcc = cv2.VideoWriter_fourcc(*'MP4V') writer = cv2.VideoWriter(output_filename, fourcc, fps, (frame_width, frame_height)) return writer
只需使用上面的函数和代码即可
output_filename = "YourFilename" writer = create_video_writer(cap, output_filename) video_path = r"YourVideoPath" cap = cv2.VideoCapture(video_path) while True: success, img = cap.read() if not success: break result_img, _ = predict_and_detect(model, img, classes=[], conf=0.5) writer.write(result_img) cv2.imshow("Image", result_img) cv2.waitKey(1) writer.release()
结论
在本教程中,我们学习了如何使用 YOLOv10 检测图像和视频中的对象。如果您觉得此代码有用,感谢点赞关注。
引用
YOLOv10源码:https://github.com/THU-MIG/yolov10
好了,这篇文章就介绍到这里,感谢点赞关注,更多精彩内容持续更新中~