Ultralytics框架是一个开源的计算机视觉和深度学习框架,旨在简化训练、评估和部署视觉模型的过程。以下是对Ultralytics框架的详细讲解:
一、框架概述
Ultralytics框架提供了一系列流行的视觉模型,如YOLO系列(YOLOv11、YOLOv10、YOLOv9、YOLOv8、YOLOv5、YOLOv4、YOLOv3等)、EfficientDet、PAN、PP-YOLO等,并配备了相应的训练、评估和推理工具。这些工具和模型使得用户可以轻松地进行计算机视觉任务的开发和部署。
二、核心特点
-
简单易用:
- Ultralytics框架提供了简洁的API和命令行工具,使得用户可以轻松地加载、训练和部署视觉模型。
- 框架提供了丰富的文档和示例代码,帮助用户快速上手。
-
多种视觉模型支持:
- 框架支持多种流行的目标检测和图像分割模型,用户可以根据自己的需求选择合适的模型进行训练和部署。
- 提供了模型配置文件,用户可以自定义模型结构和训练参数。
-
高性能:
- 基于PyTorch深度学习框架,具有优秀的性能和灵活性。
- 提供了一系列优化和加速的功能,如模型压缩、量化等,以加快训练和推理速度。
-
开源社区支持:
- 作为一个开源项目,Ultralytics框架拥有活跃的开发者社区。
- 用户可以在GitHub上查看源代码、提交问题和贡献代码,与社区成员进行交流和合作。
三、目录结构
Ultralytics框架的目录结构通常包括以下几个部分:
1. cfg文件夹:包含数据集配置文件和模型配置文件。数据集配置文件定义了数据路径、类别信息等,模型配置文件定义了模型结构和训练参数等。datasets文件夹:包含数据集的配置文件,如数据路径、类别信息等(就是我们训练YOLO模型的时候需要一个数据集,这里面就保存部分数据集的yaml文件,如果我们训练的时候没有指定数据集则会自动下载其中的数据集文件)。
models文件夹:存放模型配置文件,定义了模型结构和训练参数等。
models文件夹中的每个.yaml文件代表了不同的YOLOv8模型配置,具体包括:
- yolov8.yaml:这是YOLOv8模型的标准配置文件,定义了模型的基础架构和参数。
- yolov8-cls.yaml:配置文件调整了YOLOv8模型,专门用于图像分类任务。
- yolov8-ghost.yaml:应用Ghost模块的YOLOv8变体,旨在提高计算效率。
- yolov8-ghost-p2.yaml 和 yolov8-ghost-p6.yaml: 这些文件是针对特定大小输入的Ghost模型变体配置。
- yolov8-p2.yaml和 yolov8-p6.yaml: 针对不同处理级别(例如不同的输入分辨率或模型深度)的YOLOv8模型配置
- yolov8-pose.yaml:为姿态估计任务定制的YOLOv8模型配置。
- yolov8-pose-p6.yaml:针对更大的输入分辨率或更复杂的模型架构姿态估计任务。
- yolov8-rtdetr.yaml: 可能表示实时检测和跟踪的YOLOv8模型变体。
- yolov8-seg.yaml 和 yolov8-seg-p6.yaml:这些是为语义分割任务定制的YOLOv8模型配置。
这些配置文件是模型训练和部署的核心,同时大家如果进行改进也是修改其中的对应文件来优化 网络结构。
trackers文件夹:用于追踪算法的配置。
__init__.py文件:表明`cfg`是一个Python包。
default.yaml:项目的默认配置文件,包含了被多个模块共享的通用配置项。【设置task、mode、data、epochs、pa
模型文件配置:
怎么指定使用哪一种大小的模型呢?假设我选择的配置文件是yolov8.yaml,我想选择m大小的模型,则train.py中的指定为ultralytics/cfg/models/v8/yolov8m.yaml即可,同理,如果我想指定s大小的模型,则指定为ultralytics/cfg/models/v8/yolov8s.yaml即可,如果直接设置为ultralytics/cfg/models/v8/yolov8.yaml,则默认使用n大小模型,又或者我需要使用ultralytics/cfg/models/v8/yolov8-bifpn.yaml,我需要设定为s模型,则应该为ultralytics/cfg/models/v8/yolov8s-bifpn.yaml.(V5同理)
2. data文件夹:包含数据处理和加载的相关文件和脚本,如数据注释工具、数据增强函数、数据集加载和处理的相关功能等。
在data/scripts文件夹中,包括了一系列脚本和Python文件:
\- download_weights.sh: 用来下载预训练权重的脚本。
\- get_coco.sh, get_coco128.sh, get_imagenet.sh: 用于下载COCO数据集完整版、128张图片版以及ImageNet数据集的脚本。
在data文件夹中,包括:
annotator.py: 用于数据注释的工具。
augment.py: 数据增强相关的函数或工具。
base.py, build.py, converter.py:包含数据处理的基础类或函数、构建数据集的脚本以及数据格式转换工具。
dataset.py: 数据集加载和处理的相关功能。
loaders.py: 定义加载数据的方法。
utils.py: 各种数据处理相关的通用工具函数
3. engine文件夹:包含与模型训练、评估和推理有关的核心代码,如模型定义、初始化方法、推理和预测的逻辑、结果存储和处理等。
engine文件夹包含与模型训练、评估和推理有关的核心代码:
exporter.py: 用于将训练好的模型导出到其他格式,例如ONNX或TensorRT。
model.py: 包含模型定义,还包括模型初始化和加载的方法。
predictor.py: 包含推理和预测的逻辑,如加载模型并对输入数据进行预测。
results.py: 用于存储和处理模型输出的结果。
trainer.py: 包含模型训练过程的逻辑。
tuner.py: 用于模型超参数调优。
validator.py: 包含模型验证的逻辑,如在验证集上评估模型性能。
4. hub文件夹:通常用于处理与平台或服务集成相关的操作,如认证流程、会话管理等。
hub文件夹通常用于处理与平台或服务集成相关的操作,包括:
auth.py: 处理认证流程,如API密钥验证或OAuth流程。
session.py: 管理会话,包括创建和维护持久会话。
utils.py: 包含一些通用工具函数,可能用于支持认证和会话管理功能。
5. models文件夹:包含了YOLO模型的不同任务特定实现,如图像分类、物体检测、姿态估计和图像分割等。
models/yolo目录中包含了YOLO模型的不同任务特定实现:
classify: 这个目录可能包含用于图像分类的YOLO模型。
detect: 包含用于物体检测的YOLO模型。
pose: 包含用于姿态估计任务的YOLO模型。
segment: 包含用于图像分割的YOLO模型,
6. nn文件夹:定义了模型中的一些组成构建,用户在进行模型改进和优化时,需要在这个文件夹下进行改动。
这个文件目录下的所有文件,就是定义我们模型中的一些组成构建,之后我们进行改进和优化,增加其它结构的时候都要在对应的文件下面进行改动。
modules文件夹:
__init__.py: 表明此目录是Python包。
block.py: 包含定义神经网络中的基础块,如残差块或瓶颈块。
conv.py: 包含卷积层相关的实现。
head.py: 定义网络的头部,用于预测。
transformer.py: 包含Transformer模型相关的实现。
utils.py: 提供构建神经网络时可能用到的辅助函数。
__init__.py: 同样标记这个目录为Python包。
autobackend.py: 用于自动选择最优的计算后端。
tasks.py: 定义了使用神经网络完成的不同任务的流程,例如分类、检测或分割,所有的流程基本上都定义在这里,定义
7. solutions
__init__.py: 标识这是一个Python包。
ai_gym.py: 与强化学习相关,例如在OpenAI Gym环境中训练模型的代码。
heatmap.py: 用于生成和处理热图数据,这在物体检测和事件定位中很常见。
object_counter.py: 用于物体计数的脚本,包含从图像中检测和计数实例的逻辑。
8. trackers
trackers**文件夹包含了实现目标跟踪功能的脚本和模块:
**__init__.py:** 指示该文件夹是一个Python包。
**basetrack.py:** 包含跟踪器的基础类或方法。
**bot_sort.py:** 实现了SORT算法(Simple Online and Realtime Tracking)的版本。
**byte_tracker.py:** 是一个基于深度学习的跟踪器,使用字节为单位跟踪目标。
**track.py:** 包含跟踪单个或多个目标的具体逻辑。
**README.md:** 提供该目录内容和用法的说明。
9. utils
这个utils目录包含了多个Python脚本,每个脚本都有特定的功能:
**callbacks.py:** 包含在训练过程中被调用的回调函数。
**autobatch.py:** 用于实现批处理优化,以提高训练或推理的效率。
**benchmarks.py:** 包含性能基准测试相关的函数。
**checks.py**: 用于项目中的各种检查,如参数验证或环境检查。
**dist.py:** 涉及分布式计算相关的工具。
**downloads.py:** 包含下载数据或模型等资源的脚本。
**errors.py:** 定义错误处理相关的类和函数。
**files.py:** 包含文件操作相关的工具函数。
**instance.py:** 包含实例化对象或模型的工具。
**loss.py:** 定义损失函数。
**metrics.py:** 包含评估模型性能的指标计算函数。
**ops.py:** 包含自定义操作,如特殊的数学运算或数据转换。
**patches.py:** 用于实现修改或补丁应用的工具。
**plotting.py:** 包含数据可视化相关的绘图工具。
**tal.py:** 一些损失函数的功能应用
**torch_utils.py:** 提供PyTorch相关的工具和辅助函数,包括GFLOPs的计算。
**triton.py:** 可能与NVIDIA Triton Inference Server集成相关。
**tuner.py:** 包含模型或算法调优相关的工具。
10. __init__.py
版本说明文件,路径ultralytics/ __init__.py
11. assets
该文件夹下只包含两张经典的图片,用于基础推理和测试。
四、Ultralytics框架使用
-
环境配置:
- 在使用Ultralytics框架之前,需要配置好Python环境和PyTorch等依赖库。
- 可以参考官方文档或社区提供的教程进行环境配置。
- 建议使用Pip在一个Python>=3.8环境中安装
ultralytics
包,此环境还需包含PyTorch>=1.7
-
ultralytics 的下载与安装:
方法一:直接使用源码 (不是很推荐,无法使用命令行工具)
GitHub网址:https://github.com/ultralytics/ultralytics
进入网址,点击Code,然后点击Download下载zip压缩包
方法二、pip直接安装(官方推荐,个人不是很推荐)
进入对应的conda环境,输入如下命令:pip install ultralytics
安装完成后才可以输入命令正常使用。YOLOv8 可以在命令行界面(CLI)中直接使用,只需输入 yolo 命令:
yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'
yolo 可用于各种任务和模式,并接受其他参数,例如 imgsz=640。查看 YOLOv8 CLI 文档以获取示例。不推荐该安装方式的原因:无法方便修改的修改源码。
方法三:pip源码安装(个人推荐)
GitHub网址:https://github.com/ultralytics/ultralytics,下载源码
进入对应python环境,并进入ultralytics-main目录下
安装命令:
pip install -e .
PS:不要在外网的情况下进行安装,会安装失败。检查是否安装成功:
pip list
有红圈处即为成功。 -
数据集准备:使用ultralytics/yolov8库中的工具进行数据预处理。以下是一个简单的预处理示例:
import os from pathlib import Path from ultralytics import YOLOv8 # 数据集路径 data_dir = Path('path/to/your/dataset') images_dir = data_dir / 'images' labels_dir = data_dir / 'labels' # 初始化YOLOv8模型和数据集 model = YOLOv8('yolov8s') # 使用yolov8s模型作为示例 dataset = model.dataset # 获取数据集对象 # 设置数据集路径和格式 dataset.train = str(images_dir / 'train') # 训练集图像路径 dataset.val = str(images_dir / 'val') # 验证集图像路径 dataset.names = ['class1', 'class2', ...] # 类别名称列表 # 如果有VOC格式的标注文件,使用以下代码设置 # dataset.train_format, dataset.val_format = 'voc', 'voc' # dataset.labels = [str(x) for x in labels_dir.glob('train/*.xml')] # 训练集标注文件列表 # dataset.label_files = dataset.labels.copy() # 验证集也使用相同的标注格式和文件列表 # 进行数据预处理 dataset.auto_label() # 自动从图像路径中生成标签
-
模型训练:
数据集格式跟v5相同,数据集这里不多赘述,不懂的可以搜一下。
主讲一下需要注意的地方:
第一,第一次用v8的童鞋们,可能找不到train.py在哪。v8的根目录不像v5直接有train.py
在v8中,要先进入路径:ultralytics/models/yolo/v8/detect,就可以看到train.py和val.py文件;第二,直接输入命令python train.py或者直接运行tarin.py都是不行的。而且,v8的train.py找不到类似v5那种参数设置,如batchsize、workers等。
如何解决?
YOLOv8将超参数和其他参数的设置全部集成到了ultralytics/yolo/cfg/default.yaml(注意看清路径,别找半天找不到);
其中,default.yaml文件的参数如下:
注意黄色框的几个参数,task是选择训练任务类型,detect是目标检测,segment是分割任务;mode参数,train是训练,val是验证,predict是推理测试;model是使用的网络结构;data是数据集的设置;第三,参数都设置好之后,可以直接输入命令,即可开始训练:
yolo cfg=ultralytics/yolo/cfg/default.yaml (没看错,不用怀疑,就是这个命令,不用什么.py)重点!!!重点!!!重点!!!
以上训练命令,改参数太麻烦了,还费劲。
推荐使用以下方式:
直接自己在根目录下新建一个**train.py**文件,内容如下:from ultralytics import YOLO # Load a model model = YOLO("ultralytics/cfg/models/v5/yolov8s.yaml") # build a new model from scratch model = YOLO("yolov8s.pt") # load a pretrained model 不使用预训练权重,就注释这一行即可 # train model.train(data='datasets/coco128.yaml', cache=False, imgsz=640, epochs=100, batch=16, close_mosaic=0, workers=4, device='cpu', optimizer='SGD', # using SGD amp=False, # close amp project='runs/train', name='exp', )
然后,直接在命令窗口输入
python train.py
或者直接运行train.py
即可 -
模型评估和推理:
注意,这里直接写推荐的方式。
直接根目录新建一个val.py
文件,直接运行即可from ultralytics import YOLO if __name__ == '__main__': model = YOLO('yolov8n.pt') # 自己训练结束后的模型权重 model.val(data='datasets/coco128.yaml', split='val', imgsz=640, batch=16, save_json=True, # if you need to cal coco metrice project='runs/val', name='exp', )
下面讲解一下参数,以及什么叫“验证”。部分新手不理解这个程序的作用。
首先,在训练时和训练结束后,我知道会直接输出mAP值。但是,这不是最终结果,不能直接用,也不能说这是验证的结果,这些说法都是错的。
什么叫做验证?就是训练完后的模型权重,用val.py跑一遍,才叫验证。(别懒,必须得跑)
我知道,有人会说,val.py之后的mAP结果和训练完后的mAP结果一样,或者相差很小,也有相差大的时候(都不重要,别管,以val.py跑出来的结果为准)
这是因为,你val.py里面split参数设置的是val,代表此时调用的是验证集图像,跑出来的就是验证集mAP结果
如果split参数设置是test,则代表此时调用的是测试集图像,跑出来的就是测试集mAP的结果还有重要的一点,不知道大家听懂了没。没有什么test.py,验证和测试都是这个val.py这个程序,只是有的人叫法不同。
split参数设置为val,代表测的就是验证集结果,大家就习惯叫成验证结果
split参数设置为test,代表测的就是测试集结果,大家就习惯叫成测试结果
它们两个共用一个程序!!!没有什么所谓的test.py,别被迷惑了!!!
以上,大家常说的,验证集结果和测试集结果是多少。它们都是用这一个程序val.py跑出来的,split参数不同代表调用的数据集不同。还有,问的比较多的一点,没有测试集怎么办??没有就不用呗,就把split参数设置为val
-
模型部署:
- # 加载训练好的模型
results = model('path/to/your/image.jpg') # 对单张图像进行目标检测 results.show() # 显示检测结果 results.save() # 保存检测结果到文件
- 用户可以将训练好的模型导出为其他格式(如ONNX、TensorRT等),以便在不同的平台上进行部署和应用。
- # 加载训练好的模型
五、应用场景
Ultralytics框架作为一个功能强大且易于使用的计算机视觉和深度学习框架,其应用场景非常广泛。以下是一些主要的应用场景:
-
自动驾驶:
- 在自动驾驶系统中,Ultralytics框架可以用于实时检测和识别道路上的行人、车辆和其他障碍物,为自动驾驶提供重要的视觉信息。
- 通过训练和优化目标检测模型,可以提高自动驾驶系统的安全性和准确性。
-
安防监控:
- 在安防监控领域,Ultralytics框架可以用于实时目标检测,帮助系统识别异常行为,如入侵者或危险物品。
- 这有助于提升公共场所的安全性和监控效率。
-
医疗影像分析:
- 在医学影像分析中,Ultralytics框架可以用于自动检测病灶、识别病变区域等,辅助医生进行诊断和治疗。
- 通过高精度的目标检测和图像分割模型,可以提高医学影像分析的准确性和效率。
-
工业自动化:
- 在工业自动化领域,Ultralytics框架可以用于生产线上的产品缺陷检测、质量控制等。
- 通过训练适用于特定产品的目标检测模型,可以提高生产效率和产品质量。
-
增强现实(AR):
- 在增强现实应用中,Ultralytics框架可以用于实时识别现实世界中的对象和场景,为AR应用提供基础。
- 这有助于提升AR应用的交互性和用户体验。
-
零售分析:
- 在零售行业中,Ultralytics框架可以用于客户行为分析、商品摆放优化等。
- 通过目标检测模型对监控视频进行分析,可以获取客户的购物行为数据,为零售企业提供有价值的商业洞察。
-
学术研究:
- 对于计算机视觉和深度学习领域的研究人员来说,Ultralytics框架提供了一个易于使用和扩展的平台,可以用于学术研究和实验。
- 研究人员可以利用框架中的模型和工具进行算法改进、性能评估等研究工作。
此外,Ultralytics框架还可以应用于智能家居、智能安防、智能物流等多个领域,为这些领域提供高效、准确的计算机视觉解决方案。
综上所述,Ultralytics框架是一个功能强大、易于使用的计算机视觉和深度学习框架。其丰富的模型库、高性能的计算能力和活跃的开发者社区使得用户可以轻松地进行计算机视觉任务的开发和部署。
参考: