CV Method:YOLOv10 vs YOLOv8


前言

YOLOv10已经开源一段时间了,经过我实际使用测试,也确实性能更好一些,YOLOv10基于v8代码框架改进,so 之前v8可用的大部分trick在v10上可直接代码移植过去(我自己尝试了下,大部分code不需要改动,直接实现装备继承)。本文主要比较一下v10 和 v8之间的区别和改进。


一、介绍

yolov10最重要的point就是它的 NMS-free 检测功能,我们知道NMS是检测发展中重要的一环,yolov10通过one-to-onehead实现了不需要NFS的检测模型,这可以有效提升模型的执行速度。此外提升性能的trick还有——
Key features as follow
1) 轻量分类head
2)空间-通道解藕下采样
3)rank-guided block design

二、YOLOv8 and YOLOv10 Comparison

1.模型结构

YOLOv8:

使用C2f模块完成多尺度特征交互,需要依赖NMS完成post process
请添加图片描述

YOLOv10:

neck部分采用简单的PAN模块,head部分使用两个一致的head,分别为One-to-many, 和 One-to-One。

One-to-many:在训练期间,多个预测框被分配给一个真实物体标签。这种策略提供了丰富的监督信号,优化效果更好。(此部分仍需使用NMS,比如取top100置信度的box)

One-to-One:仅一个预测框被分配给一个真实物体标签,避免了NMS,但由于监督信号较弱,容易导致收敛速度慢和性能欠佳。(该部分code实现中只需要取top1置信度的box即可(TAA分配算法中取top1),则不需要过NMS)

双头架构:模型在训练期间使用两个预测头,一个使用一对多分配,另一个使用一对一分配。这样,模型可以在训练期间利用一对多分配的丰富监督信号,而在推理期间则使用一对一分配的预测结果,从而实现无NMS的高效推理。

请添加图片描述
请添加图片描述

一致性度量: 为了在训练期间保持两个预测头的一致性,提出了一致匹配度量。通过调整匹配度量参数,使得一对一和一对多分配的监督信号一致,减少了训练期间的监督差距,提升了模型的预测质量。

整体优化:轻量级分类头和其他架构优化减少了计算冗余(such 使用depthwise & pointwise & 结构重参数化(类似repvgg)),另外一些很多结构化策略的设计还是很值得学习的,可以看看原文。

2. 推理和时延

请添加图片描述
在相同的COCO AP下,YOLOv10-S is 1.8× faster than RT-DETR-R18.

3. 检测表现

通过国外大佬的实际评测发现,V10在小目标检测上相比V8有着更好的效果在V8中,针对小目标检测,通常需要调整box置信度阈值。V10由于one-to-one特性,只需要使用较低的阈值即可。

4. 参数利用

YOLOv10-B 相比YOLOv9-C 降低了46%的latency, 和25%的参数量,且有着相同的性能。

5. 关键比较

Speed and Efficiency: YOLOv10 由于NMS-free方法在后处理速度上优于yolov8,更适合real-time检测。

Detection Accuracy: v8和v10检测精度都很不错,但v10在小目标上有着更直观的优势。

Parameter Optimization: YOLOv10 由于更多结构优化,其参数量相比v8更少,模型更紧凑。


总结

v10有效解决了YOLO系列一直以来的限制,比如NMS,小目标检测问题,确实是很大的启发。v10是基于v8框架进行修改的,v8的框架确实很强大,同样很值得学习!

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将YOLOv8与Flask结合起来进行配置,你可以按照以下步骤进行操作: 1. 安装依赖:首先,确保你已经安装了Flask和YOLOv8的依赖。你可以使用以下命令安装它们: ``` pip install flask pip install opencv-python ``` 2. 导入必要的模块:在你的Python脚本中,导入所需的模块: ```python from flask import Flask, render_template, request import cv2 import numpy as np ``` 3. 创建Flask应用:使用以下代码创建一个Flask应用: ```python app = Flask(__name__) ``` 4. 创建路由:创建一个路由来处理图像上传和检测: ```python @app.route('/', methods=['GET', 'POST']) def upload_image(): if request.method == 'POST': # 从请求中获取上传的图像文件 image_file = request.files['image'] # 将图像文件读取为OpenCV图像 image = cv2.imdecode(np.frombuffer(image_file.read(), np.uint8), -1) # 进行YOLOv8目标检测 # ... # 返回检测结果 return render_template('result.html', result=result) return render_template('index.html') ``` 5. 创建HTML模板:创建两个HTML模板,一个用于上传图像的表单页面(index.html),一个用于显示检测结果(result.html): - index.html: ```html <form method="post" enctype="multipart/form-data" action="/"> <input type="file" name="image"> <input type="submit" value="Upload"> </form> ``` - result.html: ```html <h1>Detection Result</h1> <img src="{{ result }}" alt="Detection Result"> ``` 6. 运行应用:在脚本的末尾添加以下代码来运行Flask应用: ```python if __name__ == '__main__': app.run(debug=True) ``` 现在,当你运行这个脚本并访问主页时,你将看到一个上传图像的表单。选择一张图像并上传后,YOLOv8将对图像进行检测,并显示检测结果。 请注意,上述代码只提供了一个基本的示例,你可能需要根据自己的需求进行修改和扩展。此外,还需要配置YOLOv8模型和权重文件的路径以进行目标检测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值