一、yolov8简要介绍
Yolov8建立在Yolo系列历史版本的基础上,并引入了新的功能和改进点,以进一步提升性能和灵活性。Yolov8具有以下特点:
1. 高效性:Yolov8采用了新的骨干网络、新的Ancher-Free检测头和新的损失函数,可在CPU到GPU的多种硬件平台上运行,使得模型在运行速度和准确性方面都表现出色。
2. 创新性:Yolov8借鉴了Yolov5、Yolov6、YoloX等模型的设计优点,全面提升改进了Yolov5模型结构,同时保持了Yolov5工程化简洁易用的优势。
3. 易用性:Ultralytics没有直接将开源库命名为Yolov8,而是直接使用"ultralytics",将其定位为算法框架,而非某一个特定算法。这使得Yolov8开源库不仅仅能够用于Yolo系列模型,而且能够支持非Yolo模型以及分类分割姿态估计等各类任务。
4. 全面性:Yolov8在目标检测、图像分割、姿态估计等任务中都表现出色,成为实现这些任务的最佳选择。
YOLOv8是一种无锚(Anchor-Free)模型,这意味着它直接预测对象的中心,而不是通过预测锚框的偏移量来定位对象。相对于使用锚框的传统方法,无锚模型通过减少需要预测的边界框的数量,加速了复杂的推理步骤,如非极大值抑制(NMS)。
模型结构图
二、训练环境安装,验证
可以参考这个链接:https://www.xdnf.cn/news/212815.html
三、模型转换
1. pt模型与onnx模型 , pt 模型和 onnx 模型是两种不同的模型文件格式,用于表示深度学习模型。它们之间的主要区别包括:
a. 文件格式:
pt 模型:这是PyTorch框架的权重文件格式,通常以.pt或.pth扩展名保存。它包含了模型的权重参数和模型结构的定义。这个文件格式是PyTorch特定的。
onnx 模型:这是ONNX(Open Neural Network Exchange)格式的模型文件,通常以.onnx扩展名保存。ONNX是一种中间表示格式,独立于任何特定的深度学习框架,用于跨不同框架之间的模型转换和部署。
b. 框架依赖:
pt 模型:它依赖于PyTorch框架,因此在加载和运行时需要使用PyTorch库。这限制了它在不同框架上的直接使用。
onnx 模型:ONNX 模型是独立于深度学习框架的,可以在支持ONNX的不同框架中加载和运行,例如ONNX Runtime、TensorFlow、Caffe2等。
c. 跨平台兼容性:
pt 模型:它通常需要在不同平台上进行PyTorch的兼容性配置,可能需要额外的工作和依赖处理。
onnx 模型:由于ONNX的独立性,更容易在不同平台和硬件上进行部署,无需担心框架依赖性问题。
2. Yolov8 pt模型转换onnx
如果想跨平台兼容性,pt 模型要在不同框架中使用或进行跨平台部署,要使用代码或库将其转换为 ONNX 格式。ONNX转换工具可以将PyTorch模型转换为ONNX格式。
生成得到 yolov8m.onnx ,地平线只支持opset=10/11 的 onnx 模型
四、用地平线工具链完成模型PTQ量化
1. 首先参考地平线文档,docker环境运行起来
2. 由于地平线OE里面有很多参数示例,基于参考示例模型,创建yolov8s工程目录:
3. 浮点模型准备
模型文件准备:
校准数据集准备:由于yolov5也是coco数据集训练,我这边就直接用yolov5的校准数据。在yolov5的工程目录下,运行00_init.sh 文件,下载相应的数据集。一般如果是自己采集的数据,用来训练的模型,需要自己准备校准数据。参见4.1.1.5. 校准数据准备里提到了自己准备校准数据的原则。
下面是我这边直接下载校准数据的过程:
4. 模型验证
参见3.2.2. 模型验证里面的介绍:
实际上工程目录下有模型验证的脚本: 01_check.sh , 运行这个脚本,就可以对模型进行验证:
如果模型验证不通过,请根据终端打印或在当前路径下生成的 hb_mapper_checker.log 日志文件确认报错信息和修改建议, 更多说明请参考地平线文档模型验证章节。
5. 模型转换
校准数据预处理: PTQ方案的校准数据一般是从训练集或验证集中筛选100份左右(可适当增减)的典型数据,并应避免非常少见的异常样本, 如纯色图片、不含任何检测或分类目标的图片等。筛选出的校准数据还需进行与模型inference前一致的预处理操作, 处理后保持与原始模型一样的数据类型( input_type_train )、layout ( input_layout_train )和尺寸( input_shape )。对于校准数据的预处理,地平线建议直接参考示例代码进行修改使用。详细内容地平线文档参见3.2.3.2. 校准数据预处理
我这边直接运行校准数据预处理脚本:02_preprocess.sh
yaml配置文件修改:
转换模型:准备完校准数据和yaml配置文件后,即可一步命令完成模型解析、图优化、校准、量化、编译的全流程转换, 内部过程详解请参考地平线文档 3.2.3.3. 转换模型
我这边直接运行模型转换脚本:03_build.sh
6. 性能验证
静态性能验证,使用hb_perf工具: