赞
踩
1.Windows10上通过conda配置环境:
(1).cpu:执行以下命令:
- conda create --name ultralytics-env python=3.8 -y
- conda activate ultralytics-env
- pip install ultralytics
(2).cuda:使用最新版本的pytorch 2.3.0:
1).从NVIDIA官方下载cuda 11.8并安装;
2).从NVIDIA官方下载对应cuda 11.x的cudnn版本v8.9.7并安装;
3).执行以下命令:会有以下UserWarning: Plan failed with a cudnnException, 如下图所示,pytorch issues 中说下个版本2.3.1将fix
- conda create --name ultralytics-env-cuda python=3.8 -y
- conda activate ultralytics-env-cuda
- conda install -c pytorch -c nvidia -c conda-forge pytorch torchvision pytorch-cuda=11.8 ultralytics # pytorch 2.3.0
这里将pytorch调整为2.2.2版本,可fix此warning,执行以下命令:
- conda create --name ultralytics-env-cuda2 python=3.8 -y
- conda activate ultralytics-env-cuda2
- conda install -c pytorch -c nvidia -c conda-forge pytorch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 pytorch-cuda=11.8 ultralytics # pytorch 2.2.2
2.Ultralytics支持的模型:YOLOv3、YOLOv5、YOLOv6、YOLOv8、YOLOv9、Segment Anything Model(SAM)、Mobile Segment Anything(MobileSAM)、Fast Segment Anything Model(FastSAM)、YOLO-NAS、Real-Time Detection Transformer(RT-DETR)、YOLO-World。
3.Tasks:YOLOv8是一个支持多种计算机视觉任务的AI框架。该框架可用于执行:检测、分割(U-Net架构的变体)、姿态估计、OBB(Oriented Bounding Boxes Object Detection)检测、分类。
4.Mode:YOLO模型可以根据你要解决的具体问题以不同的模式使用。这些模式包括:Train、Val、Predict、Export、Track、Benchmark。
5.多线程:在多线程应用程序中使用YOLO模型时,为每个线程实例化单独的模型对象或使用线程本地(thread-local)存储以进行线程安全推理。当将YOLO模型与Python线程结合使用时,需始终在使用它们的线程中实例化模型,以确保线程安全。这种做法可以避免竞争条件并确保你的推理任务可靠运行。
6.支持的检测数据集:Argoverse、COCO、LVIS、COCO8、GlobalWheat2020、Objects365、OpenImagesV7、SKU-110K、VisDrone、VOC、xView、Roboflow 100、Brain-tumor、African-wildlife。
7.支持的数据集格式:
(1).Ultralytics YOLO格式是一种数据集配置格式,允许你定义数据集根目录,训练/验证/测试图像目录或包含图像路径的*.txt文件的相对路径以及类名字典(a dictionary of class names)。如下所示:
- # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
- path: ../datasets/coco8 # dataset root dir
- train: images/train # train images (relative to 'path') 4 images
- val: images/val # val images (relative to 'path') 4 images
- test: # test images (optional)
-
- # Classes (80 COCO classes)
- names:
- 0: person
- 1: bicycle
- 2: car
- # ...
- 77: teddy bear
- 78: hair drier
- 79: toothbrush
(2).此格式的标签应导出为YOLO格式,每个图像有一个*.txt文件。如果图像中没有目标(object),则不需要*.txt文件。*.txt文件的格式应为每个目标一行,采用如下格式:框坐标必须采用标准化xywh格式(从0到1)。如果你的框以像素为单位,则应将x_center和width除以图像宽度,并将y_center和height除以图像高度。类别编号应该从零开始索引。如下图所示:
class x_center y_center width height
(3).使用Ultralytics YOLO格式时,组织你的训练和验证图像和标签(labels),如下面的COCO8数据集示例所示:
8.添加自己的数据集:需遵循"Ultralytics YOLO format"指定的格式。将注释(annotations)转换为所需的格式,并在YAML配置文件中指定路径、类别数量和类别名称。
9.训练:
(1).检测、分割和姿态估计模型在COCO数据集上预训练(pretrained),而分类模型在ImageNet数据集上预训练;
(2).首次使用COCO、VOC或ImageNet等标准数据集时会自动下载;
(3).多GPU支持;
(4).通过YAML配置文件或CLI(命令行界面, command line interface)参数修改超参数配置;
(5).实时跟踪训练指标和可视化学习过程;
(6).默认情况下,检查点(checkpoints)会在每个epoch结束时保存;
(7).训练结束后生成的最终模型名为best.pt。
10.预测/推理:
(1).会自动将预训练的模型下载到本地,如model = YOLO("yolov8n.pt"),若本地不存在yolov8n.pt,会自动先下载yolov8n.pt模型;
(2).支持的数据源:单个图像、图像集合、视频文件、视频流;
(3).支持的源类型:image如image.jpg, url如https://bus.jpg , screenshot(屏幕截图), PIL, OpenCV, numpy, torch, CSV, ditectory, glob(使用*作为通配符), stream如rtsp等流媒体协议的URL或IP地址;
(4).批处理(Batch Processing):能够在单个批次(single batch)中处理多个图像或视频帧;
(5).支持的图像格式:.bmp, .dng, .jpeg, .jpg, .mpo, .png, .tif, .tiff, .webp, .pfm;
(6).支持的视频格式:.asf, .avi, .gif, .m4v, .mkv, .mov, .mp4, .mpeg, .mpg, .ts, .wmv, .webm。
11.支持的导出模式:
(1).生成的模型为PyTorch格式,如yolov8n.pt;
(2).支持导出多种格式:ONNX如yolov8n.onnx;TensorRT如yolov8n.engine;CoreML如yolov8n.mlpackage;TF Lite如yolov8n.tflite等等;
(3).使用TensorRT获得高达5倍的GPU加速,使用ONNX或OpenVINO获得高达3倍的CPU加速。
12.目标检测指标(metrics):
(1).通用指标:
1).Intersection over Union(IoU):IoU是一种量化预测边界框和真实边界框之间重叠的度量。它在评估目标定位的准确性方面起着基础作用。
2).Average Precision(AP):AP计算precision-recall曲线下的面积,提供包含模型精确率和召回率性能的单个值。
3).Mean Average Precision(mAP):mAP通过计算多个目标类别的平均AP值扩展了AP的概念。这在多类目标检测场景中非常有用,可以提供模型性能的综合评估。
4).Precision and Recall:精确率或称为查准率,量化了所有阳性预测中真阳性的比例,评估模型避免误报的能力。另一方面,召回率,或称为查全率,计算所有实际阳性中真阳性的比例,衡量模型检测某个类别的所有实例的能力。Precision = TP / (TP + FP),其中TP(True Positives)表示真正例,FP(False Positives)表示假正例。Recall = TP / (TP + FN),其中FN(False Negatives)表示假反例。
5).F1 Score:是精确率和召回率的调和(harmonic)平均值,在考虑误报和漏报(false positives and false negatives)的同时提供对模型性能的平衡评估。
(2).model.val()函数的输出:
1).Class:表示目标类别的名称,如person, dog。
2).Images:该指标告诉你验证集中包含目标类别的图像数量。
3).Instances:这提供了该类别在验证集中所有图像中出现的次数。
4).Box(P, R, mAP50, mAP50-95):该指标可深入了解模型在检测目标方面的性能
a.P(Precision):检测到的目标的准确度,表明有多少检测是正确的。
b.R(Recall):模型识别图像中目标的所有实例的能力。
c.mAP50:在交并集(IoU)阈值0.50处计算的平均精度。这是仅考虑"easy"检测的模型准确性的衡量标准。
d.mAP50-95:在不同IoU阈值(范围从0.50到0.95)下计算的平均精度的平均值。它提供了模型在不同检测难度级别上的性能的全面(comprehensive)视图。
(3).可视化输出:存储在run/detect/trainXXX目录下
1).F1 Score Curve(F1_curve.png):此曲线表示各种阈值的F1分数。解释这条曲线可以深入了解模型在不同阈值上的假阳性和假阴性之间的平衡。
2).Precision-Recall Curve(PR_curve.png):该曲线是任何分类问题的整体可视化,展示了不同阈值下精确率和召回率之间的权衡(trade-offs)。在处理不平衡的类别时,它变得尤为重要。
3).Precision Curve(P_curve.png):不同阈值下精确值的图形表示。该曲线有助于理解准确度如何随着阈值变化而变化。
4).Recall Curve(R_curve.png):该图说明了召回值在不同阈值上如何变化。
5).Confusion Matrix(confusion_matrix.png):混淆矩阵提供了结果的详细视图,显示每个类别的真阳性、真阴性、假阳性和假阴性的计数。
6).Normalized Confusion Matrix(confusion_matrix_normalized.png):该可视化是混淆矩阵的标准化版本。它按比例表示数据,而不是原始计数。这种格式使得比较不同类别的性能变得更加简单。
7).Validation Batch Labels(val_batchX_labels.jpg):这些图像描绘了验证数据集中不同批次(batch)的真实标签。它们根据数据集清晰地显示了目标是什么以及它们各自的位置。
8).Validation Batch Predictions(val_batchX_pred.jpg):与标签图像相比,这些可视化显示了YOLOv8模型对各个批次所做的预测。通过将这些图像与标签图像进行比较,你可以轻松评估模型检测和分类目标的效果。
(4).较低分数可能的原因:
1).Low mAP:表示模型可能需要进行一般性改进(general refinements)。
2).Low IoU:模型可能难以准确定位目标。不同的边界框方法可能会有所帮助。
3).Low Precision:模型可能检测到太多不存在的目标。调整置信度阈值可能会减少这种情况。
4).Low Recall:模型可能会丢失真实目标。改进特征提取或使用更多数据可能会有所帮助。
5).Imbalanced F1 Score:精确率和召回率之间存在差异。
6).Class-specific AP:此处的低分可以突出显示模型难以处理的类别。
13.超参数调整:
(1).使用model.tune()函数;
(2).生成的文件存放在runs/detect/tuneXXX目录下:
1).best_hyperparameters.yaml:此YAML文件包含在调整过程中找到的性能最佳的超参数。你可以使用此文件通过这些优化设置来初始化未来的训练。
2).tune_fitness.png:这是一幅显示适应度(通常是AP50等性能指标)与迭代次数的关系图。它可以帮助你直观地了解遗传算法随时间的表现。
3).tune_results.csv:包含调整过程中每次迭代(iteration)的详细结果的CSV文件。文件中的每一行代表一次迭代,它包括fitness score, precision, recall以及使用的超参数等指标。
4).tune_scatter_plots.png:该文件包含从tune_results.csv生成的散点图,帮助你可视化不同超参数和性能指标之间的关系。注意,初始化为0的超参数将不会被调整。
5).weights目录:该目录包含超参数调整过程中最后一次和最佳迭代所保存的PyTorch模型。
14.应用:
1).目标计数:对视频和摄像机流中的特定目标进行准确识别和计数:
from ultralytics.solutions import object_counter
2).目标裁剪:从图像或视频中分离和提取特定的检测到的目标:
from ultralytics.utils.plotting import Annotator, colors
3).目标模糊:对图像或视频中检测到的特定目标应用模糊效果:
from ultralytics.utils.plotting import Annotator, colors
4).锻炼监控(Workouts Monitoring):通过姿势估计来监控锻炼,通过实时准确跟踪身体关键点和关节来增强锻炼评估:
from ultralytics.solutions import ai_gym
5).热图(heatmap):将复杂的数据转换为充满活力的颜色编码(color-coded)矩阵:
from ultralytics.solutions import heatmap
6).实例分割:识别和勾画图像中的各个目标,从而提供对空间分布的详细了解:
from ultralytics.utils.plotting import Annotator, colors
7).VisionEye View Object Mapping:为计算机提供了识别和精确定位目标的能力,模拟人眼的观察精度:
from ultralytics.utils.plotting import colors, Annotator
8).速度估计:计算给定环境内目标移动速率的过程:
from ultralytics.solutions import speed_estimation
9).距离计算:测量两个目标之间的距离:
from ultralytics.solutions import distance_calculation
10).队列管理:涉及组织和控制人员或车辆的队列,以减少等待时间并提高效率:
from ultralytics.solutions import queue_management
11).停车管理:通过组织空间和监控可用性来确保高效、安全的停车:
from ultralytics.solutions.parking_management import ParkingPtsSelection, tk
测试代码如下所示:
- from ultralytics import YOLO
- from ultralytics import settings
- from ultralytics.utils.benchmarks import benchmark
- import torch
- import colorama
-
- def cuda_available():
- print("cuda is available:", torch.cuda.is_available())
-
- def predict(model):
- model.info() # display model information
- results = model.predict("../../data/images/face")
- for result in results:
- result.show()
-
- def yolov8_segment():
- model = YOLO("yolov8n-seg.pt") # load an official model
- predict(model)
-
- def yolov8_classify():
- model = YOLO("yolov8n-cls.pt") # load an official model
- predict(model)
-
- def yolov8_pose():
- model = YOLO("yolov8n-pose.pt") # load an official model
- predict(model)
-
- def yolov8_obb():
- model = YOLO("yolov8n-obb.pt") # load an official model
- predict(model)
-
- def yolov8_detect():
- # model = YOLO("yolov8n.pt") # load a pretrained YOLOv8n model
- model = YOLO("best.pt") # best.pt comes from the training results in the yolov8_detect_train function
-
- # predict with the model
- # results = model("../../data/images/face/1.jpg")
- # all Ultralytics predict() calls will return a list of Results objects
- results = model.predict("../../data/images/face")
-
- for result in results:
- result.show()
- print("orig shape:", result.orig_shape) # (height, width)
- print("boxes xyxy:", result.boxes.xyxy) # tensor:left-top, right-bottm
- print("boxes cls:", result.boxes.cls) # tensor:object categories
- print("boxes conf:", result.boxes.conf) # tensor:confidence
- # result.save(filename="../../data/result_3.png")
-
- def yolov8_settings():
- # view all settings
- print(settings)
-
- def yolov8_tune():
- model = YOLO("yolov8n.pt") # load a pretrained model (recommended for training)
-
- # tune hyperparameters on COCO8 for 10 epochs
- model.tune(data="coco8.yaml", epochs=100, iterations=300, optimizer='AdamW', plots=False, save=False, val=False)
-
- def yolov8_detect_train():
- # load a model
- # model = YOLO("yolov8n.yaml") # build a new model form YAML
- model = YOLO("yolov8n.pt") # load a pretrained model (recommended for training)
- # model = YOLO("yolov8n.yaml").load("yolov8n.pt") # build from YAML and transfer weights
-
- # train the model
- results = model.train(data="coco8.yaml", epochs=5, imgsz=640)
-
- # validate the model
- metrics = model.val() # It'll automatically evaluate the data you trained, no arguments needed, dataset and settings remembered
- # print("metrics.box.map: ", metrics.box.map) # map50-95
- # print("metrics.box.map50: ", metrics.box.map50) # map50
- # print("metrics.box.map75: ", metrics.box.map75) # map75
- # print("metrics.box.maps: ", metrics.box.maps) # a list contains map50-95 of each category
-
- # export the model
- model.export(format="onnx", dynamic=True)
-
- def yolov8_benchmark():
- if torch.cuda.is_available():
- benchmark(model="best.onnx", data="coco8.yaml", imgsz=640, half=False, device=0)
- else: # benchmark on CPU
- benchmark(model="best.onnx", data="coco8.yaml", imgsz=640, half=False, device="cpu")
-
- if __name__ == "__main__":
- # cuda_available()
- # yolov8_detect()
- # yolov8_settings()
- yolov8_detect_train()
- # yolov8_benchmark()
- # yolov8_segment()
- # yolov8_classify()
- # yolov8_pose()
- # yolov8_obb()
- # yolov8_tune()
-
- print(colorama.Fore.GREEN + "====== execution completed ======")
执行结果如下图所示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。